linux_shell 总结

1.

-rw-r--r-- :这是该文件的权限位。

第一个横杠:指定文件类型,表示该文件是一个普通文件。(所创建的文件绝大多数都是普通文件 或符号链接文件)。

除去最前面的横杠,一共是9 个字符,他们分别对应9 个权限位。通过这些权限位,可以设定 用户对文件的访问权限。对这两个文件的精确解释是:

代码:

rw-:前三位,文件属主可读、写

r--:中间三位,组用户可读

r--:最后三位,其他用户只可读

在创建的时候并未给属主赋予执行权限,在用户创建文件时,系统不会自动地设置执行权限位。 这是出于加强系统安全的考虑

2.

文件的权限位中中每一组字符中含有三个权限位:

代码:

r 读权限

w 写/更改权限

x 执行该脚本或程序的权限

如:

代码:

r-- --- --- 文文件属主可读,但不能写或执行

r-- r-- --- 文文件属主和属组用户(一般来说,是文件属主所在的缺省组)可读

r-- r-- r- - 文任何用户都可读,但不能写或执行

rwx r-- r- - 文文件属主可读、写、执行,属组用户和其他用户只可读

rwx r-x --- 文文件属主可读、写、执行,属组用户可读、执

rwx r-x r- x 文文件属主可读、写、执行,属组用户和其他用户可读、执行

rw- rw- --- 文文件属主和属组用户可读、写

rw- rw- r- - 文文件属主和属组用户可读、写,其他用户可读

rw- rw- --- 文文件属主和属组用户及其他用户读可以读、写,慎用这种权限

设置,因为任何用户都可以写入该文件

3.使用ls –l filename可以查看filename的属性

4.

使用 chmod 来改变权限位

这一命令有符号模式和绝对模式。

符号模式

chmod 命令的一般格式为:

chmod [who] operator [permission] filename

w h o 的含义是:

代码:

u 文件属主权限。

g 属组用户权限。

o 其他用户权限。

a 所有用户(文件属主、属组用户及其他用户)。

o p e r a t o r 的含义:

代码:

+ 增加权限。

- 取消权限。

= 设定权限。

p e r m i s s i o n 的含义:

代码:

r 读权限。

w 写权限。

x 执行权限。

s 文件属主和组set-ID。

t 粘性位*。

l 给文件加锁,使其他用户无法访问。

u,g,o 针对文件属主、属组用户及其他用户的操作。

*在列文件或目录时,有时会遇到“ t”位。“t”代表了粘性位。如果在一个目录上出现“t”位, 这就意味着该目录中的文件只有其属主才可以删除,即使某个属组用户具有和属主同等的权限。

不过有的系统在这一规则上并不十分严格。

如果在文件列表时看到“ t”,那么这就意味着该脚本或程序在执行时会被放在交换区(虚存)。

5.

chown

当你创建一个文件时,你就是该文件的属主。一旦你拥有某个文件,就可以改变它的所有权,把 它的所有权交给另外一个/ e t c / p a s s w d 文件中存在的合法用户。可以使用用户名或用户 I D 号来完成这一操作。

在改变一个文件的所有权时,相应的s u i d 也将被清除,这是出于安全性的考虑。只有文件的 属主和系统管理员可以改变文件的所有权。一旦将文件的所有权交给另外一个用户,就无法再重 新收回它的所有权。如果真的需要这样做,那么就只有求助于系统管理员了

c h o w n 命令的一般形式为:

代码:

chown -R -h owner file

引用:

- R 选项意味着对所有子目录下的文件也都进行同样的操作。

- h 选项意味着在改变符号链接文件的属主时不影响该链接所指向的目标文件。

chown 举例

代码:

如:

# ls -l drwxrwxr-x 2 sam sam 4096 10月26 19:48 sam

# chown gem sam

# ls -l drwxrwxr-x 2 gem sam 4096 10月26 19:48 sam

文件 sam 的所有权现在由用户sam 交给了用户gem。

6.

符号链接

存在两种不同类型的链接,软链接和硬链接。修改其中一个,硬连接指向的是节点(inode),而软 连接指向的是路径(path)

软链接文件

