文字查詢: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 命令的基本語法如下...