Linux的文件查找之find的使用

文件查找

 

本章節內容:

  使用locate命令

  使用find命令

  使用Gnome搜索工具

  

一、文件的查找(findlocate的對比):

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

locate

find

查找時效性

非實時查找

實時查找

文件索引數據庫

需要依賴查詢系統上預建的文件索引數據庫;索引的構建是在系統較為空閑時自動進行(周期性任務);管理員手動更新數據庫(updatedb);索引構建過程需要遍歷整個根文件系統,極消耗資源。

無須依賴;實時查找工具,通過遍歷指定路徑完成文件查找。

工作特點

查找速度快;

模糊查找;

非實時查找

搜索的是文件的全路徑,不僅僅是文件名

可能只搜索用戶具備讀取和執行權限的目錄

查找速度略慢

精確查找

實時查找

可能只搜索用戶具備讀取和執行權限的目錄

命令使用格式

locate KEYWORD

find [-H] [-L] [-P] [-D debugopts]   [-Olevel] [path…] [expression]

查找條件(使用選項)

-i執行區分大小寫的搜索

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

詳見下面的查找條件學習!!

事例

locate foo :搜索名稱或路徑中帶有“foo”的文件

locate -r ‘\.foo$’ :使用Regex來搜索以“.foo”結尾的文件

詳見下面的查找條件事例??!

 

二、find的查詢條件學習:

文件名和inode查找

屬主、屬組查找

文件類型查找

-type TYPE:

文件大小來查找

時間戳

權限查找

組合條件

-name "文件名稱":支持使用glob

*, ?, [], [^] ;

-iname"文件名稱":不區分字母大小寫

-inumn inode號查找;

-samefilename 相同inode號的文件;

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

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

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

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

-uidUserID:查找屬主為指定的UID號的文件;

-gidGroupID:查找屬組為指定的GID號的文件;

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

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

f: 普通文件

d: 目錄文件

l: 符號鏈接文件

s:套接字文件

b: 塊設備文件

c: 字符設備文件

p: 管道文件

-size [+|-]#UNIT

常用單位:k, M, G

#UNIT: (#-1, #],如:6k

-#UNIT[0,#-1], 如:-6k

+#UNIT(#,), 如:+6k

以“天”為單位;

-atime[+|-]#,

#: [#,#+1)

+#: [#+1,]

-#: [0,#)

-mtime

-ctime

 

-perm [/|-]MODE

MODE: 精確權限匹配

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

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

0 表示不關注;

例:

?find-perm755會匹配權限模式恰好是755的文件

?只要當任何人有寫權限時,find-perm+222就會匹配

?只有當每個人都有寫權限時,find-perm-222才會匹配

?只有當其它人(other)有寫權限時,find-perm-002才會匹配

與:-a

或:-o

非:-not, !

德·摩根定律:

(P Q) = (P) (Q)

(P Q) = (P) (Q)

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

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

以“分鐘”為單位:

-amin

-mmin

-cmin

 

三、find查找的處理動作:

選項

使用說明

-print

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

-ls

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

-delete

刪除查找到的文件

-flsfile

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

-ok   COMMAND {} \

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

-exec   COMMAND {} \

對查找到的每個文件執行由COMMAND指定的命令

{}:

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

find

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

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

find   | xargsCOMMAND

 

四、find的事例:

1、find -namesnow.png  搜索名為snow.png的文件

2find -inamesnow.png 不分大小寫地搜索名為snow.png、Snow.pngSNOW.PNG等等的文件

3、find / -name *.txt    搜索以txt為后綴的所有文件

4、find /var –name *log* 搜索含有log為關鍵字的所有文件

5find -user joe -groupjoe 搜索被用戶joe 以及組群joe所擁有的文件

6、find -user joe -not -group joe 搜索用戶joe,且該用戶不屬于joe

7、find -user joe -o -user jane 搜索用戶joe或用戶jane

8find -not\( -user joe -o -user jane\)  搜索用戶既不是joe并且也不是jance

9、find / -user joe -o -uid500 搜索搜索一個用戶名是joeuid500的用戶

10、find /tmp \( -not -user root -a -not -name 'fstab' \) –ls 找出/tmp目錄下,屬主不是root,且文件名不是fstab的文件

11、find /tmp-not \( -user root -o -name 'fstab' \) –ls  ?排除目錄

12、find /etc -path ‘/etc/sane.d’ -a -prune -o -name *.conf -print /etc目錄下,排除/etc/sane.d目錄,查找帶有conf后綴的文件,并加以顯示