软链接又叫符号链接,这个文件包含了另一个文件的路径名。可以是任意文件或目录,可以

链接不同文件系统的文件。和win 下的快捷方式差不多。链接文件甚至可以链接不存在的文件,

这就产生一般称之为"断链"的问题(或曰“现象"),链接文件甚至可以循环链接自己。类似于编 程语言中的递归。

命令格式:

代码:

ln [-s] source_path target_path

硬链接文件

info ln 命令告诉您,硬链接是已存在文件的另一个名字,硬连接的命令是

代码:

ln -d existfile newfile

引用:

硬链接文件有两个限制

1、不允许给目录创建硬链接;

2、只有在同一文件系统中的文件之间才能创建链接。

对硬链接文件进行读写和删除操作时候,结果和软链接相同。但如果我们删除硬链接文件

的源文件,硬链接文件仍然存在,而且保留了愿有的内容。这时,系统就“忘记”了它曾经是 硬链接文件。而把他当成一个普通文件。修改其中一个,与其连接的文件同时被修改

7.

索引节点、硬连接和连接计数

索引节点inode:

引用:

Linux 为每个文件分配一个称为索引节点的号码inode,可以将inode 简单理解成一个指针,

它永远指向本文件的具体存储位置。系统是通过索引节点(而不是文件名)来定位每一个文件。

例如:

假设我们在硬盘当前目录下建立了一个名为mytext 文本文件,其内容只有一行:

代码:

This is my file.

代码:

1、当然这行文字一定是存储在磁盘数据区某个具体位置里(物理上要通过磁头号、柱面号和扇

区号来描述,在本例中假设分别是1、20、30)。

2、假设其inode 是262457,那么系统通过一段标准程序,就能将这个inode 转换成存放此

文件的具体物理地址(1 磁头、20 柱面、30 扇区),最终读出文件的内容:“This is my file.”

3、所以inode 是指向一个文件数据区的指针号码,一个inode 对应着系统中唯一的一片物理

数据区,而位于两个不同物理数据区的文件必定分别对应着两个不同的inode 号码。

文件拷贝命令与硬链接的区别:

代码:

# cp /home/zyd/mytext newfile

在当前工作目录建立了一个新文件newfile,其实际操作主要包括如下三步:

引用:

1、在当前目录中增加一个目录项,其文件名域填入newfile,并分配了一个新的inode,假设

是262456。

2、将原文件(在1 磁头、20 柱面、30 扇区)的内容复制了一份到新的空闲物理块(假设是1 磁

头、20 柱面、31 扇区)。

3、填写一些其他关键信息,使系统通过这些信息及inode 号码可以完成物理地址的转换。

所以文件复制要分配新的inode 和新的数据区,虽然两个文件的内容是一样的。

硬连接hardlink:

引用:

我们实际使用文件时一般是通过文件名来引用的。通过上面的讨论,我们知道:

1 个inode 号码肯定和一片完全属于一个文件的数据区一一对应。那么一个文件系统中两个或

更多个不同的文件名能否对应同一个文件呢?答案是肯定的。

我们知道 inode 号码是记录在文件名对应的目录项中的,我们可以使两个或多个文件的目录项

具有相同的inode 值,实际上就使它们对应着同一个文件。

有几个目录项具有相同的 inode 号,我们就说这个文件有几个硬连接(hardlink),

对于普通文件,ls -l 命令的连接计数count 域的数值就是本文件拥有的硬连接数。硬连接可以

通过ln 命令建立,

例如:

代码:

# ln /home/zyd/mytext hardlink_mytext

就建立了一个新的文件hardlink_mytext,这个文件的inode 同样是262457。建立硬连接实

际上只是增加了一个目录项,但并未复制文件数据区,原文件的数据区由两个文件共享。这一方面 能够节约大量磁盘空间,同时可以保证两个文件能同步更新。

代码:

'ls -il'可以显示文件的inode(在下面最左边):

262456 -rw-rw-r-- 1 zyd zyd 17 Nov 3 14:52 newfile

262457 -rw-rw-r-- 2 zyd zyd 17 Nov 3 14:50 hardlink_mytext

262457 -rw-rw-r-- 2 zyd zyd 17 Nov 3 14:50 mytext

连接计数count:

前面我们介绍了,文件的连接计数域表明本系统中共有几个文件目录项的inode 和本文件相同, 也就是本文件共有几个硬连接。如上面的例子中hardlink_mytext 和mytext 文件的count 值都是2。

那么对于目录,其count 域的含义是什么呢?目录的count 同样表示共有多少个目录项指向此 目录,不过要详细说明必须进一步解释VFS 文件系统的结构,为简单起见,只要这样理解就行 了:(count-2)等于本目录包含的直接子目录数(就是只包括儿子,不包括孙子啦!)。

代码:

例如:如果一个目录/abc 的count 域为5,那么/abc 目录一定包含3 个子目录。

引用:

进一步说明:

硬连接文件实际上并不是一种新的文件类型,两个文件互为对方的硬连接。它们应该都是普通

文件(谁能告诉我:其它类型的文件可以硬连接吗?)。两个文件除了名称或/和文件目录不同外,

其它部分完全相同,更改了一个文件,另一个的文件长度、内容、更改时间等都将相应发生变

化,更改了一个文件的权限位mode,另一个也会发生同样的变化。

引用:

注意连接计数字段 count,互为硬连接的两个文件的count 值都是2,表明有两个inode 指向

同一文件的inode。

当我们删除其中一个文件时,系统首先将(count-1)->count,如果结果是零,就将其目录项和

数据区都删除,否则只将本目录项删除,数据区仍然保留,仍然可以通过另外的文件名访问。

根据这个特性,可以通过为重要的文件建立硬连接的方法来防止其被误删除。

一个文件系统允许的inode 节点数是有限的,如果文件数量太多,即使每个文件都是0 字节的 空文件,系统最终也会因为节点空间耗尽而不能再创建文件。所以当发现不能建立文件时首先要 考虑硬盘数据区是否还有空间(可通过du 命令),其次还得检查节点空间。

引用:

互为硬连接的多个文件必须位于同一个文件系统上。根设备及任何一个需要mount 才能挂接进

来的分区、软盘、NFS、光驱等都是一个独立的文件系统,每个文件系统有一个相应的设备号,

不同文件系统中具有相同inode 节点的文件间没有任何联系。系统则通过设备号和 inode 号

的组合唯一确定一个文件。

Linux 之所以能支持多种文件系统,其实是由于Linux 提供了一个虚拟文件系统VFS,VFS 作 为实际文件系统的上层软件,掩盖了实际文件系统底层的具体结构差异,为系统访问位于不同文 件系统的文件提供了一个统一的接口。

实际上许多文件系统并不具备inode 结构,其目录结构也和以上的讨论不同,但通过VFS,系 统均为其提供了虚拟一致的inode 和目录项结构。

所以,'ls -il'命令实际显示的inode 应该是VFS inode,也就是说,inode 是存在于内存中的 数据结构,而不一定是实际的硬盘结构。

但为 Linux 量身定做的ext2 文件系统具备实际的inode 和连接型目录项结构,所以,对于ext2 文件系统,可以认为我们上面讨论的关于硬连接的概念是完全正确的

find的使用。 8.

由于 f i n d 具有强大的功能,所以它的选项也很多,其中大部分选项都值得我们花时间来了解 一下。即使系统中含有网络文件系统( N F S ),f i n d 命令在该文件系统中同样有效,只你具 有相应的权限。

在运行一个非常消耗资源的f i n d 命令时,很多人都倾向于把它放在后台执行,因为遍历一个 大的文件系统可能会花费很长的时间(这里是指3 0 G 字节以上的文件系统)。

F i n d 命令的一般形式为:

代码:

find pathname -options [-print -exec -ok]

让我们来看看该命令的参数:

引用:

pathname: find 命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。 -print: find 命令将匹配的文件输出到标准输出。

-exec: find 命令对匹配的文件执行该参数所给出的s h e l l 命令。相应命令的形式为' command' {} \;,注意{ }和\;之间的空格。

-ok: 和- e x e c 的作用相同,只不过以一种更为安全的模式来执行该参数所给出的s h e l l 命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。

相关推荐