Linux 自動化基礎之find

2020-12-14 蟲蟲搜奇

概述

說起find命令,它很基礎,也很重要,可能大家都用過,但是真正用的還可以應該不多把。

find 參數很多,用好了可以幹很多事情,關於這些參數的詳細信息可以查詢搜尋引擎以及瀏覽幫助文檔。本文章蟲蟲會挑一些常用的參數,重點實例介紹。最後用find實現一個腳本,實現自動化日誌清理。

好讓咱們開始介紹。

find 用法:

find用戶很簡單,最簡單是直接find然後會車,會列出當前目錄下的所有文件和目錄。注意默認就列出所有文件,包括隱藏的文件(以.開頭的文件和目錄)。行為上可以ls –a一樣,但是表現上有差異,結果是以豎向列表和ls –a的橫向展示不一樣。

對特定目錄搜索的話,是在find 後緊跟要搜索的目錄,比如搜索/usr 就是find /usr

下面是find用法的一般格式:

用法: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [ path...] [expression]

關於參數我就說幾個比較重要的:

1、-type 用於搜索的類型

d為目錄 ,l 為軟連結,f 為文件,b塊設備,s socket套接字文件 p

fifo命名管道,其中f用的最多。

比如搜索/usr的文件,就用

find /usr -type f

這樣搜索的好處是去除了搜索結果中的目錄,默認是帶目錄的,如果不慎重再做進一步操作(-exec),如刪除時候會誤刪除。小編的血的教訓,不論任何時候都加上-type f

2、-name 文件名 搜索文件名

這個是find最常用的模式。為啥呢?因為find最常用就是搜索文件名,都是用這個。注意文件名是支持泛查詢的,比如要查詢python原文件,可以用:

find /usr/ -type f -name *.py

結果如下(各個機器可能結果不一樣)

3、find . -maxdepth n 搜索深度

表示搜索子目錄的層級,比如1級的話,就會只搜索本目錄,下面顯示和直接find的區別:

4、-mtime n 文件修改時間

類似的有-atime 創建時間和 -ctime 訪問時間以及其他以分鐘為單位的。為啥這個常用呢,主要用它查文件變化,比如網站目錄被篡改了,用這個一查就查的到。

比如網站目錄中,我們要查找下最近7天內變化的文件,就可以用下面的命令(假設網站更目錄為/web):

find /web -type f -mtime -7

注意 -mtime 後面數字n 表示n天 +n表示超過n天 ,-n表示n天內。

5、-perm 格式 根據權限查找

格式支持常見的數字

find ~ -perm 0700 查找你當前用戶目錄下文件權限為用戶可讀寫執行的。

6、-size (+-)n[mkc],根據文件大小查詢

比如查詢文件大小為小於10k的

find ~ -size -10k

注意,加減表示大於小於不帶的話是恰好,m是兆字節,k是千字節,c字節,這個值和默認ls -l出來大小不帶單位的值類似:

上面截圖展示了,我們搜索大小 5682c的文件,恰好就是ls -al顯示出來的大小5682的 .viminfo文件。

7、-ls 和 –delete

搜素的文件做後續進一步的操作,可以用-ls 和-delet用來列出和刪除選擇的文件用-ls 和 –delete。下面是-ls和ls –al的對比:

8、find –exec 和 –ok

find –exec 和-ok用來對,搜素的文件做後續進一步的操作。比如刪除文件,可以用$

find . -name 文件名 –type f -exec rm {} \;

注意,我們再第一步時候說的加-type f ,如果不加的話,rm(注意不必要帶-rf,這兒rm是多餘的,看見腳本有帶-rm絕對是學藝不精)會直接刪掉搜索到的文件和目錄,而且不會做提示。-ok會提示,所以手動操作時候建議用-ok,而腳本裡面用-exce

find 和其他命令配合

find 可以和其他命令組合用,比如find搜出來的文件列表,可以用grep 在做下搜索,比如搜索python源文件,還可以用

find /usr -type f |grep "\.py"

可以用find生成文件列表,把列表傳遞個grep 對文件做搜索

比有兩個文件 a,b內容如下:

我們搜索兩個文件中包含hello word的行:

grep "hello word" `find -type f`

搜索包含chongchong的行:

grep "chongchong" `find -type f`

注意上面find -type f外面是反引號,表示執行,就是Esc下面那個符號。

