linux的文件搜索命令,Linux文件搜索命令find的用法 | 术与道的分享
不管在Windows還是Linux中,最重要的問題不是說你能搜索到這個文件,而是最好少用搜索,應該是你在整個服務器的規劃里面,把所以的文件目錄規劃的很好。就像如果你在家里找衣服,如果不是你亂扔,就不可能花費太長的時間。因為搜索會占用大量的系統資源,但是有一些操作比如被他人非法修改的文件,的確find命令是一個很好的選擇。
文件搜索命令find的一般格式
find path -option [-print] [-exec -ok command] {} \;
path:find命令所要查找的目錄路徑,比如/root,表示在root目錄下搜索匹配。
-print:find命令將匹配的文件輸出到標準輸出。
-exec:find命令對匹配的文件執行該參數所給出的shell命令。
-ok:和exec作用相同,只不過以一種更為安全的模式來執行該參數給出的shell命令,在執行每一個命令執行都會提示是否確認執行。
1
2
3
4
5
6
7
8
9
findpath-option[-print][-exec-okcommand]{}\;
path:find命令所要查找的目錄路徑,比如/root,表示在root目錄下搜索匹配。
-print:find命令將匹配的文件輸出到標準輸出。
-exec:find命令對匹配的文件執行該參數所給出的shell命令。
-ok:和exec作用相同,只不過以一種更為安全的模式來執行該參數給出的shell命令,在執行每一個命令執行都會提示是否確認執行。
find一般搜索使用實例
在目錄/etc中查找文件init
find /etc -name init
1
2
3
在目錄/etc中查找文件init
find/etc-nameinit
大家可能會認為只要文件名包含init,比如initab,123init都會被匹配到,linux不同于windows,linux中的搜索就是精準搜索,也就是說,只有文件名為init的文件才可以搜索到。那么如果linux下我想搜索文件名包含init的文件怎么辦呢?
find /etc -name *init*
只要文件名里面包含init都會被例舉出來
* :表示匹配一個字符串
1
2
3
4
5
find/etc-name *init*
只要文件名里面包含init都會被例舉出來
*:表示匹配一個字符串
find /etc -name init*
表示在etc目錄中匹配文件名以init開頭的文件
1
2
3
find/etc-nameinit*
表示在etc目錄中匹配文件名以init開頭的文件
find /etc -name init???
在etc目錄下搜索文件名以init開頭后面跟3個字符的文件
?:匹配單個字符
1
2
3
4
5
find/etc-nameinit???
在etc目錄下搜索文件名以init開頭后面跟3個字符的文件
?:匹配單個字符
iname:表示不區分大小寫
1
iname:表示不區分大小寫
在根目錄下查找大于100MB的文件
find / +size +204800
1
2
3
在根目錄下查找大于100MB的文件
find/+size+204800
在linux當中,一個數據塊是512字節,即0.5K,文件的大小以數據塊來計算,因此100MB=102400KB=204800。數據塊是linux文件中存儲的最小單位。+n:大于,-n:小于,n:等于。
普通用戶家目錄下查找所有者為wenyang的文件
find / -user wenyang
1
2
3
普通用戶家目錄下查找所有者為wenyang的文件
find/-userwenyang
user表示根據所有者查找,當然,我們也可以使用-group根據所屬組來搜索。
通過時間屬性來搜索
-amin:訪問時間 access
-cmin:文件屬性 change
-mmin:文件內容 modify
上述三種以分鐘為單位
1
2
3
4
5
6
7
-amin:訪問時間access
-cmin:文件屬性change
-mmin:文件內容modify
上述三種以分鐘為單位
-atime:訪問時間 access
-ctime:文件屬性 change
-mtime:文件內容 modify
上述三種以天為單位
1
2
3
4
5
6
7
-atime:訪問時間access
-ctime:文件屬性change
-mtime:文件內容modify
上述三種以天為單位
我習慣性把上述的3個時間屬性稱為ACM,在這里我附上前面一篇關于ACM的博文方便大家記憶:https://www.1024do.com/?p=2318。
在home目錄下查找10分鐘內被修改過屬性的文件和目錄
find /home -cmin -10
1
2
3
在home目錄下查找10分鐘內被修改過屬性的文件和目錄
find/home-cmin-10
-10表示10分鐘之內,+10代表的就是10分鐘以前。其他時間屬性的操作與此一致。
find中的多條件命令
在/home下尋找大于2MB小于4MB的文件
find /home -size +2048 -a -size -8192
1
2
3
在/home下尋找大于2MB小于4MB的文件
find/home-size+2048-a-size-8192
-a在這里表示兩個條件同時滿足,與之對應的還有-o,表示兩個條件滿足任意一個即可。
在/etc下查找inittab文件并顯示其詳細信息
find /etc -name inittab -exec ls -l {} \;
1
2
3
在/etc下查找inittab文件并顯示其詳細信息
find/etc-nameinittab-execls-l{}\;
-exec在這里起一個鏈接作用,與-ok的區別在于,它不需要確認,而-ok會進行安全檢查。ls -l表示顯示文件信息,{}表示對find查詢的結果替換,\表示轉義符,;表示結束。
通過文件類型搜索
-type 根據文件類型查找
f:文件
d:目錄
l:軟鏈接文件
1
2
3
4
-type根據文件類型查找
f:文件
d:目錄
l:軟鏈接文件
在etc目錄下尋找以init開頭的并且是文件類型的文件
find /etc -name init* -a -type f
1
2
3
在etc目錄下尋找以init開頭的并且是文件類型的文件
find/etc-nameinit*-a-typef
在etc目錄下尋找以init開頭的目錄
find /etc -name init* -a -type d
1
2
3
在etc目錄下尋找以init開頭的目錄
find/etc-nameinit*-a-typed
在etc目錄下尋找以init開頭的軟鏈接
find /etc -name init* -a -type l
1
2
3
在etc目錄下尋找以init開頭的軟鏈接
find/etc-nameinit*-a-typel
根據i節點查找
即inum,每個文件或目錄都有一個i節點,這里不詳細描述,只簡單介紹一下其用法,具體情況大家可以自行百度,我們可以通過尋找一個文件、目錄的inum節點而對其進行其他操作。
搜索home目錄下刪除i節點為127的目錄
find /home -inum 127 -exec rm -rf {} \;
1
2
3
搜索home目錄下刪除i節點為127的目錄
find/home-inum127-execrm-rf{}\;
從圖中可以看出,通過查看文件或目錄的i節點,就可以對其進行附加的操作。
總結:find命令可以精準的搜索到你的預期要求,當其他命令不能搜索到某個文件或目錄時,find確實給我們帶來了很多便捷,但是,find命令在搜索的時候是從硬盤進行遍歷的,因此會非常耗費硬盤的資源,這樣就會使搜索時間提高,隨之而來的就是效率的低下,所以說,find是一把雙刃劍,帶給我們便捷的途中,也難免讓我們耗費更多的資源與時間。
總結
以上是生活随笔為你收集整理的linux的文件搜索命令,Linux文件搜索命令find的用法 | 术与道的分享的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: webpack+vue+mui学习心得
- 下一篇: java中使用unzip_unzip命令