shell四劍客之find

find命令詳解


### 命令格式

find pathname -options [-print -exec -ok]

### 命令參數

pathname:find命令所查找的目錄路徑。例如用.表示當前目錄,用/來表示系統根目錄
-print:find命令將會匹配的文件輸出到標準輸出。-exec: find命令對匹配的文件執行該參數所給出的shell命令。相應命令的形式為'command' {  } \;,注意{   }和\;之間的空格。-ok: 和-exec的作用相同,只不過以一種更為安全的模式來執行該參數所給出的shell命令,在執行每一個命令之前,都會給出提示,讓用戶來確定是否執行。### 命令選項

-name   按照文件名查找文件。-perm   按照文件權限來查找文件。-prune  使用這一選項可以使find命令不在當前指定的目錄中查找,如果同時使用-depth選項,那么-prune將被find命令忽略。-user   按照文件屬主來查找文件。-group  按照文件所屬的組來查找文件。-mtime -n +n  按照文件的更改時間來查找文件, - n表示文件更改時間距現在n天以內,+ n表示文件更改時間距現在n天以前。find命令還有-atime和-ctime 選項,但它們都和-m time選項。-nogroup  查找無有效所屬組的文件,即該文件所屬的組在/etc/groups中不存在。-nouser   查找無有效屬主的文件,即該文件的屬主在/etc/passwd中不存在。-newer file1 ! file2  查找更改時間比文件file1新但比文件file2舊的文件。-type  查找某一類型的文件,諸如:b - 塊設備文件。
d - 目錄。
c - 字符設備文件。
p - 管道文件。
l - 符號鏈接文件。
f - 普通文件。
-name "文件名稱":支持使用glob *, ?, [], [^] 
-iname "文件名稱":不區分字母大小寫 -inum n  按inode號查找 
-samefile name  相同inode號的文件 -links n   鏈接數為n的文件 
-regex "PATTERN":以PATTERN匹配整個文件路徑字 符串,而不僅僅是文件名稱另外,下面三個的區別:

amin n   查找系統中最后N分鐘訪問的文件
-atime n  查找系統中最后n*24小時訪問的文件-cmin n 查找系統中最后N分鐘被改變文件狀態的文件-ctime n  查找系統中最后n24小時被改變文件狀態的文件-mmin n   查找系統中最后N分鐘被改變文件數據的文件-mtime n  查找系統中最后n24小時被改變文件數據的文件

常用實例1. find -atime -2超過48小時內查看或者執行的文件
2. find . -name ".log"查找當前目錄以.log結尾的文件
3. find /var/log -perm 777查找/var/log目錄下權限為777的文件
4. find . -type f -name ".log"查找當前目錄以.log為結尾的普通文件
5. find . size +10M -print查找當前目錄大于1M的文件
6. find .-type d | sort查找當前所有目錄并且排序
7. find -name april*  fprint file    在當前目錄下查找以april開始的文件,并把結果輸出到file中
8. find -name ap* -o -name may*    查找以ap或may開頭的文件
9. find /mnt -name tom.txt -ftype vfat 在/mnt下查找名稱為tom.txt且文件系統類型為vfat的文件
10.find /mnt -name t.txt ! -ftype vfat  在/mnt下查找名稱為tom.txt且文件系統類型不為vfat的文件
11.find /tmp -name wa* -type l  在/tmp下查找名為wa開頭且類型為符號鏈接的文件
12.find /home -mtime -2  在/home下查最近兩天內改動過的文件
13.find /home -atime -1  查1天之內被存取過的文件
14.find /home -mmin +60 在/home下查60分鐘前改動過的文件
15.find /home -amin +30  查最近30分鐘前被存取過的文件
16.find /home -newer tmp.txt 在/home下查更新時間比tmp.txt近的文件或目錄
17.find /home -anewer tmp.txt 在/home下查存取時間比tmp.txt近的文件或目錄
18.find /home -used -2 列出文件或目錄被改動過之后,在2日內被存取過的文件或目錄
19.find /home -user cnscn 列出/home目錄內屬于用戶cnscn的文件或目錄
20.find /home -uid +501 列出/home目錄內用戶的識別碼大于501的文件或目錄
21.find /home -group cnscn 列出/home內組為cnscn的文件或目錄
22.find /home -gid 501 列出/home內組id為501的文件或目錄
23.find  /home -nouser 列出/home內不屬于本地用戶的文件或目錄
24.find /home -nogroup 列出/home內不屬于本地組的文件或目錄
25.find /home -name tmp.txt -maxdepth 4 列出/home內的tmp.txt 查時深度最多為3層
26.find /home  -name tmp.txt -mindepth  3 從第2層開始查
27.find /home -empty  查找大小為0的文件或空目錄
28.find /home -size +512k 查大于512k的文件
29.find /home -size -512k  查小于512k的文件
30.find /home -links  +2  查硬連接數大于2的文件或目錄
31.find /home = -perm =0700  查權限為700的文件或目錄
32.find /tmp -name tmp.txt -exec cat {} \;查找/tmp下的tmp.txt文件并且執行catfind

組合條件: 與:-a 或:-o 非:-not, !

德·摩根定律:

非(P 且 Q) = (非 P) 或 (非 Q) 非(P 或 Q) = (非 P) 且 (非 Q)

!A -a !B = !(A -o B)

