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的事例:

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

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

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

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

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

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

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

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

9find / -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后綴的文件,并加以顯示

13find -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 {}\ 在你的主目錄中尋找可被其它用戶寫入的文件

16、find /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、lpgdm的所有文件

# 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
下一篇 2016-08-15

相關推薦

  • N25第五周博客作業

    第五周博客作業   1、顯示/boot/grub/grub.conf中以至少一個空白字符開頭的行;   2、顯示/etc/rc.d/rc.sysinit文件中以#開頭,后面跟至少一個空白字符,而后又有至少一個非空白字符的行;   3、打出netstat -tan命令執行結果中以‘LISTEN’,后或跟空白字符結尾的行; &nbs…

    Linux干貨 2016-12-28
  • 馬哥教育網絡21期+第二周練習博客

    1、Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示。 長用的文件管理類命令有cp(復制),mv(移動),rm(刪除)。接下來我將為大家一一講解。 復制命令:cp 在cp時要根據源和目的做出確認與調整; 命令格式:     cp [OPTION]… [-T] SO…

    Linux干貨 2016-07-22
  • ContOS 7 安裝

    在虛擬機中安裝ContOS 7,自定義4個分區
    虛擬機使用ISO鏡像文件安裝,網絡使用橋接模式,內存大小設置為1224MB(安裝桌面比較大)

    2018-03-13
  • 邏輯卷管理

    1.相關命令:lsblk、fdisk、gdisk、parted、mkfs、mke2fs、blkid、e2label、findfs、tune2fs、dumpe2fs、fsck、e2fsck、mount、swapon、swapoff、mkisofs、wodim、free、df、du、dd。 2.列出塊設備:lsblk    &nbs…

    Linux干貨 2016-09-01
  • CentOS上配置rsyslog客戶端用以遠程記錄日志

    rsyslog是一個開源工具,被廣泛用于Linux系統以通過TCP/UDP協議轉發或接收日志消息。rsyslog守護進程可以被配置成兩種環境,一種是配置成日志收集服務器,rsyslog進程可以從網絡中收集其它主機上的日志數據,這些主機會將日志配置為發送到另外的遠程服務器。rsyslog的另外一個用法,就是可以配置為客戶端,用來過濾和發送內部日志消息到本地文件…

    Linux干貨 2015-02-14
  • free / buffer與cache

           前幾天看到有些伙伴傻傻分不清楚buffer與cache的用處,后來發現我也不能很清楚的說出來buffer與cache在不同的地方有什么不同之處,這里就總結了一些關于buffer于cache的區別,如有不完善的地方,請大家指出來。        說到buffer與ca…

    2017-07-17

評論列表(1條)

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

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

欧美性久久久久