Linux查找命令find、loacte、whereis、which、type梳理
Linux操作系統中有5種常用的查找命令:find,locate,whereis,which,type,他們分別用于查找不同的東西,本文將就他們各自的功能進行一下梳理。
find
功能
find是最常見和最強大的查找命令,你可以用它找到任何你想找的文件。
Linux find 命令用來在指定目錄下查找文件。任何位于參數之前的字符串都將被視為欲查找的目錄名。如果使用該命令時,不設置任何參數,則 find 命令將在當前目錄下查找子目錄與文件。并且將查找到的子目錄和文件全部進行顯示。
語法
find path -option [ -print ] [ -exec -ok command ] {} \;
find 根據下列規則判斷 path 和 expression,在命令列上第一個 - ( ) , ! 之前的部份為 path,之后的是 expression。如果 path 是空字串則使用目前路徑,如果 expression 是空字串則使用 -print 為預設 expression。
expression 中可使用的選項有二三十個之多,在此只介紹最常用的部份。
-mount, -xdev : 只檢查和指定目錄在同一個文件系統下的文件,避免列出其它文件系統中的文件
-amin n : 在過去 n 分鐘內被讀取過
-anewer file : 比文件 file 更晚被讀取過的文件
-atime n : 在過去n天內被讀取過的文件
-cmin n : 在過去 n 分鐘內被修改過
-cnewer file :比文件 file 更新的文件
-ctime n : 在過去n天內被修改過的文件
-empty : 空的文件-gid n or -group name : gid 是 n 或是 group 名稱是 name
-ipath p, -path p : 路徑名稱符合 p 的文件,ipath 會忽略大小寫
-name name, -iname name : 文件名稱符合 name 的文件。iname 會忽略大小寫
-size n : 文件大小 是 n 單位,b 代表 512 位元組的區塊,c 表示字元數,k 表示 kilo bytes,w 是二個位元組。
-type c : 文件類型是 c 的文件。
d: 目錄
示例
find . -name "*.c" # 將當前目錄及其子目錄下所有文件后綴為 .c 的文件列出來
find . -type f # 將當前目錄及其子目錄中的所有文件列出
find . -ctime -20 # 將當前目錄及其子目錄下所有最近 20 天內更新過的文件列出
find /var/log -type f -mtime +7 -ok rm {} \; # 查找 /var/log 目錄中更改時間在 7 日以前的普通文件,并在刪除之前詢問它們
find . -type f -perm 644 -exec ls -l {} \; # 查找當前目錄中文件屬主具有讀、寫權限,并且文件所屬組的用戶和其他用戶具有讀權限的文件
find / -type f -size 0 -exec ls -l {} \; # 查找系統中所有文件長度為 0 的普通文件,并列出它們的完整路徑
locate
介紹
Linux locate命令用于查找符合條件的文檔,他會去保存文檔和目錄名稱的數據庫內,查找合乎范本樣式條件的文檔或目錄。
一般情況我們只需要輸入 locate [your_file_name] 即可查找指定文件。
語法
locate [-d ][--help][--version][范本樣式...]
示例
locate train.py # 查找trin.py文件
說明
locate 與 find 不同: find 是去硬盤找,locate 只在 /var/lib/slocate
資料庫中找。
locate 的速度比 find 快,它并不是真的查找,而是查數據庫,一般文件數據庫在 /var/lib/slocate/slocate.db
中,所以 locate 的查找并不是實時的,而是以數據庫的更新為準,一般是系統自己維護,也可以手工升級數據庫 :updatedb
。
whereis
功能
Linux whereis命令用于查找文件。
該指令會在特定目錄中查找符合條件的文件。這些文件應屬于原始代碼、二進制文件,或是幫助文件。
該指令只能用于查找二進制文件、源代碼文件和man手冊頁,一般文件的定位需使用locate命令。
語法
whereis [-bfmsu][-B <目錄>...][-M <目錄>...][-S <目錄>...][文件...]
示例
whereis conda
which
功能
Linux which命令用于查找文件。筆者通常用來查找命令的執行文件的位置,因為環境變量中$PATH存放的就是命令的執行文件的位置。如which rm
,which conda
。
which指令會在環境變量$PATH設置的目錄里查找符合條件的文件。
語法
which [文件...]
示例
which rm
type
功能
type命令其實不能算查找命令,它是用來區分某個命令到底是由shell自帶的,還是由shell外部的獨立二進制文件提供的。如果一個命令是外部命令,那么使用-p參數,會顯示該命令的路徑,相當于which命令。type命令加上-p命令就相當于which命令。
示例
$ type cd
cd is a shell builtin
$ type nv
nv is aliased to `watch -n 0.5 nvidia-smi'
$ type nvidia-smi
nvidia-smi is /usr/bin/nvidia-smi
cd
是bash自帶的命令,nv
是筆者自己設置的別名,nvidia-smi
則是英偉達顯卡狀態查看命令。
Ref:
https://www.runoob.com/linux/linux-comm-find.html
https://www.cnblogs.com/kex1n/p/5233821.html