Command-Line

-bash:lstat:找不到命令

  • June 25, 2017

我正在使用執行 El Capitan v 10.11.6 的 Macbook Pro。我正在學習符號連結,在man ln頁面中,我發現了以下內容:

符號連結上的 stat(2) 將返回連結到的文件;必須執行 lstat(2) 以獲取有關連結的資訊。

作為測試,我創建了一個文件的符號連結(在另一個文件系統中,如果重要的話),如下所示:

ln -s /Volumes/foobardir/foobarfile foobarlink

然後我跑去lstat foobarlink獲取符號連結文件本身的資訊,但我得到了以下輸出:

-bash: lstat: command not found

該命令which lstat不返回任何內容,這確認在我的文件路徑中沒有具有此名稱的執行檔。

我能夠執行stat foobarlink,但我不確定返回的統計資訊是針對連結文件還是符號連結本身。我確實在該命令的輸出中看到了時間戳形式的今天日期,而執行stat foobarfile顯示了幾個月前的日期。所以我猜這是我正在尋找的輸出,但我想要第二個意見。

順便說一句,執行which stat返回/usr/bin/stat。名稱中包含所有執行檔grep的目錄中的A返回以下內容:/usr/bin``stat

  • db_stat
  • 差異統計
  • httpdstat.d
  • jstat
  • jstatd
  • 鎖定狀態
  • lpstat
  • nfsstat
  • 採摘狀態
  • snmpnetstat
  • snmp狀態
  • 統計
  • 新的
  • vm_stat

正如我上面所說,我的猜測是stat返回我期望返回的輸出lstat。我的問題是:

  • 當辨識為有效命令時,為什麼lstat顯然沒有安裝在我的系統中?man lstat``lstat
  • 為什麼要包含您不附帶的執行檔的手冊資訊?
  • brew search lstat不返回任何結果。是否可以以某種方式安裝lstat到我的本地機器上,這樣做有什麼好處嗎?

BSD 手冊的第 1 節是針對一般命令的。第 2 節是關於系統呼叫的,C如果使用該語言或其派生語言之一為您的系統程式,您可能會進行的函式呼叫。

括號中的數字表示該條目來自手冊的哪一部分。在這種情況下,lstat(2)表示此頁面提供有關係統呼叫的資訊,而不是可以在命令行執行的獨立二進製文件的資訊。


如果您鍵入man lstat,您將看到lstat系統呼叫的手冊頁。 stat相比之下,它是系統呼叫和獨立實用程序的名稱。如果您鍵入man stat,預設情況下您將獲得命令行實用程序的手冊頁。要查看系統呼叫手冊頁,您需要明確說明man要搜尋手冊的哪個部分:

man 2 stat

https://developer.apple.com/legacy/library/documentation/Darwin/Reference/ManPages/man5/manpages.5.html是一個(過時的)連結,列出了 BSD 手冊的所有部分。這些部分在您的系統上將是相同的,但我找不到明確列出這些部分的手冊頁。

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