Ls

為什麼在包含許多文件的目錄上執行“ls -U”需要一些時間,而執行“ls -U | head”會立即返回答案?

  • May 17, 2022

當您想從包含許多文件的目錄中獲取文件名樣本時,建議執行“ls -U | head”,否則單獨執行“ls”可能需要相當長的時間。

但是,為什麼“ls -U”本身不會在執行後立即開始返回輸出?

GNU ls -U 表示未排序的輸出,因此它不需要等待所有目錄內容開始列印它們。

head 將關閉標準輸入並在少量行後退出。當管道的作者(在這種情況下為 ls )沒有更多的讀者時,它將退出。這將在少量行之後刷新所有涉及的 I/O,使其在互動式使用中看起來很敏捷。

進一步閱讀:關閉標準輸入時程序未關閉


人類在列出目錄內容方面的明顯延遲是超出實際限制的標誌。目錄中的大量文件意味著大型文件系統元數據,因此需要大量 I/O。很多通常意味著數十萬個文件,即使對於經過生產測試的文件系統也是如此。

除了一定數量的文件,重新考慮替代目錄佈局和數據庫是有意義的。短期內,將問題卷放在快速 SSD 上以使其性能可以接受。

引用自:https://serverfault.com/questions/1101124