Which?
which? [-a]? command
查找系統命令位置,只在$PATH環境變量中查找,并且默認只返回第一個查找結果
參數:
-a 列出所有的查找結果
例:which -a php
Type
type? [option]? command
用于區分某個命令到底是由shell自帶的,還是由shell外部的獨立二進制文件提供的
參數:
-t? 輸出命令的type,如:alias、file、builtin等
-p? 如是外部命令,則輸出絕對地址
例:type -t cd
Whereis
whereis? [-bmsu]? file
whereis命令用于定位可執行文件、源代碼文件、幫助文件在系統中的位置
參數:
-b 查找二進制文件
-m 查找說明文件
-s 查找源代碼文件
-u 查找非上述3種文件的其他文件
例:whereis -b php
PS:whereis默認從數據庫文件(Linux將所有的文件都記錄在一個數據庫文件,但并不實時更新,一般一天更新一次)中查找指定文件,因此whereis比其他從硬盤查找的命令,效率高很多
Find
find? ? ? [path]? ? ?[option]? ? [action]? ? ? ?
find命令可查找指定路徑下所有符合條件的文件或目錄,find命令參數可以擬分成兩大類,一種是普通參數,一種是時間參數
普通參數:
-type 根據文件類型進行搜索
? ? ? ? ? find /usr/bin -type d? ?查找 /usr/bin目錄下所有的目錄
-name 根據文件名進行搜索(-iname 不區分大小寫)
? ? ? ? ? find /usr/bin -name '*.JPG' 查找/usr/bin目錄下以JPG為后綴的文件和目錄
-size 根據文件大小進行搜索(+n 大于 -n 小于)
? ? ? ? ? find /usr/bin -size +10M 查找/usr/bin目錄下大于10M的文件和目錄
-prem 根據文件讀寫權限進行搜索
? ? ? ? ? find /usr/bin -perm 644 查找/usr/bin目錄下讀取權限為644的文件和目錄
-group 根據文件擁有組進行搜索
? ? ? ? ? find /usr/bin -group li 查找/usr/bin目錄下li組的文件或目錄
-empty 匹配空文件或空目錄
? ? ? ? ? find /usr/bin -empty 查找/usr/bin目錄下的空文件和空目錄
時間相關參數:
time 天?
min 分鐘
+n n天(分鐘)之前?
-n n天(分鐘)之內
-atime +n 搜索n天之前被訪問過的文件或目錄
? ? ? ? ? find ./ -atime +5 查找當前目錄下,最后一次訪問時間在5天前的文件或目錄
? ? ? ? ? find /var \! -atime -90? 在/var目錄下找出90天之內未被訪問過的文件
-mtime -n 搜索n天之內被修改過文件內容的文件或目錄
? ? ? ? ? find ./ -mtime -5 查找當前目錄下,5天呃逆有進行過內容修改的文件或目錄
-cmin -n 搜索n分鐘之內被修改過內容、權限、屬性的文件或目錄
? ? ? ? ? find ./ -cmin -5 在當前目錄,搜索5分鐘之內被修改過內容、權限、屬性的文件和目錄
-cnewer file 搜索修改時間(change time:修改文件屬性、權限、內容、大小的時間)比指定文件的修改時間更接近現在的文件或目錄
? ? ? ? ? find ./ -cnewer demo.txt 在當前目錄下,搜索修改時間比demo.txt文件的修改時間更大的文件或目錄
find匹配后執行操作:
預定義操作
? ? ? ? ? find ./ -name '*.bak' -delete 刪除當前目錄下,所有以bak為后綴的文件和目錄
? ? ? ? ? find ./ -name '*.log' -quit 在當前目錄下搜索以log為后綴的文件和目錄,搜索到一個就退出
自定義操作
? ? ? ? ? find ./ -type f -name '*.bak' -exec rm -rf {} \; 查找當前目錄下后綴為bak的文件,并把它們刪除,分號在Bash中有其他意思,因此此處;需要加\轉義
PS:find是從硬盤去檢索文件,因此效率并不高,但是find的功能是最廣,最強大的
Locate
locate? [option]? [option]?
此命令和find / -name類似,但是它是從數據庫文件(Linux將所有的文件都記錄在一個數據庫文件,但并不實時更新,一般一天更新一次)中查找指定文件,因此效率比find快得多
參數:
-i??忽略大小寫
-r? 使用正則表達式做匹配條件
例:locate demo.php
總結
一、5個查找命令中,find、locate、whereis是用來查找具體的文件,which、type是用來查找命令(which也相當于查找文件,但是只查找命令位置)
二、whereis只查找3種類型的文件:二進制文件、說明文件、源代碼文件
三、whereis和locate都是從數據庫文件查找,所以效率最高
四、使用優先級:
? ? ? ? ? 1、區分命令,使用type
? ? ? ? ? 2、查找命令位置,使用which、whereis、type(優先使用whereis)
? ? ? ? ? 3、通過文件名稱查找,優先使用locate,找不到時,updatedb
? ? ? ? ? 4、其他查找條件、或者因數據庫文件未更新,使用whereis、locate查找不到時,使用find