13、find -name “*.conf” -exec cp {} {}.org \ 備份配置文件,添加.orig這個擴展名

14、find /tmp -ctime +3 -user joe -o krm{}\ 提示刪除存在時間超過3天以上的joe的臨時文件

15、find ~-perm-002 -exec chmod o-w {}\ 在你的主目錄中尋找可被其它用戶寫入的文件

16find /data -type f -perm 644 -name *.sh -exec chmod 755 {} \ data目錄下查找權限為644、后綴是.sh的普通文件,將其的權限修改為755

17find /home -type d -ls home的目錄下查找塊設備

 

 

 

練習:

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

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

blob.png

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

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

blob.png 

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

# find /var/ -mtime -7  -not \( -user root -o -user postfix \) -ls

blob.png

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

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

blob.png

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

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

blob.png

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

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

blob.png

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

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

blob.png

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

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

blob.png

 

作業:

德·摩根定律

(P Q) = (P) (Q)

(P Q) = (P) (Q)

(P Q)

blob.png

兩者相等

(P) (Q)

blob.png

(P Q)

blob.png

兩者相等

(P) (Q)

blob.png

 

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

(1)
Aaron_wangAaron_wang
上一篇 2016-08-15 09:25
下一篇 2016-08-15 09:25

相關推薦

  • 設計模式原則詳解

        我們在應用程序開發中,一般要求盡量兩做到可維護性和可復用性。       應用程序的復用可以提高應用程序的開發效率和質量,節約開發成本,恰當的復用還可以改善系統的可維護性。而在面向對象的設計里面,可維護性復用都是以面向對象設計原則為基礎的,這些設計原則首先都是復用的原則,遵循這些設…

    Linux干貨 2015-04-07
  • 馬哥教育網絡班20期+第2周課程練習

    1、Linux上的文件管理命令有哪些?其常用的使用方法及相關示例演示。 答: cp 復制、 mv 移動、rm 刪除 (1)cp :復制文件或目錄         用法:    cp [OPTION]… [-T] SOURCE DEST    cp [OPTI…

    Linux干貨 2016-06-16
  • 基于虛擬用戶控制的ftp服務

    FTP作為最常見的文件共享服務,可提供文件的上傳,下載等服務;其用戶可分為三類: 匿名用戶:即不需要用戶賬號與密碼即可登錄FTP服務器,此時登錄用戶將會被映射為系統上的ftp用戶。 系統用戶:即用FTP服務器上的用戶賬號與密碼登錄FTP服務器。此種方法雖然在一定程度上對登錄做出了限制,但由于系統賬號的相關權限,則增大了FTP服務器的系統風險; 虛擬用戶:用戶…

    Linux干貨 2016-10-23
  • 網絡基礎總結

    這周南老師出差了,由王老師給我們代課,這周我們主要學習了網絡基礎,相比著之前,主要是理論加理解。下面我總結一下。 處于21世紀的我們,互聯網時代,網絡在我們身邊的各個角落,覆蓋了我們的衣食住行,帶來 很多方便;首先什么是網絡, 家庭辦公室,移動用戶,總部,分支機構。。。都在用互聯網相連著,省去了許多麻煩,時間,加快了辦公效率; 資源共享的功能和優點:數據和應…

    2017-09-02
  • 創建及管理KVM工具之virsh

    一、什么是虛擬化 虛擬化是一個廣義的術語,在計算機方面通常是指計算元件在虛擬的基礎上而不是真實的基礎上運行。虛擬化技術可以擴大硬件的容量,簡化軟件的重新配置過程。 二、虛擬化能做什么 CPU的虛擬化技術可以單CPU模擬多CPU并行,允許一個平臺同時運行多個操作系統,并且應用程序都可以在相互獨立的空間內運行而互不影響,從而顯著提高計算機的工作效率。 三、虛擬化…

    Linux干貨 2017-01-19
  • N26 第二周博客作業

    1、Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示。 常用的文件管理工具有: cp mv rm cp 命令 : copy 的簡寫 語法格式:    1) 單源復制 cp [OPTION]… [-T] SOURCE DEST      …

    Linux干貨 2017-02-24

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-08-19 09:30

    從文章可以看出是在用心總結了,總結的也很全面,通過表格,看起來更直觀,find命令在筆試中經常會問道,所以需要多多練習,達到熟練掌握。

欧美性久久久久