久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

Linux如何查找大文件并安全清除

182次閱讀
沒有評論

共計 3867 個字符,預(yù)計需要花費(fèi) 10 分鐘才能閱讀完成。

這篇文章主要介紹“Linux 如何查找大文件并安全清除”,在日常操作中,相信很多人在 Linux 如何查找大文件并安全清除問題上存在疑惑,丸趣 TV 小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Linux 如何查找大文件并安全清除”的疑惑有所幫助!接下來,請跟著丸趣 TV 小編一起來學(xué)習(xí)吧!

1 案例描述?

服務(wù)線上環(huán)境,會出現(xiàn)一些磁盤使用率過高而告警的情況,可能是某個日志文件過大,沒有及時清理回收,如何找到大目錄和大文件?

如何安全的清理大文件?

如何使占用的磁盤空間快速釋放掉?

2 命令一(目錄統(tǒng)計排序最佳命令)

(這里以當(dāng)前目錄 ./ 為例,統(tǒng)計 top5)

【du -k –max-depth=1 ./ |sort -nr|head -n5】

[root@test-001 /]# du -k --max-depth=1 ./ |sort -nr|head -n5
137450839518./
6785876./data
2182577./usr
1830341./home
446856./var
//du -k #  顯示目錄或文件大小時,以  kB  為單位;//du --max-depth=1 [目錄] #  只顯示指定目錄下第一層目錄(不含單個文件)的大小;//sort -nr #  以行為單位,根據(jù)數(shù)字大小從大到小排序;//head -n5 #  顯示內(nèi)容的開頭  5  行,這里顯示就是  top5  內(nèi)容;

3 命令二(最實(shí)用,目錄和文件一起統(tǒng)計排序)

(這里以當(dāng)前目錄 ./ 為例,統(tǒng)計 top5)

(1)命令詳情和說明

【du -sk * ./ | sort -nr | head -n5 | awk -F \t {if(1024 * 1024 * 1024 * 1024 $1 $1 = 1024 * 1024 * 1024) {printf %.2fT\t\t %s\n , $1/(1024 * 1024 * 1024), $2} else if(1024 * 1024 * 1024 $1 $1 = 1024 * 1024) {printf %.2fG\t\t %s\n , $1/(1024 * 1024), $2} else if (1024 * 1024 $1 $1 = 1024) {printf %.2fM\t\t %s\n , $1/1024, $2} else {printf %sk\t\t %s\n , $1, $2}}】

[root@test-001 /]# du -sk * ./ | sort -nr | head -n5 | awk -F \t   {if(1024 * 1024 * 1024 * 1024   $1   $1  = 1024 * 1024 * 1024) {printf  %.2fT\t\t %s\n , $1/(1024 * 1024 * 1024), $2} else if(1024 * 1024 * 1024   $1   $1  = 1024 * 1024) {printf  %.2fG\t\t %s\n , $1/(1024 * 1024), $2} else if (1024 * 1024   $1   $1  = 1024) {printf  %.2fM\t\t %s\n , $1/1024, $2} else {printf  %sk\t\t %s\n , $1, $2}} 
7.13G data
2.17G usr
1.75G home
447.04M var
408.50M run
//du -sk * #  顯示當(dāng)前目錄下每個文件夾和文件的大小以 KB 為單位 (最常用),s 表示匯總,k 是以 KB 為統(tǒng)計單位;//./ # 當(dāng)前目錄下
//sort -nr #  以行為單位,根據(jù)數(shù)字大小從大到小排序;//awk -F \t #  以水平制表符進(jìn)行分割,后面的程序就是進(jìn)行換算單位,格式化輸出成易懂的形式;

(2)du、head、sort、awk 詳細(xì)說明參考已有文章附錄

(3)Linux 中 printf 命令使用參考

// Linux  中  printf  命令使用參考
// https://www.linuxprobe.com/linux-printf-example.html
 if(1024 * 1024 * 1024 * 1024   $1   $1  = 1024 * 1024 * 1024) 
 { printf  %.2fT\t\t %s\n , $1/(1024 * 1024 * 1024), $2
 } 
 else if(1024 * 1024 * 1024   $1   $1  = 1024 * 1024) 
 { printf  %.2fG\t\t %s\n , $1/(1024 * 1024), $2
 } 
 else if (1024 * 1024   $1   $1  = 1024) 
 {
 printf  %.2fM\t\t %s\n , $1/1024, $2
 } 
 else 
 {
 printf  %sk\t\t %s\n , $1, $2
 }
}

4 如何安全使用 rm 命令刪除文件?

(1)rm 命令有哪些坑?

rm -rf / # 這個命令絕逼不能操作,刪除根目錄下的文件,就是系統(tǒng)中的所有文件都要被刪除。如果是線上服務(wù)機(jī)器操作了,那就悲劇了!誤操作了怎么辦?趕快 ctrl+c、ctrl+z 能保住多少是多少吧。

rm -rf / home/apps/logs/ # 這也是個天坑命令!目的是刪除日志文。結(jié)果書寫時“多了一個空格”的 bug,看懂了么?這就變成了 [rm -rf /]!

埋藏隱患的日志清理 shell 腳本!腳本關(guān)鍵內(nèi)容如下。

cd ${log_path}
rm -rf *

目的是:進(jìn)入到日志目錄,然后把日志都刪除。隱患:當(dāng)目錄不存在時,悲劇就發(fā)生了!

(2)如何安全使用 rm 命令?

