linux 下文件管理值得注意的地方
1.文件的权限管理
linux中,最令我感到印象深刻的是它的权限管理,比windows系统灵活得多,也严格的多,对于使用者,也方便设置。利用ls -l命令我们可以查看到,当前文件夹下的文件属性情况。一共是7列,分别是权限,链接数,文件所有者,文件所有组,文件的大小,文件的修改日期,以及文件名。
看看这两个难理解的属性:
(1)权限属性,这一列代表了文件的类型与权限,一共有10个字符,第一个字符表示文件的类型,-表示为普通文件,d表示为目录文件,此外,还有l表示为链接文件,b表示块接口设备文件,c表示串行接口设备文件,例如键盘、鼠标,也就是字符型设备文件。后9个字符代表了文件的权限信息,其中以3个为一组,一共3组。r代表可读,w代表可写,x代表可执行,他们的位置不会改变,如果没有响应的权限,就用符号-表示。
2-4字符为第一组,代表了文件所有者的权限,以showinfo2为例子,即对所有者cenkaijie5来讲,他具有rw的权限,而不具有x的权限,即具有读,写文件的权限,但是不具有执行的权限。
5-7字符为第二组,代表了文件所有组的权限。
8-10字符为第三组,代表了其他用户的权限,仍showinfo2为例,r--,即其他用户对showinfo2文件只具有读权限。
(2)连接数属性,这个属性代表了 有多少个文件与当前这个文件是同一个文件,对于ext2文件来说,也就是具有相同的inode号。
对于普通文件来说,每当你创建一个硬链接,例如,执行命令ln user user2后,user的链接数变为了2,因为user,user2都指向了同一个文件,即具有相同的inode号。
对于目录来说,也是如此。但是值得注意的是,目录的链接数至少为2。因为每当你新建一个目录时,这个目录下必会创建两个目录文件. 与 .. , 目录文件 . 与你新创建的目录具有相同的inode号,目录文件.. 与你新创建的目录的上级目录具有相同的inode号。所以,每当你新建一个目录时,这个目录的链接数为2,这个目录的上级目录 链接数为3,所以可以看出,对于目录文件下载来说,它的链接数为5, 可表明 它有 3个目录文件。
二.下面讨论一下权限对 目录与普通文件的意义
这个部分容易会理解出现偏差,不能简单地把目录与普通文件看成等同。
1.对于普通文件(包括文本文件,jpg各种格式的文件,二进制文件等等)来说,它的数据块保存的就是真正的内容,真正的人们所需要的数据,所以权限对它来说,就是:
r 读权限: 可读取此文件的实际内容。
w写权限:可以修改,编辑,新增文件的实际内容,但是不包括 删除该文件的权限。
x执行权限: 该文件可以被系统执行的权限。
2.对于目录文件来说,它的数据块data block保存的就是 文件名列表以及对应的inode号。 文件名与目录文件有强烈的关系,因为 inode table里面 并不包括 文件名。
r读权限:意味着可以data block的内容,即意味着可以读取目录下的文件名列表。
w写权限: 意味着可以改写data block的内容,即可以删除文件,新增文件。
x执行权限: 意味着可以进入到 目录中,让 目录 成为 工作目录, 读取 文件列表的各种属性。
目录只有可读权限的情况下,使用ls命令,如下图,即只能看到文件夹下的文件名,而文件的属性都看不到,文件的属性都是放在文件的inode中,而不是目录的data block里
目录只有可执行权限的情况下,使用ls命令,如下图,则根本看不到目录data block里的内容,也就是看不到 文件的文件名 与 inode号。
但是 假设你知道这个目录下的文件名tv,并且有tv的读权限,你则可以使用cat cc/tv 来查看文件,如下
再举一个例子(linux 鸟哥的私房菜)来说,如果我要读取cat /etc/passwd这个文件时,系统是如何读取的?
1. /的inode
通过挂载点的信息找到/的inode号为2,且inode记录的权限为r-x,所以我们可以进入/目录下。
2./的block
读取/的data block块, 看是否有etc的文件。存在,在找到了etc的inode号1912423。
3.etc的inode
inode记录的权限为r-x,所以我们进入到etc目录下。
4.etc的block
读取etc的data block块, 看是否有passwd的文件。存在,在找到了passwd的inode号1914888。
5.passwd的inode
inode记录的权限为r--,所以可以把passwd的data block内容读取
6.passwd的block
最后data block的内容读出。
总结一下,我的理解,(1)目录 的x权限 是必须的,也是最重要的一个权限。 没有目录x权限,你无法进入到这个目录中, 不能对 删除,新增文件,也不能修改 ,查看,执行已存在的文件,最多你只能查询目录下的文件名列表。 无 目录的 x权限 ,几乎动弹不得。
(2)目录的 r权限 是非必须的, 有了r权限, 你可以通过ls 命令 查询 目录下 的文件名列表哦;没了r权限,如果你已经知道了文件名,你仍可能对文件进行修改,查看,与执行。
(3)而目录的w权限 ,是用来建立,删除,重命名文件的,必须与x权限 结合,否则无效。
3. 硬链接与软链接的区别
硬链接是通过inode号连接文件,不占用额外的inode号,只在目录文件的datablock 中增加一表项。
软链接又称符号链接,它比硬链接更为常用,是一种特殊的文件类型,通过 文件路径 来链接到 另一文件,而不是直接链接到inode
1.硬链接 基于inode实现,因为inode号的唯一性,而不同文件系统的inode号不一致,所以硬链接不能跨文件系统;而软连接是基于路径实现,所以可以跨文件系统
2.在linux 中, 限制了硬链接不能连接到 目录(除了 系统 . 与 .. 这两个特殊的情况外) ,而软链接则可以。
综上来看,软链接更为常用。