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

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

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

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

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

    locate 命令的基本信息如下。

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

    命令格式

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

    常見用法

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

    locate配置文件

    我們再做一個實驗,看看這是什么原因?qū)е碌摹?br />     [root@localhost ~]# touch /tmp/lmls
    #在/tmp/目錄下新建立一個文件
    [root@localhost ~]# updatedb
    #更新locat數(shù)據(jù)庫
    [root@localhost ~]# locate lmls
    #依然查詢不到lmls這個新建文件
    新建立了 /tmp/lmls 文件,而且也執(zhí)行了 updatedb 命令,卻依然無法找到這個文件,這是什么原因?這就要來看看 located 配置文件 /etc/updatedb.conf了。
    [root@localhost ~]#vi /etc/updatedb.conf
    PRUNE_BIND_MOUNTS = "yes"
    #開啟搜索機制,也就是讓這個配置文件生效
    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í)行搜索時,禁止搜索這些文件系統(tǒng)類型PRUNENAMES = ".git.hg.svn"
    #在locate執(zhí)行搜索時,禁止搜索帶有這些擴(kuò)展名的文件PRUNEPATHS = "/afs /media /net /sfs /tmp /udev /var/cache/ccache /var/spod/cups /var/spool/squid /var/tmp"#在locat執(zhí)行搜索時,禁止搜索這些系統(tǒng)目錄
    在 locate 執(zhí)行搜索時,系統(tǒng)認(rèn)為某些文件系統(tǒng)、某些文件類型和某些目錄是沒有搜索必要的,比如光盤、網(wǎng)盤、臨時目錄等,這些內(nèi)容要么不在 Linux 系統(tǒng)中,是外來存儲和網(wǎng)絡(luò)存儲,要么是系統(tǒng)的緩存和臨時文件。剛好 /tmp/ 目錄也在 locate 搜索的排除目錄當(dāng)中,所以在 /tmp/ 目錄下新建的文件是無法被找到的。
linux培訓(xùn)
0 分享到:
和我們在線交談!