Linux文件基本属性
Linux系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限。为了保护系统的安全性,Linux系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定。可以使用ll或者ls -l命令来显示一个文件的属性以及文件所属的用户和组。如:ls -l
[root@admin home]# ls -l
total 4
lrwxrwxrwx. 1 root root 5 Jun 2 08:51 a1.txt -> a.txt
-rw-r--r--. 2 root root 0 Jun 2 10:32 a.txt
-rw-r--r--. 2 root root 0 Jun 2 10:32 c.txt
drwxr-xr-x. 2 root root 4096 Jun 2 08:51 dir1
-rw-r--r--. 1 root root 0 Jun 2 08:36 training
在Linux中第一个字符代表这个文件的目录、文件或链接文件等等。
◆ drwxr-xr-x. 2 root root 4096 Jun 2 08:51 dir1,这个实例中最前面的字符 d 代表目录。
◆ -rw-r–r–. 1 root root 0 Jun 2 08:36 training,这个实例中最前面的 - 代表的是文件。
◆ lrwxrwxrwx. 1 root root 5 Jun 2 08:51 a1.txt -> a.txt,这个实例最前面的 l 代表的是软链接文档(link file)
接下来的字符中,以三个为一组,且都为【rwx】的三个参数的组合。其中,[r]代表可读(read)、[w]代表可写(write)、[x]代表可执行(execute)。值得注意的是,这三个权限的位置不会改变,如果没有相应的权限,那相应的位置上就以减号[-]代替。每个文件的属性都由左边第一部分的10字符来确定,如下图:
从左至右用0 - 9这10个数字来表示。
第0位确定为文件类型。
第1 - 3位确定为属主(该文件所有者)拥有的文件权限。
第4 - 6位确定为属组(所有者所在的组)拥有该文件的权限。
第7 - 9位确定为其他用户拥有该文件的权限。
其中,第1、4、7位代表读权限,如果用“r”字符表示,代表有读权限,如果用“-”表示,代表没有读权限;
第2、5、8位表示写权限,如果用“w”表示,代表有写权限,如果用“-”代表没有写权限;
第3、6、9位表示可执行权限,如果用“x”表示,代表有执行权限,如果用“-”字符表示,代表没有执行权限(注:目录必须要有可执行权限,才能被成功执行,否则目录就无法被打开。)。
在Linux系统中,文件都会有一个特定的拥有者,也就是拥有该文件的所有权的用户。同时,用户是按组分类的,一个用户属于一个或多个组。文件所有者以外的用户又可以分为文件所有者的同组用户和其他用户。因此,Linux系统按文件所有者、文件所有者同组用户和其他用户来规定不同的文件访问权限的。
◆ drwxr-xr-x. 2 root root 4096 Jun 2 08:51 dir1,实例中root root中第一个root表示该文件是谁创建的,谁拥有的,此处文件是root用户创建的,它对应的权限就是属主(1、2、3位置)的权限;第二个root表示该文件属于哪个组,此处属于root组,对应的权限是属组(4、5、6位置)的权限。
◆ drwxr-xr-x. 2 root root 4096 Jun 2 08:51 dir1,实例中点符号(.)是centOS6的新特性,代表遵循Linux本身的安全权限控制,但是centOS6以后引进了acl的机制,就是可以额外定义一下文件的权限(setfacl -m u:用户名:权限 文件名),控制谁能查看等,定义以后,这个点(.)就会变成(+)号。可以通过getfacl 文件名 来查看拥有文件的哪些权限。需要注意的是,当系统的selinux关闭,这里的点就不存在了。
◆ -rw-r–r–. 2 root root 0 Jun 2 10:32 a.txt,实例中,最前面的数字2,代表指向该文件的硬链接的指针个数,通常情况下,这数字都是1,但是当对该文件添加一个硬链接以后,这个数字就会变成2,删除一个硬链接后,这数字又会变为1。硬链接就相当于Python语言的引用,修改其中一个文件,相关的文件都会被修改。互为硬链接的文件具有相同的文件节点,可以通过以下命令查看文件节点:
[root@admin home]# ls -i a.txt c.txt 。如果是软链接,这个数通常都是1。
◆ drwxr-xr-x. 2 root root 4096 Jun 2 08:51 dir1,实例中最前面的数字2,代表的是该目录下边子目录的数量,其中子目录包括(.(当前目录))和(..(上级目录)),证明是子目录的实例如下:
[root@admin home]# ls -l
total 12
drwxr-xr-x. 2 root root 4096 Jun 2 08:51 dir1
[root@admin home]# cd dir1
[root@admin dir1]# ls -a
. ..
[root@admin dir1]# mkdir tt
[root@admin dir1]# ls
tt
[root@admin dir1]# cd ..
[root@admin home]# ls -l
total 12
drwxr-xr-x. 3 root root 4096 Jun 2 10:59 dir1
这些实例中,第二次出现的数字代表的是文件或目录(指目录文件本身的大小不是目录下文件的大小,初始大小是4096B = 4K)的大小,当目录文件大小达到16K时或32K,这时候代表该目录下的文件很多了,它要写的东西就会很多,此时做某些操作是就要小心了,会引发死机的,如ls、ll。可以使用du 这个命令来查看目录的大小。如:du -sh etc/
◆ -rw-r–r–. 1 root root 4 Jun 2 10:51 a.txt,实例中Jun 2 10:51代表的是该文件最后一次修改的时间。如果这是今年以前的时间,那么10:51就会被改成表示年份的数字,不再显示时间,只有今年的显示时间。Linux系统中,每一个文件都会有三个时间,分别为Access、Modify和Change时间。使用stat命令可以查看文件的这三个时间。
[root@admin home]# stat a.txt
File: `a.txt'
Size: 4 Blocks: 8 IO Block: 4096 regular file
Device: 802h/2050d Inode: 1179665 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2015-06-02 10:51:39.328959008 -0400
Modify: 2015-06-02 10:51:20.626959508 -0400
Change: 2015-06-02 10:51:20.626959508 -0400
Access代表加载、执行和查看等的时间,more、cat、head、tail、vi等命令都会改变该时间
Modify代表修改时间,vi命令会改变这个时间。
Change修改文件属性等该时间会被改变。