在生產(chǎn)環(huán)境把 [rm -rf] 命令替換為 [mv],再寫個腳本程序定期清理,模擬回收站的功能。

把日志清理 shell 腳本,改用邏輯與 進(jìn)行連接。

cd ${log_path}
rm -rf *

改用邏輯與 進(jìn)行連接,合并成一句,前半句邏輯失敗,后半句命令不執(zhí)行:

“`shell

cd ${log_path} rm -rf *

完整的日志清理 shell 腳本如下:

 ```shell
#!/bin/bash
base_home= /home/apps 
log_path=${base_home}/logs
cd ${log_path}   rm -rf *

5 磁盤使用率報警,卻查不到具體的大文件?

(1)問題情景

1 磁盤使用率監(jiān)控報警,進(jìn)入機(jī)器可以 (df -h) 命令看到磁盤使用率確實(shí)超過了報警閥值。

2 使用命令查看大目錄,并進(jìn)入到目錄下【du -sk * ./ | sort -nr | head -n5 | awk -F \t {if(1024 * 1024 * 1024 * 1024 $1 $1 = 1024 * 1024 * 1024) {printf %.2fT\t\t %s\n , $1/(1024 * 1024 * 1024), $2} else if(1024 * 1024 * 1024 $1 $1 = 1024 * 1024) {printf %.2fG\t\t %s\n , $1/(1024 * 1024), $2} else if (1024 * 1024 $1 $1 = 1024) {printf %.2fM\t\t %s\n , $1/1024, $2} else {printf %sk\t\t %s\n , $1, $2}}】

3 依然沒找到大文件,該怎么辦呢?

(2)排查思路

1 思考:是不是有文件已經(jīng)被刪除了,但進(jìn)程還在占用該文件,進(jìn)程未結(jié)束,空間未釋放?

2 使用「lsof |grep -i deleted」命令查看,能查看到已刪除,空間沒有釋放的文件,包含文件大小,進(jìn)程和服務(wù)名等信息。

lsof(List Open Files)用于查看進(jìn)程打開的文件,打開文件的進(jìn)程,進(jìn)程打開的端口 (TCP、UDP),找回 / 恢復(fù)刪除的文件。是十分方便的系統(tǒng)監(jiān)視工具,因?yàn)?lsof 命令需要訪問核心內(nèi)存和各種文件,所以需要 root 用戶權(quán)限執(zhí)行。

(3)占用磁盤空間釋放

重啟下進(jìn)程所指的服務(wù),占用的磁盤空間即可釋放掉。線上生產(chǎn)操作一定要謹(jǐn)慎,不要直接 kill 掉進(jìn)程,評估看是否有進(jìn)程服務(wù)自身的重啟名命令,以及評估服務(wù)是否可以重啟。

(4)備注附錄

1 當(dāng)一個文件正在被一個進(jìn)程使用時,用戶刪除此文件,文件只會從目錄結(jié)構(gòu)中刪除,但并沒有從磁盤刪除。

2 當(dāng)使用這個文件的進(jìn)程結(jié)束后,文件才會真正的從磁盤刪除,釋放占有的空間。Linux 打開一個文件的時候,內(nèi)核會為每個進(jìn)程在 /proc/『/proc/{nnnn}/fd/ 文件夾({nnnn} 為 pid)』建立一個以其 pid 為名的文件夾用來保存進(jìn)程的相關(guān)信息,而其子文件夾 fd 保存的是該進(jìn)程打開的全部文件的 fd(fd:file descriptor)。

3 Ctrl + C 和 Ctrl + Z 都是中斷命令。Ctrl + C 是強(qiáng)制中斷程序的執(zhí)行,進(jìn)程已經(jīng)終止;Ctrl + Z 是將任務(wù)中止(暫停的意思),他仍然在進(jìn)程中他只是維持掛起的狀態(tài)。

6 生產(chǎn)環(huán)境常用的安全清理大文件命令

生產(chǎn)環(huán)境安全清理大文件的訴求是什么?既要不影響服務(wù)的正常運(yùn)行,又要讓磁盤占用的空間快速釋放掉(讓文件消失掉不是我們的目的,我們的目的是快速釋放掉占用的磁盤空間)。

不要使用「rm -rf xxx.log」;常用「echo xxx.log」。

這里假設(shè) xxx.log 為大文件,如這個 xxx.log 有幾十個 GB,「echo xxx.log」是用一個 內(nèi)容覆蓋原文件內(nèi)容,使磁盤空間得到瞬間釋放!

到此,關(guān)于“Linux 如何查找大文件并安全清除”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注丸趣 TV 網(wǎng)站,丸趣 TV 小編會繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-08-03發(fā)表,共計3867字。
轉(zhuǎn)載說明:除特殊說明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡(luò)搜集發(fā)布,轉(zhuǎn)載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 兰西县| 玛多县| 赣州市| 马尔康县| 汝南县| 灌阳县| 柞水县| 观塘区| 施秉县| 筠连县| 伊宁市| 革吉县| 台山市| 长沙县| 太仆寺旗| 柳江县| 仙居县| 临洮县| 石首市| 文化| 建始县| 桓台县| 保山市| 柳林县| 邹平县| 西畴县| 长岭县| 清丰县| 贵德县| 大兴区| 贡山| 邓州市| 浦城县| 临汾市| 平舆县| 德安县| 台州市| 宁武县| 青铜峡市| 甘泉县| 佛冈县|