Heim  >  Artikel  >  Betrieb und Instandhaltung  >  Lassen Sie Sie Linux-Hardlinks und Softlinks verstehen (ausführliche Erklärungen mit Bildern und Texten)

Lassen Sie Sie Linux-Hardlinks und Softlinks verstehen (ausführliche Erklärungen mit Bildern und Texten)

WBOY
WBOYnach vorne
2022-02-21 17:50:014188Durchsuche

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.

Lassen Sie Sie Linux-Hardlinks und Softlinks verstehen (ausführliche Erklärungen mit Bildern und Texten)

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.

Lassen Sie Sie Linux-Hardlinks und Softlinks verstehen (ausführliche Erklärungen mit Bildern und Texten)

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.

Hardlink

Lassen Sie Sie Linux-Hardlinks und Softlinks verstehen (ausführliche Erklärungen mit Bildern und Texten) 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:

Lassen Sie Sie Linux-Hardlinks und Softlinks verstehen (ausführliche Erklärungen mit Bildern und Texten)

Sie können sehen, dass der Inode von test_hard.txt mit dem der Quelldatei identisch ist test.txt. Aber jetzt ist die Anzahl der Links 2.

Lassen Sie Sie Linux-Hardlinks und Softlinks verstehen (ausführliche Erklärungen mit Bildern und Texten)Wir können ls -li ausführen, um es zu überprüfen.

Die erste Spalte ist die Inode-Nummer. Sie können sehen, dass beide 13029546 sind, sodass die beiden Dateien denselben Inode verwenden. Die zweite Spalte enthält Berechtigungsinformationen, die vierte Spalte enthält den Eigentümer und die sechste Spalte enthält die Dateiinhaltsgröße. Wie Sie sehen, verfügt die durch den Hardlink erstellte Datei bis auf die unterschiedlichen Dateinamen über genau die gleichen Metainformationen wie die Quelldatei. Die dritte Spalte gibt die Anzahl der Links an. Wie Sie sehen, beträgt die aktuelle Anzahl der Links 2.

Lassen Sie Sie Linux-Hardlinks und Softlinks verstehen (ausführliche Erklärungen mit Bildern und Texten)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方法。

创建软链接之后:

Lassen Sie Sie Linux-Hardlinks und Softlinks verstehen (ausführliche Erklärungen mit Bildern und Texten)

源文件inode的链接数还是1,创建了新的inode,软链接指向源文件。

执行ls -li看一下:

Lassen Sie Sie Linux-Hardlinks und Softlinks verstehen (ausführliche Erklärungen mit Bildern und Texten)

可以看到,软链接的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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:juejin.im. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen