linux 文件查找命令集:find,locate,wheres,which,type
文章目錄
- 前言
- find命令
- 命令格式:
- 常用選項(xiàng):
- 舉例使用
- locate命令
- 命令格式
- 使用實(shí)例
- whereis命令
- 使用過程:
- which命令
- type命令
前言
在linux系統(tǒng)中一切皆文件,此時(shí)我們想要從海量的文件中快速定位中我們想要的文件來,需要指定的命令來操作。以下為收集的各個(gè)命令,以及其優(yōu)劣,使用方式。
find命令
centos下:rpm包findutils-4.5.11-3.el7.x86_64
find是最常用也是最強(qiáng)大的查找命令,它可以查找任何類型的文件。
命令格式:
find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression]
常用選項(xiàng):
-name:按文件名來查找文件-user:按照文件的屬主來查找文件-group:按照文件所屬的組來查找文件-perm:按照文件權(quán)限來查找文件-prune:不在當(dāng)前指定目錄中查找
舉例使用
已知文件stdio.h存放在/usr大目錄下的多個(gè)子目錄,cd /usr目錄下
find -name "stdio.h" 表示在當(dāng)前目錄查找文件名稱為stdio.h的文件
find . -path ./include -prune -o -name "stdio.h" 在當(dāng)前目錄查及其子目錄查找名稱為stdio.h的文件,但是跳過include目錄;
這里的-o參數(shù)表示或關(guān)系,即兩者中只要有一個(gè)表達(dá)式滿足true即可輸出;
同-a和-not,-a表示只要有一個(gè)表達(dá)式不滿足則不輸出,-not表示對(duì)查找的結(jié)果進(jìn)行取反
find . -path ./include -o -name "stdio.h" -print 將匹配到的內(nèi)容文件輸出到標(biāo)準(zhǔn)輸出中
find / -user ceph 查找文件所有者為ceph的文件
find / -nouser -a -nogroup 查找系統(tǒng)中不屬于任何人,任何用戶組的文件(對(duì)于該部分文件需要保持警惕)
find /usr -mtime -4查找文件更新日時(shí)在距現(xiàn)在時(shí)刻4天以內(nèi)的文件
find /usr -mtime +4 查找文件更新日時(shí)在距現(xiàn)在時(shí)刻5天以上的文件
find /usr -mtime 4查找文件更新日時(shí)在距現(xiàn)在時(shí)刻4天以上5天以內(nèi)的文件
find / -type [c] 根據(jù)文件屬性進(jìn)行查找
其中[c]包括如下屬性:
p管道文件/run/systemd/initctl/fifobblock塊設(shè)備文件,類似與/dev/sdb磁盤盤符這種c字符設(shè)備,類似于/dev/tty63ddirectory 目錄文件fregular file 普通文件lsymbolic link 鏈接文件ssocket 套接字文件
find / -size +10M 按照文件大小進(jìn)行查找,+表示大于10M的文件,-表示小于10M的文件,同時(shí)還支持K,G,b(512B的塊大小)的單位查找
locate命令
centos下:rpm包為mlocate-0.26-5.el7.x86_64
locate命令實(shí)際是"find -name"的另一種寫法,但是查找方式跟find不同,它比find快得多。
因?yàn)樗凰阉骶唧w目錄,而是在一個(gè)數(shù)據(jù)庫(/var/lib/mlocate/mlocate.db)中搜索指定的文件。次數(shù)據(jù)庫含有本地文件的所有信息,此數(shù)據(jù)庫是linux系統(tǒng)自動(dòng)創(chuàng)建的,數(shù)據(jù)庫由updatedb程序來更新,updatedb是由cron daemon周期性建立的,默認(rèn)情況下為每天更新一次,所以用locate命令你搜索不到最新更新的文件,除非你在用locate命令查找文件之前手動(dòng)的用updatedb命令更新數(shù)據(jù)庫。
命令格式
locate [OPTION]... [PATTERN]...
主要使用的參數(shù)含義如下:
-A打印所有匹配到的文件-b精確匹配需要查找的文件,即如果文件命中包含我們要查找的則不打印-c僅打印匹配到文件個(gè)數(shù)-d --database DBPATH指定自己的文件數(shù)據(jù)庫-e打印當(dāng)前系統(tǒng)存在的想要查找的文件-i忽略匹配出來的文件的差異-m已經(jīng)被忽略了,為了向后兼容-l count 或者 -n count限制輸出的條數(shù)-r支持普通的正則匹配,類似locate -r ceph-osd.[0-9]查找ceph-osd.后面有一個(gè)數(shù)字的文件-w精確匹配,默認(rèn)不加也是精確匹配
使用實(shí)例
這里關(guān)于參數(shù)詳細(xì)的使用就不多說,以上都已經(jīng)提到
這里簡(jiǎn)單說一下locate的正則匹配,基本的正則符號(hào)參考正則符號(hào)
舉例:
locate -r ceph-osd.[0-9].log$ 查找以包含ceph-osd的字符串,且在ceph-osd.和.log之間有一個(gè)數(shù)字,且以log字符串結(jié)尾的文件
我們?cè)谑褂胠ocate的很多時(shí)候發(fā)現(xiàn)一個(gè)新的文件locate不到,關(guān)于locate命令的基本查找過程上面也已經(jīng)提到,因?yàn)閘ocate的文件獲取是從操作系統(tǒng)定時(shí)更新的數(shù)據(jù)庫中獲取,但是新的文件可能還沒有更新到數(shù)據(jù)庫(還沒有被系統(tǒng)設(shè)置的定時(shí)任務(wù)去更新數(shù)據(jù)庫),此時(shí)我們需要手動(dòng)更新以下該數(shù)據(jù)庫。
關(guān)于mlocate.db數(shù)據(jù)庫的更新任務(wù)在路徑為/etc/cron.daily/mlocate中,內(nèi)容如下
#!/bin/sh
nodevs=$(< /proc/filesystems awk '$1 == "nodev" && $2 != "rootfs" { print $2 }')
renice +19 -p $$ >/dev/null 2>&1
ionice -c2 -n7 -p $$ >/dev/null 2>&1
/usr/bin/updatedb -f "$nodevs"
我們做出如下測(cè)試
[root@node2 ~]# echo "i am a man" >test.cron
[root@node2 ~]# locate test.cro
[root@node2 ~]# updatedb 手動(dòng)跟新數(shù)據(jù)庫
[root@node2 ~]# locate test.cron 手動(dòng)更新即可發(fā)現(xiàn)我們創(chuàng)建的文件已經(jīng)存在
/root/test.cron
whereis命令
centos下的rpm包util-linux-2.23.2-26.el7.x86_64
whereis命令只能用于搜索二進(jìn)制文件(-b)、源代碼文件(-s)、說明文件(-m)。如果省略參數(shù)則返回所有的信息
使用起來也是非常簡(jiǎn)單
使用過程:
[root@node2 ~]# whereis locate
locate: /usr/bin/locate /usr/share/man/man1/locate.1.gz
[root@node2 ~]# whereis -b locate
locate: /usr/bin/locate
[root@node2 ~]# whereis -m locate
locate: /usr/share/man/man1/locate.1.gz
[root@node2 ~]# whereis -s locate
locate:[root@node2 ~]#
該命令能夠方便編譯機(jī)上的組件以及對(duì)應(yīng)源碼的查找
which命令
which命令是在PATH變量指定的路徑中搜索指定的系統(tǒng)命令的位置。用echo $PATH可顯示當(dāng)前PATH變量的值
[root@node2 ~]# echo $PATH
/usr/lib64/qt-3.3/bin:/root/perl5/bin:/b_iscsi/bn_cli:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
[root@node2 ~]# which locate
/bin/locate
type命令
type命令主要用于區(qū)分一個(gè)命令到底是shell自帶的還是外部獨(dú)立的二進(jìn)制文件提供的。如果是shell自帶的則會(huì)提示此命令為shell buildin,否則會(huì)列出命令的位置。例如:cd為shell自帶的命令,當(dāng)用which查找時(shí),which會(huì)按照PATH變量設(shè)置的路徑進(jìn)行搜索,如果不是shell自帶命令,則結(jié)果會(huì)顯示no cd in...;用type cd則顯示cd為shell buildin命令。ssh不是shell自帶命令,用type時(shí)會(huì)顯示ssh的路徑。
[root@node2 ~]# type cd
cd is a shell builtin
[root@node2 ~]# type find
find is hashed (/bin/find)
總結(jié)
以上是生活随笔為你收集整理的linux 文件查找命令集:find,locate,wheres,which,type的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 求一个情侣的个性签名!
- 下一篇: 贪心:Burst Balloons 最少