


Lassen Sie Sie Linux-Hardlinks und Softlinks verstehen (ausführliche Erklärungen mit Bildern und Texten)
Dieser Artikel vermittelt Ihnen relevantes Wissen über Hardlinks und Softlinks in Linux sowie über Inode-bezogene Probleme. Ich hoffe, dass er für alle hilfreich ist.
Vorwort
Der Front-End-Paketmanager pnpm erfreut sich in letzter Zeit großer Beliebtheit, und in zahlreichen Artikeln wurden die Prinzipien von pnpm analysiert. Nachdem ich es verstanden hatte, stellte ich fest, dass die gesamte Architektur von pnpm auf der Grundlage von Hardlinks und Softlinks organisiert ist. Bei diesen beiden Konzepten bin ich mir jedoch vage und möchte sie daher untersuchen.
Wie wir alle wissen, ist alles in Unix/Linux-Systemen eine Datei. Es ist ersichtlich, dass Dateien in Linux-Systemen sehr wichtig sind. Unsere normalerweise intuitiveren Gefühle gegenüber Dateien betreffen definitiv den Dateinamen und den Dateiinhalt. Aber im Linux-Dateisystem gibt es neben Dateinamen und Dateiinhalten auch ein sehr wichtiges Konzept, nämlich Inode.
inode
Wikipedia beschreibt Inode wie folgt:
Der Inode (Indexknoten) ist eine Datenstruktur in einem Dateisystem im Unix-Stil, die jeweils ein Dateisystemobjekt wie eine Datei oder ein Verzeichnis beschreibt Inode speichert die Attribute und Festplattenblockspeicherorte der Objektdaten. Dateisystemobjektattribute können Metadaten (Zeitpunkte der letzten Änderung, des letzten Zugriffs, der Modifikation) sowie Eigentümer- und Berechtigungsdaten umfassen.
Ein Verzeichnis ist eine Liste von Inodes mit ihre zugewiesenen Namen. Die Liste enthält einen Eintrag für sich selbst, sein übergeordnetes Element und jedes seiner untergeordneten Elemente.
Bedeutung: Inode ist ein Dateisystemobjekttyp (z. B. eine Datei oder ein Ordner), der in Unix-ähnlichen Dateisystemdaten verwendet wird Struktur. Es speichert verschiedene Attribute der Datei (Metainformationen wie den Zeitpunkt der letzten Inode-Änderung, den Zeitpunkt des letzten Zugriffs, den Zeitpunkt der letzten Änderung und Berechtigungsinformationen usw.). Ein Ordner ist eine Gruppe von Inodes, einschließlich seines eigenen Eintrags, des Eintrags seines übergeordneten Knotens und aller untergeordneten Knoten.
Tatsächlich enthält Inode mehr als das oben Genannte, insbesondere:
Die Anzahl der Bytes der Datei
Benutzer-ID der Datei
Gruppen-ID der Datei
Lesen und Schreiben der Datei, Ausführungsberechtigung
Zeitstempel: ctime, der Zeitpunkt, zu dem der Inode zuletzt geändert wurde; mtime, der Zeitpunkt, zu dem der Dateiinhalt zuletzt geändert wurde; atime, der Zeitpunkt, zu dem die Datei zuletzt geöffnet wurde; Anzahl der Links, dh wie viele Dateinamen darauf verweisen Der Speicherort dieses Inodes
Dateidatenblock
Im von Linux verwendeten ext2/ext3-Dateisystem werden verschiedene Datentypen in verschiedenen Bereichen gespeichert . Die aus Inodes bestehende Inode-Tabelle wird an einem Ort gespeichert, und die Dateidatenblöcke werden an einem anderen Ort gespeichert.
inode enthält keinen Dateinamen, der Dateiname wird in der Ordnerinformationsstruktur gespeichert. Der Dateiname entspricht dem Alias des Inodes, was für uns bequem zu verwalten und zu merken ist. Das Linux-System verarbeitet Dateien über Inodes. Wenn wir eine Datei ändern, findet das System den Inode, der dem Dateinamen entspricht, aus der Informationsstruktur des Ordners und dann den entsprechenden Inode über die im Inode gespeicherte Dateidatenblockadresse. Lese- und Schreibvorgänge werden am Festplattenspeicherort ausgeführt.
Im Allgemeinen hat Inode eine Eins-zu-Eins-Beziehung mit Dateinamen und Dateidaten, aber wir können Shell-Befehle verwenden, um mehrere Dateinamen auf denselben Inode verweisen zu lassen (fester Link).
Verwenden Sie den Befehl ln , um einen festen Link zu erstellen, z. B.
ln test.txt test_hard.txt
entsprechend der fs.link-Methode von nodejs.
Vor dem Erstellen eines Hardlinks kann test.txt wie folgt dargestellt werden:
Nach dem Erstellen eines Hardlinks:Wir können ls -li ausführen, um es zu überprüfen.
Da die Hardlink-Datei und die Quelldatei denselben Inode verwenden und auf denselben Dateidatenblock verweisen, sind alle Informationen außer dem Dateinamen gleich. Daher sind diese beiden Dateien gleichwertig und können als fest miteinander verknüpfte Dateien bezeichnet werden. Wenn Sie eine beliebige Datei ändern, können Sie sehen, dass sich gleichzeitig auch der Inhalt der anderen Datei ändert.
软链接
准确来说叫符号链接(symbolic link),一般又叫软链接(soft link)。与硬链接共用一个inode不同,软链接会创建新的inode,并指向源文件。可以理解软链接就是windows系统中的桌面快捷方式。
创建软链接的命令和硬链接很像,多了-s参数:ln -s
ln -s test.txt test_symbolic.txt
对应的nodejs的fs.symlink方法。
创建软链接之后:
源文件inode的链接数还是1,创建了新的inode,软链接指向源文件。
执行ls -li看一下:
可以看到,软链接的inode number跟源文件的不一样,权限一列开头为小写L,表示软链,链接数为1,大小为8个字节。没错,软链文件也有大小,不过一般很小,毕竟只是一个快捷方式。
对比
文件重命名或文件移动
文件重命名和文件移动对于Linux系统来说都是文件绝对路径的更改。对硬链接来说,文件重命名或文件移动不会改变链接指向,而对软链接来说,文件重命名或文件移动则使链接断开,这时通过软链接修改文件内容时会重新创建一个新的inode,跟原文件名和文件数据块关联。
文件删除
rm命令或者nodejs的unlink其实是将inode的链接数减1。对于前文的硬链接,删除test_hard.txt使得inode1的链接数变成1,当链接数变成0时,系统就会释放掉这个inode,之后再创建的新文件就可以使用该inode的inode number了。这时没有inode指向文件数据block,所以文件找不到了。但实际上文件数据还存在硬盘中,所以经常能看到网上有一些帮助恢复误删的文件的工具。软链接inode链接数为1,删除软链接则系统释放该inode。
链接文件和文件夹
软链接可以链接文件和文件夹,但硬链接只能链接文件。
不同文件系统创建链接
软链接可以跨不同的文件系统创建,但是硬链接不行,因为硬链接是共用一个inode,而不同的文件系统有不同的inode table。
应用场景
硬链接
文件备份:为了防止重要的文件被误删,文件备份是一种好的办法,但拷贝文件会带来磁盘空间的消耗。硬链接能不占用磁盘空间实现文件备份。
文件共享:多人共同维护同一份文件时,可以通过硬链接的方式,在私人目录里创建硬链接,每个人的修改都能同步到源文件,但又避免某个人误删就丢掉了文件的问题。
文件分类:不同的文件资源需要分类,比如某个电影即是的分类是外国、悬疑,那我们可以在外国的文件夹和悬疑的文件夹里分别创建硬链接,这样可以避免重复拷贝电影浪费磁盘空间。有人可能说,使用软链接不也可以吗?是的,但不太好。因为一旦源文件移动位置或者重命名,软链接就失效了。
软链接
快捷方式:对于路径很深的文件,查找起来不太方便。利用软链接在桌面创建快捷方式,可以迅速打开并编辑文件。
灵活切换程序版本:对于机器上同时存在多个版本的程序,可以通过更改软链接的指向,从而迅速切换程序版本。这里提到了python版本的切换可以这么做。
动态库版本管理:不是很懂,具体可以看这里。
总结
Linux系统通过inode管理文件,inode存储着文件字节数、文件权限、链接数、数据block位置等信息。
硬链接与源文件共用inode,除了文件名不同,其他与源文件一样。不能对文件夹创建硬链接,不能对不同的文件系统的文件创建硬链接。
软链接类似于windows的快捷方式,有独立的inode。可以对文件夹或不同文件系统的文件创建软链接。
硬链接和软链接修改文件内容都会同步到源文件,因为本质上它们都是指向源文件的数据block。
相关推荐:《Linux视频教程》
Das obige ist der detaillierte Inhalt vonLassen Sie Sie Linux-Hardlinks und Softlinks verstehen (ausführliche Erklärungen mit Bildern und Texten). 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



