理解 Linux 中 `ls` 的輸出


ls 的輸出會因各 Linux 版本變種而略有差異,這里只討論一般情況下的輸出。

下面是來自 man page 關於 ls 的描述:

$ man ls
       ls - list directory contents

列出文件夾中的內容。

但一般我們會配合着 -l 參數使用,將輸出展示成列表形式。

ls 的 man page 中搜索 -l 可看到該參數的意義:

       -l     use a long listing format

列表形式下看到的輸出大概成這樣:

-rwxrw-r--    10    root   root 2048    Jan 13 07:11 afile.exe

各列的含義

-rwxrw-r--    10    root   root 2048    Jan 13 07:11 afile.exe
?UUUGGGOOOS   00  UUUUUU GGGGGG ####    ^-- 修改日期及文件或文件夾名
^ ^  ^  ^ ^    ^      ^      ^    ^
| |  |  | |    |      |      |    \--- 文件大小,單位為字節(byte)
| |  |  | |    |      |      \-------- 所有者所處的分組
| |  |  | |    |      \--------------- 所有者名稱
| |  |  | |    \---------------------- 包含的項目(item)數量
| |  |  | \--------------------------- 額外的權限(`.`,`+`,`s` 等,為空表示沒有)
| \--\--\----------------------------- 分別對應 [U]ser, [G]roup, and [O]thers 三種賬戶的讀,寫,可執行權限
\------------------------------------- 標識文件類型

文件權限/file permissions

包含三部分:

  • 第一位標識文件類型,
    • -:文件。
    • d:文件夾(directory)。
    • l:軟鏈(symlink)。
  • 后面的值三個一組,xxx xxx xxx。分別對應了 usergroupother 的權限。其中每一組包含三位,每一位則表示具體的讀寫及可執行權限,如果是字母表示有該權限, - 表示沒有相應的權限。
    • r:讀取權限/readable。
    • w:寫入權限/writable。
    • x:可執行權限/executable,即將文件作為可執行文件運行。
  • 最后位可選,表示還有額外的權限控制,如果沒有則為空,參見這里的解釋

其中,

  • 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

文件或文件夾的名稱。如果是軟鏈接,會顯示出其所指向的位置。

lrwxrwxrwx  1 root      root        16 Aug  2  2018 videodata -> /data/videodata/

相關資料


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM