在我做運維的職業(yè)生涯里,有超過3成的故障都是因為磁盤被寫滿導(dǎo)致,而導(dǎo)致磁盤被寫滿的原因就是日志沒有做清理。
今天這個腳本需求很簡單,就是找到/data/logs/目錄下所有以log作為后綴的文件,刪除掉60天以前的,并且對一天以前的使用gzip進行壓縮(每一個都要壓縮)。
其實,這個需求大家不要想復(fù)雜了,核心命令就是find,先給大家講幾個find的常見用法。
1)找到一個目錄下,所有"*.txt",這里需要考慮到不僅僅該目錄下,還要包括該目錄的子目錄下的*.txt,所以,你要直接 ls /dir/*.txt肯定就不合適了,如何找指定名字的文件?使用這個命令:
find /dir/ -name "*.log"
2)找到/data/下10天以前的所有文件,注意只是文件,不包括目錄哦
find/data/-type f -mtime+10
3)基于目錄層級來查找,比如查找當(dāng)前目錄下最多兩層目錄下的所有文件
find . -maxdepth 2 -type f
4)有時候,查找出文件來,還需要針對這些文件做一些操作,比如備份所有.conf文件
find . -type f -name "*.conf" --exec cp {} {}.bak ;
這個--exec選項類似于一個循環(huán),循環(huán)對象就是前面的find出來的*.conf,每次循環(huán),對象用{}代替,最后面的; 需要使用脫義,目的就是為了實現(xiàn)循環(huán)。
除了 --exec之外,還可以使用xargs實現(xiàn),比如:
find . -type f -name "*.conf" |xargs -i cp {} {}.bak
xargs 的-i選項,是為了遍歷循環(huán),它同樣使用 {}來代替循環(huán)對象,有時候,xargs可以不加-i,比如:
find . -name "*.txt" |xargs rm
這是因為rm支持批量操作,比如 rm 1.txt 2.txt 3.txt ,而 mv 不支持,只能一個一個來。
再來看腳本需求,如何找到60天以前的,使用-mtime +60,除了mtime外,還有ctime和atime。我們先來看看mtime、ctime、atime是什么意思 ?
大家看上下兩次結(jié)果對比,上面是中文,下面是英文,最近訪問時間 就是atime,最近更改時間就是mtime,指的是更改了文件內(nèi)容,最近改動時間就是ctime,指的是更改了文件屬性。
啥是文件屬性呢,就是文件的大小啊、權(quán)限啊等信息。比如改了文件的讀寫執(zhí)行權(quán)限,那么ctime會改,再比如改了文件的所有者,ctime也會變。這里有一個規(guī)律,那就是改了文件內(nèi)容,mtime一定會變,從而ctime也一定會變。但反過來,你改了ctime,并不一定會改mtime。
找到60天以前的文件,指的是要找到mtime為60天以前的文件,find 就這樣用
find -mtime +60
+60表示60天以前, 而-60則表示60天以內(nèi)。同理,找到一天以前的,那就是find -mtime +1。
根據(jù)腳本需求,還需要找到1天以前的日志進行壓縮,要注意的是,我們不能先找到1天以前的進行壓縮,然后再去刪除60天以前的,這個順序不合適。因為你一旦gzip壓縮了,之前的 *.log文件就沒有了,你再這樣"find -type f -name "*.log" -mtime +60"就找不到文件啦!
這里還有一個知識點需要給大家說一下,就是gzip壓縮后,源文件沒有了,生成了.gz文件,這個.gz的文件mtime跟源文件一樣,大家看一下
但是ctime會變,這是因為文件大小變啦。
最終的腳本是這樣的:
#!/bin/bash find /data/logs/ -name "*.log" -mtime +60 |xargs rm find /data/logs/ -name "*.log" -mtime +1 |xargs gzip
原來,竟如此簡單!
-
磁盤
+關(guān)注
關(guān)注
1文章
380瀏覽量
25286 -
日志
+關(guān)注
關(guān)注
0文章
139瀏覽量
10679 -
腳本
+關(guān)注
關(guān)注
1文章
392瀏覽量
14938
原文標(biāo)題:清理老日志這種需求太常見了
文章出處:【微信號:aming_linux,微信公眾號:阿銘linux】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
iPhone手機內(nèi)存不夠用?如何清理?
黑客在入侵后,是如何完美清理日志的?
Linux應(yīng)用--日志定時清理
怎樣去打造一款智能日志模塊
reboot命令都不見了為什么會出現(xiàn)這種情況?
華為“清理”34歲以上員工?華為官方:純屬造謠!
對于大規(guī)模系統(tǒng)日志的日志模式提煉算法的優(yōu)化
![對于大規(guī)模系統(tǒng)<b class='flag-5'>日志</b>的<b class='flag-5'>日志</b>模式提煉算法的優(yōu)化](https://file.elecfans.com/web2/M00/49/61/poYBAGKhwKqAHdGmAAAZlCzbn3c079.jpg)
如何制作一個清理計算機的批處理腳本
vivo大數(shù)據(jù)日志采集Agent設(shè)計實踐
三步教你清理NAS上無用docker文件
![三步教你<b class='flag-5'>清理</b>NAS上無用docker文件](https://file.elecfans.com/web2/M00/93/98/poYBAGP4LtSAPMTSAAA1KVVqbOY953.png)
log4j日志框架分析
![log4j<b class='flag-5'>日志</b>框架分析](https://file.elecfans.com/web2/M00/94/E9/pYYBAGP9n36ARCiXAAGH2W3m17o808.png)
Spring Boot的日志框架使用
![Spring Boot的<b class='flag-5'>日志</b>框架使用](https://file1.elecfans.com/web2/M00/89/1C/wKgaomR5WwmAXhoOAAJ-EercJrA306.jpg)
日志篇:模組日志總體介紹
![<b class='flag-5'>日志</b>篇:模組<b class='flag-5'>日志</b>總體介紹](https://file1.elecfans.com/web2/M00/0A/11/wKgZomcZg22AOW6TAAABQt1t03I437.png)
評論