文件查找命令之locate、find簡析

文件查找命令之locate、find簡析

   在工作中經常會在文件系統上查找符合條件的文件,今天學習了文件查找命令,在此簡析locate和find兩個文件查找工具。

一、雜項知識整理

1、find的選項-user的實質是通過UID查找,如果兩個用戶的UID相同,其會顯示兩個用戶的所有符合條件的文件。

2、查找時-name "*.txt"中的文件名必須加雙引號。

3、find查找的時候,如果對象是個目錄的軟鏈接,需要加/,如果不加/則默認把目錄看做一個文件進行查找,加了/之后會通過鏈接進入真是目錄中進行文件的查找,例如:

[root@localhost etc]# find /etc/rc3.d -perm /200
/etc/rc3.d
[root@localhost etc]# find /etc/rc3.d/ -perm /200
/etc/rc3.d/
/etc/rc3.d/K50netconsole
/etc/rc3.d/S10network

4、按時間和大小查找的圖解:

按大小查找.png

按時間查找.png

二、命令詳解及事例

1、locate命令:在文件系統上查找符合條件的文件:

    依賴于實現構建好的索引庫,其索引庫是系統自動建立并周期性自動更新的,手動更新數據庫用updatedb。

    工作特性:查找速度快,模糊查找,非實時查找,更新數據庫索引需要遍歷整個根文件系統,極其消耗系統資源。

    -b 只查找路徑中的基名

    -r 擴展正則表達式

    -c 統計出共多少個符合條件,-bc 

    -w 路徑名

    -i 忽略字符大小寫

    -n # 只列舉前#個匹配項目

[root@localhost ~]# locate -c *.sh
2
[root@localhost ~]# locate *.sh
/root/a.sh
/root/a.sh.bak
[root@localhost ~]# updatedb

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

工作特性:查找速度略慢,精確查找,實時查找

用法:find [查找起始路徑] [查找條件] [執行動作]

    起始路徑:默認當前目錄

    條件:指定的查找標準,大小類型從屬關系等

    動作:對符合條件的文件作出的操作,例如刪除等,默認為輸出至標準輸出,-print

    -name “PATTERN”

    -iname "PATTERN"

        支持glob風格的通配符;

    -regex PATTERN

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

    -user NAME 查找屬主指定用戶的所有文件

    -group NAME 查找屬組指定用戶的所有文件

    -uid NUM 指定UID的所有文件

    -gid NUM

    -nouser 查找沒有屬主的用戶的所有文件

    -nogroup 查找沒有屬組的用戶的所有文件

    -type TYPE

        f d l b c字符設備文件 p s 

   組合邏輯:

    -a 與

    -o 或

    -not或!非

   按文件大小查找

    -size NUM

        -NUM

        +NUM

   按時間查找:以天為單位:

    -atime 訪問時間

        # -# +#

    -mtime -ctime

    以分鐘為單位

        -amin 訪問時間 -mmin 修改時間 -cmin改變時間

   根據權限匹配

    -perm /mode 任何一類用戶的權限中的任何一位符合條件即滿足

        -mode 每一類用戶的權限中的每一位同時符合條件即滿足

        mode 精確權限匹配

  處理動作:

    -print 輸出標準輸出,默認的動作

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

    -delete 刪除查找到的文件

    -fls /PATH/FILE 保存至指定路徑文件中

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

    -exec COMMAND {}\; 對查找到的每個執行由COMMAND表示的命令,直接執行不需要確認。

    find傳遞查找到的文件路徑至后面的命令時,是先查找出所有符合條件的文件路徑,并一次性傳遞給后面的命令,但是有些命令不能接受過長的參數,此時命令執行會失敗,另一種方式可以規避此問題:

    xargs命令:xargs是一條unix和類unix操作系統的常用命令,他的作用是將參數列表轉換成小塊分段傳遞給其他命令,以避免參數該列表過長的問題。

find | xargs COMMAND

用xargs實現多參數的命令處理:xargs -i{} COMMAND

[root@localhost tmp]# find /testdir/shelltest/  -name m* | xargs -i{} cp {} ./
[root@localhost tmp]# ls
mysh10.sh  mysh13.sh  mysh16.sh  mysh19.sh  mysh21.sh  mysh4.sh  mysh7.sh

避開某個目錄:-prune,例如:

find /etc -path ‘/etc/sane.d’ (-a) -prune -o -name "*.conf

    -prune就像一個判斷語 句,當發現-prune前面的表達式math時,執行到-prune之后就會輸出一個1結果,如果shell的話,可以使用echo $?來看結果,如果-prune后面跟的是-o選項,用c語言的語法來講的話就是1 || -print,所以明顯可以看到當-prune前面的 表達式成立的話,就不會執行-o后面的內容了,如果不成立,即0 || -print,那么將打印輸出,另外需要注意的是-path路徑不能加入 結尾的/,比如路徑/vobs/gliethttp/signature,不能寫成/vobs/gliethttp/signature/如果find .那么后面-path的必須使用相對路徑./gliethttp除 find中.之外,其他所有查找,比如find tmp或者find /vobs等,-path都必須使用絕對路徑。

