ls -l 清單資訊詳解
我們平時用ls -l 指令檢視一個目錄下的檔案和子目錄的詳悉資訊時,會得到一個詳細的檔案和目錄名清單.這個清單包含了檔案的屬性,所屬使用者,所屬組,建立時間,檔案大小等等資訊.這些資訊到底是什麼意思呢?有很多初學者對這些不太了解,是以想詳悉講解一下用ls -l指令得到的檔案清單每一個字段的意思
以筆者電腦的/root目錄為例:
[root@gucuiwen root]# ll
總用量 4055
-rw-r--r-- 1 root root 1581 11月 24 18:14 anaconda-ks.cfg
drwxr-xr-x 2 root root 208 12月 1 13:50 babylinux
-rw-r--r-- 1 root root 1474560 11月 25 15:02 babylinux.img
-rw-r--r-- 1 root root 26829 11月 25 15:10 babylinux.png
lrwxrwxrwx 1 root root 9 1月 4 11:06 disk1.link.png -> disk1.png
-rw-r--r-- 1 root root 3209 11月 26 12:07 disk1.png
-rw-r--r-- 1 root root 692 11月 26 13:16 disk2.png
-rw-r--r-- 1 root root 718 11月 26 13:30 disk3.png
drwx------ 8 root root 392 1月 4 08:40 evolution
-rwxr-xr-x 1 root root 13695 11月 30 16:51 fangkuai.sh
drwxr-xr-x 2 root root 208 12月 28 12:06 FreeBSD
-rw-r--r-- 1 root root 2315 11月 25 17:19 getMBR.png
brw-r----- 1 root root 3, 1 1月 4 11:06 hda1
drwxr-xr-x 2 root root 296 12月 31 11:53 htmls
-rw-r--r-- 1 root root 21369 11月 24 18:12 install.log
-rw-r--r-- 1 root root 3024 11月 24 18:12 install.log.syslog
-rw-r--r-- 1 root root 293 1月 4 10:51 ls.txt
-rw-r--r-- 1 root root 2237702 11月 25 15:09 magick.miff
-rw-r--r-- 1 root root 13493 11月 25 17:31 mbr1.png
-rw-r--r-- 1 root root 8123 11月 25 17:42 mbr2.png
-rw-r--r-- 1 root root 512 11月 30 16:10 mbr.dat
-rw-r--r-- 1 root root 64512 11月 26 15:33 partition.doc
-rw-r--r-- 1 root root 49887 11月 26 15:32 partition.sxw
-rw-r--r-- 1 root root 1541 12月 18 13:14 passwd
-rw-r--r-- 1 root root 46320 11月 25 17:28 Screenshot-1.png
-rw-r--r-- 1 root root 44145 11月 25 17:32 Screenshot-2.png
-rw-r--r-- 1 root root 43732 11月 25 17:13 Screenshot.png
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字段得到的數值:
[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類系統中,一個檔案可以有多個檔案名,一個檔案的多個檔案名之間互稱為硬連結(hard link).這些檔案頭可以指向同一個檔案,删除其中一個檔案名并不能删除該檔案,隻有把指向該檔案的所有硬連結都删除,這個檔案所占用的空間才真正被釋放,該檔案才真正被删除.這和windows是有很大差別的,windows中不允許一個檔案有兩個以上檔案名,如果存在這中情況,則被認為是檔案系統錯誤.如果你以前在windows下玩過DEBUG就知道,可以用DEBUG修改一張軟碟上的根目錄,使一個檔案同時具有兩個檔案名.但是修改好後用
scandisk監測的時候會被認為是交叉連結錯誤.
開頭為b的表示塊裝置檔案(block),,裝置檔案是普通檔案和程式通路硬體裝置的入口,是很特殊的檔案.它的沒有檔案大小,隻有一個主裝置号和一個輔裝置号.上面的hda1就是一個裝置檔案,具有主裝置号3和輔裝置号1.表示第一個硬碟第一個分區.
另外,如果第一個字母為c表示該檔案是一個字元裝置檔案(character),一次傳輸一個位元組的裝置被稱為字元裝置,比如鍵盤,字元終端等,傳輸資料的最小機關為一個位元組.一次傳輸資料為一整塊的被稱為塊裝置,比如硬碟,CD光牒等.最小資料傳輸機關為一個資料塊(通常一個資料塊的大小是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具有如下權限:
[root@gucuiwen 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"
-rwx------: 檔案所有者對檔案具有讀取、寫入和執行的權限。
-rwxr―r--: 檔案所有者具有讀、寫與執行的權限,其他使用者則具有讀取的權限。
-rw-rw-r-x: 檔案所有者與同組使用者對檔案具有讀寫的權限,而其他使用者僅具有讀取和執行的權限。
drwx--x--x: 目錄所有者具有讀寫與進入目錄的權限,其他使用者近能進入該目錄,卻無法讀取任何資料。
Drwx------: 除了目錄所有者具有完整的權限之外,其他使用者對該目錄完全沒有任何權限。
###############################
第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可以檢視它的檔案節點(inode)
互為硬連結的檔案具有相同的檔案節點. 以下是驗證明驗:
[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
可以看到,這兩個檔案具有相同的檔案節點号:18102
如果你知道一個檔案有多個檔案名,如何查找他的其他檔案名分布在什麼地方呢?
可以先用ls -i 獲得它的節點号,然後用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
得到它的節點号為 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類系統都是多使用者系統,每個檔案都有它的擁有者.隻有檔案的擁有者才具有改動檔案屬性的權利.當然, root使用者具有改動任何檔案屬性的權利.對于一個目錄來說,隻有擁有該目錄的使用者,或者具有寫權限的使用者才有在目錄下建立檔案的權利.
如果某一個使用者因為某種原因,被删除,而該使用者的檔案還存在,那麼用ls -l 檢視該檔案将顯示一個代表使用者存在前ID号的數字.
以下是示範:
先建立一個使用者并用su過去:
[root@gucuiwen root]# useradd gucuiwen -g users
[root@gucuiwen root]# su - gucuiwen
用建立的使用者建立一個測試檔案:
[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号.因為檔案系統對每個檔案記錄檔案所有者的ID,而非使用者名.
###############################
第4字段:
檔案擁有者所在的組
###############################
組的概念可以想像成是一個共同完成一個項目的團隊.通過組的概念,可以控制檔案讓特定的使用者檢視,修改或運作.而不是一棍子打死,要麼全不讓看,要麼全讓看.
一個使用者可以加入很多個組,但是其中有一個是主組,就是顯示在第4字段的明稱.
可以在adduser的時候用-g指定該使用者所在的主組,用-G指定其他組.
##############################
第5字段:
檔案檔案大小(以位元組為機關)
###############################
第5字段表示檔案大小,如果是一個檔案夾,則表示該檔案夾的大小.請注意是檔案夾本身的大小,而不是檔案夾以及它下面的檔案的總大小!
很多人不能了解檔案夾是一個特殊的檔案的含義,這樣的話了解檔案夾大小的含義就比較困難了.
###############################
第6字段:
檔案建立月份
###############################
這個不必多說了.
###############################
第7字段:
檔案建立日期
###############################
###############################
第8字段:
檔案建立時間
###############################
檔案建立的時間可以通過touch指令來修改.如:
#touch testfile
可以把testfile的建立時間修改為目前時間.
touch的詳細用法請看連結文檔.
#man touch
另外,一個檔案還有最後通路時間,最後修改時間等屬性.
這些屬性可以用ls 的其它參數顯示出來.
###############################
第9字段:
檔案名
###############################
如果是一個符号連結,那麼會有一個 "->" 箭頭符号,後面根一個它指向的檔案名.
壓縮指令(http://wenku.baidu.com/view/23d9caf9aef8941ea76e05da.html ):
tar –cf 名字.tar 檔案
再重新壓縮:tar –rf 名字.tar 檔案
解壓縮指令:tar –xvf 名字.tar
修改使用者:chown username file
修改使用者組:chgrp grpname file