在Linux裡面常常輸入ls -l顯示目錄和檔案的長列表詳細結果
這個列表裡面很多欄位的數值對於檔案很容易理解,
然而對於目錄而言,有些欄位卻不是那麼好懂.
舉個例子
第二個欄位的數值,對於檔案而言,是指說這個檔案有幾個hard link數量,
基本會是1起跳(因為它自己就佔了1個).
這個欄位對於目錄而言,是指說它底下有幾個子目錄,一般會是2起跳,
也就是裡面的「.」和「..」這2個子目錄.
第五個欄位是Size大小,對檔案而言很容易懂,就是這個檔有多大
對目錄而言,是指這個目錄的metadata大小,
metadata應該算是說記錄這關於這個目錄的資訊.
因為UNIX系統裡面everything is file,所以在有一些distribution裡,
像以前玩過的Knoppix,你也可以直接 vi 一個目錄
就會顯示這個目錄裡面的資訊.
最重要的就是第一個欄位的權限資訊,這些權限對於檔案也很容易了解
但是對目錄而言就沒那麼好懂了.
先來說x權限,目錄的x權限代表你可以cd進去該目錄
r權限代表你可以讀取這個目錄的檔名/目錄名
但是只有r權限你也只能讀檔名/目錄名,並不能讀到這個目錄的inode資訊
也就是ls -l列出來的那一串(權限、檔案大小、修改時間等等的資訊)
如果你要讓r權限可以完全讀取這些inode資訊,必須還要再搭配x權限才行.
再來是w權限,代表你可以對目錄寫入,但是只有w權限你並沒有辦法幹什麼事
連寫入也不行,w必須要搭配x的權限才能正確做寫入的動作,也就是w要有x權限才有意義.
另外關於權限還有一點新手很容易搞混的就是,你在Linux裡面,
可不可以 「新增/刪除/更名」 一個檔案或目錄
是要看你所在的那層目錄給你什麼樣的權限,而不是看你想動的那個檔案或目錄.
也就是說當前目錄下有一個檔案就算我具有rwx權限,但我所在的目錄不允許我write的話
我不能對這個檔案進行 刪除/更名 的動作,也不能像 touch abc這樣建立一個新檔
(touch的功用是如果檔案不存在,則建立新檔,
如果檔案已存在,就將它的修改時間改為最新)
因為inode資訊是寫到那個目錄裡面,但你沒有這個目錄的w權限,所以會失敗.
你把這些動作想成是對目錄的內容做修改就很好懂了.
但是就算我沒有這個目錄的w權限,我也可以直接清空一個我具有rwx權限的檔案內容
並不一定要直接砍掉它也行.
另外如果在權限那一欄的後面看到一個「+」號,那代表可能採用了
ACL或是SELinux的機制.
像是我要清除c.bin的內容就有好幾種方式
$ &> c.bin
$ echo -n > c.bin
$ : > c.bin
$ > c.bin
$ cp /dev/null c.bin
這5種指令之一都可以直接清空c.bin的內容.