查找命令find簡介
Linux使用過程中難免會遇到查找功能,類似于Windows中的搜索功能,如果想要找某個文件在什么地方,什么格式的文件等等。在Linux中我們可以使用find、locate、which、whereis等命令。接下來我們就簡單說一下如何使用這幾個命令查找文件。
一、which
which命令的作用是,在PATH變量指定的路徑中,搜索某個系統命令的位置,并且返回第一個搜索結果。也就是說,使用which命令,就可以看到某個系統命令是否存在,以及執行的到底是哪一個位置的命令。
實例:
二、Whereis
whereis命令只能用于程序名的搜索,而且只搜索二進制文件(參數-b)、man說明文件(參數-m)和源代碼文件(參數-s)。如果省略參數,則返回所有信息。
三、Locate
locate命令其實是"find -name"的另一種寫法,但是要比后者快得多,原因在于它不搜索具體目錄,而是搜索一個數據庫(/var/lib/mlocate/mlocate.db),這個數據庫中含有本地所有文件信息。Linux系統自動創建這個數據庫,并且每天自動更新一次,所以使用locate命令查不到最新變動過的文件。為了避免這種情況,可以在使用locate之前,先使用updatedb命令,手動更新數據庫。
實例:
因為Locate命令必須在數據庫定時更新或者手動updatedb后才可以查找最近操作過的文件,且如果系統比較大則創建索引所需時間比較長,locate查找文件名時在路徑中包含也會被查找出來,查找結果模糊,所以我們在此不再多說,重點說一下find的用法。
四、find(重點)
find是最常見和最強大的查找命令,你可以用它找到任何你想找的文件。根據文件的各種屬性去找到相對應文件;支持實時查找,精準查找,精確匹配,缺點是速度較locate慢,但是功能強大,是我們日常最常使用的命令之一。
1、find的基本用法
find [option]… [查找路徑] [查找條件] [處理動作]
查找路徑:默認為當前目錄
查找條件:默認為指定路徑下的所有文件
處理動作:默認為顯示至屏幕
2、查找條件:
2.1 -name "文件名稱" :支持使用globbing字符;
*:任意長度的任意字符
?:任意單個字符
[]:指定范圍內的字符
[^]:指定范圍外的字符
2.2 -iname "文件名稱" :查找時忽略大小寫,
2.3 -user username :根據文件的屬主查找;
例如:查找/var/目錄屬主為root且屬組為mail的所有文件
2.4 -group grpname :根據文件的屬組查找;find /home -user openstack –ls
2.5 -nogroup 查找無有效所屬組的文件,即該文件所屬的組在/etc/groups中不存在
-nouser 查找無有效屬主的文件,即該文件的屬主在/etc/passwd中不存在。
2.6 組合條件查找:
與: -a
或: -o
非; -not !取反
例如:查找/home/目錄下不屬于root或bin的并且是鏈接類型的文件
2.7 -type 查找某一類型的文件,如:
b – 塊設備文件
d – 目錄
c – 字符設備文件
p – 管道文件
l – 符號鏈接文件
f – 普通文件
s – socket文件
2.8 根據文件的大小查找:size [+ | -]# UNIT
UNIT單元可以為:K、M、G等
find /var/log -size 2k 1<x<=2 的為2k
#unit: #-1 < x <= # #表示查找的范圍為小于#且大于#-1單位內大小的文件
-#unit: x<=#-1 -#表示的其實是#-1范圍內的文件 如: -2k 1.1是不符合的,其實是x<=1k的文件
+#unit: x># +#表示的是大于#號的文件 如: +2k 則2.1, 2.4符合條件
2.9 根據時間戳查找:
以天為單位:
-[ atime |mtime |ctime ] [+ | -]#
+#: x>= (#+1) +#表示#+1天之前被訪問過的文件
-#: x< # -#表示小于#天之內的訪問過的文件 例如: -2:最近一次訪問時間為在兩天之內
#: # <= x < #+1 #表示在#和#+1天之內訪問過的文件
以分鐘為單位:同上
-amin -mmin -cmin
說明:Linux的文件有三個時間,分別是訪問時間、修改時間、狀態改動時間,分別對應的是atime(也就是access time)、mtime(modify time)、ctime(change time)。這 三個時間有所不同。
atime:當文件的內容被訪問的時候,比如使用命令cat,這時候訪問時間會改變。
mtime:當文件的內容被改變的時候,比如用vi編輯器編輯之后保存,這時候修改時間會被改變。
ctime:當文件的屬性或者權限被改變的時候,這時候狀態改變時間會被改變。
可以用stat 文件名來查看這三個時間。
實例:查找/test目錄下最近一周內其內容修改過的,且不屬于root或bin的文件
2.10 根據權限查找:-perm [+|-] mode
mode: 與mode 精確匹配
+mode: 任何一類用戶的權限,只要能包含對其指定任何一位權限即可,以屬主為例;
-mode: 每類用戶指定的檢查權限都匹配,為三類用戶所有指定的檢查權限都包含;
2.11 處理動作:
-print :默認處理動作,顯示
-ls :
-exec command {} \; -exec find命令對匹配的文件執行該參數所給出的其他linux命令,注意{}和\;之間的空格;
-ok 和– exec的作用相同,只不過和會人交互而已,OK執行前會向你確認是不是要執行。
2.12 find :一次性查找所有符合條件的所有文件,并一同傳遞給-exec或-ok后面的指定的命令;但是有些命令不能接受過長的參數;此時使用另一種方式;
find | xargs command
例如:當我們去刪除比較多的文件是:比如本地目錄下的/media/rehat/Packages中的rpm包時,如果執行find ./ -name “*.rpm” | rm –rf 時,將不執行任何操作;
以上find等查找命令的一些使用操作,實際使用過程中find使用頻率很高,遇到問題在與大家分享,如有不正之處,敬請指正!!!謝謝。
原創文章,作者:wxdz_2004(古雨秋),如若轉載,請注明出處:http://www.www58058.com/4485
東郭的標簽可以用極為專業來形容不過分
@stanley:是哪篇文章的標簽?