


Beginnen Sie mit lsof und erlangen Sie ein tiefgreifendes Verständnis des virtuellen Linux-Dateisystems
Hintergrund
<code style="margin-right: 0.15em;margin-left: 0.15em;padding-right: 0.3em;padding-left: 0.3em;font-size: 0.85em;font-family: Consolas, Inconsolata, Courier, monospace;white-space: pre-wrap;border-width: 1px;border-style: solid;border-color: rgb(234, 234, 234);background-color: rgb(248, 248, 248);border-radius: 3px;display: inline;"><span style="font-size: 15px;">df</span>
df Befehl zum Überprüfen der Festplattennutzung und festgestellt, dass die Festplatte voll ist. -bash-4.2$ df -ThFilesystem Type Size Used Avail Use% Mounted on/dev/vda1 ext4 30G 30G 0 100% /devtmpfs devtmpfs 489M 0 489M 0% /devtmpfs tmpfs 497M 0 497M 0% /dev/shmtmpfs tmpfs 497M 50M 447M 11% /runtmpfs tmpfs 497M 0 497M 0% /sys/fs/cgroup
2. Führen Sie den Befehl du aus, um die Festplattennutzung jedes Verzeichnisses zu überprüfen, addieren Sie die Größe der Dateien in jedem Verzeichnis und stellen Sie fest, dass die Festplatte nicht belegt ist und mehr als 10 GB Speicherplatz vorhanden ist fehlt aus unerklärlichen Gründen.
-bash-4.2$ du -h --max-depth=1 /home16M /home/logs11G /home/serverdog11G /home
🎜
<span style="font-size: 15px;">lsof</span>
命令显示打开已删除的文件。将有问题的进程重启(或,清空),磁盘空间就会得到释放。-bash-4.2# lsof | grep deletemysqld 2470 mysql 4u REG 253,1 0 523577 /var/tmp/ibfTeQFn (deleted)mysqld 2470 mysql 5u REG 253,1 0 523579 /var/tmp/ibaHcIdW (deleted)mysqld 2470 mysql 6u REG 253,1 0 523581 /var/tmp/ibLjiALu (deleted)mysqld 2470 mysql 7u REG 253,1 0 523585 /var/tmp/ibCFnzTB (deleted)mysqld 2470 mysql 11u REG 253,1 0 523587 /var/tmp/ibCjuqva (deleted)
什么是虚拟文件系统(VFS:virtual filesystem)?
什么是通用文件模型?
超级块对象(superblock object)
索引节点对象(inode object)
文件对象(file object)
目录项对象(dentry object)
文件的概念
文件的表达
内存表达
磁盘表达
目录树的构建
Softlink vs. Hardlink
Datei- und Datenträgerverwaltung
Indexstatus
Datei- und Prozessverwaltung
Vorgänge:
Öffnen und löschen
Virtuelles Dateisystem
Gemeinsames Dateimodell
Superblock-Objekt
Speicher: Wird bei der Installation des Dateisystems erstellt und speichert relevante Informationen über das Dateisystem.
Festplatte: Entspricht den darauf gespeicherten Informationen Festplatte Dateisystem-Steuerblock (Dateisystem-Steuerblock)
Inode-Objekt (Inode-Objekt)
Speicher: Wird beim Zugriff erstellt und speichert allgemeine Informationen zu bestimmten Dateien (
inode 结构
)
Disk: Entspricht der Speicherung auf der Festplatte. Die Datei Kontrollblock auf
Jedes Inode-Objekt hat eine Inode-Nummer, die die Datei im Dateisystem eindeutig identifiziert
Dateiobjekt (Dateiobjekt)
Speicher: Wird beim Öffnen einer Datei erstellt und speichert Informationen über die Interaktion zwischen der geöffneten Datei und dem Prozess (
Dateistruktur< /code >) <code style="margin-right: 0.15em;margin-left: 0.15em;padding-right: 0.3em;padding-left: 0.3em;font-size: 0.85em;font-family: Consolas, Inconsolata, Courier, monospace;white-space: pre-wrap;border-width: 1px;border-style: solid;border-color: rgb(234, 234, 234);background-color: rgb(248, 248, 248);border-radius: 3px;display: inline;">file 结构
)
打开文件信息,仅当进程访问文件期间存在于内核内存中。
目录项对象(dentry object)
内存:目录项一旦被读入内存,VFS就会将其转换成
dentry 结构
Informationen zu geöffneten Dateien sind nur im Kernel-Speicher vorhanden, während der Prozess auf die Datei zugreift.
Dentry-Objekt
Speicher: Sobald der Verzeichniseintrag in den Speicher eingelesen wurde, konvertiert VFS ihn in dentry structure
Verzeichniseintragsobjekt Datenträger: Ein bestimmtes Dateisystem wird auf eine bestimmte Art und Weise auf der Festplatte gespeichert.
start_kernel vfs_caches_init mnt_init init_rootfs // 注册rootfs文件系统 init_mount_tree // 挂载rootfs文件系统 … rest_init kernel_thread(kernel_init, NULL, CLONE_FS);
软链接 vs 硬链接
<span style="font-size: 15px;color: rgb(68, 68, 68);">i_nlink</span>
字段为零时,说明没有硬链接指向该文件。文件 & 进程管理
* "in_use" - valid inode, i_count > 0, i_nlink > 0* "dirty" - as "in_use" but also dirty* "unused" - valid inode, i_count = 0
<code style="margin-right: 0.15em;margin-left: 0.15em;padding-right: 0.3em;padding-left: 0.3em;font-size: 0.85em;font-family: Consolas, Inconsolata, Courier, monospace;white-space: pre-wrap;border-width: 1px;border-style: solid;border-color: rgb(234, 234, 234);background-color: rgb(248, 248, 248);border-radius: 3px;display: inline;"><span style="font-size: 15px;">open()</span>
和 <span style="font-size: 15px;">close()</span>
操作建立和销毁文件对象,文件对象通过索引节点提供的 <span style="font-size: 15px;">iget</span>
和 <span style="font-size: 15px;">iput</span>
更新索引节点的i_count字段,以完成使用计数。open 操作使得 i_count 加一, close 操作使得 i_count 减一。在 close 操作时判断索引节点是否释放,如果 i_count = 0,则意味着不再有进程引用,将会从内存释放。文件 & 磁盘管理
文件与磁盘管理联系最紧密的操作,莫过于<span style="font-size: 15px;">touch</span>
和<span style="font-size: 15px;">rm</span>
open() und
🎜close( )🎜
🎜 Der Vorgang erstellt und zerstört das Dateiobjekt. Das Dateiobjekt wird über den Indexknoten bereitgestellt 🎜🎜iget🎜
🎜 und 🎜 🎜iput🎜
🎜 Aktualisieren Sie das i_count-Feld des Indexknotens, um die Nutzungszählung abzuschließen. Die Öffnungsoperation erhöht i_count um eins und die Schließoperation verringert i_count um eins. Bestimmen Sie, ob der Indexknoten während des Schließvorgangs freigegeben wird. Wenn i_count = 0, bedeutet dies, dass keine Prozessreferenz mehr vorhanden ist und er aus dem Speicher freigegeben wird. 🎜🎜Datei- und Datenträgerverwaltung🎜
🎜Datei Der Vorgang, der am engsten mit der Datenträgerverwaltung zusammenhängt, ist 🎜🎜touch🎜
🎜 und 🎜🎜rm🎜
🎜 operation, Vor allem letzteres ist am kritischsten. Verwenden Sie strace (oder dtruss), um den tatsächlichen Systemaufruf von rm🎜🎜 anzuzeigen
# dtruss rm tmp...geteuid(0x0, 0x0, 0x0) = 0 0ioctl(0x0, 0x4004667A, 0x7FFEE06F09C4) = 0 0lstat64("tmp\0", 0x7FFEE06F0968, 0x0) = 0 0access("tmp\0", 0x2, 0x0) = 0 0unlink("tmp\0", 0x0, 0x0) = 0 0
可以发现 rm 实际是通过 unlink 完成的。unlink代表删除目录项,以及减少其索引节点的计数。由通用文件模型可知,父目录本身同样是一个文件,也就意味着目录项是其文件数据的一部分。删除目录项等价于从父目录的文件中删除数据,也就意味着首先要打开父目录的文件。那么,删除操作即可理解为:
删除命令(一个进程)使用 open 操作获得父目录文件对象
通过
<span style="font-size: 15px;color: rgb(68, 68, 68);">iget</span>
增加 目录文件的索引节点对象计数读取目录文件数据
将目录文件数据转化为目录项对象
由于目录项包含文件的索引节点,类似的,需要通过 iget 增加文件的索引节点对象计数
删除目录的目录项
减少文件索引节点对象的硬链接计数i_nlink
通过
<span style="font-size: 15px;color: rgb(68, 68, 68);">iput</span>
结束对文件索引节点对象的操作,使用计数 i_count 减一判断i_count是否为零,如果为零,则释放内存
然后,判断i_nlink是否为零,如果为零,则释放磁盘空间
通过 iput 结束对目录索引节点对象的操作。
Zusammenfassung
Wenn wir auf die aufgetretenen Probleme zurückblicken, können wir sie tatsächlich aus zwei Perspektiven verstehen:
Index und Daten
Caching-Strategie
Da das Betriebssystem die Write-Back-Strategie verwendet, bedeutet dies, dass die Festplatte nur freigegeben werden kann, wenn zuerst der Speicher freigegeben wird.
Warum lsof? .Warum kann lsof gelöschte und unveröffentlichte Dateien finden?
Das obige ist der detaillierte Inhalt vonBeginnen Sie mit lsof und erlangen Sie ein tiefgreifendes Verständnis des virtuellen Linux-Dateisystems. 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

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

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



Das Internet stützt sich nicht auf ein einzelnes Betriebssystem, aber Linux spielt eine wichtige Rolle dabei. Linux wird häufig auf Servern und Netzwerkgeräten verwendet und ist für seine Stabilität, Sicherheit und Skalierbarkeit beliebt.

Schritte zum Starten von Nginx unter Linux: Überprüfen Sie, ob Nginx installiert ist. Verwenden Sie SystemCTL Start Nginx, um den Nginx -Dienst zu starten. Verwenden Sie SystemCTL aktivieren NGINX, um das automatische Start von NGINX beim Systemstart zu aktivieren. Verwenden Sie den SystemCTL -Status NGINX, um zu überprüfen, ob das Startup erfolgreich ist. Besuchen Sie http: // localhost in einem Webbrowser, um die Standard -Begrüßungsseite anzuzeigen.

Das Starten eines Nginx-Servers erfordert unterschiedliche Schritte gemäß verschiedenen Betriebssystemen: Linux/UNIX-System: Installieren Sie das NGINX-Paket (z. B. mit APT-Get oder Yum). Verwenden Sie SystemCTL, um einen Nginx -Dienst zu starten (z. B. sudo systemctl start nginx). Windows -System: Laden Sie Windows -Binärdateien herunter und installieren Sie sie. Starten Sie Nginx mit der ausführbaren Datei nginx.exe (z. B. nginx.exe -c conf \ nginx.conf). Unabhängig davon, welches Betriebssystem Sie verwenden, können Sie auf die Server -IP zugreifen

