GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Warum kann ich keinen festen Link von einer Gerätedatei in einem anderen Verzeichnis als /dev erstellen?

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.

  1. 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
    
  2. Notieren Sie sich die Zahl in der Größenspalte (1, 9 ).
  3. 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.


Linux
  1. Wie behandelt Linux mehrere aufeinanderfolgende Pfadtrennzeichen (/home////username///file)?

  2. Linux:Unterschied zwischen /dev/console , /dev/tty und /dev/tty0?

  3. So ordnen Sie /dev/sdX- und /dev/mapper/mpathY-Geräte vom /dev/dm-Z-Gerät zu

  4. Wie erstelle ich eine Datei in Linux aus dem Terminalfenster?

  5. cp:Verzeichnis kann nicht erstellt werden:Keine solche Datei oder Verzeichnis

Warum kann Rm schreibgeschützte Dateien entfernen?

Wie portabel sind /dev/stdin, /dev/stdout und /dev/stderr?

Warum gibt dd von /dev/random unterschiedliche Dateigrößen an?

Ist es falsch, /dev/random unter Linux mit /dev/urandom zu verknüpfen?

echo oder print /dev/stdin /dev/stdout /dev/stderr

Warum sind < oder > erforderlich, um /dev/tcp