find文件查找

文件查找

     在文件系統上查找符合條件的文件:

     實現工具:locate,find

locate:

     構建于實現構建好的索引庫:/var/lib/mlocate/mlocate.db

     系統自動實現(周期性任務);

     手動更新數據庫(updatedb);

    工作特性:

         查找速度快(基于數據庫查找);

         模糊查找;

         非實時查找;

     locate [OPTION]… PATTERN…

         -b:只匹配路徑中的基名

         -c:統計出共有多少個符合條件的文件

         -r:REGEXP

         -i:忽略大小寫

         -n #:只列舉前N個匹配到的文件

    

         注意:索引構建過程需要遍歷整個跟文件系統,極消耗系統資源

    

find:

    實時查找工具,通過遍歷指定起始路徑下文件系統層級結構完成文件查找

     工作特性:

         查找速度略慢;

         精確查找;

         實時查找;

     用法:

         find [OPTIONS] [查找起始路徑] [查找條件] [查找過后的處理動作]

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

         查找條件:指定的查找標準,可以根據文件名、大小、類型、從屬關系、權限等標準進行;默認為找出指定路徑下的所有文件

         處理動作:對符合查找條件的文件做出操作,例如刪除等操作;默認為輸出至標準輸出

    

    

     查找條件:

         表達式:選項和測試

         測試:結果通常為布爾型("true"或"false")

    

         根據文件名查找:

             -name  "pattern"

             -iname "pattern"

             支持glob風格的通配符

                  *,?,[],[^]

             -inum Inode:根據Inode號查找

             -samefile NAME:相同inode號的文件

             -links #:鏈接數為#的文件

             -regex pattern:基于正則表達式模式查找文件,匹配是整個路徑,而非其名

    

    

    

         根據從屬關系查找:

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

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

             -uid UID:查找屬主指定的UID的所有文件

             -gid GID:查找屬組指定的GID的所有文件

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

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

        

         根據文件類型查找:

             -type TYPE:根據指定的文件類型查找文件

             f:普通文件

             d:目錄文件

             l:鏈接文件

             p:管道文件

             s:套接字文件

             b:塊設備文件

             c:字符設備文件

        

         組合測試:

             與:-a,默認組合邏輯

             或:-o

             非:-not,!

    

          摩根定律:

            ALL=123456789

            

            A=123 !A=456789

            B=345 !B=126789

            

            A∩B=3

            A∪B=12345

            

            !A∩!B=6789

            !A∪!B=12456789

            

            !A∪!B=!(A∩B)

            !A∩!B=!(A∪B)

    

    

    

         根據文件的大小查找:

             -size [+|-]#UNIT

             常用單位:k,M,G

            

             #UNIT:(#-1,#]

             -#UNIT:[0,#-1]

             +#UNIT:(#,oo)

    

    

         根據時間戳查找:

             以"天"為單位查找:

                 -atime [+|-]#

                 #:[#,#+1]

                 -#:[#,0]

                 +#:[oo,#]

                

                 -mtime

                 -ctime

        

              以"分鐘"為單位查找:

                 -amin

                 -cmin

                 -mmin

        

    

         根據權限查找:

             -perm [/|-]]mode

             mode:精確權限匹配;

              /mode:任何一類用戶(u,g,o)的權限中的任何一位(r,w,x)符合條件的滿足

                 9位權限之間存在"或"關系

             -mode:每一類用戶(u,g,o)的權限中的每一位(r,w,x)同時符合條件的滿足

                 9位權限之間存在"與"關系

        

        

         處理動作:

             -print:輸出至標準輸出;默認的動作

             -ls:類似于對查找到的文件執行"ls -l"命令,輸出文件的詳細信息

             -delete:刪除查找到的文件

             -fls /PATH/TO/SOMEFILE:把查找到的所有文件的長格式信息保存至指定文件中

             -ok COMMAND {} \; :對查找到的每一個文件執行COMMAND表示的命令;每次操作都由用戶確認

             -exec COMMAND {} \; :對查找到的每個文件執行COMMAND表示的命令;直接修改

        

         注意:find傳遞查找到的文件路徑至后面的命令時,是先查找出所有符合條件的文件路徑,并一次性傳遞給后面的命令

         但是有些命令不能接受過長的參數,此時命令執行會失敗,另一種方式可規避次問題

         find | xargs COMMAND