So bestätigen Sie, ob Nginx gestartet wird: 1. Verwenden Sie die Befehlszeile: SystemCTL Status Nginx (Linux/Unix), Netstat -ano | FindStr 80 (Windows); 2. Überprüfen Sie, ob Port 80 geöffnet ist; 3. Überprüfen Sie die Nginx -Startmeldung im Systemprotokoll. 4. Verwenden Sie Tools von Drittanbietern wie Nagios, Zabbix und Icinga.

Wie fixiere ich Nginx 403 Verbotener Fehler? Überprüfen Sie die Datei- oder Verzeichnisberechtigungen; 2.Htaccess -Datei prüfen; 3. Überprüfen Sie die Konfigurationsdatei der Nginx; 4. Starten Sie Nginx neu. Weitere mögliche Ursachen sind Firewall -Regeln, Selinux -Einstellungen oder Anwendungsprobleme.

Der Server verfügt nicht über die Berechtigung, auf die angeforderte Ressource zuzugreifen, was zu einem NGINX 403 -Fehler führt. Zu den Lösungen gehören: Überprüfung der Dateiberechtigungen. Überprüfen Sie die Konfiguration .htaccess. Überprüfen Sie die Nginx -Konfiguration. Konfigurieren Sie Selinux -Berechtigungen. Überprüfen Sie die Firewall -Regeln. Fehlerbehebung bei anderen Ursachen wie Browserproblemen, Serverausfällen oder anderen möglichen Fehlern.

In diesem Artikel werden die Konstruktions- und Konfigurationsmethoden von Nginx eingeführt. 1. Installieren Sie Nginx: Verwenden Sie Sudoyumininstallnginx auf CentOS, verwenden Sie Sudoapt-Getinstallnginx auf Ubuntu und beginnen Sie mit dem SudosystemCTLStartNginx nach der Installation. 2. Grundlegende Konfiguration: Ändern Sie die Datei /etc/nginx/nginx.conf, ändern Sie hauptsächlich die Anweisungen zum Hören (Port) und Root (Site Root Directory) im Serverblock und verwenden Sie nach der Änderung sudosystemctlrestartNginx, um neu zu starten und wirksam zu werden. 3.. Virtuelle Hostkonfiguration: In nginx.co

Verwenden Sie unter Linux den folgenden Befehl, um zu überprüfen, ob Nginx gestartet wird: SystemCTL -Status Nginx Richter basierend auf der Befehlsausgabe: Wenn "aktiv: aktiv (lief) angezeigt wird, wird Nginx gestartet. Wenn "Active: Inactive (Dead)" angezeigt wird, wird Nginx gestoppt.
