91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2022-03-21 10:41:42 來源:億速云 閱讀:358 作者:iii 欄目:建站服務器

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

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

1 案例描述?

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

  • 如何安全的清理大文件?

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

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

(這里以當前目錄 ./ 為例,統計 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 # 以行為單位,根據數字大小從大到小排序;
//head -n5 # 顯示內容的開頭 5 行,這里顯示就是 top5 內容;

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

(這里以當前目錄 ./ 為例,統計 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 * # 顯示當前目錄下每個文件夾和文件的大小以KB為單位(最常用),s表示匯總,k是以KB為統計單位;
//./ #當前目錄下
//sort -nr # 以行為單位,根據數字大小從大到小排序;
//awk -F'\t'# 以水平制表符進行分割,后面的程序就是進行換算單位,格式化輸出成易懂的形式;

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

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

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

  • 埋藏隱患的日志清理 shell 腳本!腳本關鍵內容如下。

cd ${log_path}
rm -rf *

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

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

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

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

cd ${log_path}
rm -rf *

改用邏輯與 && 進行連接,合并成一句,前半句邏輯失敗,后半句命令不執行:

```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 磁盤使用率監控報警,進入機器可以 (df -h) 命令看到磁盤使用率確實超過了報警閥值。

  • 2 使用命令查看大目錄,并進入到目錄下 【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 思考:是不是有文件已經被刪除了,但進程還在占用該文件,進程未結束,空間未釋放?

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

Linux如何查找大文件并安全清除lsof(List Open Files) 用于查看進程打開的文件,打開文件的進程,進程打開的端口(TCP、UDP),找回/恢復刪除的文件。是十分方便的系統監視工具,因為 lsof 命令需要訪問核心內存和各種文件,所以需要root 用戶權限執行。

(3)占用磁盤空間釋放

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

(4)備注附錄

  • 1 當一個文件正在被一個進程使用時,用戶刪除此文件,文件只會從目錄結構中刪除,但并沒有從磁盤刪除。

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

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

6 生產環境常用的安全清理大文件命令

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

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

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

到此,關于“Linux如何查找大文件并安全清除”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

张家港市| 满洲里市| 宁都县| 南康市| 来宾市| 东方市| 苍溪县| 祁门县| 斗六市| 雷州市| 三河市| 德阳市| 双江| 周宁县| 周至县| 长岭县| 麻阳| 宁武县| 克山县| 庆云县| 郸城县| 安康市| 察哈| 银川市| 深水埗区| 同仁县| 陆良县| 马关县| 东山县| 灌南县| 肃南| 水富县| 衡东县| 滁州市| 金湖县| 额敏县| 驻马店市| 庆元县| 洛川县| 延津县| 富蕴县|