一下也是在网上抄下来的
Linux 下 ls -l 命令执行显示结果的每一列含义
https://blog.csdn.net/zhuoya_/article/details/77418413
ls -l 命令详解(转)
https://blog.csdn.net/heluan123132/article/details/73482927
ls -l 列表信息详解
我们平时用 ls -l 命令查看一个目录下的文件和子目录的详悉信息时, 会得到一个详细的文件和目录名列表. 这个列表包含了文件的属性, 所属用户, 所属组, 创建时间, 文件大小等等信息. 这些信息到底是什么意思呢? 有很多初学者对这些不太了解, 因此想详悉讲解一下用 ls -l 命令得到的文件列表每一个字段的意思
[[email protected] root]# ll
总用量 100
drwxr-xr-x 3 root root 72 1 月 4 10:49 test
-rw-r--r-- 1 root root 0 12 月 18 10:44 tset
crw-r----- 1 root root 4, 65 1 月 4 11:08 ttyS1
-rw-r--r-- 1 root root 9754 12 月 1 11:25 X.sxw
-rw-r--r-- 1 root root 8704 11 月 29 12:22 员工信息. xls
-rw-r--r-- 1 root root 19456 11 月 26 17:14 搬千计划. xls
可以看到, 用 ls -l 命令查看某一个目录会得到一个 9 个字段的列表.
#######################
第 1 行: 总用量(total)
#######################
这个数值是该目录下所有文件及目录列表第 5 个字段的和(以 k 为单位), 也就是该目录的大小. 请注意和该目录下的文件和子目录下文件的总合做区分. 这个数字和 du /root 得到的数字的大小是不一样的. 可以用 awk 命令来验证.
用 awk 累加第 5 字段得到的数值:
- [[email protected] root]# ls -l |awk 'BEGIN{sum=0}{sum+=$5}END{print sum}'
- 4104092
转化成以 K 为单位:
- [[email protected] root]# ls -l |awk 'BEGIN{sum=0}{sum+=$5}END{print sum/1024}'
- 4007.9
用 ls -l 得到的数值:
总用量 4055
用 du -sh /root 得到的数值:
- [[email protected] root]# du -sh /root
- 127M /root
可以看到累加第 5 个字段得到的值和 total 显示的是一样的(因为具体算法的不同, 略微有差别). 得到的数值实际上是 root 目录的大小(把 root 目录看成是一个特殊的文件, 就可以理解什么是目录的大小). 而用 du 得到的数值是 root 目录下所由文件和子目录下全部文件的大小的总合.
########################
第 1 字段:
文件属性字段
########################
文件属性字段总共有 10 个字母组成, 第一个字母表示文件类型, 如果这个字母是一个减号 "-", 则说明该文件是一个普通文件. 字母 "d" 表示该文件是一个目录, 字母 "d", 是 dirtectory(目录)的缩写. 请注意, 一个目录或者说一个文件夹是一个特殊文件, 这个特殊文件存放的是其他文件和文件夹的相关信息.
如果该字母是 "l", 表示该文件是一个符号链接. 符号链接的概念类似于 Windows 里的快捷方式. 字母 "l" 是 link(链接)的缩写. 在 UNIX 类系统中, 一个文件可以有多个文件名, 一个文件的多个文件名之间互称为硬链接(hard link). 这些文件头可以指向同一个文件, 删除其中一个文件名并不能删除该文件, 只有把指向该文件的所有硬链接都删除, 这个文件所占用的空间才真正被释放, 该文件才真正被删除. 这和 Windows 是有很大区别的, Windows 中不允许一个文件有两个以上文件名, 如果存在这中情况, 则被认为是文件系统错误. 如果你以前在 Windows 下玩过 DEBUG 就知道, 可以用 DEBUG 修改一张软盘上的根目录, 使一个文件同时具有两个文件名. 但是修改好后用 scandisk 监测的时候会被认为是交叉链接错误.
开头为 b 的表示块设备文件(block),, 设备文件是普通文件和程序访问硬件设备的入口, 是很特殊的文件. 它的没有文件大小, 只有一个主设备号和一个辅设备号. 上面的 hda1 就是一个设备文件, 具有主设备号 3 和辅设备号 1. 表示第一个硬盘第一个分区.
另外, 如果第一个字母为 c 表示该文件是一个字符设备文件(character), 一次传输一个字节的设备被称为字符设备, 比如键盘, 字符终端等, 传输数据的最小单位为一个字节. 一次传输数据为一整块的被称为块设备, 比如硬盘, 光盘等. 最小数据传输单位为一个数据块(通常一个数据块的大小是 512 字节).
第一字段的后面 9 个字母表示文件的权限.
r 表是读(Read)
w 表示写(Write)
x 表示执行(eXecute)
其中前三个表示文件属主的权限, 中间三个表示组用户权限, 最后三个表示其他用户权限.
比如:
-rw-r--r-- 1 root root 1581 11 月 24 18:14 anaconda-ks.cfg
表示文件的拥有者 root 对文件有读写权限, 其他人(同组用户和其他用户只有读的权限)
另外, 权限组还有一些特殊的表示法. 比如 / usr/X11R6/bin/XFree86 具有如下权限:
- [[email protected] root]# ll /usr/X11R6/bin/XFree86
- -rws--x--x 1 root root 1960262 2003-02-28 /usr/X11R6/bin/XFree86
其中的 s 表示这个是网络接口程序 "s" 是 socket 的缩写. 该程序在运行过程中会打开一个网络接口.
其他 UNIX 类系统如 FreeBSD 中还有 t 权限, 表示一个临时 (temporary) 文件
在 freeBSD 中用 ls -l /tmp 可以看到这样的权限:
drwxrwxrwt
它的最后一位是字母 "t"
###############################
第 2 字段
文件硬链接数或目录子目录数
###############################
如果一个文件不是目录那么这一字段表示, 这个文件所具有的硬链接数, 即这个文件总共有多少个文件名. 查看第一个文件:
-rw-r--r-- 1 root root 1581 11 月 24 18:14 anaconda-ks.cfg
第 2 字段的值为 1, 说明这个文件只有 anaconda-ks.cfg 这一个文件名. 即只有一个指向该链接的硬链接.
如果我用 ln, 做一个指向该文件的硬链接再查看该文件, 该文件的第 2 字段就会变成 2:
- [[email protected] root]# ln anaconda-ks.cfg anaconda-ks.cfg.hardlink
- [[email protected] root]# ls -l
总用量 4071
-rw-r--r-- 2 root root 1581 11 月 24 18:14 anaconda-ks.cfg
-rw-r--r-- 2 root root 1581 11 月 24 18:14 anaconda-ks.cfg.hardlink
此时, anaconda-ks.cfg 和 anaconda-ks.cfg.hardlink 称为互为硬链接. 他们指向同一个文件, 无论是修改哪一个文件, 另一个里也做相应的变化, 因为实际上他们指向同一个文件.
用 ls -i anaconda-ks.cfg 可以查看它的文件节点(inode)
互为硬链接的文件具有相同的文件节点. 以下是验证实验:
- [[email protected] root]# ls -i anaconda-ks.cfg
- 18102 anaconda-ks.cfg
- [[email protected] root]# ls -i anaconda-ks.cfg.hardlink
- 18102 anaconda-ks.cfg.hardlink
可以看到, 这两个文件具有相同的文件节点号: 18102
如果你知道一个文件有多个文件名, 如何查找他的其他文件名分布在什么地方呢?
可以先用 ls -i 获得它的节点号, 然后用 find 查找, 如 / etc/sysconfig/networking/devices/ifcfg-eth0 就具有多个文件名, 我要查找与它互为硬链接的文件:
- [[email protected] devices]# ls -i /etc/sysconfig/networking/devices/ifcfg-eth0
- 147181 /etc/sysconfig/networking/devices/ifcfg-eth0
得到它的节点号为 147181
再用 find 查找:
- [[email protected] devices]# find /etc -inum 147181
- /etc/sysconfig/networking/devices/ifcfg-eth0
- /etc/sysconfig/networking/profiles/default/ifcfg-eth0
这样就得到了同一个文件的不同文件名的位置.
*************************************
如果是一个目录, 第 2 字段的含义:
**************************************
如果是一个目录, 则第 2 字段表示该目录所含子目录的个数.
新建一个空目录, 这个目录的第二字段就是 2, 表示该目录下有两个子目录. 为什么新建的目录下面会有两个子目录呢?
因为每一个目录都有一个指向它本身的子目录 "." 和指向它上级目录的子目录 "..", 这两个默认子目录是隐藏的. 用 ls -a 可以看到.
每次在目录下新建一个子目录, 该目录第 2 字段的值就增 1, 但是新建一个普通文件该字段值不增加.
###############################
第 3 字段:
文件拥有者
###############################
该字段表示这个文件是属于哪个用户的. UNIX 类系统都是多用户系统, 每个文件都有它的拥有者. 只有文件的拥有者才具有改动文件属性的权利. 当然, root 用户具有改动任何文件属性的权利. 对于一个目录来说, 只有拥有该目录的用户, 或者具有写权限的用户才有在目录下创建文件的权利.
如果某一个用户因为某种原因, 被删除, 而该用户的文件还存在, 那么用 ls -l 查看该文件将显示一个代表用户存在前 ID 号的数字.
以下是演示:
先创建一个用户并用 su 过去:
- [[email protected] root]# useradd gucuiwen -g users
- [[email protected] root]# su - gucuiwen
用新建的用户创建一个测试文件:
- [[email protected] gucuiwen]$ touch testfile
- [[email protected] gucuiwen]$ ls -l testfile
-rw-r--r-- 1 gucuiwen users 0 1 月 4 16:31 testfile
最后用 ls -l 看到第三字段的文件拥有者为 gucuiwen
然后我将 gucuiwen 用户删除:
- [[email protected] root]# userdel gucuiwen
- [[email protected] root]# cd /home/gucuiwen/
- [[email protected] gucuiwen]# ls -l
总用量 0
-rw-r--r-- 1 501 users 0 1 月 4 16:31 testfile
可以看到, 第三字段成了一个数字, 这个数字是原 gucuiwen 用户的 ID 号. 因为文件系统对每个文件记录文件所有者的 ID, 而非用户名.
###############################
第 4 字段:
文件拥有者所在的组
###############################
组的概念可以想像成是一个共同完成一个项目的团队. 通过组的概念, 可以控制文件让特定的用户查看, 修改或运行. 而不是一棍子打死, 要么全不让看, 要么全让看.
一个用户可以加入很多个组, 但是其中有一个是主组, 就是显示在第 4 字段的明称.
可以在 adduser 的时候用 - g 指定该用户所在的主组, 用 - G 指定其他组.
###############################
第 5 字段:
文件文件大小(以字节为单位)
###############################
第 5 字段表示文件大小, 如果是一个文件夹, 则表示该文件夹的大小. 请注意是文件夹本身的大小, 而不是文件夹以及它下面的文件的总大小!
很多人不能理解文件夹是一个特殊的文件的含义, 这样的话理解文件夹大小的含义就比较困难了.
###############################
第 6 字段:
文件创建月份
- ###############################
- ###############################
第 7 字段:
文件创建日期
- ###############################
- ###############################
第 8 字段:
文件创建时间
###############################
文件创建的时间可以通过 touch 命令来修改. 如:
#touch testfile
可以把 testfile 的创建时间修改为当前时间.
touch 的详细用法请看链接文档.
#man touch
另外, 一个文件还有最后访问时间, 最后修改时间等属性.
这些属性可以用 ls 的其它参数显示出来.
###############################
第 9 字段:
文件名
###############################
如果是一个符号链接, 那么会有一个 "->" 箭头符号, 后面根一个它指向的文件名.
来源: http://www.bubuko.com/infodetail-3128400.html