其他find可以做的事情

藉助find可以做很多事情:

比如我們要刪除目錄下空文件(大小為零的),可以用:

find -type f -size 0 -exec rm {} \;

要刪除30天以前的文件用

find -type f -mtime +30 rm {} \;

Find自動化腳本自動實例

最後舉個自動化實例,nginx日誌分割和過期日誌清理:

# 0 00 * * * /nginx/logs/ngx_logcut.sh >/dev/null 2>&

pidfile=/var/run/nginx.pid

logpath='/nginx/logs/'

keepdays=30

logfiles=(access.log error.log)

cd $logpath

for logfile in ${logfiles[@]}; do

if [ ! -e $logfile ];

then

continue

fi

find . -type f -name $logfile"20*" -mtime +$keepdays -exec rm {} \;

mv $logfile $logfile$(date -d "yesterday" +"%Y%m%d")

done

kill -USR1 `cat $pidfile`

以上腳本保存為/nginx/logs/ngx_logcut.sh為,然後在cron添加一條0 00 * * * /nginx/logs/ngx_logcut.sh >/dev/null 2>& 會每天0點做日誌切割,並把超過30天的日誌刪除掉。

設置參數說明:

pidfile nginx 進程號pid的文件

logpath目錄是nginx的日誌目錄,可以根據自己實際修改。

keepdays是日誌保存的時間,設置保存多少天就ok。

主要邏輯是:

find尋找文件,刪除。

把當前的日誌,mv到日誌名稱打時間籤。

kill -USR1 nginxpid 這個是個nginx消息,nginx會重新加載配置,類似於nginx -s reload。

