Linux文件查找命令詳解

Linux在文件系統上查找符合條件的文件,實現工具有locate和find

locate

1.它是依賴于事先索引構建好的數據庫進行查找的。更新它的數據庫有兩種方式,一種是系統定期自動更新,另一種是執行命令updatedb手動更新數據庫。

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

2.它的工作特性:

1.因為是基于數據庫實現的,所以查找速度快(實際生產中find也不必locate慢多少

2.模糊查找,路徑中任何一部分包含關鍵字都顯示

3.因為是基于數據庫實現的,所以非實時查找。如果新建了一個文件卻沒有更新數據庫,則用locate是找不到的。

3.它的使用方法:

locate [OPTION]…PATTERN…

-b:只匹配路徑中的基名,但仍是模糊查找

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

-r:基于BRE基本正則表達式來編寫模式

例:[root@pxe49 ~]# locate  -r  “\<passwd$”

/etc/passwd

/etc/pam.d/passwd

/usr/bin/passwd

/usr/share/bash-completion/completions/passwd

 

 

find

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

2.它的工作特性:

1.查找速度略慢,但實際生產中服務器配置都很高,所以查找速度并不比locate慢多少。

2.由于每次查找都相當于遍歷最新的整個文件系統,所以是精確查找。

3.由于每次查找都相當于遍歷最新的整個文件系統,所以又是實時查找。

 

3.它的使用方法

find [OPTIONS] [查找起始路徑] [查找條件] [處理動作,如刪除移動顯示]

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

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

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

find查找條件詳解:

1.根據文件名查找:

-name “pattern”

-iname “pattern” //不區分大小寫

注:此處的pattern不是正則表達式,是支持glob風格的通配符:*,?,[],[^]

-regex pattern:基于正則表達式模式查找文件,查找方式是根據整個路徑(類似于locate),而非基名,很少用到。

 

2.根據文件從屬關系查找:

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

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

 

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

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

 

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

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

 

3.根據文件類型查找:

-type TYPE:

f:普通文件

d:目錄文件

l:符號鏈接文件(軟鏈接文件)

b:塊設備文件

c:字符設備文件

p:管道文件

s:套接字文件

 

4.根據文件的大小查找:

-size[+|-]#UNIT

常用單位:k,M,G

~]find /tmp 174k

#UNIT:(#-1#]開區間內,準確的說是找到(173k,174k]

-#UNIT:[0,#-1] [0,173k]

+#UNIT:(#,oo)  (174,oo)

5.根據時間戳查找:

“天”為單位:

-atime [+|-]#

#:[#,#-1)

-#:(#,0]

+#:(oo,#-1]

//比如,查找距離現在3天為打開的文件,則實際上是[3,4)天,+#是距今[4,oo],-#是距今少于3

-mtime

[root@localhost ~]# find /etc -mtime -1

-ctime

分鐘為單位

-amin

-mmin

-cmin

6.根據權限查找:

-perm[/|-]mode

mode:精確權限匹配

[root@localhost test]# touch a b c d e f g

[root@localhost test]# ll

總用量 0

-rw-r–r–. 1 root root 0 3月  15 21:53 a

-rw-r–r–. 1 root root 0 3月  15 21:53 b

-rw-r–r–. 1 root root 0 3月  15 21:53 c

-rw-r–r–. 1 root root 0 3月  15 21:53 d

-rw-r–r–. 1 root root 0 3月  15 21:53 e

-rw-r–r–. 1 root root 0 3月  15 21:53 f

-rw-r–r–. 1 root root 0 3月  15 21:53 g

[root@localhost test]# chmod 640 a

[root@localhost test]# chmod 666 b

[root@localhost test]# chmod 440 c

[root@localhost test]# chmod 775 d

[root@localhost test]# chmod 777 e

[root@localhost test]# ll

總用量 0

-rw-r—–. 1 root root 0 3月  15 21:53 a

-rw-rw-rw-. 1 root root 0 3月  15 21:53 b

-r–r—–. 1 root root 0 3月  15 21:53 c

-rwxrwxr-x. 1 root root 0 3月  15 21:53 d

-rwxrwxrwx. 1 root root 0 3月  15 21:53 e

-rw-r–r–. 1 root root 0 3月  15 21:53 f

-rw-r–r–. 1 root root 0 3月  15 21:53 g

[root@localhost test]# find ./ -perm 644 -ls

2230844    0 -rw-r–r–   1 root     root            0 315 21:53 ./f

2230845    0 -rw-r–r–   1 root     root            0 315 21:53 ./g

 

 

/mode:任何一類用戶(u,g,o)的權限中的任何一位(r,w,x)符合條件即滿足。(用于找至少有一個用戶有某個權限的)  存在或者的關系。即9位權限有1位符合就OK

find ./ -perm /222 -ls,查找至少有一類用戶有寫權限

