首頁 > 軟體

RHEL7檔案查詢

2020-06-16 17:34:24

本文介紹RHEL7下which、whereis、locate、find命令的使用,重點介紹find命令的使用

 

which

命令:which
作用:查詢命令的執行檔案路徑
語法:which [選項] [--] 名稱...
說明:which命令比較簡單,他的選項都是不常用的

[root@localhost ~]# which -- nginx
/usr/bin/which: no nginx in (/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/
sbin:/usr/bin:/usr/local/java/jdk1.7.0_79/bin:/usr/local/mysql/bin:/root/bin)
[root@localhost ~]# which nginx cat passwd
/usr/bin/which: no nginx in (/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/
sbin:/usr/bin:/usr/local/java/jdk1.7.0_79/bin:/usr/local/mysql/bin:/root/bin)
/bin/cat
/usr/bin/passwd

 

whereis

命令:whereis
作用:定位可執行檔案、原始碼檔案、幫助檔案在檔案系統中的位置
語法:whereis [-bmsu] [BMS 目錄名 -f ] 檔名

選項說明
-b 定位可執行檔案
-m 定位幫助檔案
-s 定位原始碼檔案
-u 搜尋預設路徑下除可執行檔案、原始碼檔案、幫助檔案以外的其它檔案
-B 指定搜尋可執行檔案的路徑
-M 指定搜尋幫助檔案的路徑
-S 指定搜尋原始碼檔案的路徑
-f -M-S或-B選項查詢的終止信號
[root@localhost ~]# whereis tomcat
tomcat: /usr/local/tomcat

 

locate

locate讓使用者可以很快速的搜尋檔案系統內是否有指定的檔案
其方法是先建立一個包括系統內所有檔案名稱及路徑的資料庫
之後當尋找時就只需查詢這個資料庫,而不必實際深入檔案系統之中了

命令:locate
作用:通過索引資料庫查詢檔案
語法:locate [選項]... [PATTERN]...

選項說明
-b 只匹配路徑名的基本名稱
-c 只列印查詢結果總數
-e 只查詢已經存在的檔案
-L 搜尋符號連結檔案時追蹤到連結的目標檔案
-i 忽略大小寫查詢
-l 限制查詢輸出的結果數,需要跟上數量
-P 不追蹤連結檔案,與-L相反
-0 不分隔顯示輸出的結果
-S 列印資料庫中統計的資訊,此選項不能和其他選項一起使用
-q 報告沒有讀取資料庫的錯誤訊息
-r 使用正規表示式模式進行匹配
-w 匹配整個路徑搜尋(預設使用該選項)
[root@localhost ~]# locate /etc/passwd
/etc/passwd
/etc/passwd-

如果使用locate查詢不到,則使用命令updatedb更新下mlocate資料庫即可

[root@localhost ~]# touch abcd123456dcba.txt
[root@localhost ~]# locate abcd123456dcba.txt
[root@localhost ~]# updatedb
[root@localhost ~]# locate abcd123456dcba.txt
/root/abcd123456dcba.txt

 

find

find命令是在目錄結構中搜尋檔案,並執行指定的操作
find命令提供了相當多的查詢條件,功能很強大

命令:find
作用:
語法:find [選項] [路徑...] [表示式]
說明:

  • 預設的路徑是當前目錄
  • 預設的表示式為-print
  • 表示式包括: operators, options, tests, actions

operators即邏輯運算子,預設為and,優先順序順序為:
(表示式)、!表示式、-not 表示式、表示式1 -a 表示式2、
表示式1 -and 表示式2、表示式1 -o 表示式2、表示式1 -or 表示式2、
表示式1,表示式2
即優先順序:
括號>!>-not>-a>-and>-o>-or
多個表示式用逗號隔開前一個優先順序高於後一個

actions即動作,預設為-print,以下是常見的動作:
-delete -print0 -printf FORMAT -fprintf FILE FORMAT -print
-fprint0 FILE -fprint FILE -ls -fls FILE -prune -quit
-exec COMMAND
-exec COMMAND {} + -ok COMMAND
-execdir COMMAND
-execdir COMMAND {} + -okdir COMMAND

find命令的表示式非常多下面只介紹常用的幾種:

