linux 檔案查詢

2021-09-20 23:29:43 字數 3458 閱讀 6522

文字查詢:grep egrep fgrep

檔案查詢:locate、find

locate和find的區別

locate有自維護的資料庫(linux自建,與所有檔案關聯),每天linux會定時對其進行更新,而locate就在此資料庫中查詢,所以查詢速度非常快,但是缺點也很明顯,不能實時查詢(比如剛裝linux時這條命令是不能用的),支援的查詢方式少。

find的優點和缺點與locate相對應,find 遍歷指定的路徑,用以查詢檔案,所以當指定路徑下的檔案數量越多,find的查詢效率越低,但是find 支援查詢的格式非常多,比如根據檔名查詢,元屬性狀態查詢,還支援正則等等。

locate:

非實時,模糊匹配,查詢是根據全系統檔案資料庫進行的;

速度快#updatedb,手動生成檔案資料庫

find:

實時精確

支援眾多查詢標準

遍歷指定路徑中的所有檔案進行查詢,速度慢

find  查詢路徑 查詢標準  查詢到以後的操作

查詢路徑:預設為當前路徑

查詢(匹配)標準:預設為指定路徑下的所有檔案

處理操作:預設為顯示

匹配標準:

-name 『filename』:對檔名進行精確匹配

檔名通配:

*:任意長度的任意字元

?:單個長度的任意字元

:...

-iname  』filename『  匹配時忽略大小寫

-regex pattern  :基於正規表示式對檔案進行匹配

pattern必須用絕對路徑包含

-user  username:根據屬主查詢

-group groupname:根據屬組查詢

-uid  uid:根據uid查詢

-gid  gid:根據gid查詢

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

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

-type:

p:普通檔案

s:socket檔案

d:目錄檔案

p:管道檔案

l:鏈結檔案

...-size

[+|-]#k:查詢[大於|小於]#k的檔案

[+|-]#m:查詢[大於|小於]#m的檔案    

[+|-]#g:查詢[大於|小於]#g的檔案

注意:find 命令裡面查詢檔案大小並不是精確的,它會把大於上乙個數到小於下乙個數之間的數當成當前數,比如我們查詢等於10k的檔案,那麼9.2k、9.31k、10.1k等等都會被當成10k而被匹配到,而9k 11.1k等就不會

組合條件:

-a:與

-o:或

-not:非

-mtime:根據修改(modify)時間

-atime:訪問(access)時間

-ctime:改變(change)時間

[+|-]#:+代表某個時間之前,-代表之後,time預設是天

(atime和ctime區別:atime修改資料,ctime修改元屬性)

-mmin:

-cmin:

-amin:

[+|-]#:

與time對應,min代表分鐘

-perm mode:完全匹配mode,比如755必須完全匹配755

/mode:部分匹配mode,只要乙個匹配就可以了,比如r--rw----,只要這三個位置中其他乙個被匹配到就可以了,比如可以匹配的有:r--------、rw-------等等

-mode:完全包含匹配,匹配的mode必須等於或者可以包含mode,比如r--rw----,那麼r--rwx---、rw-rw----等可以匹配,而---rwxrwx、rwxr-xrwx等不可以匹配

find 利用正則匹配示例:

[root@logstash ~]# find  /etc/  -regex "\[root@logstash ~]# find  /etc/  -regex "/etc/\/etc/passwd

/etc/passwd-

處理操作:

-print:顯示

-ls:類似ls -l的格式顯示匹配到的檔案的詳細資訊

-ok command {} \;每一次操作都需要使用者確認

-exec command {} \;

{}代表匹配到的檔案,\;是固定結束符

xargs與find -exec示例

[root@localhost ~]# find  /tmp/ -size -1m   -exec echo {} >>tmp.txt  \;

[root@localhost ~]# cat tmp.txt 

/tmp/mysql.sock

/tmp/sess_e538a6cd81b0fed9d5c49f1b2f84dd80

/tmp/sess_c1f3bd3446ca4407d9a2a05bb4897030

[root@localhost ~]# find  /tmp/ -size -1m  |xargs echo {} >>tmp1.txt ;

[root@localhost ~]# cat tmp.txt 

/tmp/mysql.sock

/tmp/sess_e538a6cd81b0fed9d5c49f1b2f84dd80

/tmp/sess_c1f3bd3446ca4407d9a2a05bb4897030

[root@localhost ~]# 

示例:1、查詢/var下屬主為root並且屬組為mail的所有檔案

find /var/  -user root  -group mail 

2、查詢/usr不屬於root、bin或student的檔案

find  /usr/ -not -user root -o -not -user bin -o -not  -user student       

find  /usr/ -not \(-user root -o  -user bin -o -user student \)

3、查詢/etc下最近一周內內容修改過且不屬於root以及student使用者的檔案

find /etc/ -mtime -7  -not -user root -a  -not  -user student    

find /etc/ -mtime -7 -not \(-user root -o -user student\)    

4、查詢當前系統上沒有屬組或屬主且最近1天內曾被訪問過的檔案、並將其屬主屬組修改為root

find  /  -nouser -o  -nogroup -a -ctime -1 -exec chown  root:root {} \;

5、查詢/etc/下大於1m的檔案,並寫入到/tmp/1.txt中

find  /etc/  -size +1m  -exec echo {} >>/tmp/1.txt \;

6、查詢/etc/所有使用者都沒有寫許可權的檔案,並顯示其詳細資訊

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

注意這裡是用/222  而不是-222

linux檔案查詢

命令與檔案的查詢 which 尋找執行檔案 which a command a 將所有由path目錄中可以找到的命令均列出來,而不只是第乙個被找到的命令名稱 eg which a ifconfig 檔案的查詢 whereis 尋找特定的檔案 bmsu 檔案或者目錄 引數 b 只尋找二進位制檔案 m ...

Linux 檔案查詢

檔案查詢 簡介which 命令查詢 find 檔案查詢,針對檔名 locate 檔案查詢,依賴資料庫 一 命令檔案查詢 一 查詢ls 命令的位置 which ls 從path環境變數或者 whereis vim二 任意檔案 find 語法find path options expression ac...

Linux檔案查詢

1.find查詢概述 為什麼要有檔案查詢,因為很多時候我們可能會忘了某個檔案所在的位置,此時就需要通過find來查詢。find命令可以根據不同的條件來進行查詢檔案,例如 檔名稱 檔案大小 檔案修改時間 屬主屬組 許可權 等等方式。同時find命令是linux下必須掌握的。find 命令的基本語法如下...