首頁 > 軟體

Linux檔案查詢命令(locate/find)

2020-06-16 17:09:55

在用linux作業系統的時候,當我們忘記之前某個檔案儲存的位置,但是知道其檔名或者模糊的知道其檔名,我們都可以通過檔案查詢工具來查詢,linux提供兩種常用的查詢工具,locate和find,在日常使用中後者比前者較前者功能更強大更具有實時性,下面我們就這兩種工具來談一談她們的使用方法。

Locate

locate是基於實現構建好的索引庫(索引庫可以理解成檔案路徑的集合),索引庫的位置放在/var/lib/mlocate/mlocate.db檔案裡面,系統一般一天會自動更新一次,也可以使用updatedb手動更新,要注意的是,索引庫的構建過程需要遍歷整個檔案系統,非常消耗系統資源。

locate的特點是查詢的速度快,比find快很多,因為它只在查詢索引庫,而find會遍歷整個檔案系統的路徑。快的好處自然也給locate帶來的缺點,就是它並非是實時查詢,意思就是你如果剛剛建立了一個檔案,但是你忘記了其路徑,只記得其名稱,那麼這個時候就不建議使用locate,因為索引資料庫沒有更新,你使用locate查不到,除非你走運,定期更新的時間剛好在建立檔案完檔案之後,locate在匹配檔名的時候是模糊匹配。

下面我們就來介紹一下locate的用法:

locate

NAME:通過檔名查詢檔案
SYNOPSIS:locate [OPTION]... PATTERN...
-b:只匹配路徑中的基名;
-c:輸出符合條件檔案的數目
-r:使用基本正規表示式
--regex:使用擴充套件正規表示式
-i:忽略大小寫
-q:安靜模式,不會有任何輸出

舉例1:查詢含有"passwd"的檔名

[root@localhost ~]# locate  passwd
/etc/passwd
/etc/passwd-
/etc/pam.d/passwd
/etc/security/opasswd
/usr/bin/gpasswd
/usr/bin/grub2-mkpasswd-pbkdf2
......(省略)
/usr/share/doc/passwd-0.79/AUTHORS
/usr/share/doc/passwd-0.79/COPYING
/usr/share/doc/passwd-0.79/ChangeLog
/usr/share/doc/passwd-0.79/NEWS
/usr/share/vim/vim74/ftplugin/passwd.vim
/usr/share/vim/vim74/syntax/passwd.vim

我們會發現,非基名中存在passwd也會被匹配出來,我們可以使用"-b"選項來匹配:

[root@localhost ~]# locate -b  passwd
/etc/passwd
/etc/passwd-
/etc/pam.d/passwd
/etc/security/opasswd
/usr/bin/gpasswd
/usr/bin/grub2-mkpasswd-pbkdf2
/usr/bin/kdepasswd
/usr/bin/kpasswd
/usr/bin/lppasswd
/usr/bin/passwd
/usr/bin/vncpasswd
......
/usr/share/man/zh_CN/man8/chpasswd.8.gz
/usr/share/man/zh_CN/man8/smbpasswd.8.gz
/usr/share/man/zh_TW/man8/chpasswd.8.gz
/usr/share/ruby/webrick/httpauth/htpasswd.rb
/usr/share/vim/vim74/ftplugin/passwd.vim
/usr/share/vim/vim74/syntax/passwd.vim
 
看輸出的顯示結果,只有基名中含有"passwd"的才會被匹配
舉例2:查詢只有基名中含有"passwd"的檔名的數目
[root@localhost ~]# locate -bc  passwd
155

 舉例3:查詢基名中只有"passwd"檔案的檔案

[root@localhost ~]# locate -br "<passwd$"
/etc/passwd
/etc/pam.d/passwd
/usr/bin/passwd
/usr/share/bash-completion/completions/passwd

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:表示是否限制搜尋

PRUNEFS:所列的檔案系統,查詢的時候不進行查詢

PRUNENAMES:所列的字尾名不進行查詢

PRUNEPATHS:所列的檔案路徑下的檔案不進行查詢


IT145.com E-mail:sddin#qq.com