表示式說明
-print 將匹配的檔案輸出到標準輸出
-name 按照檔名查詢檔案
-perm 按照檔案許可權來查詢檔案
-prune 使用這一選項可以使find命令不在當前指定的目錄中查詢,即排除
如果同時使用-depth選項,那麼-prune將被find命令忽略
-depth 在查詢檔案時,首先查詢當前目錄中的檔案
然後再在其子目錄中查詢
-user 按照檔案屬主來查詢檔案
-nouser 查詢無有效屬主的檔案
即該檔案的屬主在/etc/passwd中不存在
-group 按照檔案所屬的組來查詢檔案
-nogroup 查詢無有效所屬組的檔案
即該檔案所屬的組在/etc/groups中不存在
-mtime -n/+n 按照檔案的更改時間來查詢檔案
-n表示檔案更改時間距現在n天以內
+n表示檔案更改時間距現在n天以前
-type 查詢某一型別的檔案
b 塊裝置檔案
d 目錄
c 字元裝置檔案
p 管道檔案
l 符號連結檔案
f 普通檔案
-size n [c] 查詢檔案長度為n塊的檔案
帶有c時表示檔案長度以位元組計
-fstype 查詢位於某一型別檔案系統中的檔案
這些檔案系統型別通常可以在組態檔/etc/fstab中找到
該組態檔中包含了本系統中有關檔案系統的資訊
-mount 在查詢檔案時不跨越檔案系統mount點
-follow 如果find命令遇到符號連結檔案,就跟蹤至連結所指向的檔案

按名稱查詢

-name選項是find命令最常用的選項,要麼單獨使用該選項,要麼和其他選項一起使用

注意:可以使用某種檔名模式來匹配檔案,記住要用引號將檔名模式引起來

不管當前路徑是什麼,如果想要在自己的根目錄$HOME中查詢檔名符合*.txt的檔案
則使用~作為'pathname'引數,波浪號~代表了你的$HOME目錄

[root@VM_200_13_CentOS ~]# touch tokyohot.txt
[root@VM_200_13_centos ~]# find ~ -name "*.txt"
/root/tokyohot.txt
[root@VM_200_13_centos ~]# cd /
[root@VM_200_13_centos /]# find ~ -name "*.txt"
/root/tokyohot.txt

在當前目錄及子目錄中查詢所有的*.txt檔案

[root@VM_200_13_centos firmware]# find . -name "*.txt" -print
./ar3k/1020201/RamPatch.txt
./ar3k/30101/RamPatch.txt
./ar3k/30101coex/RamPatch.txt
./ar3k/1020200/RamPatch.txt
./ar3k/30000/RamPatch.txt
./qca/NOTICE.txt
./ath10k/QCA988X/hw2.0/notice_ath10k_firmware-4.txt
./TDA7706_OM_v3.0.2_boot.txt
./TDA7706_OM_v2.5.1_boot.txt

想要在/etc目錄中查詢檔名以host開頭的檔案

[root@VM_200_13_centos firmware]# find /etc -name "host*"    
/etc/selinux/targeted/modules/active/modules/hostname.pp
/etc/host.conf
/etc/hosts
/etc/hosts.deny
/etc/hostname
/etc/hosts.allow

按許可權查詢

按檔案許可權模式來查詢檔案的話。最好使用三位十進位制的許可權表示法

如在當前目錄下查詢檔案許可權位為755的檔案,即屬主可以讀、寫、執行,其他使用者可以讀、執行的檔案

[root@VM_200_13_centos ~]# find -perm 755       
[root@VM_200_13_centos ~]# ll
total 0
-rw-r--r-- 1 root root 0 Aug 17 00:47 tokyohot.txt
[root@VM_200_13_centos ~]# chmod 755 tokyohot.txt
[root@VM_200_13_centos ~]# find -perm 755
./tokyohot.txt

忽略某個目錄

使用-prune選項來指出需要忽略的目錄

在使用該選項時如果同時使用-depth選項,那麼-prune選項就會被find命令忽略
/apps目錄下查詢檔案,但不希望在/apps/bin目錄下查詢

[root@VM_200_13_centos ~]# find /apps -path "/apps/bin" -prune -o -print
/apps
/apps/d
/apps/c

查詢子目錄

