GNU/Linux >> Tutoriels Linux >  >> Linux

Pourquoi je ne peux pas créer de lien physique à partir d'un fichier de périphérique dans un répertoire autre que /dev ?

Mais je ne pouvais créer un lien physique que dans le répertoire /dev et ce n'était pas possible dans les autres répertoires.

Comme le montre le message d'erreur, il n'est pas possible de créer un lien physique entre différents systèmes de fichiers ; vous ne pouvez créer que des liens souples (symboliques).

Par exemple, si votre /home se trouve dans une partition différente de votre partition racine, vous ne pourrez pas lier en dur /tmp/foo à /home/user/ .

Maintenant, comme @RichardNeumann l'a souligné, /dev est généralement monté en tant que système de fichiers devtmpfs. Voir cet exemple :

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

Par conséquent, vous ne pouvez créer que des liens physiques vers des fichiers en /dev dans /dev .


Un lien physique ne peut pas être utilisé pour obtenir ce que vous voulez, car les liens physiques ne fonctionnent pas entre les systèmes de fichiers.

Cependant, vous pouvez obtenir ce que vous voulez avec le mknod commande.

  1. Exécutez ls -l /dev/devicefile . Vous devriez voir une sortie comme celle-ci :

    crw-rw-rw- 1 root root 1, 9 Mar 29 15:46 /dev/urandom
    
  2. Notez le nombre dans la colonne de taille (1, 9 ).
  3. Exécutez la commande mknod /path/to/destination c 1 9 (en remplaçant les valeurs souhaitées).

Pourquoi cela fonctionne-t-il ?

Les fichiers de périphérique sont en fait des liens physiques vers un fichier abstrait implémenté par le noyau ou les pilotes du noyau. Bien que vous ne puissiez pas créer de liens physiques vers des objets de système de fichiers à partir d'un autre système de fichiers, ce ne sont pas des objets de système de fichiers et donc, en connaissant leurs numéros de référence majeurs et mineurs, vous pouvez créer une référence à partir de n'importe quel système de fichiers.


Les liens physiques créent simplement une autre entrée dans un répertoire, pointant vers un fichier (où fichier est un fichier semblable à un fichier, tel qu'un répertoire). Par conséquent, les liens physiques ne peuvent pas référencer un fichier dans un autre système de fichiers.

Les liens souples sont votre ami dans ce cas. Utilisez ln -s . Les liens symboliques peuvent traverser les systèmes de fichiers et peuvent même pointer vers quelque chose qui n'existe pas.


Linux
  1. Linux :Différence entre /dev/console , /dev/tty et /dev/tty0 ?

  2. DD de /dev/zero à /dev/null...ce qui se passe réellement

  3. Pourquoi mettre des choses autres que /home sur une partition séparée ?

  4. Est-ce une erreur de lier /dev/random à /dev/urandom sous Linux ?

  5. echo ou print /dev/stdin /dev/stdout /dev/stderr

Pourquoi ne puis-je pas créer de fichiers de plus de 2 Go sous Linux ?

Pourquoi dd de /dev/random donne-t-il des tailles de fichiers différentes ?

/dev/sdb :aucun fichier ou répertoire de ce type (mais /dev/sdb1, etc. existe)

Linux :Différence entre /dev/console , /dev/tty et /dev/tty0

Pourquoi sur certains systèmes Linux, le système de fichiers racine apparaît-il comme /dev/root au lieu de /dev/<real device node> dans mtab ?

Créer un périphérique de bloc virtuel qui écrit dans /dev/null