linux下每天都在產生log日誌檔案,如果不定期刪除,遲早擠爆硬碟,如果手動刪除,幾次可以,不是長久之計。這些事交給linux系統就可以解決。
試驗環境:
系統:centos 6.5 x64
測試路徑、測試檔名、測試時間(2017-06-05)
執行命令:
1
# find /root/text -mtime +3 -name "log.*" -exec rm -f {} \;
命令解釋:
find 查詢命令
/root/text 查詢路徑
-mtime 檔案最後修改時間
+3 3天前(或理解成從命令執行當前日期開始,當天不算,保留3個檔案)
-name 查詢方式為查詢檔案名
"log.*" 查詢log開頭後面為任意長度字元的檔案(不明白可以找「正規表示式」教程看看)
-exec 固定寫法
rm -f 符合條件的執行刪除並不提示
{} 固定寫法,注意左右有空格
\; 固定寫法,注意左右有空格
-mtime說明一下,linux中的檔案的時間屬性只有三個:
atime(access time) 檔案最後訪問時間。
mtime(modified time) 檔案最後修改時間。
ctime(change time) 檔案最後修改許可權時間。(比如執行過chmod)
用stat命令來看看檔案詳細資訊,find會找到檔案的modified時間作為引數。
有人注意到,檔名是06-01,但是顯示時間是06-05,怎麼回事。因為可以用"touch -d"命令來修改modified,現在將檔案修改回原來日期06-01。
1
2
3
# touch -d "21:55 06/01/2017" log.2017-06-01
或
# touch -d 06/01/2017 log.2017-06-01
上面命令第乙個是時間和日期都修改,下面那個是只修改日期。
另外也可以單獨修改時間或者月份,如下
以使用 am, pm 或是 24 小時的格式,日期可以使用其他格式如 6 may 2000 。
1
2
3
touch
-d
"6:03pm"
file
touch
-d
"05/06/2000"
file
touch
-d
"6:03pm 05/06/2000"
file
1
2
3
touch
-d
"2017-05-31 08:10:30"
test
.doc 同時修改檔案的修改時間和訪問時間
touch
-m -d
"2017-05-31 08:10:30"
test
.doc 只修改檔案的修改時間
touch
-a -d
"2017-05-31 08:10:30"
test
.doc 只修改檔案的訪問時間
上面find命令,寫好了我們加入系統自動執行。命令:
1
# crontab -e
開啟後和操作vi編輯軟體一樣(因為crontab預設就是用vi來編輯的)
# crontab -l
列出內容,定義凌晨2點執行。
參考文章:
簡單shell 刪除五日之前的日誌檔案
曾經在某公司面試的時候被問到了類似的問題。假設在logs資料夾存放了許多日誌檔案 比如 20190204.log 20190205.log 20190206.log。我們要刪除特定日期之前的日誌 在這裡展示的是使用shell指令中的find指令完成操作 首先看一下find指令的命令格式 find p...
自動刪除七天之前的日誌檔案
很多人在自己的專案中加入了日誌管理系統,有的是自己寫的,有的則是用的別人寫好的依賴庫,但是不是所有的依賴庫都能滿足我們的需求,這時候是不是要自己往上新增呢 背景,接手的專案裡面已經加好日誌管理了,但是沒有定期清理的功能,我看連兩年前的檔案都在,一天乙個txt檔案,雖然不大,但是量多啊,所以還是有必要...
linux 刪除指定日期之前的檔案
es沒有指定日誌時預設在var的log下面 用 edf cluster.log 這個來清空當前日誌檔案內容,且仍然保留檔名,只清空內容 兩種方法 1.在乙個目錄中保留最近三個月的檔案,三個月前的檔案自動刪除。find email v2 bak mtime 92 type f name mail 12...