Linux入門真經 035使用find去查詢檔案

2021-08-27 18:45:47 字數 4613 閱讀 4690

常見的linux檔案查詢工具有locate和find。

locate的優點在於:它是基於索引庫建立,週期性更新。因此速度相當快,查詢時資源消耗極少。缺點是:由於不是實時查詢,所以一些在更新週期之前新增的檔案沒法找到。我們可以隨時對locate的資料庫進行手動更新,不過更新時會消耗很多的計算資源,甚至會造成暫時的卡頓。

find是乙個實時查詢工具,他的優點與locate互補:實時性好、精確度高,但是查詢速度慢且較消耗資源。

用法:find [options]  [查詢起始路徑]  [查詢條件]  [處理動作]

查詢起始路徑:

指定具體搜尋目標起始路徑;預設為當前目錄;

查詢條件:

指定的查詢標準,可以根據檔名、大小、型別、從屬關係、許可權等等標準進行;預設為找出指定路徑下的所有檔案;

處理動作:對符合查詢條件的檔案做出的操作,例如刪除等操作;預設為輸出至標準輸出;

表示式:選項和測試

測試:結果通常為布林型("true","false")

根據檔名查詢:

-name  "pattern"

​ -i name  "pattern"

支援glob風格的萬用字元;

-regex pattern:基於正規表示式模式查詢檔案,匹配是整個路徑,而非其名;

根據檔案從屬關係查詢:

​-user username:查詢屬主指定使用者的所有檔案;

​-group grpname:查詢屬組指定組的所有檔案;                               

​-uid uid:查詢屬主指定的uid的所有檔案;

​-gid gid:查詢屬組指定的gid的所有檔案;

​-nouser:查詢沒有屬主的檔案;

-nogroup:查詢沒有屬組的檔案;

根據檔案的型別查詢:

-type type:type包括

​    ​f:普通檔案

d:目錄檔案

b:塊裝置 檔案

c:字元裝置檔案

p:管道檔案

s:套接字檔案

組合測試:

與:-a, 預設組合邏輯;

或:-o

非:-not, !

根據檔案的大小查詢(#表示數字):

​-size [+|-]#unit

常用單位:k, m, g                  

#unit:(#-1, #]

-#unit:[0,#-1]

+#unit:(#, oo)

根據時間戳查詢:

以「天」為單位(#表示數字):

-atime  [+|-]#

#:[#, #-1)

-#:(#, 0]

+#:(oo, #-1]

-mtime

-ctime

以「分鐘」為單位:

-amin

-mmin

-cmin

根據許可權查詢:

-perm  [/|-]mode

mode:精確許可權匹配;

/mode:任何一類使用者(u,g,o)的許可權中的任何一位(r,w,x)符合條件即滿足;

9位許可權之間存在「或」關係;

-mode:每一類使用者(u,g,o)的許可權中的每一位(r,w,x)同時符合條件即滿足;

9位許可權之間存在「與」關係;

-print:輸出至標準輸出;預設的動作;

-ls:類似於對查詢到的檔案執行「ls -l」命令,輸出檔案的詳細資訊;

-delete:刪除查詢到的檔案;

-fls /path/to/somefile:把查詢到的所有檔案的長格式資訊儲存至指定檔案中;

-ok command {} \;   :對查詢到的每個檔案執行由command表示的命令;每次操作都由使用者進行確認;

-exec command {} \;  :對查詢到的每個檔案執行由command表示的命令;

注意:find傳遞查詢到的檔案路徑至後面的命令時,是先查詢出所有符合條件的檔案路徑,並一次性傳遞給後面的命令;

但是有些命令不能接受過長的引數,此時命令執行會失敗;另一種方式可規避此問題:

​find命令 | xargs command

我先把公式貼在這:

find [options]  [查詢起始路徑]  [查詢條件]  [處理動作]

1、  查詢/var目錄下屬主為root,且屬組為mail的所有檔案或目錄;

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

19210   0 drwxrwxr-x   2 root     mail           80 aug 25 10:48 /var/spool/mail

[root@localhost ~]#

2、查詢/etc目錄下最近一周內其內容修改過,且屬主是root使用者的檔案或目錄;

[root@localhost ~]# find /etc -mtime -7 -a  -user root

/etc

/etc/fstab

/etc/resolv.conf

/etc/group-

/etc/gshadow-

/etc/passwd-

/etc/group

/etc/shadow-

/etc/gshadow

/etc/passwd

/etc/shadow

/etc/tuned/active_profile

/etc/tuned/profile_mode

/etc/sudoers

3、  查詢/etc目錄下大於1m且型別為普通檔案的所有檔案;

[root@localhost ~]# find /etc -size +1m -type f -exec ls -lh {} \;

-r--r--r--. 1 root root 7.5m jul 24 18:51/etc/udev/hwdb.bin

-rw-------. 1 root root 3.6m apr 11 14:41/etc/selinux/targeted/active/policy.kern

-rw-r--r--. 1 root root 1.3m apr 11 15:29/etc/selinux/targeted/contexts/files/file_contexts.bin

-rw-r--r--.1 root root 3.6m apr 11 14:41 /etc/selinux/targeted/policy/policy.31

4、查詢/etc目錄下所有使用者都沒有任何許可權的檔案;

[root@localhost ~]# find /etc -not -perm /777 -type f -ls

17054607   4 ----------   1 root     root          448 aug 25 09:32 /etc/gshadow-

17054828   4 ----------   1 root     root          993 aug 25 10:37 /etc/shadow-

16777478   4 ----------   1 root     root          459 aug 25 10:48 /etc/gshadow

16777474    4 ----------   1 root    root         1118 aug 25 10:53/etc/shadow

5、查詢所有以.py結尾的檔案

[root@localhost ~]# find / -name *.py

/usr/lib/python2.7/site-packages/decorator.py

/usr/lib/python2.7/site-packages/slip/__init__.py

…省略輸出…

[root@localhost ~]# find / -inum 16777282-ok rm {} \;

< rm ... /tmp/fstab > ? yes

< rm ... /tmp/fstab.ln > ?u^hyes   #手抖沒刪掉

Linux入門真經 003Linux的分支版本

前一節給大家介紹了linux的應用場景,今天給大家介紹一下linux常見的發行版本。將linux核心原始碼打包編譯成二進位制檔案,並做一定程度的客製化,使其能夠友好地為客戶端所接受和使用是一件頗為複雜的事情。因此,大量linux發行商湧現,也就出現了大量的linux發行版本。我們沒有必要把每乙個發行...

Linux入門真經 007Linux命令的通用語法

這節開始給大家講linux的命令語法格式。首先我們先理解一下再bash命令列中,我們見過很多次的命令提示符字首是什麼意思 root localhost 其含義為 使用者名稱 主機 當前工作目錄 提示符 在學習linux命令之前,我們再了解一下linux檔案系統的結構。我們都用過windows,知道w...

Linux入門真經 039壓縮 解壓與歸檔

我們為什麼需要壓縮?一般是以下原因 1 檔案太大,我們將其壓縮降低磁碟的空間使用量 2 伺服器頻寬不夠,我們將向客戶端推送的內容 如web資源 進行壓縮,到達客戶端之後再用相關協議去解壓縮。用cpu的效能和時間去節省網路頻寬和延遲。其中,第一點就是我們今天主要介紹的壓縮和解壓工具。第二點,現在很多w...