c# 找出目录下的所有子目录_第9期:Linux下文件系统满的处理
文件系統滿(file system full),幾乎是每個程序員都會遇到的問題。它會導致各種神奇的現象,比如程序突然無法啟動、日志突然不刷新了等。測試環境,我們通常找出大文件并刪除即可。常規的步驟是:確認文件系統使用率、找出大文件(目錄)、清理。
另外,某些極端情況,即便刪除了大文件,也會發現文件系統空間未釋放。
查看文件系統利用率
df命令(即disk free的簡稱),用于報告文件系統的使用量。我們通過df命令,先看初步定位一下是否有利用率(Use%)為100%或可用量(Avail)幾乎為0的的文件系統。如果存在,則需要注意。
如果只看某個文件或目錄所在的文件系統,則可以跟上路徑名,比如df /home/maoshuai只會報告/home/maoshuai所在的文件系統的情況。
找出大文件(目錄)
找出滿的文件系統,下一步是確定哪些文件最占空間,這樣清理起來更有效率。找出大文件可以通過du命令完成(disk usage的簡稱)。
du命令默認是遞歸輸出所有子目錄的大小,如果子目錄很多層,會讓人眼花繚亂,并不實用,倒是du -sh *更為實用。其中-h 代表用human readable的格式顯示空間大小單位,而-s即summarize,即僅輸出總大小,所有du -sh *代表輸出當前目錄各子目錄或文件的大小。
遞歸的使用du -sh *查看,直到找出需要刪除的大文件。
刪除
刪除就很容易了,直接rm或使用find命令根據條件rm。
刪除后空間不釋放
上述3個步驟,基本可以處理文件系統滿的問題,但某些特殊情況,會出現刪除后空間不釋放的問題。更詭異的是明明在文件系統根目錄使用du -sh .查看總使用大小,竟然和df -h顯示的使用大小不一致。這很可能是出現了某個進程占用了該文件。在這種情況下,即便刪除了文件,文件系統也不會釋放。
具體驗證的方法就是使用lsof | grep "(deleted)",查看是否存在你刪除的文件,并查看其進程ID,根據進程ID找到對應進程,嘗試重啟該進程。
出現這種詭異的現象,是因為Linux下文件系統使用inode進行管理。對進程來說,對文件的引用并不是通過路徑名實現,所有的路徑名都要轉換成一個inode的結點id,路徑名只不過是提供給“用戶”的概念。 正式基于此,Linux下竟然可以在進程使用的時候,對占用的文件進行重命名甚至刪除操作。因為,進程根本不關心路徑名!
總結
總結
以上是生活随笔為你收集整理的c# 找出目录下的所有子目录_第9期:Linux下文件系统满的处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 设计买什么笔记本电脑_大一设计专业新生,
- 下一篇: antd table设置表格一个单元格的