溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Linux系統(tǒng)locate命令的使用方法是什么

發(fā)布時(shí)間:2022-01-26 11:27:23 來(lái)源:億速云 閱讀:357 作者:柒染 欄目:開(kāi)發(fā)技術(shù)

小編今天帶大家了解Linux系統(tǒng)locate命令的使用方法是什么,文中知識(shí)點(diǎn)介紹的非常詳細(xì)。覺(jué)得有幫助的朋友可以跟著小編一起瀏覽文章的內(nèi)容,希望能夠幫助更多想解決這個(gè)問(wèn)題的朋友找到問(wèn)題的答案,下面跟著小編一起深入學(xué)習(xí)“Linux系統(tǒng)locate命令的使用方法是什么”的知識(shí)吧。

1.1 簡(jiǎn)述

locate命令用于查找文件或目錄。locate命令要比find -name快得多,原因在于它不搜索具體目錄,而是搜索一個(gè)數(shù)據(jù)庫(kù)/var/lib/mlocate/mlocate.db。這個(gè)數(shù)據(jù)庫(kù)中含有本地所有文件信息。Linux系統(tǒng)自動(dòng)創(chuàng)建這個(gè)數(shù)據(jù)庫(kù),并且每天自動(dòng)更新一次。因此,我們?cè)谟脀hereis 和 locate查找文件時(shí),有時(shí)會(huì)找到已經(jīng)被刪除的數(shù)據(jù);或者剛剛建立的文件,卻無(wú)法查找到,原因就是因?yàn)閿?shù)據(jù)庫(kù)文件沒(méi)有被更新。為了避免這種情況,可以在使用locate之前,先使用updatedb命令,手動(dòng)更新數(shù)據(jù)庫(kù)。整個(gè)locate工作其實(shí)是由4部分組成的:

  • /usr/bin/updatedb: 主要用來(lái)更新數(shù)據(jù)庫(kù),通過(guò)crontab自動(dòng)完成的

  • /usr/bin/locate: 查詢文件位置

  • /etc/updatedb.conf: updatedb的配置文件

  • /var/lib/mlocate/mlocate.db: 存放文件信息的文件

locate會(huì)讀取由updatedb準(zhǔn)備好的一個(gè)或多個(gè)數(shù)據(jù)庫(kù),然后將滿足匹配PATTERN的文件寫(xiě)到標(biāo)準(zhǔn)輸出,每行一個(gè)文件名。假如并未指定--regex選項(xiàng),則PATTERN可以包含通配符。假如PATTERN中并未包含任何通配符,則locate命令以*PATTERN*模式進(jìn)行查找。

默認(rèn)情況下,locate命令并不會(huì)檢查數(shù)據(jù)庫(kù)中的文件是否仍然存在,也不會(huì)報(bào)告在上一次更新數(shù)據(jù)庫(kù)之后產(chǎn)生的文件。

1.2 用法

 locate [OPTION]... [PATTERN]...

1.3 選項(xiàng)

 -A, --all               打印所有匹配PATTERNs的文件 -b, --basename          只名稱與PATTERNs匹配的文件(例如/test/test.txt,則basename為test.txt) -c, --count             只打印匹配到的文件數(shù)目,而不是文件名本身 -d, --database DBPATH   用DBPATH來(lái)代替默認(rèn)的數(shù)據(jù)庫(kù)。DBPATH是一個(gè)以:(冒號(hào))分割的數(shù)據(jù)庫(kù)名稱列表 -e, --existing          只打印在調(diào)用locate時(shí)存在的文件 -L, --follow            當(dāng)和-e選項(xiàng)一起使用時(shí),如果該文件是一個(gè)軟鏈接文件,則會(huì)獲取到該軟鏈接對(duì)應(yīng)的實(shí)際文件(此為locate命令默認(rèn)行文)。 -h, --help              打印幫助文檔信息 -i, --ignore-case       當(dāng)進(jìn)行文件模式匹配時(shí),忽略大小寫(xiě) -l, --limit, -n LIMIT   當(dāng)成功匹配到LIMIT數(shù)量的文件時(shí),退出 -P, --nofollow, -H      當(dāng)和-e選項(xiàng)一起使用時(shí),如果該文件是一個(gè)軟鏈接文件,此時(shí)不跟隨鏈接的實(shí)際文件 -0, --null              輸出時(shí)以ASCII NUL作為分隔符 -S, --statistics        獲得每一個(gè)搜索數(shù)據(jù)庫(kù)的統(tǒng)計(jì)信息 -q, --quiet             當(dāng)在讀取和處理數(shù)據(jù)庫(kù)時(shí),遇到錯(cuò)誤也不打印相關(guān)信息 -r, --regexp REGEXP     查找一個(gè)基本的模式匹配REGEXP。此選項(xiàng)情況下,不能出現(xiàn)PATTERNs -V, --version           打印locate的版本信息和license信息 -w, --wholename         匹配完整路徑名(默認(rèn))