練習:

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

find /var/ -user root -a -group mail

2.查找/usr目錄下不屬于root,bin或hadoop的所有文件或目錄;用兩種方法

find /usr/ -not -user root -a -not -user bin -a -not -user hadoop
find /usr/ -not \( -user root -o -user bin -o -user hadoop \)

3.查找/etc目錄下最近一周內其內容修改過,且屬主不是root用戶也不是hadoop用戶的文件或目錄

find /etc/ -mtime -7 -a \( -not -user root -a -not -user hadoop \)
find /etc/ -mtime -7 -a -not \( -user root -o -user hadoop \)

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

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

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

find /etc/ -size +1M -a -type f

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

find /etc/ -not -perm /222 -ls

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

find /etc/ -not -perm -111 -ls

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

find /etc/init.d/ -perm -113

9./tmp目錄,不是目錄,并且還不能是套接字類型文件

find /tmp/ -not -type d -a -not -type s
find /tmp/ -not \( -type d -o -type s \)

10./tmp/目錄下,屬主不是user1或不是目錄的文件

find /tmp/ \( -not -user user1 -o -not -type d \)
find /tmp/ -not \( -user user1 -a -type d \)

11.查找當前系統上沒有屬主或數組且最近1天內曾被訪問過的文件,并將其屬主數組均修改為root

find / \( -nouser -o -nogroup -a -atime -1 \) -exec chown root:root {} \;

12.查找/etc目錄下大于1M的文件,并將其文件名寫入/tmp/etc.largefiles文件中

find /etc/ -size +1M > /tmp/etc.largefiles

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

(0)
zhai796898zhai796898
上一篇 2016-08-22 09:29
下一篇 2016-08-22 09:29

相關推薦

  • 詳解linux磁盤管理

                           磁盤管理 設備文件 1. I/O ports:I/O設備地址 2. 一切皆文件,open(),read(),write(),close(),對設備的操作也都是通     過這…

    Linux干貨 2016-08-29
  • LVS –負載均衡基礎

    一 負載均衡的五種解決方案 1 http重定向 HTTP重定向就是應用層的請求轉發。用戶的請求其實已經到了http重定向負載均衡服務器,服務器根據算法要求用戶重定向,用戶收到重定向請求后,再次請求真正的集群。 優點:簡單 缺點:性能較差 2 DNS域名解析負載均衡 DNS域名解析負載均衡就是在用戶請求DNS服務器,獲取域名對應的IP地址時,DNS根據服務器直…

    Linux干貨 2017-06-22
  • N25期–第十五周作業

    1、 總結sed和awk的詳細用法; 2、刪除/boot/grub/grub.conf文件中所有行的行首的空白字符; # sed ‘s@^[[:space:]]\+@@’ /boot/grub/grub.conf 3、刪除/etc/fstab文件中所有以#開頭,后跟至少一個空白字符的行的行首的#和空白字符; # sed ‘s@^#[[:space:]]*@@…

    Linux干貨 2017-05-08
  • 如何正確安裝一個源碼包

        下周就要考試了,心情挺忐忑不安的,前幾天做了25期的考試題,感覺每個題都是老師上課講過的,但是自己做卻想不起來了。這應該就像學習數學一樣,需要大量練習,做的多了自然就會了。     這周我們學習了如何使用yum,還學習了磁盤管理。針對如何安裝源碼包,以httpd包為例我們…

    2017-08-19
  • TIME_WAIT引起Cannot assign requested address報錯

    1.  問題描述      有時候用redis客戶端(php或者java客戶端)連接Redis服務器,報錯:“Cannot assign requested address?!?     原因是客戶端頻繁的連接服務器,由于每次連接都在很短時間內結束,導致很多的TIME_WAIT。所以新的連…

    Linux干貨 2016-03-09
  • DNS簡單配置

    正向解析,反向解析,主從, 主:主配置文件:options {        listen-on port 53 { 127.0.0.1; 172.16.252.194; };  //監聽的端口,即哪些主機可以進行訪問        directory   &…

    Linux干貨 2017-05-24
欧美性久久久久