簡介:node
在 Linux 中 find 是一個強大的文件查找工具, 能夠用於查找系統或指定目錄的指定文件, find 支持正則表達式和統配符進行匹配python
find 命令格式:正則表達式
# 使用格式 find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression] 格式說明: path find 查找的路徑, / 表示在當前系統中查找 expression 表達式, 默認爲 print(將 find 的匹配結果輸出到屏幕)
find 參數:shell
OPTIONS(選項): 和符號連接相關的選項: -P 不跟蹤符號連接(默認行爲) -L 當 find 檢查或打印有關文件的信息時, 所使用的信息應取自連接指向的文件的屬性, 而不是連接自己 -H 和 -L 參數恰好相反, 當 find 檢查或打印有關文件的信息時, 所使用的信息應取自符號連接的屬性 示例: # 創建測試環境 ln -s /etc/ /tmp/ # 查找 etc/fstab, 默認 find 命令不會跟蹤符號連接, 因此 find 不會搜索 /tmp/etc/ 所指向的 /etc/, 這時 find 不會獲得的任何內容 find /tmp/ -name 'fstab' # 查找 etc/fstab, 使用 -L 選項, find 會搜索 /tmp/etc/ 所指向的 /etc/ 和其子目錄, 這時能夠查找到 fstab find -L /tmp/ -name 'fstab' # -H 使用符號連接自己的屬性, 因此 find 將 /tmp/etc/ 當成一個文件, 這時 find 不會獲得的任何內容 find -H /tmp/ -name 'fstab' 注意: 一、-P -L -H 能夠同時出現, 可是隻有處於命令行最後的那個參數生效 二、當 -L 或 -H 生效時, 任何做爲 -newer 參數列出的符號連接將被取消引用, 而且時間戳將從符號連接指向的文件中取出(-newerXY、-anewer、-cnewer 和 -newer 的行爲相同) 調試和優化: -D 調試模式 -O 指定優化級別(默認爲0) 0、1 級別 0 和 級別 1 相同, 這是默認的優化級別, 對錶達式進行從新排序, 以便基於 -name 和 -regex 的查找 2 對於基於 -type 或者 -xtype 的查找, 先從 inode 中讀取文件類型 3 啓用快速查找 EXPRESSIONS(表達式): OPTIONS(選項): -d、-depth 在查找文件時, 首先查找當前目錄中的文件, 而後再在其子目錄中查找 -maxdepth n find 查找目錄的最大深度 -mindepth n find 從指定的目錄的第幾層深度開始查找 -mount 查找文件時不跨越文件系統的 mount 點 -follow 和 -L 參數相似 -regextype 指定後面所使用的正則表達式語法, 默認爲 emacs posix-awk 類 awk 的正則表達式語法 posix-basic 基本正則表達式 posix-egrep 不使用正則表達式 posix-extended 擴展正則表達式 TESTS(測試, 檢查文件是否符合表達式): 能夠將數字參數指定爲: +n 大於n -n 小於n n 等於n 經常使用參數: -anewer file 將指定目錄下的全部文件和 file 對比, 輸出讀取或寫入時間在 file 讀取或寫入以後的文件, 該選項會的連接文件進行跟蹤 -newer file 和 anewer 相似, 將指定目錄下的全部文件和 file 對比, 輸出修改時間在 file 修改以後的文件, 該選項會的連接文件進行跟蹤 -empty 查找空文件或目錄 -fstype type 查找指定文件系統上的文件 -gid n 根據文件 gid 查找 -uid 根據文件 uid 查找 -user 根據屬主查找 -group gname 根據文件屬組查找 -name 根據文件名進行查找 -iname 和 -name 相似, 可是 -iname 不區分大小寫 -regex 使用正則表達式進行查找 -iregex 和 -regex 相似, 可是 -iregex 不區分大小寫 -nogroup 查找沒有屬組的文件(文件的屬組列爲數字) -nouser 查找沒有屬主的文件(文件的屬主列爲數字) -perm 根據文件權限進行查找 -readable 查找可讀文件 -writable 查找可寫文件 -path 一般和 -prune 一塊兒使用, 表示忽略某個目錄 -prune 忽略 -path 指定的目錄, 不能和 -delete、-depth 參數一塊兒使用 -size n[cwbkMG] 根據文件大小進行查找 b 512 字節(默認) c 1 字節 w 2 個字節的單詞 k 1 k M 1 m G 1 g -type c b 塊設備 c 字符設備 d 目錄 p 命名管道 f 文件 l 連接文件 s socket 文件 和時間查找相關: time 類型介紹: mtime(Change): 當文件內容發送改變時更新 mtime ctime(Modify): 當文件權限或屬性發生改變時更新 ctime(內容更新時也會更新該值, 和 mtime 惟一區別在於, 當權限或屬性發生改變時 mtime 不會改變) atime(Access): 文件被訪問時發生改變 relatime: 若是一個文件不停的被訪問每一次都更新 atime 的話將會大大的增長磁盤 IO 的壓力, 全部 Linux kernel 2.6 以後出現了 relatime 屬性 使用這個屬性以後只有當 atime 的時間落後 mtime 或者 ctime 以後 atime 纔會更新, 在 centos 中想要使用 relatime 必須使用 mount -o relatime 或者在 /etc/fstab 中添加 relatime 參數 在 Linux 中使用 stat [file|dir] 能夠看見這個幾個值的具體信息 -ctime n 文件狀態最後一次修改是在 n 天以前 -atime n 文件最後一次訪問是在 n 天以前 -mtime n 文件最後一次修改是在 n 天以前 -cmin n 文件狀態最後一次修改是在 n 分鐘以前 -amin n 文件最後一次訪問是在 n 分鐘以前 -mmin n 文件最後一次修改是在 n 分鐘以前 ACTIONS(對符合表達式的結果進行操做): -delete 刪除查找到的文件或目錄(謹用) -exec 將查找的文件或目錄傳遞給 exec 後面的 shell 命令做爲參數 -ls 將查找到的文件或目錄傳遞給 ls -l 命令做爲該命令的參數 -ok 相似於 -exec , 可是在執行命令以前會詢問用戶是否執行 -print 默認動做, 將查找結果輸出的屏幕 -printf format 相似於 -print, 可是能夠自定義輸出格式
經常使用示例:express
# 查找系統中的全部以 .log 結尾的文件 find / -name "*.log" # 查找系統中權限爲 777 的文件或目錄, 並使用 ls -l 查看其詳細信息 find / -perm 777 -ls # 查找系統中屬主和屬組爲 postfix 的文件或目錄 find / -user postfix -group postfix # 刪除 /var/log/ 空文件和目錄 find /var/log/ -empty -delete # 使用"擴展正則表達式"查找系統中的全部以.so和.log結尾的文件 find / -regextype posix-extended -regex ".*\.log$|.*\.so$" # 查看 /etc/ 最近三天修改過的文件 find /etc/ -mtime -3 # 查看 /etc/ 30天前修改過的文件 find /etc/ -mtime +30 # 查找 /var/log/ 全部以 .log 結尾的文件, 經過 chmod 命令將其權限改成 666 find /var/log/ -name "*.log" -exec chmod 666 {} \; # 查看權限是否已經更改 find /var/log/ -name "*.log" -ls # 查找系統文件大小大於 10M 的全部文件 find / -type f -size +10M # 查找系統文件大小小於 1k 的全部文件 find / -type f -size -1k # 系統中沒有屬組和屬主的文件或目錄 find / -nouser -nogroup # 查找系統中的 .log 文件, 查詢深度不超過 3 層 find / -maxdepth 3 -name "*.log" # 查找系統中的 .log 文件, 查詢深度從第 4 層開始 find / -mindepth 4 -name "*.log"