1. 程式人生 > >Linux命令之find詳解

Linux命令之find詳解

linux 運維 系統 find 命令

介紹
find工作中常用的Linux基礎命令之一,可以按照類型、大小、名字、修改時間、訪問時間、改變時間、權限等參數進行查找我們想要的文件或目錄。find查找還可以結合很多命令來達到我們想要的結果,比如:和sed、xargs等命令連用;通過管道符號“|”即可。
我們在學習和使用Linux命令和配置文件的時候,要學會用man來幫助學習,man不僅可以查看命令的幫助文檔,還能查看配置文件的幫助文檔。
find - search for files in a directory hierarchy
在目錄層次結構中搜索文件
語法
find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression]
查找方式
1、查找的深度(-maxdepth)
該參數一定要跟在路徑後面,其它參數的前面,否則會報錯

find /var/log/ -maxdepth 1 -type f            
/var/log/anaconda.ifcfg.log
/var/log/dmesg
/var/log/dmesg.old

2、按類型查找(-type)
find /data -type f
f:普通文件 d:目錄 l:符號鏈接 s:socket b:區塊文件
3、按文件名查找(-name)
find /data -type f –name “*.log”
4、按修改時間查找(-mtime)
find / -type f –name “*.log” –mtime +4 表示查找四天前的


時間原理圖:
技術分享圖片
在時間屬性當中,除了按照修改時間mtime之外,還可以按照訪問時間atime和屬性的改變時間ctime來查找,只不過不太常用。
5、按權限查找(-perm)

[root@backup tmp]# find /tmp/ -type f -perm 644 
/tmp/rsyncd.conf
/tmp/nn
/tmp/kk
[root@backup tmp]# ls -l
total 4
-rw-r--r-- 1 root root   0 May 18 21:01 kk
-rw-r--r-- 1 root root   0 May 18 21:02 nn
-rw-r--r-- 1 root root 466 May 17 05:32 rsyncd.conf
[root@backup tmp]# ls -l kk|awk ‘{print $1}‘|tr "\-rwx" "0421" –有特殊意義,所以需要轉義
0420400400

6、按用戶查找(-user)
find / -user root
7、按大小查找(-size)

find / -type f –size +100M 查找大於100M的文件
-100M 小於100M
100M 等於100M
+100M 大於100M    其它的依此類推

8、按照inode號查找(-inum)
find / -type f –inum xxxx
9、! :取反
find . -maxdepth 1 -type d ! -name "."
10、-a:並且and

find /tmp/ -type f -name "k*" -a -name "*k"
/tmp/kk

11、-o:或者or

find /tmp/ -type f -name "k*" -o -name "*n" 
/tmp/nn
/tmp/kk

使用案例
1、find . -perm 700 |xargs chmod 777
查找出當前目錄(及子目錄)下所有權限為700的文件,並把其權限重設為777。
2、find . -type f |xargs ls -l
查找出文件並查看其詳細信息。
3、find . -maxdepth 1 -type d ! -name "."
查找當前目錄下的所有目錄,排除”.”當前目錄,且查找深度為1
4、find oldboy/ -type f -name "*.sh"|xargs sed -i ‘s#Ricky#ricky#g‘

5、查找刪除
find /data -type f -name "*.txt" |xargs rm –f
或find /data -type f -name "test" -exec rm {} \;
{}:find查找到的內容
; 命令結束【\反斜杠是用來轉義】

Linux命令之find詳解