Linux

奇怪的掛起“ls -l”或“dir -l”不起作用

  • October 20, 2016

我在 Debian 伺服器上有一個奇怪的行為。

語境 :Linux 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt11-1+deb8u5 (2015-10-09) x86_64 GNU/Linux

使用者:root

命令ls,ls -a或完美執行ls -1dir但是這些命令**ls -ldir -l**只有在/目錄上這些命令才會掛起終端。

ls/ ls -a… 只是讀取目前目錄的內容,它不會對文件做任何事情。

ls -l或者ls -F需要ls --color從列出的文件本身獲取元數據資訊(權限、類型、所有權、修改時間……)。因此,除了getdents()讀取目錄內容的系統呼叫之外,它還需要lstat()為其中列出的每個文件執行 a ,還需要readlink()為符號連結執行 a stat()(以及對於帶有or的某些ls實現的符號連結)。-F``--color

對於有時在權限後發現的+or@和其他可選的替代訪問方法標誌,它可能需要執行一些額外的系統呼叫(例如getxattr()在 Linux 上檢索 ACL)。

使用ls -l,還需要查詢使用者數據庫,將 uid 和 gid 翻譯成使用者名和組名。

所以,雖然對於一個簡單的.,我們只需要打開一個文件(目前工作目錄)並讀取它的內容,很容易看到/ /ls失敗的事情有更多的範圍……:-l``-F``--color

  • lstat()如果文件是不可用的文件系統上的掛載點,則可能會失敗或掛起。
  • 如果符號連結的目標位於不可用的 fs 上,則stat()on a symlink 可能會失敗。
  • 對使用者數據庫的查詢可能會失敗或掛起(例如在使用網路 (LDAP/NIS+) 使用者數據庫的部署中。

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