Une machine Linux ou UNIX a typiquement les répertoires spéciaux /dev et /proc.
Le répertoire /dev contient des entrées pour les périphériques physiques qui pourraient être présents sur votre système. [93] Les partitions du disque dur contenant les systèmes de fichiers montés ont des entrées dans /dev, comme un simple df le montre.
bash$ df Filesystem 1k-blocks Used Available Use% Mounted on /dev/hda6 495876 222748 247527 48% / /dev/hda1 50755 3887 44248 9% /boot /dev/hda8 367013 13262 334803 4% /home /dev/hda5 1714416 1123624 503704 70% /usr
Entre autre choses, le répertoire /dev contient des périphériques loopback, tels que /dev/loop0. Un périphérique loopback est une astuce qui permet à un fichier ordinaire d'être accédé comme s'il était un périphérique bloc. [94] Ceci rend possible le montage d'un système de fichiers entier en un seul gros fichier. Voir l'Exemple 16.8, « Création d'un système de fichiers dans un fichier » et l'Exemple 16.7, « Vérifier une image ».
Quelques pseudo-périphériques dans /dev ont d'autres utilisations spécialisées, telles que /dev/null, /dev/zero, /dev/urandom, /dev/sda1, /dev/udp, et /dev/tcp.
Par exemple :
Pour monter un lecteur flash USB, ajoutez la ligne suivante à /etc/fstab. [95]
/dev/sda1 /mnt/flashdrive auto noauto,user,noatime 0 0
(voir aussi l'Exemple A.25, « Monter des périphériques de stockage USB »).
Vérifier si un disque est dans le graveur de CD (lien vers /dev/hdc):
head -1 /dev/hdc # head: cannot open '/dev/hdc' for reading: No medium found # (Aucun disque dans le lecteur.) # head: error reading '/dev/hdc': Input/output error # (Il y a un disque dans le lecteur mais il ne peut être lu ; #+ à priori un CDR vierge.) # Flux de caractères et autres cochonneries associées # (Il y a un disque pré-enregistré dans le lecteur #+ et vous avez un affichage direct -- un flux de données ASCII et binaires.) # Ici nous voyons we see l'intérêt de limiter la sortie dans des proportions #+ gérables, plutôt que d'utiliser 'cat' ou un autre outil similaire. # Maintenant, il s'agit seulement de vérifier/analyser la sortie #+ et d'exécuter une action appropriée.
Lors de l'exécution d'une commande sur le fichier pseudo-périphérique /dev/tcp/$host/$port, Bash ouvre une connexion TCP vers la socket associée.
Les exemples suivants assument une connexion Internet active.
Obtenir l'heure de nist.gov :
bash$ cat </dev/tcp/time.nist.gov/13 53082 04-03-18 04:26:54 68 0 0 502.3 UTC(NIST) *
[Mark a contribué à l'exemple ci-dessus.]
Téléchargez une URL :
bash$ exec 5<>/dev/tcp/www.net.cn/80 bash$ echo -e "GET / HTTP/1.0\n" >&5 bash$ cat <&5
[Merci à Mark et Mihai Maties.]
Exemple 27.1. Utiliser /dev/tcp pour corriger des problèmes
#!/bin/bash # dev-tcp.sh : redirection /dev/tcp pour vérifier la connexion Internet. # Script de Troy Engel. # Utilisé avec sa permission. HOTE_TCP=www.dns-diy.com # Un FAI connu pour être "spam-friendly" PORT_TCP=80 # Le port 80 est http. # Essaie de se connecter. (Un peu équivalent à un 'ping'...) echo "HEAD / HTTP/1.0" >/dev/tcp/${HOTE_TCP}/${PORT_TCP} SORTIE=$? : <<EXPLICATION Si bash a été compilé avec --enable-net-redirections, il dispose d'un périphérique caractère spécial pour les redirections TCP et UDP. Ces redirections sont utilisées de façon identique à STDIN/STDOUT/STDERR. Les entrées du périphériques sont 30,36 pour /dev/tcp : mknod /dev/tcp c 30 36 >De la référence bash : /dev/tcp/host/port Si l'hôte est un nom valide ou une adresse Internet et que le port est un numéro de port de type entier ou un nom de service, Bash essaie d'ouvrir une connexion TCP vers le socket correspondant. EXPLICATION if [ "X$SORTIE" = "X0" ]; then echo "Connexion réussie. Code de sortie : $SORTIE" else echo "Connexion échouée. Code de sortie : $SORTIE" fi exit $SORTIE
[93] Les entrées dans /dev fournissent des points de montage pour les périphériques physiques et virtuels. Ces entrées utilisent très peu d'espace disque.
Quelques périphériques, tels que /dev/null, /dev/zero, et /dev/urandom sont virtuels. Ce ne sont pas des périphériques physiques et ils existent seulement au niveau logiciel.
[94] Un périphérique bloc lit et/ou écrit des données par morceaux, ou blocs en constraste avec un périphérique caractère, qui accède aux données caractère par caractère. Des exemples de périphérique bloc sont un disque dur et un lecteur CD ROM. Un exemple de périphérique caractère est un clavier.
[95] Bien sûr, le point de montage /mnt/lecteur_flash doit exister. Dans le cas contraire, en tant qu'utilisateur root, mkdir /mnt/flashdrive.
Pour monter réellement le lecteur, utilisez la commande suivante : mount /mnt/lecteur_flash
Les nouvelles distributions Linux montent automatiquement les clés USB dans le répertoire /media sans intervention de l'utilisateur.