!A -o !B = !(A -a B) 在實際操作中,要查找的文件要滿足好幾個條件,這時-a -o -not ! 選項就特別的好用了。下面舉幾個例子

  1. 查找/var 目錄下書諸位root,且屬組為mail的所有文件

[root@centous1 ~]# find /var -user root -a -group mail/var/spool/mail
  1. 查找/var目錄下不屬于root、ip、gdm的所有文件

[root@centous1 ~]# find /var -not \( -user root -o -user ip -o gdm \)
  1. 查找/var目錄下最近一周內其內容修改過,同時屬主不為root,也不是postfix的文件

[root@centous1 ~]# find /var -atime -7 -not \( -user root -o -user postfix \)
/var/log/mysqld.log/var/spool/mail/basher
/var/spool/mail/user1
/var/spool/mail/zabbix
/var/spool/mail/rpc
/var/spool/mail/user2
  1. 查找當前系統上沒有屬主或屬組,且最近一個周內曾被訪問過的文件

find / \( -nouser -o -nogroup \) -atime -7
  1. 查找/etc目錄下大于1M且類型為普通文件的所有文件

[root@centous1 ~]# find /etc -size +1M -type f/etc/selinux/targeted/modules/active/policy.kern
/etc/selinux/targeted/policy/policy.24
  1. 查找/etc目錄下所有用戶都沒有寫權限的文件

[root@centous1 ~]# find /etc/ -not -perm /222 -ls (這里注意222前面用的是/ )265076    4 -r--r--r--   1 root     root           80 9月  1  2014 /etc/lvm/profile/thin-performance.profile265074    4 -r--r--r--   1 root     root          827 10月 16  2014 /etc/lvm/profile/metadata_profile_template.profile265073    4 -r--r--r--   1 root     root         2231 10月 16  2014 /etc/lvm/profile/command_profile_template.profile265075    4 -r--r--r--   1 root     root           76 9月  1  2014 /etc/lvm/prof
mode 精確權限匹配

/mode 每一位只要有一類匹配的就行

-mode 每一類必須同時擁有mode指定的權限0 表示不關注,權限隨意
  1. 查找/etc目錄下至少有一類用戶沒有執行權限的文件

[root@centous1 ~]# find /home/ -not -perm -111 -ls1831429    4 drwx------   4 nologin  nologin      4096 8月  8 05:32 /home/nologin1831433    4 -rw-r--r--   1 nologin  nologin        18 10月 16  2014 /home/nologin/.bash_logout
  1. 查找/etc/init.d目錄下,所有用戶都有執行權限,且其它用戶有寫權限的文件

[root@centous1 ~]# find /etc/init.d/ -perm -113

原創文章,作者:forest,如若轉載,請注明出處:http://www.www58058.com/36405

(0)
forestforest
上一篇 2016-08-22
下一篇 2016-08-22

相關推薦

  • 計算機的組成

        計算機組成(computer composition)指的是系統結構的邏輯實現,包括機器機內的數據流和控制流的組成及邏輯設計等。 計算機組成的任務是在指令集系統結構確定分配給硬件系統的功能和概念結構之后,研究各組成部分的內部構造和相互聯系,以實現機器指令集的各種功能和特性。這種聯系包括各功能部件的內部和相   &nbsp…

    2017-03-26
  • N22-第三周博客作業

    1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。 sort -u 在輸出結果中去除重復行 2、取出最后登錄到當前系統的用戶的相關信息。 3、取出當前系統上被用戶當作其默認shell的最多的那個shell。 uniq -c 在輸出行前面加上每行在輸入文件中出現的次數。 sort -rn : -n  …

    Linux干貨 2016-08-29
  • debian8下安裝配置部署zabbix3.0

    一、安裝配置zabbix server     web server服務器:172.28.0.187     mysql服務器:172.28.0.237     1、安裝web server(172.28.0.187)  &nbs…

    Linux干貨 2016-05-07
  • Hello World 集中營

    編程的人應該都知道什么是Hello World。這是一個最簡單的程序,其只在屏幕上輸出“Hello World”字樣,這通常是初學者的在學習編程時的第一個示例。把打印出 “Hello World” 作為第一個范例程序,現在已經成為編程語言學習的傳統。“Hello World”起源于Brian Kernighan 和Dennis MacAlistair Rit…

    2016-05-17
  • Linux終端類型

    Linux中各種終端的解釋 設備終端   鍵盤鼠標顯示器 物理終端( /dev/console ) )   在Linux 系統中,計算機顯示器通常被稱為控制臺終端(Console)。 虛擬終端(tty :teletypewriters, /dev/tty# # 為[1-6])   tty 可有n 個,Ctrl+Alt+…

    Linux干貨 2016-10-13
  • 高級文件系統管理之磁盤配額及RAID的運用

    本章內容 設定文件系統配額 設定和管理軟RAID設備 一,概述 配置配額系統: 綜述 在內核中執行 以文件系統為單位啟用 磁盤配額最小單位是以文件系統為單位啟用,就是一個掛載點,而不能以目錄為單位 對不同組或者用戶的策略不同 根據塊或者節點進行限制 執行軟限制(soft limit) 硬限制(hard limit) 初始化 分區掛載選項:usrquota、g…

    Linux干貨 2016-09-07
欧美性久久久久