Linux之文件查找與定位命令

這篇文章為大家?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)

成都定制網(wǎng)站建設(shè)