命令選項
組合條件
處理動作
實例
1,按名稱查找
2,按類型查找
3,按用戶名,組名,uid,gid查找
4,按權限查找
5,按大小查找
6,按時間查找
find 查找命令
命令格式
find 查找路徑 [選項] 查找內容
或
find [OPTION]... [查找路徑] [查找條件] [處理動作]
命令選項
-name --按名字查找
-i 忽略字母大小寫
支持使用glob(通配符) *, ?, [], [^]
-teyp --按文件類型查找
b:塊設備文檔
d:目錄
c:字符設備文檔
P:管道文檔
l:符號鏈接文檔
f:普通文檔
-size --通過文件大小查找
+n 查找出大於n的文件
-n 查找出小於n的文件
-uid 按uid查找
-gid 按gid查找
-user 按用戶名查找
-nouser 查找沒有屬主的文件
-group 按屬組名查找
-nogroup 查找沒有屬組的文件
-perm 通過權限查找
組合條件
與:-a
或:-o
非:-not, !
例:
!A -a !B = !(A -o B)
!A -o !B = !(A -a B)
找出/tmp目錄下,屬主不是root,且文件名不是fstab的文件;
find /tmp ( -not -user root -a -not -name 'fstab' ) -ls
find /tmp -not ( -user root -o -name 'fstab' ) -ls
處理動作
-exec COMMAND {} \; 對查找到的每個文件執行由COMMAND指定的命令; —— {}: 用於引用查找到的文件名稱自身;
-print:默認的處理動作,顯示至屏幕;
-ls:類似於對查找到的文件執行“ls -l”命令;
-delete:刪除查找到的文件;
-fls /path/to/somefile:查找到的所有文件的長格式信息保存至指定文件中;
-ok COMMAND {} \; 對查找到的每個文件執行由COMMAND指定的命令;
對於每個文件執行命令之前,都會交互式要求用戶確認;
注意:find傳遞查找到的文件至後面指定的命令時,查找到所有符合條件的文件一次性傳遞給後面的命令;
有些命令不能接受過多參數,此時命令執行可能會失敗;另一種方式可規避此問題:
find 查找路徑 [選項] 查找內容 | xargs COMMAND
實例
1,按名稱查找
find /etc/ -name grub.conf --查找/etc目錄下的grub.conf文件
find /etc/ -name "*.conf" --使用通配符,查找/etc/目錄下的以.conf結尾的文件,這裏一定加上引號,否則會出現問題
find /etc/ -name ".*" --查找etc下所有隱藏文件
find /test/ -iname Aaa --忽略大小寫加上-i
通配符(不是正則表達式):
? --匹配單個任意字符
* --0個或多個任意字符
[a-z] --匹配單個字母
[0-9] --匹配單個數字
--定義查找的目錄層次
find /test/ -maxdepth 1 -name aaa
/test/aaa
# find /test/ -maxdepth 2 -name aaa
/test/aaa
/test/a/aaa
2,按類型查找
find /etc -type l |grep grub.conf
find /etc -type l -name grub.conf --與-name參數一起寫
find / -type f --普通文件
find / -type b --塊文件
find / -type s --socket文件
find / -type c --字符文件
find / -type p --管道文件
find / -type d --目錄
find / -type l --鏈接文件
3,按用戶名,組名,uid,gid查找
find / -user a
find / -group a
find / -uid 533
find / -gid 533
find / -nouser --查出系統的無頭文件,就是指沒有屬主的文件
find / -nogroup --查出系統的沒有屬組的文件
沒有屬主和屬組的文件,系統管理一般是要去注意的
4,按權限查找
find / -perm 777 --查出所有權限爲777的文件,一般也是管理員要注意的
練習:
ll
total 0
-rwxr-xrwx. 1 root root 0 Jul 23 11:42 1
---------x. 1 root root 0 Jul 23 11:42 10
-rwx--xr--. 1 root root 0 Jul 23 11:42 2
-rw-rw--wx. 1 root root 0 Jul 23 11:42 3
-r-xrwx---. 1 root root 0 Jul 23 11:42 4
-r---w--w-. 1 root root 0 Jul 23 11:42 5
--wx-wx-wx. 1 root root 0 Jul 23 11:42 6
--w-r-x--x. 1 root root 0 Jul 23 11:42 7
---xrw-r-x. 1 root root 0 Jul 23 11:42 8
----rwxr--. 1 root root 0 Jul 23 11:42 9
# find . -perm +422 --只有7和10兩個文件不符合。+號的意思表示把權限寫成9位,然後位與位對比,只要有一位重合,則找出來
# find . -perm -422 --只查出3和5兩個文件。-號的意思表示位與位對比,要全部包含重合,則找出來
例:假設/etc/目錄下所有文件owner和group爲root.root,我要查找一個普通用戶user1在/etc/下能讀能寫的文件.
find /etc/ -perm -006
5,按大小查找
find / -size +500M --單位有k,m,g等
find / -size +1G
find /etc -size +50k
find /etc -size +50b (b在這裏不是代表byte,是代表block,並且還不是系統的4096大小的block,這裏的大小爲512byte)
find / -size -1M
find / -size +3c (c在這裏代表byte)vimn
find / -size +80M -size -100M
6,按時間查找
# stat 1 |tail -3
Access: 2014-07-23 11:56:42.297572398 +0800 --atime 閱讀過,用cat,tail,head,more,less命令等或者vi訪問過,但沒有修改;執行過也會改變
Modify: 2014-07-23 11:56:44.836572907 +0800 --mtime 修改過內容,用vi修改過或者echo一個值重定向
Change: 2014-07-23 11:56:44.856885177 +0800 --ctime 改變過內容,屬主,屬組,權限,創建軟鏈接,硬鏈接等
-mtime n --代表n天前的24小時內
+n --代表n天前(不包含n天本身的24小時)
-n --代表n天內
1 2 3 4 5 6 7
|-- 2 --|
<------- -2 | | +2 --------------->
find / -mtime 0 --0代表目前當天的24小時
find / -mtime +1 --修改時間48小時之前
find . -mtime -1 --修改時間往推24小時到現在甚至到將來
find / -mtime 1 --往前推24小時到推48小時之內
-mmin
-amin --與mtime,atime,ctime的單位不同,這是以分鐘爲單位
-cmin
# find / -mmin +30 -mmin -150 --查看30分鐘前到150分鐘前之內的兩個小時內有哪些文件被修改過內容
現在的時間爲2014年7月23號14:35分,我現在想查出7月20號那一天哪些文件被修改過內容怎麼做?
find / -mtime 3 --這樣做代表的是7月19號14:35分到7月20號14:35分