本文介紹RHEL7下which、whereis、locate、find命令的使用,重點介紹find命令的使用 which 命令:which 作用:查找命令的執行文件路徑 語法:which [選項] [ ] 名稱... 說明:which命令比較簡單,他的選項都是不常用的 whereis 命令:wher ...
本文介紹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命令的表達式非常多下麵只介紹常用的幾種:
表達式 | 說明 |
---|---|
將匹配的文件輸出到標準輸出 | |
-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