Linux文件查找之find命令
前言:
Linux文件種類繁多,難免在維護Linux中會忘記文件的路徑。所有在維護Linux中學好查找命令是非常必要的。
Linux查找命令有很多,比如 whereis,type,which,locate,find(重點)。
1、whereis
whereis命令只能用于程序名的搜索,而且只搜索二進制文件(參數-b)、man說明文件(參數-m)和源代碼文件(參數-s)。如果省略參數,則返回所有信息。
whereis命令的使用實例:
2、type
type命令其實不能算查找命令,它是用來區分某個命令到底是由shell自帶的,還是有shell外部的獨立二級制文件提供的。如果一個命令是外部命令,那么使用-P參數,會顯示該命令的路徑,相當于which命令。
type命令的使用實例:
3、which
which命令的作用是在PATH變量指定的路徑中,搜索某個系統命令的位置,并且返回第一個搜索結果。也就是說,使用which命令就可以看到系統命令是否存在,以及執行的到底是哪一個位置的命令。
常用參數:--skip-alias:去除別名。
which命令的使用實例:
這里cd命令是內建命令,因而無法查到。
4、locate
locate查找為非實時查找,也成模糊查找。locate依賴于索引,而索引構建時在系統空閑時由系統自動進行(每天任務);手動進行使用updatedb;locate命令的優勢是查找速度快,劣勢為非精準查找。
locate命令使用實例: locate的參數: -n #:限定顯示#行 -i:不區分大小寫,默認區分 -r FILE_NAME:顯示以FILE_NAME為結尾的行
關于locate的其他參數使用,這里就不做詳細講解了,還請朋友們自行Google。
5、find(重點)
find命令是遍歷所有文件進行條件匹配,查找速度慢但結果精確,即為精準查找。也是我們在生產環境中使用最多,最強大的文件查找工具。
find的使用格式: find [option]... [查找路徑] [查找條件] [處理動作] 查找路徑:默認為當前目錄 查找條件:默認為指定路徑下的所有文件 處理動作:默認為顯示至屏幕
查找條件:
-name “文件名稱”:支持使用文件通配(globbing)字符 *:任意長度任意字符 ?:任意單個字符 [ ]:指定范圍內的單個字符 -iname “文件名稱”:查找時忽略字符大小寫 -user USERNAME:根據屬主查找 -group GRPNAME:根據文件屬組查找 -uid UID -gid GID -nouser:沒有屬主的文件 -nogroup:沒有屬組的文件
組合條件查找:
與:-a,同時滿足 或:-o,滿足一個即可 非:-not,!,條件取反 注:-not A -a -not B = -not\(A -o B\) -not A -o -not B = -not\(A -a B\)
-type TYPE:根據文件類型查找
f:普通文件 d:目錄文件 l:符號鏈接 b:塊設備 s:套接字文件 p:命令管道
-size [+|-]#UNIT(單位)
常用單位:k,M,G #UNIT:#-1<x<# -#UNIT:x<=#-1 +#UNIT:x>#
根據時間戳查找:
以“天”為單位 -atime(訪問時間) [+|-]# +#:(#+1)天之前被訪問過的文件 x>=#+1 -#:x<# x:#<=x<#+1 例如:+2:最近一刻訪問文件的時間是2天以前 -2:訪問文件的時間是當前時間之2天之內 2:訪問文件的時間大于2天小于3天 -mtime(修改時間): -ctime(改變時間): 用法同atime。
以“分鐘”為單位
-amin -mmin -cmin
根據文件權限查找:
-perm [+|-]MODE MODE:與MODE精確匹配 +MODE:任何一類用戶的取消只要包含對其指定的任何一位權限即可 -MODE:每一類用戶指定的檢查權限都匹配;
處理動作:
-print:默認處理動作,顯示 -ls:類似于ls -l顯示詳細信息 -exec COMMAND {} \; -ok COMMAND {} \; 注:一次性查找符合條件的所有文件,并一同傳遞給-exec或-ok后面指定的命令;但有些命令不能接受過長的參數;此時使用另一種方式 find | xargs COMMAND
實戰演示:
1、查找/var/目錄屬主為root且屬組為mail的所有文件;
2、查找/usr目錄下不屬于root、bin或hadoop的所有文件
3、查找/etc/目錄下最近一周內其內容修改多的,且不屬于root或hadoop的文件;
4、查找當前系統上沒有屬主或屬組,且最近1個月內曾被訪問過的文件;
5、查找/etc/目錄下大于1M且類型為普通文件的所有文件;
6、查找/etc/目錄所有用戶都沒有寫權限的文件
7、查找/etc/目錄下至少有一類用戶沒有寫權限;
8、查找/etc/init.d/目錄下,所有用戶都有執行權限且其他用戶有寫權限的文件