教育行業(yè)A股IPO第一股(股票代碼 003032)

全國咨詢/投訴熱線:400-618-4000

Linux培訓(xùn):利用locate按照文件名搜索文件

更新時(shí)間:2019年04月03日09時(shí)46分 來源:傳智播客linux培訓(xùn) 瀏覽次數(shù):

    whereis 和 which 命令都是只能搜索系統(tǒng)命令的命令,而 locate 命令才是可以按照文件名搜索普通文件的命令。
    但是 locate 命令的局限也很明顯,它只能按照文件名來搜索文件,而不能執(zhí)行更復(fù)雜的搜索,比如按照權(quán)限、大小、修改時(shí)間等搜索文件。如果要按照復(fù)雜條件執(zhí)行搜索,則只能求助于功能更加強(qiáng)大的 find 命令。locate 命令的優(yōu)點(diǎn)鮮常明顯,那就是搜索速度非??欤液馁M(fèi)系統(tǒng)資源非常小。這是因?yàn)?locate 命令不會(huì)直接搜索硬盤空間,而會(huì)先建立 locate 數(shù)據(jù)庫,然后在數(shù)據(jù)庫中按照文件名進(jìn)行搜索,是快速的搜索命令。
》》》傳智播客linux培訓(xùn)班,帶你從新手到大神,咨詢右下角窗口咨詢開班時(shí)間《《《
傳智播客linux培訓(xùn)

    locate 命令的基本信息如下。

    命令名稱:locate。
    英文原意:find files by name。
    所在路徑:/usr/bin/locate。
    執(zhí)行權(quán)限:所有用戶。
    功能描述:按照文件名搜索文件。

    命令格式

    locate 命令只能按照文件名來進(jìn)行搜索,所以使用比較簡單。
    [root@localhost ~]# locate [選項(xiàng)] 文件名
    選項(xiàng):
    -i:忽略大小寫

    常見用法

    【例 1】基本用法。
    搜索 Linux 的安裝日志。
    [root@localhost ~]# locate install.log
    /root/install.log
    /root/install.log.syslog
    #搜索文件名叫install.log的文件
    系統(tǒng)命令其實(shí)也是文件,也可以按照文件名來搜索系統(tǒng)命令。
    [root@localhost ~]# locate mkdir
    /bin/mkdir
    /usr/bin/gnomevfs-mkdir
    /usr/lib/perl5/auto/POSIX/mkdir.al
    …省略部分內(nèi)容...
    #會(huì)搜索出所有含有mkdir字符串的文件名,當(dāng)然也包含mkdir命令【例 2】locate 命令的數(shù)據(jù)庫。
    我們?cè)谑褂?locate 命令的時(shí)候,可能會(huì)發(fā)現(xiàn)一個(gè)問題:如果我們新建立一個(gè)文件,那么 locate 命令找不到這個(gè)文件。例如:
    [root@localhost ~]# touch cangls
    [root@localhost ~]# locate cangls
    #新建立的文件,locate命令找不到
    這是因?yàn)?locate 命令不會(huì)直接搜索硬盤空間,而會(huì)搜索 locate 數(shù)據(jù)庫。這樣做的好處是耗費(fèi)系統(tǒng)資源小、搜索速度快;缺點(diǎn)是不是實(shí)時(shí)更新的,而要等用戶退出登錄或重啟系統(tǒng)時(shí),locate 數(shù)據(jù)庫才會(huì)更新,所以我們無法查找到新建立的文件。
    既然如此,locate 命令的數(shù)據(jù)庫在哪里呢?
    [root@localhost ~]#ll /var/lib/mlocate/mlocate.db-rw-r----- 1 root slocate 2328027 6月 14 02:08/var/lib/ mlocate/mlocate.db#這是 locate 命令實(shí)際搜索的數(shù)據(jù)庫的位置
    這個(gè)數(shù)據(jù)庫是二進(jìn)制文件,不能直接使用 Vim 等編輯器査看,而只能使用對(duì)應(yīng)的 locate 命令進(jìn)行搜索。如果我們不想退出登錄或重啟系統(tǒng),則也可以通過 updatedb 命令來手工更新這個(gè)數(shù)據(jù)。例如:
    [root@localhost ~]# locate cangls
    #沒有更新數(shù)據(jù)庫時(shí),找不到cangls文件
    [root@localhost ~]# updatedb
    #更新數(shù)據(jù)庫[root@localhost ~]# locate cangls/root/cangls
    #新建立的文件已經(jīng)可以搜索到了

    locate配置文件

    我們?cè)僮鲆粋€(gè)實(shí)驗(yàn),看看這是什么原因?qū)е碌摹?br />     [root@localhost ~]# touch /tmp/lmls
    #在/tmp/目錄下新建立一個(gè)文件
    [root@localhost ~]# updatedb
    #更新locat數(shù)據(jù)庫
    [root@localhost ~]# locate lmls
    #依然查詢不到lmls這個(gè)新建文件
    新建立了 /tmp/lmls 文件,而且也執(zhí)行了 updatedb 命令,卻依然無法找到這個(gè)文件,這是什么原因?這就要來看看 located 配置文件 /etc/updatedb.conf了。
    [root@localhost ~]#vi /etc/updatedb.conf
    PRUNE_BIND_MOUNTS = "yes"
    #開啟搜索機(jī)制,也就是讓這個(gè)配置文件生效
    PRUNEFS = "9p afs anonjnodefs auto autofs bdev binfmt_misc cgroup cifs codaconfigfs cpuset debugfs devpts ecryptfs exofe fuse fusectl gfs gfe2 hugetlbfsinotifyfs iso9660 jffs2 lustre mqueue ncpfs nfe nfs4 nfsd pipefe proc ramfs rootfsrpc_pipefs securityfs selinuxfs sfs sockfs sysfs tmpfs ubifs udf usbfs"#在local執(zhí)行搜索時(shí),禁止搜索這些文件系統(tǒng)類型PRUNENAMES = ".git.hg.svn"
    #在locate執(zhí)行搜索時(shí),禁止搜索帶有這些擴(kuò)展名的文件PRUNEPATHS = "/afs /media /net /sfs /tmp /udev /var/cache/ccache /var/spod/cups /var/spool/squid /var/tmp"#在locat執(zhí)行搜索時(shí),禁止搜索這些系統(tǒng)目錄
    在 locate 執(zhí)行搜索時(shí),系統(tǒng)認(rèn)為某些文件系統(tǒng)、某些文件類型和某些目錄是沒有搜索必要的,比如光盤、網(wǎng)盤、臨時(shí)目錄等,這些內(nèi)容要么不在 Linux 系統(tǒng)中,是外來存儲(chǔ)和網(wǎng)絡(luò)存儲(chǔ),要么是系統(tǒng)的緩存和臨時(shí)文件。剛好 /tmp/ 目錄也在 locate 搜索的排除目錄當(dāng)中,所以在 /tmp/ 目錄下新建的文件是無法被找到的。
linux培訓(xùn)
0 分享到:
和我們?cè)诰€交談!