Linux 命令(92)—— locate 命令

1.命令簡介

locate 命令用於查看文件。

如果沒有指定 ——regex,匹配模式可以包含通配符(globbing characters)。如果模式不包含通配符,則模式等價於 *PATTERN*

作用類似於 find 命令,但是比 find 要快,因爲 locate 不像 find 那樣全磁盤搜索,而是從由 updatedb 命令維護的數據庫(一般爲 /var/lib/mlocate/mlocate.db)中進行查找。默認情況下,locate 不會檢查從數據庫中找到的文件是否仍然存在,也無法找到在數據庫最近更新之後創建的文件,因爲數據庫的更新有時延。爲了避免這種情況,可以在使用 locate 之前,先使用 updatedb 命令手動更新數據庫。

2.命令格式

locate [OPTION]... PATTERN...

3.選項說明

-A, --all
	只顯示匹配所有模式的條目
-b, --basename
	只匹配文件的基本名。作用與選項 --wholename 相反
-c, --count
	只輸出符合匹配模式的文件的數量
-d, --database DBPATH
	將默認數據庫替換爲 DBPATH。該選項可出現多次
-e, --existing
	只打印當前存在的文件
-L, --follow
	當檢查文件是否存在時(如果選項 --existing 指定時),檢查符號鏈接的目標文件(默認,相反的選項是 --nofollow)
-h, --help
	顯示幫助信息並退出
-i, --ignore-case
	比較時忽略大小寫
-l, --limit, -n LIMIT
	限制成功匹配的文件數爲 LIMIT
-P, --nofollow, -H
	當檢查文件是否存在時(如果選項 --existing 指定時),不檢查符號鏈接的目標文件。作用與 --follow 相反
-0, --null
	在輸出時使用 ASCII NUL 字符分隔條目,而不是將每個條目寫在單獨的行上。此選項是爲了與 GNU xargs(1)的 --null 選項配合使用而設計的
-S, --statistics
	不搜索文件,而是顯示每個數據庫的統計信息
-q, --quiet
	不報告關於讀取和處理數據庫時遇到的錯誤的消息
-r, --regexp REGEXP
	使用正則表達式 REGEXP 進行搜索。該選項可出現多次
--regex
	將所有模式解釋爲擴展的正則表達式
-V, --version
	輸出 locate 的版本和許可信息並退出
-w, --wholename
	僅將整個路徑名與指定的模式匹配(默認)。如果只匹配文件基本名,可使用選項 --basename

4.常用示例

(1)查找文件名爲 NAME 的文件。

locate -b '\NAME'

反斜槓 \ 阻止了隱式地將 NAME 轉爲 NAME

(2)查找文件名包含某個字符串的相關文件。

locate -b
/usr/sbin/ifconfig
/usr/share/man/de/man8/ifconfig.8.gz
/usr/share/man/fr/man8/ifconfig.8.gz
/usr/share/man/man8/ifconfig.8.gz
/usr/share/man/man8/ifconfig_selinux.8.gz
/usr/share/man/pt/man8/ifconfig.8.gz
/usr/share/selinux/devel/html/ifconfig.html
/usr/share/zsh/5.0.2/functions/_ifconfig

(3)查找配置文件 mlocate.db。

locate mlocate.db
/usr/share/man/man5/mlocate.db.5.gz
/var/lib/mlocate/mlocate.db

(4)顯示數據庫的統計信息。

locate -S
Database /var/lib/mlocate/mlocate.db:
	21,626 directories
	230,452 files
	15,475,136 bytes in file names
	5,711,659 bytes used to store database

(5)搜索基本正則表達式 REGEXP 來代替模式。查找名稱以 mlocate 開頭,以 db 結尾的文件。

locate -b -r ^mlocate.*db$
/var/lib/mlocate/mlocate.db

(6)查找最近變動的文件。使用 locate 命令查不到最近變動過的文件。爲了避免這種情況,可以在使用 locate 之前,先使用 updatedb 命令,手動更新數據庫。

# 無法找到新建的文件
touch new_file
locate new_file

# 手動更新數據庫後可以查到新建的文件
updatedb
locate new_file
/root/new_file

參考文獻

[1] locate manual
[2] glob(7)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章