相關焦點

  • Linux下33個常用的Find實例
    在當前目錄查找文件使用的名字在當前目錄下,查找所有名稱為linuxprobe.txt的文件# find . -name linuxprobe.txt./linuxprobe.txt2.在home目錄下查找文件查找home目錄下所有文件名為linuxprobe.txt的文件# find /home -name linuxprobe.txt/home/linuxprobe.txt3.
  • ARM-linux-gcc交叉編譯工具提示arm-linux-gcc can not find
    在Ubuntu12.04下安裝了arm-linux-gcc後,編譯Linux內核發現提示arm-linux-gcc can not find,查找了相關的網絡資料找到了答案
  • 【Linux基礎】07 文件管理
    目錄一 前言二 目錄結構三 路徑四 文件管理4.1 文件管理之:基礎4.3 文件管理之:查看文件內容4.5 文件管理之:文件查找4.6 文件管理之:上傳與下載4.7 文件管理之:字符處理命令4.7.4 tr命令4.7.5 wc命令4.8 文件管理之:打包壓縮4.9 軟硬連結(2)inode的大小(3)inode號碼(4)目錄項(5)硬連結和軟連結
  • Linux——Shell腳本的應用1(基礎)
    Shell腳本的應用(基礎)簡介:隨著linux系統在企業中的應用越來越多,伺服器的自動化管理也變得越來越重要。在linux伺服器的自動化維護工作中,除了計劃任務的設置以外,shell腳本的應用也是非常重要的一部分。
  • Linux命令之文件搜索
    前言在linux最小安裝模式下,當我們登錄到一臺不是自己安裝的linux伺服器上時,有的時候我們需要知道某個軟體的安裝位置,例如:我們需要知道mysql安裝在哪個目錄下,那麼我們應該怎麼辦呢?這就用到了文件的搜索功能。
  • Linux中find命令細節詳解
    提示:點擊上方"Linux公社"↑免費訂閱find命令特點:文件查找,實時查找,速度略慢,精確匹配使用格式:# find [options] [的文件:# find /tmp -user linuxmi查找/tmp目錄下屬組為linuxmi的文件:# find /tmp -group linuxmi查找/tmp目錄下UID為502的文件:# find /tmp -
  • Linux之find命令參數總結
    Liunx find系列Linux之find命令Liunx之find常用命令匯總Linux之find execLinux之findxargsfind 常見的注意事項使用name選項文件名選項是find命令最常用的選項,要麼單獨使用該選項,要麼和其他選項一起使用。
  • 軟體測試基礎之linux常用命令
    目標目錄 ,如 cp test.log /tmp;mv剪切命令語法結構:mv 目標文件 目標目錄, 如: mv test.log /tmp 或 mv test.log test.log.backupfind
  • Linux工作必備命令:find命令,搜索神器高級用法
    linux系統下一切都是文檔(廢話,windows也是),而且作為開發人員平時是不使用圖形界面的,那麼多的文檔不可能都記住放在哪裡,有時候我們印象中只是記下了文檔大概的名字或者文件格式,這時候我們就需要find命令根據我們僅存的記憶來搜索文檔了。
  • 每天學一個 Linux 命令(20):find
    命令簡介find 命令在文件系統中搜索文件和目錄。find 命令用來在指定目錄下查找文件,在參數之前的任何字符串都會當作是目錄名。使用 find 命令時,如何不設置任何參數,則 find 命令將在當前目錄下查找子目錄與文件,並且將查找到的子目錄和文件全部顯示出來。
  • Linux基礎命令之:實驗內容及小結
    實驗內容2.4.1在Linux下解壓常見軟體在Linux下安裝一個完整的軟體(嵌入式Linux的必備工具——交叉編譯工具),掌握Linux常見命令,學會設置環境變量,同時搭建起嵌入式Linux的交叉編譯環境(關於交叉編譯的具體概念在本書後面會詳細講解),為今後的實驗打下良好的基礎
  • linux學習
    find [OPTION] [path...] [expression]$find /usr/bin/ -name zip -print/usr/bin/zipwhereis findwhereis -b find man find  #find的幫助手冊 J下 K上 空格下一頁 Q退出whatis unmae #apropos
  • Linux下C編程基礎之:本章小結與思考與練習
    3.8 本章小結本章是Linux中進行C語言編程的基礎,首先講解了C語言編程的關鍵點,這裡關鍵要了解編輯器、編譯連結器、調試器及項目管理工具等概念。
  • Linux 系統管理員 2017 年的 10 個新決心
    1、 決定更自動化你沒必要忙得像頭無頭蒼蠅,每天忙於解決可預見的問題。如果你發現自己每天都花費時間在執行重複的任務,你有必要現在就停下來。在了解了所有基於 Linux 而且開源的工具後,你可以儘可能地自動化你的 Linux 任務[1]來給自己一些休閒的時間。你會發現,接下來的幾個決心會幫你在工作上朝著這個目標前進。所以繼續看下去吧。
  • Linux常用命令 - sed
    sed -i 's/\bfoo\b/linux/g' file.txt123 Foo linux linuxlinux /bin/bash Ubuntu foobar 456lCjovE若要使模式匹配不區分大小寫,請使用 I 標誌。
  • Linux系統從入門到放棄?
    通常在linux的基礎命令學習中包涵以下所羅列出的Linux命令:1.pwd/cd /ls/touch/mkdir/cp/rm/mv/find/du 目錄及文件操作命令2.Cat/more/less/head/tail/wc/grep/echo 文件查看操作命令3.Ln 連接命令4.Gzip/bzip/tar 文件壓縮解壓命令基礎的
  • 紅帽linux學哪些東西?
    Linux是一類非常優秀的開放作業系統,在這個雲計算、大數據佔據中心地位的網際網路時代,越來越多的業務正在遷移到Linux上來,隨著linux在伺服器市場上的佔有率不斷猛漲,企業對linux人才特別是RHCE的需求也在不斷的增大,掌握Linux 技能已經成為運維人員的一項基本要求,智匯雲校攜手紅帽共同打造
  • 【Linux】常用命令之 awk 常用實例
    awk命令工具在Linux/UNIX系統中,awk是一個功能強大的編輯工具,逐行讀取輸入文本,並根據指定的匹配模式進行查找,對符合條件的內容進行格式化輸出或者過濾處理,可以在無交互的情況下實現相當複雜的文本操作,被廣泛應用於Shell腳本,完成各種自動化配置任務
  • Linux基礎知識
    解壓.zip的壓縮文件bzip2語法:bzip2  -k  [文件]    壓縮文件 格式為.bz2    -k  產生壓縮文件後保留原文件bunzip2語法:bunzip2 -k [壓縮文件]   解壓縮    -k  解壓縮後保留原文件文件搜索命令find
  • linux常用命令—find
    Linux的find 命令有非常大的靈活性,可以向其指定豐富的搜索條件(如文件權限、屬主、屬組、文件類型、日期和大小等)來定位系統中的文件和目錄。此外,find 還支持對搜索到的結果進行多種類型的命令操作。