linux系統是由內核、庫文件、各種shell和軟件組成的,在這個龐大的系統中存在着各種各樣的文件,而有時我們就需要在這龐大的系統中查找我們所需要的各種有用信息。
在這裏我們簡單的介紹兩個命令locate和find
一、locate
locate 是非實時,模糊匹配的查找,查找是根據全系統文件數據庫進行的,所以查找的速度非常的迅速。但是由於locate的查找是建立在文件數據庫的基礎上進行的,所以當文件數據庫沒有完成的時候命令是無法進行的。我們可以通過updatedb命令來生成文件數據庫,以完成文件數據庫的建設。
二、下面我們着重的介紹一下常用的fing的命令:
find:能夠實時、精確、遍歷指定目錄中的所有文件進行查找,缺點是速度慢;它能支持衆多查找標準,來進行精確的查找。
find 查找路徑 查找標準 查找到以後的處理動作
查找路徑:默認爲當前目錄
查找標準:默認爲指定路徑下的所有文件
處理動作:默認爲顯示
匹配標準:
-name ‘FILENAME’:根據文件名做精確匹配
文件名匹配:
*:任意長度任意字符
?:
[]:
find /etc -name ‘passwd’ 查找在/etc下所有和passwd相關的文件
find /etc -name ‘passwd*’ 查找在/etc下所有以passwd開頭的文件
find /etc -name ‘*passwd*’ 查找在/etc下所有包含passwd的文件
-iname 文件名不匹配大小寫的精確匹配
-regex PATTERN:基於正則表達式進行文件名匹配
-user USERNAME:根據屬主查找
-group GROUPNAME:根據屬組查找
-uid UID:根據UID查找
-gid GID:根據GID查找
-nouser:查找沒有屬主的文件
-nogroup:查找沒有屬組的文件
-type 根據文件類型查找
f:普通文件
d:目錄文件
s:套接字文件
-size 根據文件大小查找
[+|-]#k 大於#k或小於#k的文件大小
#M
#G
組合條件:
-a 與
-o 或
-not 非
按照時間戳來查找
-mtime 修改時間
-ctime 改變時間
-atime 訪問時間
[+|-]# #天之前訪問過 #天之內訪問過
-mmin 修改分鐘
-cmin 改變分鐘
-amin 訪問分鐘
按照權限查找
-perm mode 精確權限查找
/mode 任何一位匹配即可
-mode 每一位權限都必須完全包此mode才符合條件
find動作:
-print:(默認顯示)
-ls:類似ls -l的形式顯示每一個文件的詳細
-ok COMAND {} \;: 每一次操作都需要用戶確認
-exec COMMAND {} \;: 不需要用戶確認
find /tmp -perm 007 -exec chmod o-x {} \;
引用查找的文件就要用到{}
以下的幾個例子,能夠大致全面的包含find的具體使用
1、查找/var目錄下屬主爲root並且屬組爲mail的所有文件;
find /var -user root -group mail
2、查找/usr目錄下不屬於root,bin,或student的文件;
find /usr -not -user root -a -not -user bin -a -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 -o -user student \)
find /etc -mtime -7 -not -user root -a -not -user student
4、查找當前系統上沒有屬主或屬組且最近1天內曾被訪問過的文件,並將其屬主屬組均修改爲root;
find / \( -nouser -o -nogroup \) -a -atime -1 -exec chown root:root {} \;
5、查找/etc目錄下大於1M的文件,並將其文件名寫入/tmp/etc.largefiles文件中;
find /etc -size +1M >> /tmp/etc.largefiles
6、查找/etc目錄下所有用戶都沒有寫權限的文件,顯示出其詳細信息;
find /etc -not -perm /222 -ls