find ./ -perm /111 -ls,查找至少有一類用戶有可執行權限

find ./ -perm /001 -ls,查找其他用戶是否有可執行權限

 

 

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

find ./ -perm -222 -ls //查找每一類用戶都有w權限

find ./ -not -perm -222 -ls//至少有一個用戶沒有w權限

 

注意:出現0表示不管它

find ./ -perm /002 -ls

find ./ -perm -002 -ls 它們是一樣的。

 

 

 

組合測試(加在兩個查找條件之間)(將多個條件以與或非連接起來):

與:-a,與是默認組合邏輯

或:-o,

非:-not,!

 

例:~]# find /tmp -not -type f -ls  //查找tmp目錄下的非普通文件并顯示。

[root@localhost ~]# find /etc -name “passwd” //查找etc目錄下基名為passwd的文件。

/etc/pam.d/passwd

/etc/passwd

德摩根定律:

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

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

 

 

 

 

 

find處理動作詳解:

-print:將查找到的文件的路徑輸出至標準輸出,默認的動作

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

-delete:刪除查找的文件,危險操作,請勿嘗試

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

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

-exec COMMAND{} \;  :對查找到的每個文件執行由COMMAND表示的命令,不與用戶交互。

find ./ -perm /002 -exec mv {} {}.danger \; 

注意:{}表示你查找到的文件的文件名。

上一條命令表示將找到的權限為/002文件的文件名后面加上.danger

 

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

find | xargs COMMAND 通過管道送給xargs,由xargs調用命令!

 

 

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

(0)
33
上一篇 2017-04-09
下一篇 2017-04-10

相關推薦

  • 源碼包編譯安裝

    程序包編譯安裝:      Application-VERSION-release.src.rpm–> 安裝后,使用rpmbuild命令制作成二進制格式的rpm包,而后再安裝      源代碼 –> 預處理 –> 編譯 &#8…

    Linux干貨 2016-08-23
  • bash的工作特性之命令執行狀態返回值和命令行展開所涉及的內容及其示例演示

    1)bash的工作特性之命令執行狀態返回值; 在 Linux 下,任意一個命令執行結束之后,bash都會返回0-255之間的數值以表示命令執行成功與否;其返回值保存于bash的特殊變量$?中; 其中0表示:執行成功;1-255表示執行錯誤; 例如: [root@localhost ~]# ls anaconda-ks.cfg initial-setup-ks…

    Linux干貨 2016-11-06
  • 簡述計算機硬件組成,linux系統及簡單命令詳解

    1、計算機的硬件組成 (1)cpu(中央處理器):主要由運算器和控制器組成,它的運算器主要負責程序運算與邏輯判斷,控制器則主要協調組件與各個設備之間工作。 (2)存儲設備:存儲設備又分為外存儲設備,是用來存儲數據信息的設備,它包括,硬盤,u盤,光盤,軟盤。而其中內存(ram)和主板上的rom是屬于內存儲設備,內存是只讀存儲器,它用來暫時記錄數據信息供給cpu…

    2017-07-09
  • UEFI與GPT(7.3課上作業)

    一、UEFI:統一可擴展固件接口 1、什么是UEFI         統一可擴展固件接口(Unified Extensible Firmware Interface,UEFI)是一種PC系統規格,用來定義操作系統與系統固件之間的軟件界面,作為BIOS的替代方案。UEFI負責加電自…

    Linux干貨 2016-07-12
  • Linux之bash shell腳本編程入門篇(一)

    什么是bash shell腳本編程? 答:Linux里面有多種shell,而CentOS和redhat的默認shell是bash shell。至于shell腳本,這個跟windows操作系統里面的批處理文件有點像(.bat的文件)。不知道大家還是否記得Linux的哲學思想嗎?其中有那么兩點點:由眾多目的的單一應用程序組成:一個程序只做一件事,且做好;組合目的…

    Linux干貨 2016-08-15
  • 互聯網安全之iptables/netfilter入門到進階

    隨著互聯網技術的方興未艾,各種網絡應用層出不窮,網絡攻擊、黑客入侵也成了網民暢游互聯網的心頭大患,互聯網安全也愈加受到了人們的重視。網絡防火墻,作為一種簡單高效的互聯網防御手段,逐漸成為了網民暢游網絡世界的保護傘。下面筆者介紹下Linux系統的守衛者——iptables/netfilter。 ?一 兄弟齊心,其利斷金 ?iptables/netfilter就…

    Linux干貨 2017-05-06

評論列表(2條)

  • renjin
    renjin 2017-04-12 13:37

    詳細介紹了linux系統下的查找類(locate,find)命令的使用,內容介紹的非常詳細,但需要注意一下排版問題。

    • Janay
      Janay 2017-04-24 10:22

      @renjinGood point. I hadn’t thhugot about it quite that way. :)

欧美性久久久久