Ls

sudo ls 在 Linux 上不顯示隱藏文件

  • June 24, 2015

今天我發現在 OS X 上sudo ls顯示隱藏文件(即名稱以 開頭的文件.)。這讓我非常驚訝,以至於我問了一個關於這種行為的問題,我仍然覺得有些奇怪和意外。

事實證明,這種行為可以追溯到1979 年的 2BSD

鑑於此,現在我想問以下問題。為什麼lsLinux 上的行為不這樣?

是否有一段時間ls在其他類型的 *nixes 上有這種行為?是否有任何文件、送出消息、電子郵件解釋了誰以及為什麼決定根本不應該複製此功能,或者如果最初複製了它就應該刪除它?

POSIX 標准說:

“除非明確引用,提供 -A 或 -a 選項,或者實現定義的條件導致它們被寫入,否則不應寫出以 (’.’) 開頭的文件名和任何相關資訊。”

作為 root 顯然不被視為導致隱藏文件由 GNU Coreutils 實現寫入的條件,該實現ls通常打包在 Linux 發行版中。

有充分的理由不讓程序的行為受到全域變數的影響,比如哪個使用者 ID 有效。以非 root 身份開發的腳本在以 root 身份執行時會改變行為。

隱藏以點開頭的文件不是一種安全機制;它不應該連接到安全上下文。它隱藏了我們通常不想看到的東西,例如源文件.git中的目錄或其他任何東西。.c如果您對其他使用者的目錄具有讀取權限,則可以列出他們的隱藏文件。 點隱藏了預期存在但不感興趣的項目,而不是隱藏的項目。

除了沒有特殊作業系統狀態的..虛線目錄條目;.只是ls特別對待他們。

我剛試過 Solaris 10;它ls也沒有這種行為。它不是一個普遍的“Unixism”,這就解釋了為什麼 POSIX 要求是這樣寫的。

引用自:https://unix.stackexchange.com/questions/211689