可能希望先匹配當前所有的檔案,再在子目錄中查詢
在下面的例子中, find命令從檔案系統的根目錄開始,查詢一個名為CON.FILE的檔案
它將首先匹配所有的檔案然後再進入子目錄中查詢

[root@VM_200_13_centos ~]# find / -depth -name "CON.FILE"  -print
/CON.FILE

按屬主查詢

按檔案屬主查詢檔案,如在$HOME目錄中查詢檔案屬主為root的檔案

[root@VM_200_13_centos ~]# find -user root  -print
.
./a
./.bash_history
./.ssh
./.ssh/authorized_keys
./tokyohot.txt
./.bashrc
./.cshrc
./.bash_logout
./.tcshrc
./.bash_profile

為了查詢屬主帳戶已經被刪除的檔案,可以使用-nouser選項
這樣就能夠找到那些屬主在/etc/passwd檔案中沒有有效帳戶的檔案
在使用-nouser選項時,不必給出使用者名稱; find命令能夠為你完成相應的工作

root@VM_200_13_centos ~]# find /etc/ -nouser

按屬組查詢

就像user和nouser選項一樣,針對檔案所屬於的使用者組, find命令也具有同樣的選項

[root@VM_200_13_centos ~]# find -group root -print
.
./a
./.bash_history
./.ssh
./.ssh/authorized_keys
./tokyohot.txt
./.bashrc
./.cshrc
./.bash_logout
./.tcshrc
./.bash_profile
./.history
./.viminfo

要查詢沒有有效所屬使用者組的所有檔案,可以使用nogroup選項

[root@VM_200_13_centos ~]# groupadd xxx
[root@VM_200_13_centos ~]# touch xx.txt
[root@VM_200_13_centos ~]# chown :xxx xx.txt
[root@VM_200_13_centos ~]# ll xx.txt
-rw-r--r-- 1 root xxx 0 Aug 17 01:21 xx.txt
[root@VM_200_13_centos ~]# find -group xxx
./xx.txt
[root@VM_200_13_centos ~]# groupdel xxx
[root@VM_200_13_centos ~]# find -nogroup    
./xx.txt

按時間查詢

如果希望按照更改時間來查詢檔案,可以使用mtime,atime或ctime選項

如果系統突然沒有可用空間了,很有可能某一個檔案的長度在此期間增長迅速,這時就可以用mtime選項來查詢這樣的檔案
用減號-來限定更改時間在距今n日以內的檔案
用加號+來限定更改時間在距今n日以前的檔案

希望在系統/root目錄下查詢更改時間在5日以內的檔案

[root@VM_200_13_centos ~]# find /root -mtime -5 -print
/root
/root/a
/root/.bash_history
/root/xx.txt
/root/tokyohot.txt
/root/.history
/root/.viminfo

按型別查詢

-type 查詢某一型別的檔案

型別說明
-type b 查詢塊裝置
-type d 查詢目錄
-type c 查詢字元裝置檔案
-type p 查詢管道檔案
-type l 查詢符號連結檔案
-type f 查詢普通檔案

在/etc目錄下查詢所有的目錄

[root@VM_200_13_centos ~]# find /etc -type d
/etc
/etc/selinux
/etc/selinux/targeted
/etc/selinux/targeted/contexts
/etc/selinux/targeted/contexts/users
...

按檔案大小查詢

可以按照檔案長度來查詢檔案
這裡所指的檔案長度既可以用塊(block)來計量
也可以用位元組來計量
以位元組計量檔案長度的表達形式為nc,n代表大小
以塊計量檔案長度只用數位表示即可

在按照檔案長度查詢檔案時,一般使用這種以位元組表示的檔案長度,在檢視檔案系統的大小,因為這時使用塊來計量更容易轉換

在當前目錄下查詢檔案長度大於1 M位元組的檔案

[root@VM_200_13_centos ~]# find . -size +1000000c -print

在/home/apache目錄下查詢檔案長度恰好為100位元組的檔案

[root@VM_200_13_centos ~]# find /home/apache -size 100c -print

在當前目錄下查詢長度超過10塊的檔案(一塊等於512位元組)

[root@VM_200_13_centos ~]# find . -size +10 -print

本文永久更新連結地址http://www.linuxidc.com/Linux/2016-08/134711.htm


IT145.com E-mail:sddin#qq.com