文本查找之find組合拳

find命令不僅能幫助我們在數目眾多的文件中快速找到滿足條件的文本,我們還能通過find處理動作對查找到的文件進行進一步的處理。

一、find的特點:

              遍歷查找,因此查找速度略慢

              精確查找

              實時查找

二、find用法:

              find [OPTION]… [ 查找路徑] [ 查找條件] [ 處理動作]

查找路徑:指定具體目標路徑;默認為當前目錄

查找條件:指定的查找標準,可以文件名、大小、類型、權限等標準進行

處理動作:對符合條件的文件做操作,默認輸出至屏幕

       三、find查找條件:

1、根據文件名查找:

                     -name “文件名”: 文件支持glob通配符

                     -iname “文件名”: 查找時忽略文件名大小寫

                     -inum  “文件inode號”: 根據文件inode號碼查找

                     -links “鏈接數” :查找具有指定連接數的文件

                     -regex “pattern” :查找匹配”pattern”的文件,支持正則表達式

例(1)、查找當前目錄下以sum開頭的文件

blob.png

              2、根據屬主、屬組查找

                     -user username : 查找屬主為指定用戶的文件

                     -uid userid: 查找uid為指定id的文件

                     -group groupname: 查找屬組為指定組的文件

                     -gid groupid: 查找gid為指定gid的文件

                     -nouser:查找沒有屬主的文件

                     -nogroup: 查找沒有屬組的文件

例(2)、查找系統中屬主為hadoop的文件

blob.png

              3、根據文件類型查找:

                     -type filetype:

                          f:  普通文件

d:  目錄文件

l:  符號鏈接文件

s : 套接字文件

b:  塊設備文件

c:  字符設備文件

p:  管道文件

例(3)、 查找/etc/目錄下的連接文件

blob.png

             4、組合條件:如果要查找滿足不止一個特定條件的文件,就需要將這些條件組合起來。條件的組合有以下形式:

                  與:-a

或:-o

非:-not, !

              同時,組合條件遵循德摩根定律:

                     (非A) 且 (非B ) = 非(A 或 B)  !A -a !B = !(A -o B)

                     (非A) 或 (非B ) = 非(A 且 B)  !A -o !B = !(A -a B)

   例(4)、找出/tmp 目錄下,屬主不是root ,文件名不是以p開頭的文件 ,用德摩根定律實現兩種查找方式。

第一種:

blob.png

第二種:

 blob.png

5、根據文件大小來查找

                     -size  [+|-]nunit:

                            常用的單位有k、M、G

                     -size 6k: 查找的文件大小等于6k的文件,它的范圍為(5K, 6k]

                     -size -6k:查找文件大小小于6k的文件,它的范圍為[0,5k]

                     -size +6K:查找文件大小大于6k的文件,它的范圍為(6,∞),不包含6k。

blob.png

6、根據時間戳查找

              以“天”為單位;

-atime  [+|-]n,

n: [n,n+1):比如查找第7天被訪問過的文件,-atime 7查找范圍為[7,8)

+n: [n+1, ∞ ]:查找7天前被訪問過的文件,-atime +7查找范圍為[8, ∞)

-n: [0,n):查找7天之內被訪問過的文件,-atime -7查找范圍為[0,7),0表示現在

-mtime

-ctime

以“分鐘”為單位:

-amin

-mmin

-cmin

blob.png

7、根據權限查找

              -perm [/|-]mode:

                     mode  :  精確權限匹配

/mode:任何一類(u,g,o) 對象的權限中只要能一位匹配即可,或關系,+ 從centos7 開始淘汰

-mode:每一類對象都必須同時擁有指定權限,與關系。

                     0表示不關注

       例:匹配所有用戶只要寫權限的文件,find  -perm  222

              匹配任何一類用戶有寫權限的文件,find  -perm  +222

              匹配所有用戶都要寫權限的文件,find  -perm  -222

              匹配其他用戶有寫權限的文件,find  -perm  -002

    四、處理動作

    print :默認的處理動作,顯示至屏幕;

    -ls :類似于對查找到的文件執行“ls -l” 命令

    -delete :刪除查找到的文件;

    -fls  file :查找到的所有文件的長格式信息保存至指定文件中

    -ok  COMMAND {} \;  對查找到的每個文件執行由COMMAND 指定的命令;對于每個文件執行命令之前,都會交互式要求用戶確認

           -exec  COMMAND  {}  \;  對查找到的每個文件執行由COMMAND指定的命令

              {}:  用于引用查找到的文件名稱自身

