1. locate介紹
locate
命令其實是find -name的另一種寫法,但是要比後者快得多,原因在於它不搜索具體目錄,而是搜索一個數據庫文件,這個數據庫中含有本地所有文件信息。Linux系統自動創建這個數據庫,並且每天自動更新一次,所以使用locate命令查不到最新變動過的文件。爲了避免這種情況,可以在使用locate之前,先使用updatedb
命令,手動更新數據庫。使用updatedb更新數據庫時會佔用系統的資源,特別是對特別複雜的目錄或要文件較多時,要進行更新數據時,可選擇系統空閒的時間段進行。
2. 語法
locate [選擇參數] [樣式]
3. 選項
-b, --basename # 僅匹配路徑名的基本名稱
-c, --count # 只輸出找到的數量
-d, --database DBPATH # 使用DBPATH指定的數據庫,而不是默認數據庫 /var/lib/mlocate/mlocate.db
-e, --existing # 僅打印當前現有文件的條目
-1 # 如果 是 1.則啓動安全模式。在安全模式下,使用者不會看到權限無法看到 的檔案。這會始速度減慢,因爲 locate 必須至實際的檔案系統中取得檔案的 權限資料。
-0, --null # 在輸出上帶有NUL的單獨條目
-S, --statistics # 不搜索條目,打印有關每個數據庫的統計信息
-q # 安靜模式,不會顯示任何錯誤訊息。
-P, --nofollow, -H # 檢查文件存在時不要遵循尾隨的符號鏈接
-l, --limit, -n LIMIT # 將輸出(或計數)限制爲LIMIT個條目
-n # 至多顯示 n個輸出。
-m, --mmap # 被忽略,爲了向後兼容
-r, --regexp REGEXP # 使用基本正則表達式
--regex # 使用擴展正則表達式
-q, --quiet # 安靜模式,不會顯示任何錯誤訊息
-s, --stdio # 被忽略,爲了向後兼容
-o # 指定資料庫存的名稱。
-h, --help # 顯示幫助
-i, --ignore-case # 忽略大小寫
-V, --version # 顯示版本信息
4. 實戰
4.1 查找和pwd相關的所有文件
$ locate pwd
/bin/pwd
/etc/.pwd.lock
/sbin/unix_chkpwd
/usr/bin/pwdx
/usr/include/pwd.h
/usr/lib/python2.7/dist-packages/twisted/python/fakepwd.py
/usr/lib/python2.7/dist-packages/twisted/python/fakepwd.pyc
/usr/lib/python2.7/dist-packages/twisted/python/test/test_fakepwd.py
/usr/lib/python2.7/dist-packages/twisted/python/test/test_fakepwd.pyc
/usr/lib/syslinux/pwd.c32
/usr/share/help/C/empathy/irc-join-pwd.page
/usr/share/help/ca/empathy/irc-join-pwd.page
/usr/share/help/cs/empathy/irc-join-pwd.page
/usr/share/help/de/empathy/irc-join-pwd.page
/usr/share/help/el/empathy/irc-join-pwd.page
4.2 搜索etc目錄下所有以sh開頭的文件
root ~ # locate /etc/sh
/etc/shadow
/etc/shadow-
/etc/shells
4.3 搜索剛創建的文件
$ touch new.txt
$ locate new.txt
$ updatedb
$ locate new.txt
/root/new.txt