Aber ich konnte nur im /dev-Verzeichnis einen Hardlink erstellen und in anderen Verzeichnissen war es nicht möglich.
Wie die Fehlermeldung zeigt, ist es nicht möglich, einen Hardlink über verschiedene Dateisysteme hinweg zu erstellen; Sie können nur weiche (symbolische) Links erstellen.
Wenn beispielsweise Ihr /home
sich in einer anderen Partition als Ihrer Root-Partition befindet, können Sie /tmp/foo
nicht fest verlinken bis /home/user/
.
Nun, wie @RichardNeumann betonte, /dev
wird normalerweise als devtmpfs-Dateisystem gemountet. Siehe dieses Beispiel:
[[email protected] ~]$ df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/centos_centos7-root 46110724 3792836 42317888 9% /
devtmpfs 4063180 0 4063180 0% /dev
tmpfs 4078924 0 4078924 0% /dev/shm
tmpfs 4078924 9148 4069776 1% /run
tmpfs 4078924 0 4078924 0% /sys/fs/cgroup
/dev/sda1 1038336 202684 835652 20% /boot
tmpfs 815788 28 815760 1% /run/user/1000
Daher können Sie nur harte Links zu Dateien in /dev
erstellen innerhalb von /dev
.
Ein fester Link kann nicht verwendet werden, um das zu erreichen, was Sie wollen, da feste Links zwischen Dateisystemen nicht funktionieren.
Mit mknod
können Sie jedoch erreichen, was Sie wollen Befehl.
-
Führen Sie
ls -l /dev/devicefile
aus . Sie sollten eine Ausgabe wie diese sehen:crw-rw-rw- 1 root root 1, 9 Mar 29 15:46 /dev/urandom
- Notieren Sie sich die Zahl in der Größenspalte (
1, 9
). - Führen Sie den Befehl
mknod /path/to/destination c 1 9
aus (Ersetzen Sie die gewünschten Werte).
Warum funktioniert das?
Gerätedateien sind effektiv harte Links zu einer abstrakten Datei, die vom Kernel oder den Kerneltreibern implementiert wird. Sie können zwar keine harten Links zu Dateisystemobjekten aus einem anderen Dateisystem erstellen, aber dies sind keine Dateisystemobjekte, und daher können Sie, wenn Sie ihre Haupt- und Nebenreferenznummern kennen, von jedem Dateisystem aus eine Referenz auf sie erstellen.
Feste Links erstellen einfach einen weiteren Eintrag in einem Verzeichnis, der auf eine Datei zeigt (wobei Datei eine dateiähnliche Sache ist, z. B. ein Verzeichnis). Daher können Hardlinks nicht auf eine Datei in einem anderen Dateisystem verweisen.
Soft-Links sind in diesem Fall Ihr Freund. Verwenden Sie ln -s
. Softlinks können über Dateisysteme gehen und sogar auf etwas verweisen, das nicht vorhanden ist.