這篇文章主要介紹“Linux如何查找大文件并安全清除”,在日常操作中,相信很多人在Linux如何查找大文件并安全清除問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”Linux如何查找大文件并安全清除”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!
創(chuàng)新互聯(lián)建站專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)、外貿(mào)營(yíng)銷網(wǎng)站建設(shè)、清河網(wǎng)絡(luò)推廣、微信小程序定制開(kāi)發(fā)、清河網(wǎng)絡(luò)營(yíng)銷、清河企業(yè)策劃、清河品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)建站為所有大學(xué)生創(chuàng)業(yè)者提供清河建站搭建服務(wù),24小時(shí)服務(wù)熱線:028-86922220,官方網(wǎng)址:muchs.cn
服務(wù)線上環(huán)境,會(huì)出現(xiàn)一些磁盤使用率過(guò)高而告警的情況,可能是某個(gè)日志文件過(guò)大,沒(méi)有及時(shí)清理回收,如何找到大目錄和大文件?
如何安全的清理大文件?
如何使占用的磁盤空間快速釋放掉?
(這里以當(dāng)前目錄 ./ 為例,統(tǒng)計(jì) 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 # 顯示目錄或文件大小時(shí),以 kB 為單位; //du --max-depth=1 [目錄](méi) # 只顯示指定目錄下第一層目錄(不含單個(gè)文件)的大小; //sort -nr # 以行為單位,根據(jù)數(shù)字大小從大到小排序; //head -n5 # 顯示內(nèi)容的開(kāi)頭 5 行,這里顯示就是 top5 內(nèi)容;
(這里以當(dāng)前目錄 ./ 為例,統(tǒng)計(jì) top5)
(1)命令詳情和說(shuō)明
【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)前目錄下每個(gè)文件夾和文件的大小以KB為單位(最常用),s表示匯總,k是以KB為統(tǒng)計(jì)單位; //./ #當(dāng)前目錄下 //sort -nr # 以行為單位,根據(jù)數(shù)字大小從大到小排序; //awk -F'\t'# 以水平制表符進(jìn)行分割,后面的程序就是進(jìn)行換算單位,格式化輸出成易懂的形式;
(2)du、head、sort、awk 詳細(xì)說(shuō)明參考已有文章附錄
(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 } }'
(1)rm 命令有哪些坑?
rm -rf / # 這個(gè)命令絕逼不能操作,刪除根目錄下的文件,就是系統(tǒng)中的所有文件都要被刪除。如果是線上服務(wù)機(jī)器操作了,那就悲劇了!誤操作了怎么辦?趕快ctrl+c、ctrl+z 能保住多少是多少吧。
rm -rf / home/apps/logs/ # 這也是個(gè)天坑命令!目的是刪除日志文。結(jié)果書(shū)寫(xiě)時(shí)“多了一個(gè)空格”的 bug,看懂了么?這就變成了 [rm -rf /] !
埋藏隱患的日志清理 shell 腳本!腳本關(guān)鍵內(nèi)容如下。
cd ${log_path} rm -rf *
目的是:進(jìn)入到日志目錄,然后把日志都刪除。隱患:當(dāng)目錄不存在時(shí),悲劇就發(fā)生了!
(2)如何安全使用 rm 命令?
在生產(chǎn)環(huán)境把 [rm -rf] 命令替換為 [mv],再寫(xiě)個(gè)腳本程序定期清理,模擬回收站的功能。
把日志清理 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 *
(1)問(wèn)題情景
1 磁盤使用率監(jiān)控報(bào)警,進(jìn)入機(jī)器可以 (df -h) 命令看到磁盤使用率確實(shí)超過(guò)了報(bào)警閥值。
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 依然沒(méi)找到大文件,該怎么辦呢?
(2)排查思路
1 思考:是不是有文件已經(jīng)被刪除了,但進(jìn)程還在占用該文件,進(jìn)程未結(jié)束,空間未釋放?
2 使用「lsof |grep -i deleted
」命令查看,能查看到已刪除,空間沒(méi)有釋放的文件,包含文件大小,進(jìn)程和服務(wù)名等信息。
lsof(List Open Files) 用于查看進(jìn)程打開(kāi)的文件,打開(kāi)文件的進(jìn)程,進(jìn)程打開(kāi)的端口(TCP、UDP),找回/恢復(fù)刪除的文件。是十分方便的系統(tǒng)監(jiān)視工具,因?yàn)?lsof 命令需要訪問(wèn)核心內(nèi)存和各種文件,所以需要root 用戶權(quán)限執(zhí)行。
(3)占用磁盤空間釋放
重啟下進(jìn)程所指的服務(wù),占用的磁盤空間即可釋放掉。線上生產(chǎn)操作一定要謹(jǐn)慎,不要直接 kill 掉進(jìn)程,評(píng)估看是否有進(jìn)程服務(wù)自身的重啟名命令,以及評(píng)估服務(wù)是否可以重啟。
(4)備注附錄
1 當(dāng)一個(gè)文件正在被一個(gè)進(jìn)程使用時(shí),用戶刪除此文件,文件只會(huì)從目錄結(jié)構(gòu)中刪除,但并沒(méi)有從磁盤刪除。
2 當(dāng)使用這個(gè)文件的進(jìn)程結(jié)束后,文件才會(huì)真正的從磁盤刪除,釋放占有的空間。Linux 打開(kāi)一個(gè)文件的時(shí)候,內(nèi)核會(huì)為每個(gè)進(jìn)程在 /proc/
『/proc/{nnnn}/fd/
文件夾({nnnn}
為 pid)』建立一個(gè)以其 pid 為名的文件夾用來(lái)保存進(jìn)程的相關(guān)信息,而其子文件夾 fd 保存的是該進(jìn)程打開(kāi)的全部文件的 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 為大文件,如這個(gè) xxx.log 有幾十個(gè) GB,「echo "" > xxx.log
」是用一個(gè) ""
內(nèi)容覆蓋原文件內(nèi)容,使磁盤空間得到瞬間釋放!
到此,關(guān)于“Linux如何查找大文件并安全清除”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!
分享名稱:Linux如何查找大文件并安全清除
路徑分享:http://muchs.cn/article38/gjghpp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開(kāi)發(fā)、品牌網(wǎng)站設(shè)計(jì)、營(yíng)銷型網(wǎng)站建設(shè)、響應(yīng)式網(wǎng)站、網(wǎng)站建設(shè)、品牌網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)