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