《LINUX學習:find命令詳解》要點:
本文介紹了LINUX學習:find命令詳解,希望對您有用。如果有疑問,可以聯系我們。
我們的系統中有很多文件,在我們日常使用過程中,經常必要查找一些符合某條件的文件,如果一個一個文件夾翻下來的話,無疑效率是很慢的,接下來,就給大家介紹兩個命令,能讓我們在系統中快速的查找到我們所必要的文件.
兩個命令分離為locate和find,locate很簡單,我們就簡單介紹一下,本文主要還是介紹find的具體用法.
locate命令實際上是查詢數據庫中的內容,所以搜索的速度很快,但是想要使用locate命令查詢,我們就要事先構建好索引,索引的構建過程必要遍歷整個根文件系統,極消耗資源.下面我們來說一下locate的具體用法和特點
敕令:locate
格局:locate KEYWORD
選項:? -i? 不區分年夜小寫的搜索
? ? ? ? -n N? ? 只列舉前N個匹配項目
? ? ? ? -r? 支持正則表達式
使用locate查詢,實際是對數據庫儲存內容的列出,在查找前會判定目錄有沒rx權限,如果沒有權限,依然不列出.此操作在數據庫中進行,而非實時查詢.如果我們想在不退出登錄的情況下更新數據庫,則要用到updatedb命令,該命令更新很慢,具體時間視你的系統中有多少文件而定.
由于locate
的非精確查找和非實時查找的特性,導致locate用的不多.而find
命令
支持實時查找,擁有眾多查找選項,是linux上查找最常用的,但是缺點也是比擬明顯: 如果文件數量很多的話,查找起來很慢.但那又如何,find依然是最有用且最常用的Linux查找命令.
命令:find
格式:find [OPTION]... [查找路徑] [查找條件] [處置動作]
查找路徑:指定具體目的路徑;默認為當前目錄?
查找條件:指定的查找尺度,可以文件名、大小、類型、權限等尺度進行;默認為找出指定路徑下的所有文件
處置動作:對符合條件的文件做操作,默認輸出至屏幕
-maxdepth level 最年夜搜索深度
-mindepth level? 最小搜刮深度
Example:
1 [root@ keer app]#find -maxdepth 7 2 3 . 4 5 ./dev1 6 7 ./dev1/dev2 8 9 ./dev1/dev2/dev3 10 11 ./dev1/dev2/dev3/dev4 12 13 ./dev1/dev2/dev3/dev4/dev5 14 15 ./dev1/dev2/dev3/dev4/dev5/dev6 16 17 ./dev1/dev2/dev3/dev4/dev5/dev6/dev7 18 19 [root@ keer app]#find -mindepth 7 20 21 ./dev1/dev2/dev3/dev4/dev5/dev6/dev7
-name “文件名稱”? 基于名稱的準確查找
-iname? 基于名稱忽略年夜小寫的精確查找
-inum n? 基于inode號查找(只顯示名稱,長列出則加-ls)
-samefile? 基于雷同inode號的查找(查找硬鏈接)
-links n? 硬鏈接為n的文件
-regex “PATTERN”? 支持正則(默認只支持規模,不支持通配符)
-regextype egrep -regex ? ?支持egrep同尺度的正則
Example:
1 [root@ keer app]#find -name hello 2 3 ./dev1/dev2/dev3/dev4/dev5/dev6/dev7/hello 4 5 [root@ keer app]#find -iname HELLO 6 7 ./dev1/dev2/dev3/dev4/dev5/dev6/dev7/hello 8 9 [root@ keer app]#find -inum 1310721 10 11 ./dev1 12 13 [root@ keer app]#find -inum 1310721 -ls 14 15 1310721 4 drwxr-xr-x 3 root root 4096 Aug 8 16:47 ./dev1 16 17 #因為find -regex匹配的是整個路徑,所以前面必需加.*才可以 18 19 [root@ keer app]#find . -regex ".*[a-z].*" 20 21 ./dev1 22 23 ./dev1/dev2 24 25 ./dev1/dev2/dev3 26 27 ./dev1/dev2/dev3/dev4 28 29 ./dev1/dev2/dev3/dev4/dev5 30 31 ./dev1/dev2/dev3/dev4/dev5/dev6 32 33 ./dev1/dev2/dev3/dev4/dev5/dev6/dev7 34 35 ./dev1/dev2/dev3/dev4/dev5/dev6/dev7/hello
-user 用戶名? 基于文件owner的查找
-uid userid 基于文件uid的查找
-nouser 查找沒有owner的文件
Example:
1 [root@ keer app]#find -user root 2 3 . 4 5 ./dev1 6 7 ./dev1/dev2 8 9 ./dev1/dev2/dev3 10 11 ./dev1/dev2/dev3/dev4 12 13 ./dev1/dev2/dev3/dev4/dev5 14 15 ./dev1/dev2/dev3/dev4/dev5/dev6 16 17 ./dev1/dev2/dev3/dev4/dev5/dev6/dev7 18 19 ./dev1/dev2/dev3/dev4/dev5/dev6/dev7/hello 20 21 [root@ keer app]#find -uid 0 22 23 . 24 25 ./dev1 26 27 ./dev1/dev2 28 29 ./dev1/dev2/dev3 30 31 ./dev1/dev2/dev3/dev4 32 33 ./dev1/dev2/dev3/dev4/dev5 34 35 ./dev1/dev2/dev3/dev4/dev5/dev6 36 37 ./dev1/dev2/dev3/dev4/dev5/dev6/dev7 38 39 ./dev1/dev2/dev3/dev4/dev5/dev6/dev7/hello 40 41 [root@ keer app]#find -nouser 42 43 ./aaa
-group 組名 基于文件group的查找
-gid groupid 基于文件gid的查找
-nogroup 查找沒有group的文件
Example:
1 [root@ keer app]#find -group root 2 3 . 4 5 ./dev1 6 7 ./dev1/dev2 8 9 ./dev1/dev2/dev3 10 11 ./dev1/dev2/dev3/dev4 12 13 ./dev1/dev2/dev3/dev4/dev5 14 15 ./dev1/dev2/dev3/dev4/dev5/dev6 16 17 ./dev1/dev2/dev3/dev4/dev5/dev6/dev7 18 19 ./dev1/dev2/dev3/dev4/dev5/dev6/dev7/hello 20 21 [root@ keer app]#find -gid 0 22 23 . 24 25 ./dev1 26 27 ./dev1/dev2 28 29 ./dev1/dev2/dev3 30 31 ./dev1/dev2/dev3/dev4 32 33 ./dev1/dev2/dev3/dev4/dev5 34 35 ./dev1/dev2/dev3/dev4/dev5/dev6 36 37 ./dev1/dev2/dev3/dev4/dev5/dev6/dev7 38 39 ./dev1/dev2/dev3/dev4/dev5/dev6/dev7/hello 40 41 [root@ keer app]#find -nogroup 42 43 ./aaa
-type TYPE:
f: 通俗文件
d: 目次文件
l: 符號鏈接文件
s:套接字文件
b: 塊裝備文件
c: 字符裝備文件
p: 管道文件
Example:
1 [root@ keer app]#find -type f 2 3 ./aaa 4 5 ./dev1/dev2/dev3/dev4/dev5/dev6/dev7/hello 6 7 [root@ keer app]#find -type d 8 9 . 10 11 ./dev1 12 13 ./dev1/dev2 14 15 ./dev1/dev2/dev3 16 17 ./dev1/dev2/dev3/dev4 18 19 ./dev1/dev2/dev3/dev4/dev5 20 21 ./dev1/dev2/dev3/dev4/dev5/dev6 22 23 ./dev1/dev2/dev3/dev4/dev5/dev6/dev7
與:-a(可省略)
或:-o? 非:-not, !
(非 A) 或 (非 B) = 非(A 且 B)
(非 A) 且 (非 B) = 非(A 或 B)
Example:
1 !A -a !B = !(A -o B) 2 3 !A -o !B = !(A -a B)
-size [+|-]#UNIT 根據文件年夜小來查找
常用單元:k, M, G,c(byte)
#UNIT: (#-1, #]如:6k 表現(5k,6k]
-#UNIT:[0,#-1]如:-6k 表現[0,5k]
+#UNIT:(#,∞)如:+6k 表現(6k,∞)
更直觀的可以從下圖中看出:
?
-atime [+|-]#
#UNIT: [#,#+1) 例:3 表現前3天到4天
-#UNIT:[#+1,∞]? 例:-3 表現4天以前
+#UNIT:[0,#)? 例:+3 表現三天之內
-mtime
-ctime
-amin
-mmin
-cmin
? ? 更直觀的可以從下圖中看出:
-perm
mode:準確權限匹配
? ? ? ? ? +mode[/mode] 任何一類(u,g,o)工具的權限中只要能一位匹配即可(或關系).(“+”從CentOS7開始淘汰)
? ? ? ? ? -mode 每一類對象都必需同時擁有指定權限(與關系).
注:0 表現不關注.
Example:
?? find -perm 755會匹配權限模式正好是755的文件
?? 只要當隨意率性人有寫權限時,find -perm /222就會匹配
?? 只有當每小我都有寫權限時,find -perm -222才會匹配
?? 只有當其它人(other)有寫權限時,find -perm -002才會匹配(/002也可)? ??
? ? -print 默認
? ? -delete 直接刪除所查找到的文件,不扣問.
? ? -ls 長列出所查找到的文件
? ? -fls file 將查找到的文件長列出導入到指定文件.
? ? ? ? 共同重定向使用(> file)
? ? -ok command \; 對查找到的文件當做下一敕令的參數去執行(交互式確認)
-exec command \; 對查找到的文件當做下一敕令的參數去執行(非交互式)
注:使用-ok和-exec時,必需以“ \;”結尾
Example:
1、備份以“.conf”結尾的文件,并添加.orig擴大名
find-name “*.conf” -exec cp {} {}.orig \;
2、在你的主目錄中尋找可被其它用戶寫入的文件,并撤消這些文件其他用戶的寫權限
find ~ -perm -002 -exec chmodo-w {} \;
2.4.2 參數替換xargs
在我們使用的過程中,由于很多命令不支持管道符“|”來傳遞參數,但是在我們的日常工作中有這個需要,于是,就出現了xargs命令.xargs用于產生某個命令的參數,可以讀入 stdin 的數據,并且以空格符或回車符將 stdin 的數據分割成為 arguments.在這里我們需要注意的是,文件名或者其他意義的名詞內含有空格符的情況.
當然,有些命里不能接受過多參數,這樣命令可能會執行失敗,這種情況也可以用xargs來辦理.
Example:
1、尋找以f開首的文件,并刪除.
ls f* |xargs rm
2、探求/sbin下所屬者權限位為滿的文件,并長列出.
find /sbin -perm +700 | xargs ls –l
?
說了這么多,我們來做一些練習練練手吧~活學活用能力更好的掌握喏?(?????)?
1、查找/var目錄部屬主為root,且屬組為mail的所有文件
find /var -user root -group mail -ls
2、查找/var目次下不屬于root、lp、gdm的所有文件
find /var ! \( -user root -o -user lp -o -user gdm \) -ls
3、查找/var目錄下最近一周內其內容改動過,同時屬主不為root、也不是postfix的文件
find /var -mtime +7 ! \( -user root -user postfix \) -ls
4、查找當前系統上沒有屬主或屬組,且最近一個周內曾被拜訪過的文件
find / -nouser -o -nogroup -atime +7 -ls
5、查找/etc目錄下年夜于1M且類型為普通文件的所有文件
find /etc/ -size +1M -type f -ls
6、查找/etc目次下所有用戶都沒有寫權限的文件
find /etc/ ! -perm /222 -ls
7、查找/etc目次下至少有一類用戶沒有執行權限的文件
find /etc/ ! -perm -111 -ls
8、查找/etc/init.d目次下,所有用戶都有執行權限,且其它用戶有寫權限的文件
find /etc/init.d/ -perm -113 -ls
以上.如有不敷之處還請大家多多指教喏?(?>?<?)?
Linux查找find敕令詳解?
Linux下的文件查找敕令——find?
Linux文件查找敕令之locate與find?
Linux文件搜索敕令 find?
5分鐘學會find敕令
find命令根本使用一覽
Linux根基知識:find命令的使用
本文永遠更新鏈接地址:
歡迎參與《LINUX學習:find命令詳解》討論,分享您的想法,維易PHP學院為您提供專業教程。
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/7028.html