Linux中locate命令的實踐總結


locate 讓使用者可以很快速的搜尋檔案系統內是否有指定的檔案。其方法是先建立一個包括系統內所有檔案名稱及路徑的數據庫,之后當尋找時就只需查詢這個數據庫,而不必實際深入檔案系統之中了。在一般的 distribution 之中,數據庫的建立都被放在 crontab 中自動執行。

ps1:Linux distribution表示Linux發行版。其實Linux是指的系統的內核,不能認為是一個系統。有人在內核的基礎上增加一些軟件,就成 了一個操作系統了。這個系統因為以Linux為內核,所有就叫Linux發行版。大部分人為了簡單,所以把發行版省掉了,實際上世上沒有Linux 這個操作系統,因為他只是個內核。現在出現Linux這一稱呼,實際上是Linux發行版。這是正規的說法。

ps2:crond 是linux下用來周期性的執行某種任務或等待處理某些事件的一個守護進程,與windows下的計划任務類似,當安裝完成操作系統后,默認會安裝此服務 工具,並且會自動啟動crond進程,crond進程每分鍾會定期檢查是否有要執行的任務,如果有要執行的任務,則自動執行該任務。Linux 系統上面原本就有非常多的計划性工作,因此這個系統服務是默認啟動的。另外, 由於使用者自己也可以設置計划任務,所以, Linux 系統也提供了使用者控制計划任務的命令 :crontab 命令。

Linux下的任務調度分為兩類,系統任務調度和用戶任務調度。

系統任務調度:系統周期性所要執行的工作,比如寫緩存數據到硬盤、日志清理等。在/etc目錄下有一個crontab文件,這個就是系統任務調度的配置文件。

1.命令格式:

Locate [選擇參數] [樣式]

2.命令功能:

locate 命令可以在搜尋數據庫時快速找到檔案,數據庫由updatedb程序來更新,updatedb是由cron daemon周期性建立的,locate命令 在搜尋數據庫時比由整個由硬盤資料來搜尋資料來得快,但較差勁的是locate所找到的檔案若是最近才建立或 剛更名的,可能會找不到,在內定值 中,updatedb每天會跑一次,可以由修改crontab來更新設定值。(etc/crontab)

locate 指定用在搜尋符合條件的檔案,它會去儲存檔案與目錄名稱的數據庫內,尋找合乎范本樣式條件的檔案或目錄錄,可以使用特殊字元(如”*” 或”?”等)來指 定范本樣式,如指定范本為kcpa*ner, locate會找出所有起始字串為kcpa且結尾為ner的檔案或目錄,如名稱為kcpartner若目錄 錄名稱為kcpa_ner則會列出該目錄下包括 子目錄在內的所有檔案。

locate 指令和find找尋檔案的功能類似,但locate是透過update程序將硬盤中的所有檔案和目錄資料先建立一個索引數據庫,在 執行loacte時直 接找該索引,查詢速度會較快,索引數據庫一般是由操作系統管理,但也可以直接下達update強迫系統立即修改索引數據庫。

ps1:updatedb命令用來創建或更新slocate命令所必需的數據庫文件。updatedb命令的執行過程較長,因為在執行時它會遍歷整個系統的目錄樹,並將所有的文件信息寫入slocate數據庫文件中

補充說明:slocate本身具有一個數據庫,里面存放了系統中文件與目錄的相關信息。

updatedb命令用來創建或更新slocate命令所必需的數據庫文件。updatedb命令的執行過程較長,因為在執行時它會遍歷整個系統的目錄樹,並將所有的文件信息寫入slocate數據庫文件中。

來自: http://man.linuxde.net/updatedb

3.命令參數:

-e   將排除在尋找的范圍之外。

-1  如果 是 1.則啟動安全模式。在安全模式下,使用者不會看到權限無法看到 的檔案。這會始速度減慢,因為 locate 必須至實際的檔案系統中取得檔案的 權限資料。

-f   將特定的檔案系統排除在外,例如我們沒有到理要把 proc 檔案系統中的檔案 放在資料庫中。

-q  安靜模式,不會顯示任何錯誤訊息。

-n 至多顯示 n個輸出。

-r 使用正規運算式 做尋找的條件。

-o 指定資料庫存的名稱。

-d 指定資料庫的路徑

-h 顯示輔助訊息

-V 顯示程式的版本訊息

4.使用實例:

實例1:查找和android相關的所有文件,並且只顯示前5個

命令:

location android -n 5

 

 輸出:

1 aijian.shi@U-aijian-shi:~$ locate android -n 5
2 /data/nishome/tdsw1/aijian.shi/.android
3 /data/nishome/tdsw1/aijian.shi/.android/adbkey
4 /data/nishome/tdsw1/aijian.shi/.android/adbkey.pub
5 /data/nishome/tdsw1/aijian.shi/.cache/software-center/icons/android-user-es-06-icon-001-001_Portada_AU06x64.png
6 /data/nishome/tdsw1/aijian.shi/.cache/software-center/icons/android-user-es-07-icon-icon_AU07.png
7 aijian.shi@U-aijian-shi:~$ 

 實例2: 搜索alm的bin目錄下所有以i/I開頭的文件

命令:

locate ~/alm/bin/I* -i   #-i表示不區分大小寫

輸出:

1 aijian.shi@U-aijian-shi:~$ locate ~/alm/bin/I* -i
2 /data/nishome/tdsw1/aijian.shi/alm/bin/IntegrityClient
3 /data/nishome/tdsw1/aijian.shi/alm/bin/IntegrityClient.lax
4 /data/nishome/tdsw1/aijian.shi/alm/bin/ident
5 /data/nishome/tdsw1/aijian.shi/alm/bin/im
6 /data/nishome/tdsw1/aijian.shi/alm/bin/integrity
7 aijian.shi@U-aijian-shi:~$ 

*在shell中表示通配符,表示零個或多個字符。 比如當前目錄下有abc.c、abdd.c、abeff.c。可以用ls ab*.c來查看

注意

ps:

Linux手動更新locate數據庫命令:

updatedb

 

輸出:

1 aijian.shi@U-aijian-shi:~/Downloads$ updatedb
2 updatedb: can not open a temporary file for `/var/lib/mlocate/mlocate.db'
3 aijian.shi@U-aijian-shi:~/Downloads$ 
4 aijian.shi@U-aijian-shi:~/Downloads$ sudo updatedb  #開啟updatedb手動更新數據庫權限
5 [sudo] password for aijian.shi: 
6 aijian.shi@U-aijian-shi:~/Downloads$ 

可以看到,我的linux機器沒有sudo權限,所以無法手動更新數據庫。

 

 

 

locate 讓使用者可以很快速的搜尋檔案系統內是否有指定的檔案。
其方法是先建立一個包括系統內所有檔案名稱及路徑的數據庫,之后當尋找時就只需查詢這個數據庫,而不必實際深入檔案系統之中了。 總結: 1. locate的速度比find快,因為它並不是真的查找文件,而是查數據庫 2. locate的查找並不是實時的,而是以數據庫的更新為准,一般是系統自己維護
3. 升級數據庫命令:locate -- u(不明白這一步的操作意義和效果)
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM