


Häufig gestellte Fragen zu Linux-Interviews: Finden Sie große Dateien und löschen Sie sie sicher
本篇文章给大家分享一个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
」命令查看,能查看到已删除,空间没有释放的文件,包含文件大小,进程和服务名等信息。
lsof(List Open Files) 用于查看进程打开的文件,打开文件的进程,进程打开的端口(TCP、UDP),找回/恢复删除的文件。是十分方便的系统监视工具,因为 lsof 命令需要访问核心内存和各种文件,所以需要root 用户权限执行。
(3) Geben Sie den belegten Speicherplatz frei.
Starten Sie den Dienst, auf den der Prozess verweist, neu, und der belegte Speicherplatz wird freigegeben. Sie müssen während des Online-Produktionsbetriebs vorsichtig sein. Bewerten Sie nicht, ob für den Prozessdienst selbst ein Neustartbefehl vorhanden ist, und prüfen Sie, ob der Dienst neu gestartet werden kann.
(4) Anmerkungen Anhang
1 Wenn eine Datei von einem Prozess verwendet wird und der Benutzer die Datei löscht, wird die Datei nur aus der Verzeichnisstruktur, nicht jedoch von der Festplatte gelöscht.
2 Wenn der Prozess, der diese Datei verwendet, endet, wird die Datei tatsächlich von der Festplatte gelöscht und der belegte Speicherplatz wird freigegeben. Wenn Linux eine Datei öffnet, erstellt der Kernel eine Datei für jeden Prozess im Ordner
/proc/
『/proc/{nnnn}/fd/
({ nnnn}
(pid)“ Erstellen Sie einen Ordner, der nach seiner PID benannt ist, um prozessbezogene Informationen zu speichern, und sein Unterordner fd speichert den fd (fd: Dateideskriptor) aller vom Prozess geöffneten Dateien./proc/
『/proc/{nnnn}/fd/
文件夹({nnnn}
为 pid)』建立一个以其 pid 为名的文件夹用来保存进程的相关信息,而其子文件夹 fd 保存的是该进程打开的全部文件的 fd(fd:file descriptor)。3
Ctrl + C
和Ctrl + Z
都是中断命令。Ctrl + C
是强制中断程序的执行,进程已经终止;Ctrl + Z
是将任务中止(暂停的意思),他仍然在进程中他只是维持挂起的状态。
6 生产环境常用的安全清理大文件命令
生产环境安全清理大文件的诉求是什么?既要不影响服务的正常运行,又要让磁盘占用的空间快速释放掉(让文件消失掉不是我们的目的,我们的目的是快速释放掉占用的磁盘空间)。
不要使用 「
rm -rf xxx.log
」;常用 「echo "" > xxx.log
」。这里假设 xxx.log 为大文件,如这个 xxx.log 有几十个 GB,「
echo "" > xxx.log
」是用一个""
Strg + C
und Strg + Z
sind beide Interrupt-Befehle. Strg + C
dient dazu, die Ausführung des Programms gewaltsam zu unterbrechen, und Strg + Z
dient dazu, die Aufgabe abzubrechen (d. h. anzuhalten). noch im Prozess, und es bleibt einfach suspendiert. -
6 Häufig verwendete Befehle zum sicheren Bereinigen großer Dateien in Produktionsumgebungen
- Was sind die Anforderungen für das sichere Bereinigen großer Dateien in der Produktion? Umgebungen? Es ist nicht nur notwendig, den normalen Betrieb des Dienstes nicht zu beeinträchtigen, sondern auch den belegten Speicherplatz schnell freizugeben (unser Ziel ist es nicht, die Dateien verschwinden zu lassen, unser Ziel ist es, den belegten Speicherplatz schnell freizugeben).
- Verwenden Sie nicht „
rm -rf xxx.log
“, sondern häufig „echo „“ > xxx.log
“. - Hier wird davon ausgegangen, dass xxx.log eine große Datei ist. Dieses xxx.log hat beispielsweise Dutzende GB. „
echo „“ > xxx.log
“ ist ein""-Inhalt überschreibt den ursprünglichen Dateiinhalt, sodass sofort Speicherplatz freigegeben wird!
Das obige ist der detaillierte Inhalt vonHäufig gestellte Fragen zu Linux-Interviews: Finden Sie große Dateien und löschen Sie sie sicher. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

VS Code system requirements: Operating system: Windows 10 and above, macOS 10.12 and above, Linux distribution processor: minimum 1.6 GHz, recommended 2.0 GHz and above memory: minimum 512 MB, recommended 4 GB and above storage space: minimum 250 MB, recommended 1 GB and above other requirements: stable network connection, Xorg/Wayland (Linux)

Die Gründe für die Installation von VS -Code -Erweiterungen können sein: Netzwerkinstabilität, unzureichende Berechtigungen, Systemkompatibilitätsprobleme, VS -Code -Version ist zu alt, Antiviren -Software oder Firewall -Interferenz. Durch Überprüfen von Netzwerkverbindungen, Berechtigungen, Protokolldateien, Aktualisierungen von VS -Code, Deaktivieren von Sicherheitssoftware und Neustart von Code oder Computern können Sie Probleme schrittweise beheben und beheben.

Obwohl Notepad den Java -Code nicht direkt ausführen kann, kann er durch Verwendung anderer Tools erreicht werden: Verwenden des Befehlszeilencompilers (JAVAC), um eine Bytecode -Datei (Dateiname.class) zu generieren. Verwenden Sie den Java Interpreter (Java), um Bytecode zu interpretieren, den Code auszuführen und das Ergebnis auszugeben.

VS Code ist der vollständige Name Visual Studio Code, der eine kostenlose und open-Source-plattformübergreifende Code-Editor und Entwicklungsumgebung von Microsoft ist. Es unterstützt eine breite Palette von Programmiersprachen und bietet Syntax -Hervorhebung, automatische Codebettel, Code -Snippets und intelligente Eingabeaufforderungen zur Verbesserung der Entwicklungseffizienz. Durch ein reiches Erweiterungs -Ökosystem können Benutzer bestimmte Bedürfnisse und Sprachen wie Debugger, Code -Formatierungs -Tools und Git -Integrationen erweitern. VS -Code enthält auch einen intuitiven Debugger, mit dem Fehler in Ihrem Code schnell gefunden und behoben werden können.

VS -Code ist auf Mac verfügbar. Es verfügt über leistungsstarke Erweiterungen, GIT -Integration, Terminal und Debugger und bietet auch eine Fülle von Setup -Optionen. Für besonders große Projekte oder hoch berufliche Entwicklung kann VS -Code jedoch Leistung oder funktionale Einschränkungen aufweisen.

Visual Studio Code (VSCODE) ist ein plattformübergreifender, Open-Source-Editor und kostenloser Code-Editor, der von Microsoft entwickelt wurde. Es ist bekannt für seine leichte, Skalierbarkeit und Unterstützung für eine Vielzahl von Programmiersprachen. Um VSCODE zu installieren, besuchen Sie bitte die offizielle Website, um das Installateur herunterzuladen und auszuführen. Bei der Verwendung von VSCODE können Sie neue Projekte erstellen, Code bearbeiten, Code bearbeiten, Projekte navigieren, VSCODE erweitern und Einstellungen verwalten. VSCODE ist für Windows, MacOS und Linux verfügbar, unterstützt mehrere Programmiersprachen und bietet verschiedene Erweiterungen über den Marktplatz. Zu den Vorteilen zählen leicht, Skalierbarkeit, umfangreiche Sprachunterstützung, umfangreiche Funktionen und Versionen

Zu den Hauptanwendungen von Linux gehören: 1. Server -Betriebssystem, 2. Eingebettes System, 3. Desktop -Betriebssystem, 4. Entwicklungs- und Testumgebung. Linux zeichnet sich in diesen Bereichen aus und bietet Stabilität, Sicherheits- und effiziente Entwicklungstools.

Um die Git -Repository -Adresse anzuzeigen, führen Sie die folgenden Schritte aus: 1. Öffnen Sie die Befehlszeile und navigieren Sie zum Repository -Verzeichnis; 2. Führen Sie den Befehl "git remote -v" aus; 3.. Zeigen Sie den Repository -Namen in der Ausgabe und der entsprechenden Adresse an.
