linux命令locate簡(jiǎn)介以及上述問(wèn)題的解決
命令簡(jiǎn)介
locate(locate) 命令用來(lái)查找文件或目錄唤冈。 locate命令要比f(wàn)ind -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í)是由四部分組成的:
- /usr/bin/updatedb 主要用來(lái)更新數(shù)據(jù)庫(kù)缘薛,通過(guò)crontab自動(dòng)完成的
- /usr/bin/locate 查詢文件位置
- /etc/updatedb.conf updatedb的配置文件
- /var/lib/mlocate/mlocate.db 存放文件信息的文件
示例1: 搜索etc目錄下所有以my開(kāi)頭的文件
[root@]# locate /etc/my
/etc/my.cnf
示例2:新增的文件無(wú)法locate,使用updatedb
[root@]# touch new.txt
[root@]# locate new.txt
[root@]# updatedb
[root@]# locate new.txt
/root/new.txt
示例3:updatedb的配置文件/etc/updatedb.conf
[root@]# cat /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 fusectl gfs gfs2 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 /net /sfs /tmp /udev /var/cache/ccache /var/spool/cups /var/spool/squid /var/tmp"
第一行PRUNE_BIND_MOUNTS="yes"的意思是:是否進(jìn)行限制搜索卡睦。
第二行是排除檢索的文件系統(tǒng)類型宴胧,即列出的文件系統(tǒng)類型不進(jìn)行檢索。
第二行表示對(duì)哪些后綴的文件排除檢索表锻,也就是列在這里面的后綴的文件跳過(guò)不進(jìn)行檢索恕齐。不同后綴之間用空格隔開(kāi)。
第四行是排除檢索的路徑瞬逊,即列出的路徑下的文件和子文件夾均跳過(guò)不進(jìn)行檢索檐迟。updatedb之后使用locate仍然找不到想要文件,可以檢查掛載的目錄是否被忽略了
mlocate.db文件過(guò)大解決辦法
系統(tǒng)掛在較多節(jié)點(diǎn),或者產(chǎn)生海量的碎片文件码耐,到locate一直在檢索,mlocate.db文件越來(lái)越大溶其。
解決方案骚腥,修改/etc/updatedb.conf ,如上述的示例3.
在PRUNEPATHS 參數(shù)后面增加不需要進(jìn)行l(wèi)ocate的目錄瓶逃,修改完成后執(zhí)行
[root@]# sudo pkill updatedb.mlocate
[root@]# updatedb
mlocate.db 會(huì)明顯減少束铭。
更為長(zhǎng)久的解決辦法(方法2)
1. 清理自動(dòng)安裝但不再使用的軟件
使用以下命令
sudo apt-get clean
sudo apt-get autoremove
autoremove的作用是卸載所有自動(dòng)安裝且不再使用的軟件包廓块。
autoremove這種方式容易將必要的軟件刪除掉,盡量不要使用契沫。
2. 使用軟鏈接指向富足的空間區(qū)塊
首先了解下Linux鏈接的概念带猴。
鏈接是為某一個(gè)文件在另外一個(gè)位置建立一個(gè)不同的鏈接,分為硬鏈接和軟鏈接懈万。
Linux軟鏈接:它只會(huì)在你選定的位置上生成一個(gè)文件的鏡像拴清,不會(huì)占用磁盤(pán)空間,命令:ln -s xxx
Linux硬鏈接:它會(huì)在你選定的位置上生成一個(gè)和源文件大小相同的文件会通,命令:ln xxx
無(wú)論是軟鏈接還是硬鏈接口予,文件都保持同步變化。
因此涕侈,使用軟鏈接可以將/var目錄下占用空間較大的目錄移動(dòng)到富足的空間區(qū)塊(如/home)下沪停,使得/var下不再占用空間。
具體實(shí)現(xiàn)(www目錄為例):
mv /var/www /home #將var下的www目錄移動(dòng)到home或者其他空間富足的區(qū)塊中
ln -s /home/www /var #/var/www指向/home/www裳涛,這樣www目錄將不再占用/var目錄的空間
3. 未單獨(dú)分區(qū)情況
如果/var沒(méi)有單獨(dú)分區(qū)木张,則系統(tǒng)默認(rèn)共享使用/home目錄,若此時(shí)提示/var空間不足端三,則說(shuō)明/home空間不足舷礼,這種情況可以清理一下/home目錄或者重新安裝系統(tǒng),重新規(guī)劃分區(qū)結(jié)構(gòu)技肩,當(dāng)然使用軟鏈接方式也是可以的且轨,只要還有其他空間富足的區(qū)塊。