2014年5月18日星期日

Linux_044:常用命令之十五:ls

输入命令ls -l后,会得到一个含有9个字段的输出列表,比如:
总用量 72
drwxrwxr-x. 4 maping maping 4096 4月  16 11:35 Apache
drwxr-xr-x. 4 root   root   4096 4月  16 16:26 Code
drwx------. 3 maping maping 4096 4月  16 12:01 Documents
drwxr-xr-x. 3 root   root   4096 4月  16 11:53 Redhat
-rwxr-x---. 1 root   root    197 4月  16 11:47 setJdk6Env.sh
-rwxr-x---. 1 root   root    275 4月  16 11:59 setJdk7Env.sh
-rwxr-x---. 1 root   root    277 4月  16 11:50 setJdk8Env.sh

在解释各个输出字段前,先解释一下“总用量 72” 是什么意思,怎么计算出来的。
这个数值表示的是该目录的本身大小,而不是该目录下的文件和子目录下文件的总和大小。
把该目录看成一个特殊的文件,你就能理解什么是目录的大小。
这个数值是该目录下所有文件及目录列表的第5个字段的总和(以k为单位)。
可以用awk命令来验证:
(1)ls -l |awk 'BEGIN{sum=0}{sum+=$5}END{print sum}'
(2)ls -l |awk 'BEGIN{sum=0}{sum+=$5}END{print sum/1024}'
注意,累加后的数值可能与显示的值略有差异。

下面介绍按顺序介绍9个字段的含义:

1. 文件属性字段
文件属性字段总共有10个字母组成。
(1)第1个字母表示文件类型,如果这个字母是
-,说明该文件是一个普通文件。
d,表示该文件是一个目录(directory)。
l,表示该文件是一个符号链接(link)。
b,表示块设备文件(block),设备文件是普通文件和程序访问硬件设备的入口,一次传输数据大小为一个数据块(512字节),比如硬盘hda1、光盘都是设备文件。
c,表示该文件是一个字符设备文件(character),一次传输一个字节的设备被称为字符设备,比如键盘,字符终端。
(2)第1字段的后面9个字母表示文件的权限。
其中,r表是读(Read),w表示写(Write),x表示执行(eXecute)。
其中,前3个字母表示文件属主的权限,中间3个字母表示组用户权限,最后3个字母表示其他用户权限。

2. 文件硬链接数或目录的子目录数
(1)如果是文件,那么这一字段表示这个文件所具有的硬链接数,即这个文件总共有多少个文件名。
所谓硬链接,指的是这些文件指向的是同一个文件,并且无论是修改哪一个文件,另一个里也做相应的变化,因为实际上它们指向同一个文件。
使用命令:ln [文件名] [指向该文件的硬链接名],可以为文件增加硬链接。
使用命令:ls -i [文件名],可以查看该文件的文件节点(inode),具有相同文件节点的文件说明彼此互为硬链接。
知道文件节点后,可以使用命令:find /etc -inum [文件节点],查看该文件节点的所有硬链接文件位置。
(2)如果是目录,那么这一字段表示这个目录的子目录数。
注意,即使一个目录下面没有任何子目录,这个字段也会显示2。
这是因为每一个目录都有一个指向它本身的子目录:.,和指向它上级目录的子目录:..,这两个默认子目录是隐藏的,用ls -a可以看到。

3. 文件拥有者
该字段表示这个文件是属于哪个用户的。
只有文件的拥有者才具有改动文件属性的权利,当然,root 用户具有改动任何文件属性的权利。
对于一个目录来说,只有拥有该目录的用户,或者具有写权限的用户才有在目录下创建文件的权利。
如果某一个用户因为某种原因被删除,而该用户的文件还存在,那么用 ls -l 查看该文件将显示一个代表用户存在前 ID 号的数字。

4. 文件拥有者所在的组
组的概念可以想像成是一个共同完成一个项目的团队。
一个用户可以加入很多个组,但是其中有一个是主组,就是显示在第4字段的名称。
使用 adduser 命令时,参数 -g 指定该用户所在的主组,参数 -G 指定该用户要加入的其它组。

5. 文件或目录的大小(以字节为单位)
默认是以字节为单位显示,如果觉得可读性不好,可以增加 -h 参数,显示可读性大小。
注意,如果是目录,表示的是该目录本身的大小,而不是目录以及它下面的文件的总大小!

6. 文件创建月份

7. 文件创建日期

8. 文件创建时间
文件创建的时间可以通过 touch 命令来修改。

9. 文件名
如果是一个符号链接,那么会有一个 "->" 箭头符号,后面根一个它指向的文件名。

10. 常用例子
(1)ls -ltr
对目录和文件按照时间进行反向排序。

参考文献:
1. http://hi.baidu.com/sfzhaoif/item/3e2653c9426f28d497445220
2. http://www.9usb.net/201005/linux-ls.html

没有评论: