文件查找

    Linux上的所有資源都以文件的形式存在,如果是手工查找的話,勢必會浪費太多的時間,這里推薦倆款大家用于查找的工具。

文件查找

   文件查找經常用到的倆款軟件,locate和find

   二者區別

locate:1) 非實時查找;
        2) 依賴于索引,而索引構建非常占用資源,索引的創建是在系統空閑時系統自動進行,可以           用updatedb命令更新索引,極度耗費系統;
        3) 查找速度快;        
        4) 非精準查找(會匹配到文件路徑)。
find :  1) 實時查找(系統上實時的有就是有沒有就是沒有);        
        2) 查找速度慢
        3) 精準查找 (查找結果絕對符合查找條件才予顯示);

    1、locate

       <1>語法格式

       <2>常用選項

    2、find

       <1>語法格式

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

       <2>查找路徑:默認是當前目錄,可指定

       <3>查找條件

          根據文件名和inode查找      

              -name  "文件名稱":支持使用globbing:*, ?, [], [^],加引號表示使用globbing

              -iname "文件名稱":不區分字母大小寫,支持globbing,加引號表示使用globbing

[root@localhost /tmp]#ls
f1  F1  f2
[root@localhost /tmp]#find -iname "F*"
./f1
./f2
./F1

              -inum n          :按inode號查找

              -samefile name   :相同inode號的文件

[root@localhost /tmp]#touch f1
[root@localhost /tmp]#ln f1 f2
[root@localhost /tmp]#find -samefile f1
./f1
./f2

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

              -regex "PATTERN" :以PATTERN匹配整個文件路徑字符串,而不僅僅是文件名稱

          根據屬主、數組查找

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

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

              -uid UserID     :查找屬主為指定的UID號的文件

              -gid GroupID    :查找屬組為指定的GID號的文件

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

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

          根據文件類型查找:

              -type TYPE:

                  f: 普通文件

                  d: 目錄文件

                  l: 符號鏈接文件

                  s:套接字文件

                  b: 塊設備文件

                  c: 字符設備文件

                  p: 管道文件

          根據文件大小來查找:

              -size [+|-]#

              常用單位:k, M, G

                  # : 7k, (6, 7]

                  -#:-7k,[0,6]

                  +#:+7k,(7,∞)

          根據時間戳:

              -atime[+|-]#

              以“天”為單位;

                  # : 7, 7天前訪問的

                  +#: +7,一周前訪問的

                  -#: -7,一周之內訪問的

                  -mtime同理

                  -ctime同理

              以“分鐘”為單位:

                  -amin同理

                  -mmin同理

                  -cmin同理

          根據權限:

              -perm [/|-]MODE             

                  /MODE:任何一類(u,g,o)對象的權限中只要能一位匹配即可。

                      注:centos6:+MODE

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

                  0    : 表示不關注

          組合條件

              -a     :與

              -o     :或

              not(!) : 非

    3、處理動作                  

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

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

注意:一個命令作用在多個條件時,要加括號,否則命令將默認只作用在相鄰的條件上

[root@localhost ~]#find \( -user root -a -type f \) -ls

當然,下面的寫法可以避免這種錯誤:

[root@localhost ~]#find -user root -ls -a -type f -ls

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

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

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

[root@localhost /tmp]#ll
total 12
-rw-rw-rw-+ 2 root root 0 Aug 16 10:16 f1
-rw-rw-rw-+ 1 root root 0 Aug 16 10:17 F1
-rw-rw-rw-+ 2 root root 0 Aug 16 10:16 f2
[root@localhost /tmp]#find -iname "f*" -ok -delete {} \;
< -delete ... ./f1 > ?

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

[root@localhost /tmp]#ll
total 28
-rw-rw-rw-+ 2 zhao zhao 30 Aug 14 16:43 1
-rw-rw-rw-+ 2 zhao zhao 30 Aug 14 16:43 2
-rw-rw-rw-+ 1 root root  0 Aug 16 09:51 f1
-rw-rw-rw-+ 1 root root  0 Aug 16 10:10 test
drwxrwxrwt+ 3 root root 21 Aug 15 08:32 VMwareDnD
[root@localhost /tmp]#find -perm -002 -exec mv {} {}.danger \;
[root@localhost /tmp]#ls
1.danger  2.danger  f1.danger  test.danger  VMwareDnD.danger

注意:find在查找鏈接文件時,加/和不加/的區別

[root@localhost /tmp]#ll
total 0
drwxr-xr-x. 2 root root 18 Aug 16 15:59 a
lrwxrwxrwx. 1 root root  1 Aug 16 15:59 b -> a
[root@localhost /tmp]#find b/ -perm -113
b/b.txt
[root@localhost /tmp]#find b -perm -113
b

課后強化練習

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

[root@localhost /tmp]#find /var -user root -a -group mail

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

find /var -user root -a -user lp -a -user gdm

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

[root@localhost /tmp]#find /var -ctime -7 -a -user root -a -user postfix

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

[root@localhost /tmp]#find / -nouser -a -nogroup -a -atime -7

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

[root@localhost /tmp]#find /etc -size +1M -a -type f

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

[root@localhost /tmp]#find /etc -not -perm /222

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

[root@localhost /tmp]#find /etc -not -perm -111

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

[root@localhost /tmp]#find /etc/init.d/ -perm -111 -a -perm -002

或者

[root@localhost /tmp]#find /etc/init.d/ -perm -113

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

(0)
mfwingmfwing
上一篇 2016-08-18
下一篇 2016-08-18

相關推薦

  • N25 – 第一周博客作業

      1. 描述計算機的組成及其功能2. 按系列羅列Linux的發行版,并描述不同發行版之間的聯系和區別3. 描述Linux的哲學思想,并按照自己的理解對其進行解釋性描述4. 說明Linux系統上命令的使用格式;詳細介紹ifconfig,echo,tty,startx,export,pwd,history,sh…

    Linux干貨 2016-11-28
  • 博客作業網絡班22期+第6周(9.12-9.18)

    請詳細總結vim編輯器的使用并完成以下練習題1、復制/etc/rc.d/rc.sysinit文件至/tmp目錄,將/tmp/rc.sysinit文件中的以至少一個空白字符開頭的行的行首加#; [root@localhost /]# cp /etc/rc.d/rc.sysinit /tmp[root@localhost /]# sed -i 's/\…

    Linux干貨 2016-09-19
  • 文件查找

    文件查找     一.文件查找locate和find 1.     locate命令 非實時查找( 數據庫查找) 查詢系統上預建的文件索引數據庫 依賴于事先構建 的索引 索引的構建是在系統較為空閑時自動進行( 周期性任務) 管理員手動更新數據庫(updatedb) 索引構建過程需要遍歷整個根文件系統…

    Linux干貨 2017-08-12
  • 深入了解磁盤結構

    一、     linux中常見的磁盤:   無論什么操作系統,歸根還是要落實與磁盤上的,對于磁盤的管理也是linux管理必備的一項技能。在linux中“一切皆文件”的思想貫徹整個linux的學習中,包括像是磁盤等的硬件也是在linux的/dev/目錄下類似于文件形式的存放,常見的SATA口USB優盤或是SCS…

    Linux干貨 2016-08-29
  • Bash Shell詳解

    引言:什么是Shell? Linux的命令行接口歸結起來就是各種Shell,那么到底什么是Shell?Shell,譯為外殼,是用戶直接連入計算機所使用的計算機程序,負責解析用戶提供的命令,如詞法分析、語法分析、句法分析。 1.Shell的分類 Linux 的命令 shell 是與操作系統相分離的一層。不同的 shell 環境影響您具備不同的功能,比如可編輯的…

    2017-09-07
  • Linux 基礎知識(六.一)

    一、模式及模式間的切換 (一)模式介紹 1、vim文本編輯器提供了三種基本模式,分別是編輯模式(命令模式)、輸入模式以及末行模式(命令行模式) (二)模式間的切換 二、基礎操作 (一)單文件的打開與關閉 1、單文件的打開:vim [options]… /path/to/somefile 2、單文件打開時的常用選項: (1)+#:表示當文件打開時,…

    Linux干貨 2016-11-14

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-08-19 15:02

    文章開頭對兩個查找工具對比說明優劣,同時分別展開明,做到了有的放矢,自己做過的實驗需要自己總結出來他們之間到底有什么區別,而不是通過演示,自己體會。

欧美性久久久久