為什麼'locate'或'find'找不到'makeinfo'?

為什麼'locate'或'find'找不到'makeinfo'?

當我做:

locate makeinfo

或者

find / -name "*makeinfo*"

我什麼也沒得到。

但是當我這樣做時makeinfo --help,它會給我正確的幫助輸出。

這怎麼可能?如果makeinfo是可執行文件,則必須位於某處, 正確的?或者它可以是別名,但事實並非如此。我檢查了.bashrc以及.bash_aliases所有這些文件。我無法想像這是怎麼發生的。

這種奇怪行為的原因是什麼?

編輯:type makeinfo並且which makeinfo都輸出/usr/bin/makeinfo.

答案1

我發現了問題。

看起來速度locate很快,因為它依賴它建立的資料庫來更快地搜尋內容。該資料庫每天更新。該updatedb命令執行此操作。事實證明,updatedb每 24 小時運行一次,而當我嘗試使用 , 搜尋文件時locate,從文件創建之日起,24 小時還沒有過去。運行後sudo updatedb,locate 能夠找到該檔案。

locate我建議閱讀和的線上幫助頁updatedb以獲取更多資訊。

至於find,我似乎很不耐煩,沒有等到它執行完畢。

答案2

我不太使用或了解“locate(1)”。但是“find(1)”可能無法找到您的命令,因為它預設不會跨檔案系統行。 makeinfo 指令可能位於 /usr/bin 中(鍵入which makeinfo即可找到它),而「/usr」分割區可能位於另一個檔案系統上。

編輯: 哦!我看到問題了!不要使用“*makeinfo*”。使用“makeinfo”。如果您確實想查找其中某處包含字串“makeinfo”的文件,請使用:find / -type f -name '*makeinfo*'。也就是說,僅與文件(而不是目錄——更快)進行比較,並使用單引號,而不是雙引號。

最終編輯:我的答案是/way/off。他的問題與雙引號無關。

相關內容