程序運行會產生不少的日誌,對於無用的日誌手動刪除比價麻煩,寫一個自動執行的命令是頗有必要的。html
刪除文件shell命令
find 對應目錄 -mtime +天數 -name "文件名" -exec rm -rf {} \;linux
具體的命令以下:shell
find /mnt/tomcat/logs/ -mtime +35 -name "*.log" -exec rm -rf {} \;tomcat
參數及說明:post
整句的做用是將 /mnt/tomcat/logs/目錄下全部30天前帶".log"的文件刪除。測試
find:linux的查找命令,定位文件夾;大數據
/mnt/tomcat/logs/:須要清理的目錄;ui
-mtime:語法結構,固定寫法;spa
+30:天數;pwa
"*.log":*是匹配全部,整個是匹配全部的後綴爲.log的文件;
-exec:語法結構,固定寫法;
rm -rf:強制循環刪除文件,及文件夾;
{} \; :語法結構,固定寫法;
crontab計劃任務使用
建立腳本文件:
#vi del-log.sh
切換到insert模式輸入:
#!/bin/sh
find /mnt/tomcat/logs/ -mtime +35 -name "*.log" -exec rm -rf {} \;
受權:
chmod +x del-log.sh
增長系統計劃任務:
crontab -e
11 11 * * * /mnt/tomcat/logs/del-log.sh >/dev/null 2>&1
這樣天天11點11分系統就自動執行del-log.sh文件,即執行find /mnt/tomcat/logs/ -mtime +35 -name "*.log" -exec rm -rf {} \;語句,來對日誌文件進行清理。
其餘自動清除日誌腳本
- #!/bin/sh
- ###########################
- #delete log blog.duplicatedcode.com
- # in_day_num: like 1 2 is delete 2day ago logs
- # in_log_path like tomcat log home
- ###########################
- in_log_path=${1}
- in_day_num=${2}
- tmp_delete_log=/var/log/deletelog/"`date +%Y%m`.log"
-
- deleteLog()
- {
- inner_num=${1}
- #find log
- echo "[`date`] >> start delete logs---" >> $tmp_delete_log
- find ${in_log_path} -type f -mtime ${inner_num} -print0 | xargs -0 rm -rf
- echo "[`date`] >> end delete logs---" >> $tmp_delete_log
- }
- init()
- {
- mkdir -p /var/log/deletelog/
- }
- main()
- {
- init
- if [ -z ${in_log_path} ]; then
- echo "[`date`] >> error log_path not init---" >> $tmp_delete_log
- return
- fi
- inner_day_num=+7
- if [[ -n ${in_day_num} ]] && [[ ${in_day_num} -ge 1 ]] ; then
- ${inner_day_num}=${in_day_num}
- else
- ${inner_day_num}="+"${in_day_num}
- fi
- deleteLog ${inner_day_num}
- }
- #first run main
- main
其中可輸入日誌所在目錄和刪除時間(如數字1表明1天前),find -type f -print 時會根據換行或者空格來輸出查找的文件,在不一樣的sh下有不一樣的反應,若是不作處理結合xargs 進行刪除操做,會有影響,因此須要增長-print0用 null來做爲邊界符號,纔敢結合 xargs -0來格式化輸入。使用find 的時候 遵循最小結果集原則,find解析式從左到右,全部確保你在最左邊的過濾符號可以過濾最大數據。
該腳本可結合crontab進行自動部署清理日誌,在/var/log/deltelog/ 生成按照月的清理日誌記錄。
Linux下自動清理/tmp文件夾的原理
Linux系統中/tmp文件夾裏面的文件會被清空,至於多長時間被清空,如何清空的?
在linux中tmpwatch命令的做用是刪除一段時間內不使用的文件(removes files which haven’t been accessed for a period of time),在/etc/cron.daily/tmpwatc的計劃任務中:
- #! /bin/sh
- flags=-umc
- /usr/sbin/tmpwatch "$flags" -x /tmp/.X11-unix -x /tmp/.XIM-unix \
- -x /tmp/.font-unix -x /tmp/.ICE-unix -x /tmp/.Test-unix \
- -X '/tmp/hsperfdata_*' 10d /tmp
- /usr/sbin/tmpwatch "$flags" 30d /var/tmp
- for d in /var/{cache/man,catman}/{cat?,X11R6/cat?,local/cat?}; do
- if [ -d "$d" ]; then
- /usr/sbin/tmpwatch "$flags" -f 30d "$d"
- fi
- done
tmpwatch參數:
-a或–all 刪除任何類型的文件。
-m或–mtime 根據文件被更改時間
-c或–ctime 根據文件更改狀態時間
-M或–dirtime 根據文件夾被更改時間
-f或–force 強制刪除文件或目錄,其效果相似rm指令的」-f」參數。
-l 不刪除符號連接
-U或–exclude-user=用戶名或uid 排除某用戶的文件
-x 或–exclude=path 排除某路徑
-X 或–exclude-pattern=pattern 排除某規則下的路徑
-q或–quiet 不顯示指令執行過程。
-v或–verbose 詳細顯示指令執行過程。
-test 僅做測試,並不真的刪除文件或目錄。
第一行至關於一些標記(參數),第二行就是針對/tmp目錄裏面排除的目錄,第三行,這是對這個/tmp目錄的清理。
/usr/sbin/tmpwatch "$flags" 30d /var/tmp中30d是30天,
系統自動清理/tmp文件夾的默認時限是30天,決定了30天清理/tmp下不訪問的文件,若想一天一清理的話,把30d改爲1d。
若是你設置更短的時間來清理的話,好比說是30分鐘、10秒等,在這個文件中設置後,reboot後時間到了也不清理/tmp文件夾裏面的內容,由於tmpwatch所在的位置是/etc/cron.daily/目錄下,而這個目錄是天天執行一次計劃任務,因此就不起做用了。
總結
(1)crontab定時任務在文件清理方面又很大的應用,能夠設置關機任務、啓動腳本和一些程序的檢測操做。
(2)清除日誌可採用cat /dev/null > /var/lig/messages,能夠防止rm -f致使的程序已經打開文件句柄沒法正確釋放日誌文件和寫入、文件顯示磁盤空間未釋放等問題。