注:find 傳遞查找到的文件至后面指定的命令時,查找到所有符合條件的文件一次性傳遞給后面的命令。

    有些命令不能接受過多參數,此時命令執行可能會失敗,下面方式可規避此問題

find  |  xargs  COMMAND

五、示例

1、查找/var目錄下屬主為root,且屬組為mail的所有文件

find /var -user root -a -group mail

blob.png

2、查找/var目錄下不屬于root、lp、gdm的所有文件

find /var ! \( -user root -o -user lp -o -user gdm \) -ls

blob.png

3、查找/var目錄下最近一周內其內容修改過,同時屬主不為root,也不是postfix的文件

find /var -mtime -7 -a ! \( -user root -o -user postfix \) | xargs  stat

blob.png

4、查找當前系統上沒有屬主或屬組,且最近一個周內曾被訪問過的文件

find / \( -nouser -o -nogroup \) -a -atime -7 -ls

blob.png

5、查找/etc目錄下大于1M且類型為普通文件的所有文件

find /etc/ -size +1M  -ls

6、查找/etc目錄下所有用戶都沒有寫權限的文件

find /etc ! -perm +222 -ls

blob.png

7、查找/etc目錄下至少有一類用戶沒有執行權限的文件

find /etc/ ! -perm -111 -ls

8、查找/etc/init.d目錄下,所有用戶都有執行權限,且其它用戶有寫權限的文件

find /etc/init.d/ -perm -111 -a -perm -002

原創文章,作者:M20-1鐘明波,如若轉載,請注明出處:http://www.www58058.com/36091

(0)
M20-1鐘明波M20-1鐘明波
上一篇 2016-08-15
下一篇 2016-08-15

相關推薦

  • 馬哥教育網絡班21期+第13周課程練習

    1、建立samba共享,共享目錄為/data,要求:(描述完整的過程)   1)共享名為shared,工作組為magedu;   2)添加組develop,添加用戶gentoo,centos和ubuntu,其中gentoo和centos以develop為附加組,ubuntu不屬于develop組;密碼均為用戶名;   3)添加s…

    Linux干貨 2016-08-24
  • 一個簡單小例子來說一下Rescue營救模式

    昨天不小心將/lib64下的一個動態庫文件libc.so.6(很多命令都依賴的)給移動到了/root下,然后除了一些內部命令可用外,其余命令都不能用了,然后就想著看看重啟可不可以修復,結果重啟后就再也開不了機了,心想著這可咋整,要不用最快的方式進行快照恢復吧,結果老師就說了,不能使用快照,讓我們使用Rescue營救模式進行恢復,然后在恢復的過程中就發現一個問…

    Linux干貨 2017-08-21
  • python 常用記錄

    all() >>> a = [11,22,33] >>> all(a) >>> ture 對序列進行判斷,如果全為真,則返回Ture >>> a = [11,22,0] >>> a…

    Linux干貨 2016-09-19
  • bash進階學習ing

    使用read命令來接受輸入使用read來把輸入值分配給一個或多個shell變量: -p 指定要顯示的提示 -t TIMEOUT read 從標準輸入中讀取值,給每個單詞分配一個變量所有剩余單詞都被分配給最后一個變量read -p “Enter a filename: “ FILE 條件選擇if語句選擇執行:注意: if語句可嵌套單分支if 判斷條件: the…

    Linux干貨 2016-08-21
  • 小型網站MYSQL問題一:MyISAM轉Innodb的方法

    故事背景:之前公司的數據庫存儲引擎全部為MyISAM,數據量和訪問量都不是很大,也一直沒有什么問題。我最近接手一些運維工作,兼DBA,因為業務上面涉及到錢,所以決定換成支持事物的innodb。下面將操作步驟記錄以下。 1、導出mydb數據庫的表結構 mysqldump -d -uxxx -p mydb &gt…

    Linux干貨 2015-12-19
  • MySQL入門命令知識

    簡單介紹下吧,MySQL應用的場景大多數互聯網公司第一次賣身是賣個了sun好像是10億,第二次是連同sun自己,以74億美元被賣給了Orecle~后面MySQL原作者站出來說,MySQL會存在閉源風險,整了個MariaDB~我也是醉了,也不考慮下我們的痛苦!下面簡要介紹下MySQL的入門知識。    一、MySQL有三種定義語言 &nbs…

    2016-12-05

評論列表(2條)

  • 馬哥教育
    馬哥教育 2016-08-19 14:26

    find命令是筆試中常見的考點,同時find的處理動作也是很重要的,希望課后能多加練習,熟練掌握。

欧美性久久久久