GNU/Linux >> Linux Esercitazione >  >> Linux

Perché non riesco a creare un collegamento reale dal file del dispositivo in una directory diversa da /dev?

Ma potevo solo creare un hard link nella directory /dev e non era possibile in altre directory.

Come mostrato dal messaggio di errore, non è possibile creare un hard link tra diversi filesystem; puoi creare solo soft link (simbolici).

Ad esempio, se il tuo /home si trova in una partizione diversa da quella di root, non sarai in grado di collegare /tmp/foo a /home/user/ .

Ora, come ha sottolineato @RichardNeumann, /dev di solito è montato come filesystem devtmpfs. Vedi questo esempio:

[[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

Pertanto puoi creare collegamenti reali solo ai file in /dev entro /dev .


Un hard link non può essere utilizzato per ottenere ciò che desideri, perché gli hard link non funzionano tra i file system.

Tuttavia, puoi ottenere ciò che desideri con il mknod comando.

  1. Esegui ls -l /dev/devicefile . Dovresti vedere un output come questo:

    crw-rw-rw- 1 root root 1, 9 Mar 29 15:46 /dev/urandom
    
  2. Prendi nota del numero nella colonna della taglia (1, 9 ).
  3. Esegui il comando mknod /path/to/destination c 1 9 (sostituendo i valori desiderati).

Perché funziona?

I file di dispositivo sono effettivamente collegamenti fisici a un file astratto implementato dal kernel o dai driver del kernel. Sebbene non sia possibile creare collegamenti fisici agli oggetti del file system da un altro file system, questi non sono oggetti del file system e quindi, conoscendo i loro numeri di riferimento principali e secondari, puoi creare un riferimento ad essi da qualsiasi file system.


Gli hard link creano semplicemente un'altra voce in una directory, puntando a un file (dove file è una cosa simile a un file, come una directory). Pertanto i collegamenti fisici non possono fare riferimento a un file in un altro file system.

I soft-link sono tuoi amici in questo caso. Usa ln -s . I softlink possono passare attraverso i filesystem e possono persino puntare a qualcosa che non c'è.


Linux
  1. Come mappare il dispositivo /dev/sdX e /dev/mapper/mpathY dal dispositivo /dev/dm-Z

  2. Come creare un file in Linux dalla finestra del terminale?

  3. DD da /dev/zero a /dev/null... cosa succede realmente

  4. Perché non posso creare file più grandi di 2 GB su Linux?

  5. Perché mettere cose diverse da /home in una partizione separata?

Quanto sono portatili /dev/stdin, /dev/stdout e /dev/stderr?

cp:impossibile creare la directory:file o directory non presenti

/dev/sdb:nessun file o directory di questo tipo (ma esiste /dev/sdb1 ecc.)

Linux:differenza tra /dev/console , /dev/tty e /dev/tty0

Perché su alcuni sistemi Linux, il filesystem di root appare come /dev/root invece di /dev/<real device node>in mtab?

Crea un dispositivo a blocchi virtuale che scrive su /dev/null