2012年3月12日 星期一

which、whereis、locate、find功能區分

which、whereis、locate跟find這四個都是查詢的指令。
which是找指令,所以它只會到$PATH環境變數設定下的路徑去尋找。

whereis跟locate是找檔案,但是這兩個指令並非直接在硬碟上做搜尋,而是尋找已經建立好的「/var/lib/slocate.db」的資料庫做搜尋。可以直接下updatedb更新資料庫,或是在/etc/cron.daily/slocate.cron設定更新排程。linux剛安裝好時資料庫尚未建立,若是沒有執行updatedb的動作的話,locate指令是找不到任何資料。此外whereis只會找到名稱完全符合的檔案,locate則會找出含有搜尋字串的檔案。find就很花時間,會整個硬諜搜尋檔案,因此也很傷硬諜。

========================================================

find
這個算是功能最多的指令,可以用依檔名、擁有者、群組和權限...等等一堆來搜尋檔案,不過,find 指令是一定要指定搜尋的路徑,否則就只有搜尋目前所在的資料夾,例如,阿舍在家目錄用 find hosts 的指令來搜尋 hosts 檔的話,就一定找不到東西,如果改用 find /etc hosts 的話,就會出現一堆檔案名稱裡有 hosts 這個四個字的所有檔案出來,如果再改成 sudo find /etc -name hosts 就會找出更接近我們要找的檔案列表出來的。

locate
這個指令和其他三個指令不同的地方是,locate 指令並不是宜的去搜尋檔案,而是去搜尋由 updatedb 指令所建立和更新的資料庫並讀入記憶體中,所以,locate 指令的搜尋速度遠比其他的指令來的快,因此,當阿舍執行 locate hosts 指令後,幾乎是馬上就列出檔案名稱裡有 hosts 這個四個字的所有檔案出來哩 ! 不過,通常優點都是來自弱點,只要是安裝之後,在還沒有執行updatedb 之前,這些新的檔案用 locate 指令是找不到的。

whereis
這個指令只會搜尋幾個特定的路徑,像是 /usr、/bin 或 /etc 等,適合用來搜尋 Ubuntu 的執行檔和原始檔及 man 說明,如果用 whereis host 來搜尋 host 檔,就能夠找出需要的結果,如果用來搜尋家目錄的檔案,就會找不到的。

which
這個指令搜尋的範圍比前一個的 whereis 更小,which 指令只用來搜尋 Ubuntu/Linux 的指令程式,如果,阿舍用 which hosts 的指令來找 hosts 的話,很抱歉喔 ! 一定是找不到的,因為 hosts 不是指令,那麼如果阿舍改成 which which 或 which php5 的話,馬上就會有結果跑出來,因為 which 和 php5 都是指令哩 !

這樣整理下來,阿舍的結論是,要快就用 locate,要準就用 find,要查系統檔案就用 whereis,要查指令就用 which,怕麻煩的話,就只要好好學會 find 指令就可以了。

=========================================================

資料出處:

2012年3月11日 星期日

沒有man指令可用怎麼辦?

manpages contains only the man(ual) pages for various system functions.

The reader, man, should be in /usr/bin/ (as a symbolic link to /usr/lib/man-db/man).

If it's not, install it with sudo apt-get install man-db

=========================================

今天發現,系統裡雖然有最新版manpage存在,但用man指令卻出現 bash: man: command not found

使用
which man => 沒東西

whereis man => 有列出幾個資料夾:/usr/local/man /usr/share/man
進去看,前面的那個裡面是空的,後面那個裡面一堆東西,可是沒有名子就叫"man"的檔案(否則which也 會發現巴)

echo $PATH => 感覺沒問題,都有包含到上面的目錄

在目錄下雙擊tab列出所有指令 => 發現...根本沒有man這個指令...Orz

正在丈二金剛摸不著頭,google了半天,終於發現了上面的解答
原來manpages是文件們,man這個指令則是一個reader,我找不到man就是reader沒裝
所以照著解答:

apt-get install man-db


man is back!

花了好久時間理解,算是第一次自己解決自己在linux上碰到的難題

keyword: Where is the man command?