這篇文章為大家?guī)碛嘘P(guān)Linux中文件查找與定位的命令詳細(xì)介紹。大部分知識點都是大家經(jīng)常用到的,為此分享給大家做個參考。一起跟隨小編過來看看吧。
成都創(chuàng)新互聯(lián)專注于企業(yè)網(wǎng)絡(luò)營銷推廣、網(wǎng)站重做改版、泰山網(wǎng)站定制設(shè)計、自適應(yīng)品牌網(wǎng)站建設(shè)、HTML5建站、商城開發(fā)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站制作、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計等建站業(yè)務(wù),價格優(yōu)惠性價比高,為泰山等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。
Linux下一切皆文件,但是文件由于文件的屬性的不同,在查找上可以針對不同的文件做相應(yīng)的查找以便加快查詢速度和減少資源的消耗。注意的是在磁盤中查找是要受到權(quán)限控制的,但是在數(shù)據(jù)庫中查找是無權(quán)限約束的。
1 Linux中最常用的就是which命令了,它是在 $PATH環(huán)境變量(用于保存可執(zhí)行文件的默認(rèn)路徑)中指定的路徑來搜索可執(zhí)行文件的它一般用來確定是否安裝了軟件,例如查看是否安裝了gcc軟件
例 1.1
[user1@localhost ~]$ which gcc /bin/gcc #安裝了gcc軟件
例 1.2 一般查找都是顯示的絕對路徑
[root@localhost ~]# which pwd /bin/pwd
例 1.3 普通用戶查找一些只有root權(quán)限的命令是找不到的:
[user1@localhost ~]$ which userdel /usr/bin/which:nouserdelin(/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/user1/.local/bin:/home/user1/bin) [user1@localhost ~]$ su - Password: Last login: Sun Feb 26 10:20:33CST 2017 onpts/0 [root@localhost ~]# whichuserdel /sbin/userdel
2. type命令,此命令比較特別,從名字上看它沒有什么搜索能力。實際上它是用于判斷一個命令是否是shell的內(nèi)置命令的命令。如果是非內(nèi)置的shell命令,而且使用了type的-p參數(shù),就相當(dāng)于which命令了
例 2.1 比較which和type –p的區(qū)別
[user1@localhost ~]$ which pwd #pwd是shell的內(nèi)置命令 /bin/pwd [user1@localhost ~]$ type -p pwd #無結(jié)果,沒有起到搜索的作用 [user1@localhost ~]$ [user1@localhost ~]$ which gcc #gcc是軟件,非shell內(nèi)置命令 /bin/gcc [user1@localhost ~]$ type -p gcc #等同于which /bin/gcc
3.Linux中查找速度最快的命令,whereis命令,它不是在磁盤中慢慢找文件,而是在數(shù)據(jù)了(/var/lib/mlocate)中快速查找文件。這個mlocate數(shù)據(jù)庫是Linux系統(tǒng)自動創(chuàng)建的,包含了本地文件的信息,并且每天自動執(zhí)行updatedb命令來更新該數(shù)據(jù)庫。正是因為每天更新一次,所以有時候搜索并不準(zhǔn)確,比如剛剛添加的文件搜索不到,剛剛刪除的文件還能搜索到。所以一般使用的時候先手動執(zhí)行updatedb命令,再whereis。這樣有點失去了高效的特性。它只能查找可執(zhí)行文件、聯(lián)機幫助文檔和源代碼文件。
例3.1 顯示sudo命令相關(guān)的: 命令位置,命令的配置文件,命令的幫助手冊
[root@localhost ~]# whereis sudo sudo: /usr/bin/sudo /etc/sudo.conf/usr/share/man/man8/sudo.8.gz
例 3.2 查找sudo命令
[user1@localhost ~]$ whereis sudo sudo: /usr/bin/sudo /etc/sudo.conf/usr/share/man/man8/sudo.8.gz [user1@localhost ~]$ whereis -b sudo #只查找二進(jìn)制文件 sudo: /usr/bin/sudo /etc/sudo.conf [user1@localhost ~]$ which sudo #和which查找作比較 /bin/sudo
4.locate命令,它和whereis公用mlocate數(shù)據(jù)庫,與whereis的區(qū)別就是,它更加的詳細(xì)。它會把含有目標(biāo)文件的所有文件都列表出來!這是不是有點繁雜了呢。
例4.1 查找含有iptables的所有文件
[user1@localhost ~]$ locate iptables /etc/sysconfig/iptables-config /usr/bin/iptables-xml /usr/sbin/iptables … [user1@localhost ~]$ locate -c iptables# 統(tǒng)計含有iptables的文件的個數(shù)(行數(shù)) 18
例4.2 若有臨時文件的建立,再查找此臨時文件,必須手動更新數(shù)據(jù)庫
[user1@localhost ~]$ cd data/;mkdiraaaaaaaaa AAAAAAAAAAAA [user1@localhost data]$ ls aaaaaaaaa AAAAAAAAAAAA [user1@localhost data]$ locate -r"aaaaaaa*" [user1@localhost data]$ locate -r"AAAAAAAAAA*" 此時系統(tǒng)內(nèi)已經(jīng)有了目標(biāo)文件,但是locate依賴的數(shù)據(jù)庫還未更新,所以檢索不到(-r是匹配正則表達(dá)式的參數(shù)),接下來更新數(shù)據(jù)庫 [user1@localhost data]$ updatedb updatedb: can not open a temporary filefor`/var/lib/mlocate/mlocate.db' 此處提示權(quán)限不夠!切換到root下刷新 [user1@localhost data]$ su - Password: Last login: Sun Feb 26 14:29:17 CST 2017 onpts/0 [root@localhost ~]# updatedb [root@localhost ~]# su - user1 Last login: Sun Feb 26 14:29:30 CST 2017 onpts/0 接下來就可以locate文件了 [user1@localhost ~]$ locate -r"aaaaaa*" /home/user1/data/aaaaaaaaa [user1@localhost ~]$ locate -r"AAAAAAAAAAA*" /home/user1/data/AAAAAAAAAAAA 注意的是:(-i代表的是不區(qū)分大小寫的參數(shù))-r參數(shù)必須是參數(shù)的最后一個! [user1@localhost ~]$ locate -ri"aaaaaaa*" locate: non-option arguments are notallowed with --regexp [user1@localhost ~]$ locate -ir"aaaaaaa*" /home/user1/data/AAAAAAAAAAAA /home/user1/data/aaaaaaaaa [user1@localhost ~]$ locate -rc"aaaaa*" locate: non-option arguments are notallowed with --regexp [user1@localhost ~]$ locate -cr"aaaaa*" 2
5. whatis 命令,它在用catman -w命令創(chuàng)建的數(shù)據(jù)庫中查找command參數(shù)指定的命令、系統(tǒng)調(diào)用、庫函數(shù)或特殊文件名。whatis命令顯示手冊部分的頁眉行。然后可以發(fā)出man命令以獲取附加的信息。whatis命令等同于使用man -f命令。是在whatis數(shù)據(jù)庫中搜索命令。Whatis數(shù)據(jù)庫中包含了系統(tǒng)所有的命令的簡單描述。
例 5.1 whatis 的作用就是輸出系統(tǒng)命令簡單的描述信息,一般用的有點少。注意的是它不具有輸出自定義的命令的功能
[user1@localhost ~]$ whatis ls ls(1) - list directory contents ls(1p) - list directory contents [user1@localhost ~]$ su - Password: Last login: Sun Feb 26 12:04:01 CST2017 onpts/0 [root@localhost ~]# whatis ls ls(1) - list directory contents ls(1p) - list directory contents [root@localhost ~]#
6.apropos 命令,此命令可以搜索在whatis數(shù)據(jù)庫中的字符串,為關(guān)鍵字輸出一組數(shù)據(jù)庫文件包含的系統(tǒng)命令的簡短描述(例如要完成某項任務(wù),但是又不知道哪些命令,就可以用apropos了,當(dāng)然也可以用man的-k參數(shù)來完成)。注意的是:若系統(tǒng)命令增加了,則需要更新數(shù)據(jù)庫(update whatis),這樣才能準(zhǔn)確!
例 6.1 查找與字符串“mkdir”有關(guān)的系統(tǒng)命令
[root@localhost ~]# man -k mkdir gvfs-mkdir(1) - Create directories mkdir(1) - makedirectories mkdir(1p) - makedirectories mkdir(2) - createa directory mkdir(3p) - make adirectory mkdirat(2) - create a directoryrelative to adirectory file descriptor [root@localhost ~]# apropos mkdir gvfs-mkdir(1) - Create directories mkdir(1) - makedirectories mkdir(1p) - makedirectories mkdir(2) - createa directory mkdir(3p) - make adirectory mkdirat(2) - create a directoryrelative to adirectory file descriptor
7.find 命令,超級無敵強大的命令。它無所不及,只是速度慢了些,因為它是在指定的磁盤位置一絲不茍的查找,很仔細(xì)。它的強大在于參數(shù)有很多,還可以接后續(xù)的操作!
命令格式:find [路徑] [選項] [-exec| -ok command {} \; ]
命令解釋:-exec(不交互)和-ok(交互)一樣,{} \;表示的是將輸出的內(nèi)容交給command來處理
參數(shù)列表
參數(shù) | 解釋 |
-name | 按照文件名來查找 |
-perm | 按照文件權(quán)限來查找 |
-user | 按照文件的用戶來查找 |
-group | 按照文件的組來查找 |
-atime n | 在過去n天內(nèi)被訪問過(access_time)的文件,n表示天數(shù),-n表示過去的n天內(nèi),+n表示過去的n天前,n表示確定的日期(過去的第n天) |
-ctime n | 在過去n天內(nèi)被更改過(change_time)的文件,n表示天數(shù),同上 |
-amin n | 在過去n分鐘內(nèi)被訪問過(access_time)的文件,n表示分鐘數(shù),同上 |
-cmin n | 在過去n分鐘內(nèi)被更改過(change_time)的文件,n表示分鐘數(shù),同上 |
-size n[ckMG] | 按文件大小查找,n表示大小,+n表示大于n的文件,-n表示小于n的文件,c表示字節(jié),k表示kB,M代表MB,G表示GB |
-newer f1 | 查找更新時間比f1近的文件 |
-anewer f1 | 查找訪問時間比f1早的文件 |
-empty | 查找空文件,可以是目錄或文件 |
-type | 按照文件類型來查找 |
-fstype | 按照文件系統(tǒng)來查找 |
-nogroup | 查找無屬組的文件 |
-nouser | 查找無用戶的文件 |
-uid | 按照文件所屬用戶的UID查找 |
-gid | 按照文件所屬組的GID查找 |
-inum | 按照文件的inode節(jié)點號查找 |
-readable | 只匹配可讀文件 |
-samefile | 查找indode相同的文件 |
-writale | 匹配可寫文件 |
-links | 按照文件鏈接數(shù)查找 |
-depth | 使查找在進(jìn)入子目錄查找前先查找完本目錄 |
-mount | 查找文件時不跨越文件系統(tǒng)mount點 |
-cpio | 備份查找到的文件 |
-cpio %; | 按照文件系統(tǒng)來查找文件,一般文件系統(tǒng)在/etc/fstab文件中有記錄 |
-prune | 忽略某個目錄 |
文件類型:
字符 | 解釋 |
b | 塊設(shè)備文件 |
c | 字符設(shè)備文件 |
d | 目錄文件 |
l | 鏈接文件 |
f | 普通文件 |
p | 管道文件 |
s | 套接字文件 |
例 7.1 在/home/user1/data目錄中找出有a字符的文件并刪除
[user1@localhost data]$ ls aaaaaaaaa AAAAAAAAAAAA sssss [user1@localhost data]$ ls aaaaaaaaa/ file11 file14 [user1@localhost data]$ find ./ -name"*a*" | rm -r rm: missing operand Try 'rm --help' for more information. 提示報錯說rm沒有操作對象,原因是rm不能接收從標(biāo)準(zhǔn)輸入傳來的數(shù)據(jù)?。ú荒芙邮諛?biāo)準(zhǔn)輸入數(shù)據(jù)的還有:) [user1@localhost data]$ find ./ -name"*a*" |xargs rm –r [user1@localhost data]$ ls AAAAAAAAAAAA sssss [user1@localhost data]$ 方法二:注意刪掉后會有提示! [user1@localhost data]$ ls aaaaa AAAAAAAAAAAA sssss [user1@localhost data]$ ls aaaaa/ file1 file2 [user1@localhost data]$ find ./ -name"*a*" -exec rm -r {} \; find: ‘./aaaaa’: No such file or directory [user1@localhost data]$ ls AAAAAAAAAAAA sssss ####這里要說說-exec了。-exec是find的后續(xù)動作,也就是對find的結(jié)果集執(zhí)行命令的接口。 ####“{}”是一個占位符,表示的是find操作的結(jié)果集。 ####“\;”表示的-exec的結(jié)束。奇怪的是在man文檔上說-exec命令的結(jié)尾是“;”,但是事實上 ####卻是“\;”這是什么意思,難道m(xù)an文檔說錯了?不是的,這是shell的錯, ####“;”在bash(Linux中的默認(rèn)shell,幾乎所有發(fā)行版都這樣)環(huán)境中有特殊意義, ####所以我們要使用“\”來轉(zhuǎn)義一下。
7.2 使用混合方式查找文件,查找當(dāng)前目錄下大于1M并且在1天前訪問過的文件(-and是與關(guān)系;-or是或關(guān)系)
[root@localhost ~]# find /etc/ -size +1M-and -atime +1 /etc/selinux/targeted/active/policy.kern /etc/selinux/targeted/contexts/files/file_contexts.bin /etc/selinux/targeted/policy/policy.30 /etc/gconf/schemas/ekiga.schemas /etc/brltty/zh-tw.ctb ####注意的是: find會受目標(biāo)文件的權(quán)限的限制,普通用戶在查找某些只有root才有訪問權(quán)限的文件時, 會報錯: [user1@localhost ~]$ find /etc/ -size +10M-and -atime +1 find: ‘/etc/pki/CA/private’: Permissiondenied find: ‘/etc/pki/rsyslog’: Permission denied find: ‘/etc/dhcp’: Permission denied find: ‘/etc/lvm/archive’: Permission denied find: ‘/etc/lvm/backup’: Permission denied find: ‘/etc/lvm/cache’: Permission denied find: ‘/etc/selinux/targeted/active’:Permission denied
7.3 使用權(quán)限-perm參數(shù)時候注意:-007代表的是最少權(quán)限為007的文件,而007代表的是權(quán)限就是007的文件(也就是所有用戶都可以讀寫執(zhí)行的文件);-100代表的是權(quán)限最小是100的文件(就是所屬用戶可執(zhí)行文件)。
[user1@localhost data]$ ll total 0 -------rwx 1 user1 user1 0 Feb 26 16:28file1 ---x------ 1 user1 user1 0 Feb 26 16:28file2 -rw-rw-r-- 1 user1 user1 0 Feb 26 16:29file3 [user1@localhost data]$ find ./ -perm 007 ./file1 [user1@localhost data]$ find ./ -perm -007 ./file1 [user1@localhost data]$ find ./ -perm 100 ./file2 [user1@localhost data]$ find ./ -perm -100 ./ ./file2 [user1@localhost data]$
7.4 無錯誤提示查找:若查找報錯,則將錯誤信息信息扔掉(/dev/null文件相當(dāng)于Windows中的垃圾箱,不同的是任何文件放到此目錄下都將被瞬間清空,所以此目錄也是空目錄?。?,若查找正確,則打印出結(jié)果
[user1@localhost data]$ find ./ -nam"aaa" find: unknown predicate `-nam' [user1@localhost data]$ find ./ -nam"aaa" 2>/dev/null
小結(jié):
命令 | 檢索文件 | 檢索對象 | 顯示內(nèi)容 | 效能 |
which | $PATH中的文件/bin,/sbin | 命令,二進(jìn)制文件 | 絕對路徑 | Root用戶使用最方便,普通用戶使用時有時會有權(quán)限問題 |
whereis | mlocate數(shù)據(jù)庫 | 可執(zhí)行文件、幫助文檔、源代碼文件 | 絕對路徑,配置文件路徑,幫助文檔路徑 | 任何用戶都可使用,無權(quán)限問題,就是要更新 |
whatis | whatis數(shù)據(jù)庫 | 系統(tǒng)命令 | 目標(biāo)命令簡介 | 速度快,得到命令的一組簡介集合 |
apropos | whatis數(shù)據(jù)庫 | 包含關(guān)鍵字的系統(tǒng)命令 | 一組相關(guān)命令簡介 | 速度快,得到關(guān)鍵字的一組簡介集合 |
locate | mlocate數(shù)據(jù)庫 | 文件 | 目標(biāo)文件列表 | 速度快,但是索引數(shù)據(jù)庫每天自動更新,有時候不具有時效性 |
find | 文件系統(tǒng) | 文件 | 目標(biāo)文件列表 | 功能強大,常用作前提條件,為后續(xù)操作做鋪墊! |
以上就是Linux中文件查找與定位命令的詳細(xì)內(nèi)容了,看完之后是否有所收獲呢?如果想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊!
網(wǎng)站標(biāo)題:Linux之文件查找與定位命令
標(biāo)題網(wǎng)址:http://muchs.cn/article16/jchgdg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)、外貿(mào)建站、面包屑導(dǎo)航、響應(yīng)式網(wǎng)站、手機網(wǎng)站建設(shè)、網(wǎng)站策劃
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)