Ls
sudo ls 在 Linux 上不顯示隱藏文件
今天我發現在 OS X 上
sudo ls
顯示隱藏文件(即名稱以 開頭的文件.
)。這讓我非常驚訝,以至於我問了一個關於這種行為的問題,我仍然覺得有些奇怪和意外。事實證明,這種行為可以追溯到1979 年的 2BSD。
鑑於此,現在我想問以下問題。為什麼
ls
Linux 上的行為不這樣?是否有一段時間
ls
在其他類型的 *nixes 上有這種行為?是否有任何文件、送出消息、電子郵件解釋了誰以及為什麼決定根本不應該複製此功能,或者如果最初複製了它就應該刪除它?
POSIX 標准說:
“除非明確引用,提供 -A 或 -a 選項,或者實現定義的條件導致它們被寫入,否則不應寫出以 (’.’) 開頭的文件名和任何相關資訊。”
作為 root 顯然不被視為導致隱藏文件由 GNU Coreutils 實現寫入的條件,該實現
ls
通常打包在 Linux 發行版中。有充分的理由不讓程序的行為受到全域變數的影響,比如哪個使用者 ID 有效。以非 root 身份開發的腳本在以 root 身份執行時會改變行為。
隱藏以點開頭的文件不是一種安全機制;它不應該連接到安全上下文。它隱藏了我們通常不想看到的東西,例如源文件
.git
中的目錄或其他任何東西。.c
如果您對其他使用者的目錄具有讀取權限,則可以列出他們的隱藏文件。 點隱藏了預期存在但不感興趣的項目,而不是隱藏的項目。除了沒有特殊作業系統狀態的
..
虛線目錄條目;.
只是ls
特別對待他們。我剛試過 Solaris 10;它
ls
也沒有這種行為。它不是一個普遍的“Unixism”,這就解釋了為什麼 POSIX 要求是這樣寫的。