Linux 提供了許多用於文件搜索的命令,這些命令都很強大,但是也有一些不同之處,這裡分別介紹一下。 一、find 命令 find 是最常見和最強大的一個文件搜索命令。使用 find 命令可以在指定目錄中搜索指定的文件。語法如下: 其中,目錄是 find 命令將要去搜索的目錄,包括該目錄及其子目錄, ...
Linux 提供了許多用於文件搜索的命令,這些命令都很強大,但是也有一些不同之處,這裡分別介紹一下。
一、find 命令
find 是最常見和最強大的一個文件搜索命令。使用 find 命令可以在指定目錄中搜索指定的文件。語法如下:
find [目錄] [選項] [動作]
其中,目錄是 find 命令將要去搜索的目錄,包括該目錄及其子目錄,預設情況下是當前目錄及其子目錄;選項指定以何種方式查找文件;動作指定要查找哪些文件,動作可以是一個字元串,也可以是一個正則表達式。
由於 find 命令是對整個磁碟進行搜索,因此搜索速度會比較慢,但是如果有這個文件的話,一定可以找到。為了加快 find 查找的速度,在使用 find 命令時,最好不要直接在根目錄下進行查找,搜索目錄越小越好,搜索條件越精確越好。
find 命令常見選項
1)-name 、-iname 選項:根據指定的文件名查找文件,其中使用 -iname 可以忽略大小寫;
find [目錄] -name [文件名]
需要註意的是,find 命令是精準搜索,即精準的搜索指定目錄下與文件名完全匹配的文件,如果需要模糊搜索的話,可以使用正則表達式。簡單舉個例子:
2)-size 選項:根據指定的文件大小查找文件;
-size 選項後面的動作是指定的文件大小,可以在動作前加上 + / - 符號來表示查找大於 / 小於指定大小的文件,不加則表示查找等於該指定大小的文件。查找文件的預設單位是塊( 1 塊 = 512 位元組 = 0.5KB),可以在數字後面添加指定字元來改變單位,常用的單位有 c (位元組)、k(k位元組)、M(M位元組)、G(G位元組)。
find [目錄] -size [+/-]unitsize
以下麵這一個目錄中的文件為例,演示一下 -size 選項的用法:
需要註意的是,預設單位為塊,一個文件塊是 512 位元組,當一個文件小於 512 位元組時,也是會被當成一個塊的大小來對待的。
3)-user 選項:搜索指定所有者的文件;
4)-group 選項:搜索指定組的所有文件;
5)-amin 選項:查找指定時間內被訪問的文件,單位是分鐘;
find /etc -amin -5 // 查找 /etc 目錄下5分鐘內被訪問過的文件 find /etc -amin +5 // 查找 /etc 目錄下5分鐘之前被訪問過的文件
在這個例子中,我首先使用 vim 打開了 add.c 文件,然後使用 find 命令的 -amin 選項搜索被訪問的文件。
6)-cmin 選項:查找指定時間內文件屬性被改變了的文件,單位是分鐘;
用法與 -amin 選項一樣,但是功能不同。
7)-mmin 選項:查找指定時間內文件內容被改變了的文件,單位是分鐘;
用法與 -mmin 選項一樣,但是功能不同。
8)-a 選項:and,用於連接兩個條件,表示要兩個條件同時滿足;
還是以上面的 HelloWorld 目錄為例,這裡使用 -a 選項查找該目錄下文件大小在 200 位元組到 500 位元組之間的文件。
9)-o 選項:or,用於連接兩個條件,表示兩個條件滿足一個即可;
10)-type 選項:根據文件類型查找,後面可以接 f、d、l,分別代表文件類型、目錄類型和軟鏈接文件。
find /etc -type f
二、which 命令
which 命令可以用於搜索一個命令所在的目錄及其別名信息。語法如下:
which 命令名
三、whereis 命令
whereis 命令可以用來搜索一個命令所在的目錄以及其 man 手冊等相關文件的路徑。
四、locate 命令
locate 命令與 find -name 命令功能一樣,可以用來查找文件或目錄 ,但是要比 find 命令查找起來速度快很多。這是因為 locate 命令並不搜索具體的目錄,而是搜索一個資料庫 /var/lib/mlocate/mlocate.db。這個資料庫包含本地絕大多數文件的信息(不包括 /tmp 目錄下的文件)。Linux 系統會自動創建這個資料庫,並且每天都會自動更新一次。locate 命令的語法如下:
locate 文件名
需要註意的是,locate 命令所搜索的資料庫不是即時更新的。因此,如果你新創建了一個文件,想要立即使用 locate 搜索這個文件,是搜索不到的;同樣,如果你刪除了一個文件,然後立即使用 locate 命令,仍然可以搜索到這個文件。因此,在使用 locate 命令之前,我們希望資料庫是更新了的,可以使用 updatedb 命令手動更新資料庫,然後再使用 locate 命令,就不會出現上述問題了。此外, /tmp 目錄不在 mlocate.db 的查找範圍內,因此如果你在 /tmp 目錄下新建了一個文件,然後更新資料庫,再使用 locate 命令查找,也是查找不到的。
使用 -i 選項可以忽略大小寫。