可以看到,用ls -l
命令查看某一個目錄會得到一個9個字段的列表.
第1行:總用量(total)
這個數值是該目錄下所有文件及目錄列表第5個字段的和(以k為單位),也就是該目錄的大小.請注意和該目錄下的文件和子目錄下文件的總合做區(qū)分.這個數字和du /root
得到的數字的大小是不一樣的.可以用awk
命令來驗證.
用awk
累加第5字段得到的數值:
[root@gucuiwen root]# ls -l |awk 'BEGIN{sum=0}{sum+=$5}END{print sum}'
4104092
轉化成以K為單位:
[root@gucuiwen root]# ls -l |awk 'BEGIN{sum=0}{sum+=$5}END{print sum/1024}'
4007.9
用ls -l
得到的數值:
總用量 4055
用du -sh /root
得到的數值:
[root@gucuiwen root]# du -sh /root
127M /root
可以看到累加第5個字段得到的值和total
顯示的是一樣的(因為具體算法的不同,略微有差別).得到的數值實際上是root
目錄的大小(把root
目錄看成是一個特殊的文件,就可以理解什么是目錄的大小).而用du
得到的數值是root
目錄下所由文件和子目錄下全部文件的大小的總合.
第1字段: 文件屬性字段
文件屬性字段總共有10個字母組成,第一個字母表示文件類型.
- 如果這個字母是一個減號"-",則說明該文件是一個普通文件
- 字母"d"表示該文件是一個目錄,字母"d",是dirtectory(目錄)的縮寫.請注意,一個目錄或者說一個文件夾是一個特殊文件,這個特殊文件存放的是其他文件和文件夾的相關信息.
- 字母"l",表示該文件是一個符號鏈接.符號鏈接的概念類似于windows里的快捷方式.字母"l"是link(鏈接)的縮寫.在UNIX類系統(tǒng)中,一個文件可以有多個文件名,一個文件的多個文件名之間互稱為硬鏈接(hard link).這些文件頭可以指向同一個文件,刪除其中一個文件名并不能刪除該文件,只有把指向該文件的所有硬鏈接都刪除,這個文件所占用的空間才真正被釋放,該文件才真正被刪除.這和windows是有很大區(qū)別的,windows中不允許一個文件有兩個以上文件名,如果存在這中情況,則被認為是文件系統(tǒng)錯誤
- 字母"b",表示塊設備文件(block),,設備文件是普通文件和程序訪問硬件設備的入口,是很特殊的文件.它的沒有文件大小,只有一個主設備號和一個輔設備號.上面的hda1就是一個設備文件,具有主設備號3和輔設備號1.表示第一個硬盤第一個分區(qū).
- 字母"c"奶卓,表示該文件是一個字符設備文件(character),一次傳輸一個字節(jié)的設備被稱為字符設備,比如鍵盤,字符終端等,傳輸數據的最小單位為一個字節(jié).一次傳輸數據為一整塊的被稱為塊設備,比如硬盤,光盤等.最小數據傳輸單位為一個數據塊(通常一個數據塊的大小是512字節(jié)).
- 第一字段的后面9個字母表示文件的權限.
* r表示讀 (Read)
* w表示寫 (Write)
* x表示執(zhí)行 (eXecute)
* 其中前三個表示文件屬主的權限,中間三個表示組用戶權限,最后三個表示其他用戶權限.
第2字段 :文件硬鏈接數或目錄子目錄數
如果一個文件不是目錄那么這一字段表示,這個文件所具有的硬鏈接數,即這個文件總共有多少個文件名.查看第一個文件:
-rw-r--r-- 1 root root 1581 11月 24 18:14 anaconda-ks.cfg
第2字段的值為1,說明這個文件只有anaconda-ks.cfg
這一個文件名.即只有一個指向該鏈接的硬鏈接.
如果我用ln
,做一個指向該文件的硬鏈接再查看該文件,該文件的第2字段就會變成2:
[root@gucuiwen root]# ln anaconda-ks.cfg anaconda-ks.cfg.hardlink
[root@gucuiwen 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
可以查看它的文件節(jié)點(inode)
互為硬鏈接的文件具有相同的文件節(jié)點. 以下是驗證實驗:
[root@gucuiwen root]# ls -i anaconda-ks.cfg
18102 anaconda-ks.cfg
[root@gucuiwen root]# ls -i anaconda-ks.cfg.hardlink
18102 anaconda-ks.cfg.hardlink
可以看到,這兩個文件具有相同的文件節(jié)點號:18102
如果你知道一個文件有多個文件名,如何查找他的其他文件名分布在什么地方呢?
可以先用ls -i
獲得它的節(jié)點號,然后用find查找,如/etc/sysconfig/networking/devices/ifcfg-eth0
就具有多個文件名,我要查找與它互為硬鏈接的文件:
[root@gucuiwen devices]# ls -i /etc/sysconfig/networking/devices/ifcfg-eth0
147181 /etc/sysconfig/networking/devices/ifcfg-eth0
得到它的節(jié)點號為 147181
再用find查找:
[root@gucuiwen 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
類系統(tǒng)都是多用戶系統(tǒng),每個文件都有它的擁有者.只有文件的擁有者才具有改動文件屬性的權利.當然, root
用戶具有改動任何文件屬性的權利童漩。對于一個目錄來說,只有擁有該目錄的用戶,或者具有寫權限的用戶才有在目錄下創(chuàng)建文件的權利.
如果某一個用戶因為某種原因沪伙,被刪除喷好,而該用戶的文件還存在,那么用ls -l
查看該文件將顯示一個代表用戶存在前ID
號的數字.
以下是演示:
先創(chuàng)建一個用戶并用su過去:
[root@gucuiwen root]# useradd gucuiwen -g users
[root@gucuiwen root]# su - gucuiwen
用新建的用戶創(chuàng)建一個測試文件:
[gucuiwen@gucuiwen gucuiwen]$ touch testfile
[gucuiwen@gucuiwen gucuiwen]$ ls -l testfile
-rw-r--r-- 1 gucuiwen users 0 1月 4 16:31 testfile
最后用ls -l
看到第三字段的文件擁有者為gucuiwen
然后我將gucuiwen
用戶刪除:
[root@gucuiwen root]# userdel gucuiwen
[root@gucuiwen root]# cd /home/gucuiwen/
[root@gucuiwen gucuiwen]# ls -l
總用量 0
-rw-r--r-- 1 501 users 0 1月 4 16:31 testfile
可以看到,第三字段成了一個數字,這個數字是原gucuiwen
用戶的ID
號.因為文件系統(tǒng)對每個文件記錄文件所有者的ID
,而非用戶名.
第4字段: 文件擁有者所在的組
組的概念可以想像成是一個共同完成一個項目的團隊.通過組的概念,可以控制文件讓特定的用戶查看,修改或運行.而不是一棍子打死,要么全不讓看,要么全讓看.
一個用戶可以加入很多個組,但是其中有一個是主組,就是顯示在第4字段的明稱.
可以在adduser
的時候用-g
指定該用戶所在的主組,用-G
指定其他組.
第5字段: 文件文件大小(以字節(jié)為單位)
第5字段表示文件大小,如果是一個文件夾,則表示該文件夾的大小.請注意是文件夾本身的大小,而不是文件夾以及它下面的文件的總大小!
很多人不能理解文件夾是一個特殊的文件的含義,這樣的話理解文件夾大小的含義就比較困難了.
第6字段: 文件創(chuàng)建月份
第7字段: 文件創(chuàng)建日期
第8字段: 文件創(chuàng)建時間
文件創(chuàng)建的時間可以通過touch
命令來修改.如:
#touch testfile
可以把testfile
的創(chuàng)建時間修改為當前時間.
touch
的詳細用法請看鏈接文檔.
#man touch
另外,一個文件還有最后訪問時間,最后修改時間等屬性.
這些屬性可以用ls
的其它參數顯示出來.
第9字段: 文件名
如果是一個符號鏈接,那么會有一個 "->
" 箭頭符號,后面根一個它指向的文件名.