find命令詳解

命令選項
組合條件
處理動作
實例
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分
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章