❶ 設置自動清理linux系統中n天前的文件的方法
伺服器每周會產生一次全局備份文件,大小約100G左右,需要定期清理。
工作時間網站訪問大,伺服器I/O高的時候刪除大數據會對伺服器狀態產生不好的影響。於是想利用計劃任務自動執行。
在我的備份目錄/bakcup下,每次備份文件均以日期形式命名目錄名:
代碼如下:
# ls
2013-12-23 2014-01-06 2014-01-20 2014-02-03
2013-12-30 2014-01-13 2014-01-27 2014-02-10
刪除部分備份同時保留部分,可以使用find命令,如我要保留最近四周備份的文件,每次備份間隔七天:
代碼如下:
# find /bakcup/ -maxdepth 1 -type d -mtime +28
/bakcup/2014-01-06
/bakcup/2014-01-13
/bakcup/2013-12-23
/bakcup/2013-12-30
-maxdepth 1:設置查找目錄深度為1,只在/backup目錄下查找,如不加此參數會將下級目錄中的文件都列出
-type d:設置查找類型為目錄
-mtime +28:查找28天前的目錄
查找結束後可用-exec參數連接刪除命令
代碼如下:
rsync --delete-before -d /data/test/ {} ;
所以,整個命令就是:
代碼如下:
# find /bakcup/ -maxdepth 1 -type d -mtime +28 -exec rsync --delete-before -d /data/test/ {} ;
p
最後可以把命令放入腳本,設置crontab自動執行。
提醒:
使用命令前,應先在伺服器上試用查找部分的命令,如只查找出要清理的目錄,則可以繼續。
不排除某些系統會將./目錄查找出來,一定要看清楚,防止出現意外情況。
另外可將-exec替換為-ok,效果相同,在刪除前提醒用戶確認。
PS:rm命令與rsync命令的效率比較
rm
rm命令大量調用了lstat64和unlink,可以推測刪除每個文件前都從文件系統中做過一次lstat操作。
lstat64的次數低於文件總數,還有另外的原因,之後會在另一篇文章中說明。
getdirentries64這個調用比較關鍵。
過程:正式刪除工作的第一階段,需要通過getdirentries64調用,分批讀取目錄(每次大約為4K),在內存中建立rm的文件列表;第二階段,lstat64確定所有文件的狀態;第三階段,通過unlink執行實際刪除。這三個階段都有比較多的系統調用和文件系統操作。
rsync
rsync所做的系統調用很少。
沒有針對單個文件做lstat和unlink操作。
命令執行前期,rsync開啟了一片共享內存,通過mmap方式載入目錄信息。
只做目錄同步,不需要針對單個文件做unlink。
另外,在其他人的評測里,rm的上下文切換比較多,會造成System CPU佔用較多——對於文件系統的操作,簡單增加並發數並不總能提升操作速度。
❷ Linux定時清除文件的簡單方法linux按時間刪除文件
大多數Linux操作系統,你可以用簡單的命令來定時清理你的文件系統。這是特別有用的,因為系統會自動清理未使用文件,這樣可以節省空間,提高性能。
要定時清除文件,首先要打開終端窗口,然後輸入刪除文件命令,然後指定文件或文件夾的路徑。您還可以指定有效的文件擴展名,這樣可以將任何類型的文件刪除。
另外,您還可以使用Linux中的cron服務來設置定期定時刪除任務。使用cron服務,只需要少量的系統操作,即可在特定日期/時間執行刪除文件動作。
為了讓Cron服務正常運行,您必須編輯/etc/crontab文件。可以使用文本編輯器編輯,然後用mv命令將該文件復制到/etc/文件夾中,接下來打開終端,輸入「crontab -e」然後按Enter鍵。這樣就可以添加新的任務。
在添加任務時,在第一行輸入每天的運行時間,第二行輸入要運行的命令。最後保存文件,輸入「crontab crontab.txt」將該文件復制到/etc/文件夾中,接下來檢查cron服務是否已成功啟動,如果已成功啟動,將定期執行您設置的刪除文件任務。
在Linux系統上定期清除文件是一件輕松的事情,用前面介紹的方法,您可以輕松的實現。定時清理文件的好處是可以節省空間,提高系統性能,減少垃圾文件對系統的影響,使用cron可以讓您的任務更容易實現,更加方便。