Die wichtigsten Unterschiede zwischen CentOS und Ubuntu sind: Ursprung (CentOS stammt von Red Hat, für Unternehmen; Ubuntu stammt aus Debian, für Einzelpersonen), Packungsmanagement (CentOS verwendet yum, konzentriert sich auf Stabilität; Ubuntu verwendet apt, für hohe Aktualisierungsfrequenz), Support Cycle (Centos) (CENTOS bieten 10 Jahre. Tutorials und Dokumente), Verwendungen (CentOS ist auf Server voreingenommen, Ubuntu ist für Server und Desktops geeignet). Weitere Unterschiede sind die Einfachheit der Installation (CentOS ist dünn)

CentOS wird 2024 geschlossen, da seine stromaufwärts gelegene Verteilung RHEL 8 geschlossen wurde. Diese Abschaltung wirkt sich auf das CentOS 8 -System aus und verhindert, dass es weiterhin Aktualisierungen erhalten. Benutzer sollten eine Migration planen, und empfohlene Optionen umfassen CentOS Stream, Almalinux und Rocky Linux, um das System sicher und stabil zu halten.

Docker verwendet Linux -Kernel -Funktionen, um eine effiziente und isolierte Anwendungsumgebung zu bieten. Sein Arbeitsprinzip lautet wie folgt: 1. Der Spiegel wird als schreibgeschützte Vorlage verwendet, die alles enthält, was Sie für die Ausführung der Anwendung benötigen. 2. Das Union File System (UnionFS) stapelt mehrere Dateisysteme, speichert nur die Unterschiede, speichert Platz und beschleunigt. 3. Der Daemon verwaltet die Spiegel und Container, und der Kunde verwendet sie für die Interaktion. 4. Namespaces und CGroups implementieren Container -Isolation und Ressourcenbeschränkungen; 5. Mehrere Netzwerkmodi unterstützen die Containerverbindung. Nur wenn Sie diese Kernkonzepte verstehen, können Sie Docker besser nutzen.

CentOS -Installationsschritte: Laden Sie das ISO -Bild herunter und verbrennen Sie bootfähige Medien. Starten und wählen Sie die Installationsquelle; Wählen Sie das Layout der Sprache und Tastatur aus. Konfigurieren Sie das Netzwerk; Partition die Festplatte; Setzen Sie die Systemuhr; Erstellen Sie den Root -Benutzer; Wählen Sie das Softwarepaket aus; Starten Sie die Installation; Starten Sie nach Abschluss der Installation von der Festplatte neu und starten Sie von der Festplatte.

Backup- und Wiederherstellungsrichtlinie von GitLab im Rahmen von CentOS -System Um die Datensicherheit und Wiederherstellung der Daten zu gewährleisten, bietet GitLab on CentOS eine Vielzahl von Sicherungsmethoden. In diesem Artikel werden mehrere gängige Sicherungsmethoden, Konfigurationsparameter und Wiederherstellungsprozesse im Detail eingeführt, um eine vollständige GitLab -Sicherungs- und Wiederherstellungsstrategie aufzubauen. 1. Manuell Backup Verwenden Sie den GitLab-RakegitLab: Backup: Befehl erstellen, um die manuelle Sicherung auszuführen. Dieser Befehl unterstützt wichtige Informationen wie GitLab Repository, Datenbank, Benutzer, Benutzergruppen, Schlüssel und Berechtigungen. Die Standardsicherungsdatei wird im Verzeichnis/var/opt/gitlab/backups gespeichert. Sie können /etc /gitlab ändern

Wie benutze ich Docker Desktop? Docker Desktop ist ein Werkzeug zum Ausführen von Docker -Containern auf lokalen Maschinen. Zu den zu verwendenden Schritten gehören: 1.. Docker Desktop installieren; 2. Start Docker Desktop; 3.. Erstellen Sie das Docker -Bild (mit Dockerfile); 4. Build Docker Image (mit Docker Build); 5. Docker -Container ausführen (mit Docker Run).

CentOS -Festplattenhalterung ist in die folgenden Schritte unterteilt: Bestimmen Sie den Namen der Festplattengeräte (/dev/sdx); Erstellen Sie einen Mountspunkt (es wird empfohlen, /mnt /newDisk zu verwenden). Führen Sie den Befehl montage (mont /dev /sdx1 /mnt /newdisk) aus; Bearbeiten Sie die Datei /etc /fstab, um eine permanente Konfiguration des Montings hinzuzufügen. Verwenden Sie den Befehl uMount, um das Gerät zu deinstallieren, um sicherzustellen, dass kein Prozess das Gerät verwendet.

Nachdem CentOS gestoppt wurde, können Benutzer die folgenden Maßnahmen ergreifen, um sich damit zu befassen: Wählen Sie eine kompatible Verteilung aus: wie Almalinux, Rocky Linux und CentOS Stream. Migrieren Sie auf kommerzielle Verteilungen: wie Red Hat Enterprise Linux, Oracle Linux. Upgrade auf CentOS 9 Stream: Rolling Distribution und bietet die neueste Technologie. Wählen Sie andere Linux -Verteilungen aus: wie Ubuntu, Debian. Bewerten Sie andere Optionen wie Container, virtuelle Maschinen oder Cloud -Plattformen.