[root@localhost test]# ls
ch.sh          mysh13.sh.bak  mysh17.sh.bak  mysh20.sh.bak     mysh4.sh.bak  mysh8.sh.bak
mysh10.sh.bak  mysh14.sh.bak  mysh18.sh.bak  mysh21.sh.bak     mysh5.sh.bak  mysh9.sh.bak
[root@localhost test]# cd ..
[root@localhost tmp]# ls
mysh10.sh  mysh13.sh  mysh16.sh  mysh19.sh  mysh21.sh  mysh4.sh  mysh7.sh  test
mysh11.sh  mysh14.sh  mysh17.sh  mysh1.sh   mysh2.sh   mysh5.sh  mysh8.sh
[root@localhost tmp]# find ./ -path ./test -prune -o -name "my*"
./mysh7.sh
./mysh14.sh
./mysh18.sh
./mysh20.sh

3、德摩根定律:

德摩根定律0.png

德摩根定律1.png

德摩根定律2.png

德摩根定律3.png

德摩根定律4.png

德摩根定律5.png

三、課后練習

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

find /var -user root -group mail

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

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

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

find /var/ -mtime -7 -not -user root -not -user postfix -ls

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

find / -nouser -nogroup -atime -7

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

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

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

[root@localhost tmp]# find /etc/ -not -perm /222 -ls
50740639  196 -r--r--r--   1 root     root       198453 7月 19 04:57 /etc/pki/ca-trust/extracted/java/cace
rts464249  352 -r--r--r--   1 root     root       359773 7月 19 04:57 /etc/pki/ca-trust/extracted/openssl/ca-
bundle.trust.crt17127677  264 -r--r--r--   1 root     root       266702 7月 19 04:57 /etc/pki/ca-trust/extracted/pem/tls-c
a-bundle.pem

7、查找/etc目錄下至少有一類用戶沒有執行權限的文件;至少一類用戶沒有,包含全沒有,或者任意一類用戶或者兩類用戶有,全都有取反

[root@localhost init.d]# find /etc/init.d/  -not -perm -111 -ls
34178284    4 -rw-r--r--   1 root     root         1160 11月 20  2015 /etc/init.d/README
34220229   16 -rw-r--r--   1 root     root        13948 9月 16  2015 /etc/init.d/functions

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

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

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

(0)
SilencePavilionSilencePavilion
上一篇 2016-08-15 09:25
下一篇 2016-08-15 09:25

相關推薦

  • 文件目錄介紹

    對于操作系統的目錄感覺總是記不住,今天結合上課筆記和自己的理解總結一下:/——-執行操作時總是要跳轉到不同的目錄,根是一個樹狀結構,下面介紹都是根下的目錄以及相關介紹├── bin 存放用戶使用的基本命令(可執行程序,二進制文件)、分區的時候不會單獨給它分區├── boot  跟內核有關的文件├── cgroup &nbsp…

    Linux干貨 2017-04-10
  • Python語法基礎之if while for常見的簡單算法

    格式要符合語法要求

    2017-09-14
  • keepalived的初級使用

        1、雙主模型的ipvs高可用   一、雙主模型的ipvs高可用     1)網絡結構圖       2)、ipvs的類型是dr模型,調度算法是rr       RS1和RS2都是centos6.8 對RS1和RS2的配置:…

    Linux干貨 2017-05-15
  • 8.5_Linux文本處理工具和grep之正則表達式的使用

    Linux文本處理工具使用 文件查看工具的使用 cat 命令的使用  此命令一般用于查看文件內容比較多 NAME        cat – concatenate files and print on the&…

    Linux干貨 2016-08-08
  • shell中的位置參數變量

    要了解位置變量,首先要知道什么是變量?  變量就是讓某一個特定的字符串來代表不固定的內容,簡單理解就是用一個簡單的“字眼”來替代另一個比較復雜或者容易變動的數據。 而什么又是位置變量呢?  位置變量就是bash將傳遞給腳本的參數,按照位置不同,保存在不同的位置變量中,以便于腳本調用這些變量。 位置參數變量: $1, $2, ……

    Linux干貨 2016-08-12
  • 馬哥教育網絡班21期+第12周課程練習 ?

    1、請描述一次完整的http請求處理過程;   1)客戶端和服務器端建立連接。服務器接收或者拒絕請求。   2)服務器端接收客戶端請求。接收來自于網絡的請求報文中對某資源的一次請求。對請求的處理響應,可分為單進程(啟動一個進程處理請求,一次只處理一個)和多進程(并行啟動多個進程,每個進程處理一個請求)。  &…

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