久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

    1. 站長資訊網(wǎng)
      最全最豐富的資訊網(wǎng)站

      Linux高頻面試問題:查找大文件并安全清除

      本篇文章給大家分享一個Linux 線上面試高頻問題:如何查找大文件并安全地清除?,給大家分析分析,大家也可以對照著自己分析一下,希望對大家有所幫助!

      Linux高頻面試問題:查找大文件并安全清除

      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 命令二(最實用,目錄和文件一起統(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 "%.2fTtt %sn", $1/(1024 * 1024 * 1024), $2} else if(1024 * 1024 * 1024 > $1 && $1 >= 1024 * 1024) {printf "%.2fGtt %sn", $1/(1024 * 1024), $2} else if (1024 * 1024 > $1 && $1 >= 1024) {printf "%.2fMtt %sn", $1/1024, $2} else {printf "%sktt %sn", $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 "%.2fTtt %sn", $1/(1024 * 1024 * 1024), $2} else if(1024 * 1024 * 1024 > $1 && $1 >= 1024 * 1024) {printf "%.2fGtt %sn", $1/(1024 * 1024), $2} else if (1024 * 1024 > $1 && $1 >= 1024) {printf "%.2fMtt %sn", $1/1024, $2} else {printf "%sktt %sn", $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'# 以水平制表符進行分割,后面的程序就是進行換算單位,格式化輸出成易懂的形式;

      (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 "%.2fTtt %sn", $1/(1024 * 1024 * 1024), $2     }      else if(1024 * 1024 * 1024 > $1 && $1 >= 1024 * 1024)      {         printf "%.2fGtt %sn", $1/(1024 * 1024), $2     }      else if (1024 * 1024 > $1 && $1 >= 1024)      {         printf "%.2fMtt %sn", $1/1024, $2     }      else      {         printf "%sktt %sn", $1, $2     } }'

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

      (1)rm 命令有哪些坑?

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

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

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

      cd ${log_path} rm -rf *

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

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

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

      • 把日志清理 shell 腳本,改用邏輯與 && 進行連接。

      cd ${log_path} rm -rf *

      改用邏輯與 && 進行連接,合并成一句,前半句邏輯失敗,后半句命令不執(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)控報警,進入機器可以 (df -h) 命令看到磁盤使用率確實超過了報警閥值。

      • 2 使用命令查看大目錄,并進入到目錄下 【du -sk * ./ | sort -nr | head -n5 | awk -F't' '{if(1024 * 1024 * 1024 * 1024 > $1 && $1 >= 1024 * 1024 * 1024) {printf "%.2fTtt %sn", $1/(1024 * 1024 * 1024), $2} else if(1024 * 1024 * 1024 > $1 && $1 >= 1024 * 1024) {printf "%.2fGtt %sn", $1/(1024 * 1024), $2} else if (1024 * 1024 > $1 && $1 >= 1024) {printf "%.2fMtt %sn", $1/1024, $2} else {printf "%sktt %sn", $1, $2}}'

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

      (2)排查思路

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

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

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

      (3)占用磁盤空間釋放

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

      (4)備注附錄

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

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

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

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

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

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

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

      7 小結(jié)

      • 總結(jié)了查找大目錄以及大文件的常用組合命令(涉及到 du、head、sort、awk 等命令);

      • 以及如何安全使用 rm 命令;

      • 還有在磁盤使用率報警,卻查不到具體的大文件的情況如何排查;

      • 最后還提到了常用的 echo 命令對原文件進行覆蓋以達(dá)到使磁盤空間占用得到瞬間釋放。

      贊(0)
      分享到: 更多 (0)
      網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號