理解 Linux 中 `ls` 的輸出
ls
的輸出會因各 Linux 版本變種而略有差異,這裡只討論一般情況下的輸出。
下面是來自 man page 關於ls
的描述:
$ man ls ls - list directory contents
列出資料夾中的內容。
但一般我們會配合著-l
引數使用,將輸出展示成列表形式。
在ls
的 man page 中搜索-l
可看到該引數的意義:
-luse a long listing format
列表形式下看到的輸出大概成這樣:
-rwxrw-r--10rootroot 2048Jan 13 07:11 afile.exe
各列的含義
-rwxrw-r--10rootroot 2048Jan 13 07:11 afile.exe ?UUUGGGOOOS00UUUUUU GGGGGG ####^-- 修改日期及檔案或資料夾名 ^ ^^^ ^^^^^ | ||| ||||\--- 檔案大小,單位為位元組(byte) | ||| |||\-------- 所有者所處的分組 | ||| ||\--------------- 所有者名稱 | ||| |\---------------------- 包含的專案(item)數量 | ||| \--------------------------- 額外的許可權(`.`,`+`,`s` 等,為空表示沒有) | \--\--\----------------------------- 分別對應 [U]ser, [G]roup, and [O]thers 三種賬戶的讀,寫,可執行許可權 \------------------------------------- 標識檔案型別
檔案許可權/file permissions
包含三部分:
-
第一位標識檔案型別,
- d l
-
後面的值三個一組,
xxx xxx xxx
。分別對應了user
,group
與other
的許可權。其中每一組包含三位,每一位則表示具體的讀寫及可執行許可權,如果是字母表示有該許可權,-
表示沒有相應的許可權。r w x
- 最後位可選,表示還有額外的許可權控制,如果沒有則為空,參見這裡的解釋 。
其中,
- user 即檔案所屬的使用者,它的所有者,也可理解成其建立者,如果該檔案沒有被修改過許可權的話。
- group 即使用者所屬的分組。
- other 表示既不是主人也不屬於 user 所處的分組的其他任何身份。
所以連起來的話,-rwxrw-r--
表示該項是個檔案,其所有者擁有全部三種許可權(rwx
),和所有者同在一個分組下的使用者沒有可執行的許可權(rw-
),其他使用者只讀(r--
)。
Tips: 系統會為檔案預設賦予許可權,但可通過chmod
(change mode)命令來手動改變檔案的許可權。
one more thing
有趣的是,許可權除了使用rwx
字母的方式表示,還可使用八進位制(octal)數字來表示。
-
0:無許可權
-
-
1:可執行
x
-
2:寫許可權
w
-
3:可寫和可執行
wx
-
4:讀許可權
r
-
5:可讀可執行
rx
-
6:讀寫
rw
-
7:讀寫及可執行
rwx
數字形式的許可權通常用於chmod
命令,方便修改檔案的許可權。比如將檔案設定對使用者有全部許可權(對應數字 7),分組可讀可執行(5),其他只讀(4):
$ chmod 754 somefile.js
你當然還是可以使用字母的方式來進行設定的,
$ chmod u=rwx,g=rx,o=r somefile.js
細心的你可能發現了,無論哪種許可權組合,都可以通過三種其他的許可權其數字相加而得到,
- 比如 7 表示讀寫及可執行,7 = 4(讀) + 2 (寫) + 1 (可執行)
- 再比如只讀許可權 4 = 4(讀) + 0 (寫) + 0 (可執行)
這便是其設計其妙之處,所以你應該理解為何 0~7 對應的是上面列出的許可權。方便之處在於,只需要記住 4,2,1 分別對應讀,寫,可執行。其他許可權通過相加計算即可。
連結數量/number of links
表示包含的專案數量。如果該項是檔案,則無疑是 1。如果該項是資料夾,表示資料夾下還包含多少個檔案或資料夾。
所屬使用者/owner name
檔案的所有者。
所屬分組/owner group
所有者所處的分組名。
檔案大小/file size
檔案或資料夾的大小,單位為位元組(byte)。通過引數可配置輸出為更加容易理解的形式,比如-h
(--human-readable
):
-rw-rw-r--1 liuwayong liuwayong 1.6K Mar 30 18:18 app.js
修改日期/time of last modification
最後的修改日期。
檔案或目錄名/file/directory name
檔案或資料夾的名稱。如果是軟連結,會顯示出其所指向的位置。
lrwxrwxrwx1 rootroot16 Aug22018 videodata -> /data/videodata/