例如查找一個(gè)文件名稱為NAME(并不是*NAME*)的文件,可以使用如下:

 # locate -b '\NAME'

應(yīng)為\本身是一個(gè)通配字符,因此這里會(huì)禁止隱式的轉(zhuǎn)化為*NAME*.

1.4 使用范例

1) 搜索目錄下所有以sh開(kāi)頭的文件

 # locate /etc/sh /etc/shadow /etc/shadow- /etc/shells

2) 包含某個(gè)字符串的相關(guān)文件

 # locate passwd /etc/passwd /etc/passwd- /etc/pam.d/passwd /etc/security/opasswd /usr/bin/gpasswd /usr/bin/grub2-mkpasswd-pbkdf2 /usr/bin/kpasswd /usr/bin/lppasswd /usr/bin/passwd /usr/bin/smbpasswd ....

3) 限定顯示數(shù)量

如果顯示的內(nèi)容過(guò)多,可以使用-n選項(xiàng)來(lái)限定顯示數(shù)量。

 # locate -n 5 passwd /etc/passwd /etc/passwd- /etc/pam.d/passwd /etc/security/opasswd /usr/bin/gpasswd

4) 使用正則表達(dá)式

當(dāng)需要查找符合特定規(guī)則的信息時(shí),可以使用-r選項(xiàng)匹配相應(yīng)的正則表達(dá)式

 //查找以 /var/lib/rpm 開(kāi)頭的文件 # locate -r ^/var/lib/rpm /var/lib/rpm /var/lib/rpm-state /var/lib/rpm/.dbenv.lock /var/lib/rpm/.rpm.lock .... 
 
 //查找以 zip 結(jié)尾的文件 # locate -r zip$ /usr/bin/funzip /usr/bin/gpg-zip /usr/bin/gunzip /usr/bin/gzip /usr/bin/mzip /usr/bin/unzip /usr/bin/zip /usr/lib64/libreoffice/share/config/images.zip /usr/lib64/libreoffice/share/config/images_crystal.zip ....

5) 判斷某一目錄下的文件是否存在(軟鏈接)

 # ls ../lib | while read line; do if [ -f ../lib/$line ]; then  temp="$(locate "$line")"; if [ -n "$temp" ]; then  echo $line; fi fi done

1.5 updatedb的配置文件/etc/updatedb.conf

 PRUNE_BIND_MOUNTS = "yes" PRUNEFS = "9p afs anon_inodefs auto autofs bdev binfmt_misc cgroup cifs coda configfs cpuset debugfs devpts ecryptfs exofs fuse fuse.sshfs fusectl gfs gfs2 gpfs  hugetlbfs inotifyfs iso9660 jffs2 lustre mqueue ncpfs nfs nfs4 nfsd pipefs proc ramfs rootfs rpc_pipefs securityfs selinuxfs sfs sockfs sysfs tmpfs ubifs udf usbfs" PRUNENAMES = ".git .hg .svn" PRUNEPATHS = "/afs /media /mnt /net /sfs /tmp /udev /var/cache/ccache /var/lib/yum/yumdb /var/spool/cups /var/spool/squid /var/tmp"
  • PRUNE_BIND_MOUNTS: 表示是否進(jìn)行限制搜索

  • PRUNEFS: 表示排除檢索的文件系統(tǒng)類型

  • PRUNENAME: 表示排除檢索的文件類型

  • PRUNEPATHS: 表示排除檢索的文件目錄

感謝大家的閱讀,以上就是“Linux系統(tǒng)locate命令的使用方法是什么”的全部?jī)?nèi)容了,學(xué)會(huì)的朋友趕緊操作起來(lái)吧。相信億速云小編一定會(huì)給大家?guī)?lái)更優(yōu)質(zhì)的文章。謝謝大家對(duì)億速云網(wǎng)站的支持!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI