Maison > Article > Tutoriel système > Répertoire Linux /dev : introduction et application des fichiers de périphérique spéciaux
Dans le système Linux, tout est un fichier. Cela signifie qu'en plus des fichiers texte et des fichiers binaires ordinaires, divers appareils du système peuvent également être représentés et accessibles sous forme de fichiers. Ces fichiers de périphérique sont généralement stockés dans le répertoire /dev. Ils ont des attributs et des fonctions spéciales, tels qu'un numéro de périphérique majeur, un numéro de périphérique mineur, un périphérique de caractères, un périphérique de bloc, etc. Quels sont les fichiers de périphériques spéciaux courants dans les systèmes Linux ? Quelles sont leurs fonctions et utilisations ? Cet article présentera en détail les fichiers de périphérique spéciaux dans le répertoire Linux /dev du point de vue des concepts et des exemples.
Linux est un système de fichiers, et tout le matériel tel que les logiciels aura des représentations de fichiers correspondantes dans les répertoires correspondants. Pour le répertoire dev, nous savons que les fichiers qu'il contient représentent des périphériques Linux. Dans les systèmes Windows, les périphériques sont bien compris par tout le monde, comme les disques durs, et les disques font référence au matériel réel. Sous le système de fichiers Linux, certains fichiers sont associés à ces périphériques. Leur accès peut être placé sur du matériel réel. Pensez-y, Linux est plus flexible. Transformez-le en fichier, comme l'opération serait simple. Il n'est pas nécessaire d'appeler les interfaces com, prt et autres précédentes. Lisez le fichier directement et écrivez le fichier pour envoyer l'opération de lecture ou d'écriture à l'appareil. Selon la manière de lire, d'écrire et de stocker les données, nous pouvons diviser les appareils dans les types suivants : périphériques de caractères, périphériques de bloc et pseudo-périphériques.
1.Classement des équipements
Le dispositif de caractère fait référence à un appareil qui transmet 1 caractère au système à la fois. Ces nœuds de périphériques fournissent généralement des services de communication en streaming pour des périphériques tels que des télécopieurs, des terminaux virtuels et des modems et claviers série. Ils ne prennent généralement pas en charge les données à accès aléatoire. Lorsque des périphériques de caractères sont implémentés, la plupart n'utilisent pas de tampons. Le système lit/écrit chaque caractère directement depuis l'appareil. Par exemple, un périphérique tel qu'un clavier fournit un flux de données lorsque vous tapez la chaîne « cnblogs », le pilote du clavier renvoie ce flux de données de sept caractères exactement dans le même ordre que l'entrée. Ils sont séquentiels, renvoyant c en premier et s en dernier.
Les appareils bloc font référence aux appareils qui utilisent des blocs pour déplacer des données entre les systèmes. Ces nœuds de périphériques représentent généralement des périphériques adressables tels que des disques durs, des CD-ROM et des zones de mémoire.
Les appareils bloqués prennent généralement en charge l'accès et l'adressage aléatoires et utilisent des caches. Le système d'exploitation alloue des tampons d'entrée et de sortie pour stocker un bloc de données. Lorsqu'un programme envoie une demande de lecture ou d'écriture de données au périphérique, le système stocke chaque caractère des données dans le cache approprié. Lorsque le cache se remplit, les mesures appropriées sont prises (les données sont transférées) et le système vide le cache. La différence entre celui-ci et les périphériques de caractères réside dans la prise en charge du stockage aléatoire. Le type de caractère est sous forme de flux et est stocké un par un.
Dans les systèmes d'exploitation de type Unix, les nœuds de périphériques ne correspondent pas nécessairement aux appareils physiques. Les appareils sans cette correspondance sont des pseudo-appareils. Les systèmes d'exploitation utilisent les différentes fonctions qu'ils offrent. Certains pseudo-périphériques couramment utilisés incluent : null, zero, full, loop, random, urandom
2. Équipement spécial et utilisation
Les périphériques spéciaux mentionnés ici sont à l'exception du disque dur, de la carte mère, etc., mais ils ont des fonctions spéciales dans la commande shell Linux, ils sont donc retirés séparément. Ces appareils sont :
/dev/stdin
/dev/stdout
/dev/stderr
/dev/null
/dev/zéro
/dev/full
/dev/random,urandom
/dev/fd
/dev/tcp|upd
/dev/loop
1. Périphériques de sortie et d'entrée standard
Tu te souviens de ce que j'ai dit la dernière fois, la redirection Linux ? Vous pouvez lire : Analyse détaillée de la redirection des données du shell Linux (redirection d'entrée et redirection de sortie). Ils correspondent à plusieurs descripteurs de fichiers spéciaux, fd0, fd1, fd2 (stdin, stdout, stderr)
Par exemple :
[chengmo@centos5 shell]$ cat>teststdin/stdin test #ctrl+D #cat从/dev/stdin获得数据,然后将标准输出,输入的到teststdin文件 [chengmo@centos5 shell]$ cat teststdin test [chengmo@centos5 shell]$ cat>teststdin test #ctrl+D #不指定输入,默认输入设备就是/dev/stdinn
/dev/stdin fait référence au périphérique clavier
[chengmo@centos5 shell]$ cat test.sh >/dev/stdout |grep 'echo' echo "very good!"; echo "good!"; echo "pass!"; echo "no pass!" #/dev/stdout指向就是标准输出,因此重定向给它的数据,最终发送到屏幕上(fd1) [chengmo@centos5 shell]$ cat test.sh |grep 'echo' echo "very good!"; echo "good!"; echo "pass!"; echo "no pass!"; [chengmo@centos5 shell]$ cat test.sh >/dev/stderr |grep 'echo' #!/bin/sh scores=40; if [[ $scores -gt 90 ]]; then echo "very good!"; elif [[ $scores -gt 80 ]]; then echo "good!"; elif [[ $scores -gt 60 ]]; then echo "pass!"; else echo "no pass!"; fi; #/dev/stderr 指是错误输出,默认也是输出到屏幕上面,但是它的内容不能通过管道传递给grep,管道只能传递标准输出
/dev/appareil nul
est un périphérique trou noir, qui supprime toutes les données qui y sont écrites. Les périphériques vides sont généralement utilisés pour supprimer les flux de sortie inutiles. Je me souviens que lorsque j'utilisais Windows, il existait un périphérique similaire : NUL, qui avait la même fonction. Toutes les données écrites sur l'appareil seront supprimées. La lecture des données à partir de ceci revient vide. Envoyez fréquemment du contenu inutilisé à cet appareil et supprimez les données inutiles.
Par exemple :
[chengmo@centos5 shell]$ cat /dev/null [chengmo@centos5 shell]$ cat test.sh >/dev/null #读该设备为空,写入该设备数据都丢弃了
/dev/zéro appareil
Dans les systèmes d'exploitation de type UNIX, /dev/zero est un fichier spécial qui fournit un nombre illimité de caractères nuls (NULL, ASCII NUL, 0×00) lorsque vous le lisez. Une utilisation typique consiste à écraser les informations avec le flux de caractères qu'il fournit. Une autre utilisation courante consiste à générer un fichier vierge d'une taille spécifique.
Par exemple :
[chengmo@centos5 shell]$ dd if=/dev/zero of=testzero count=1024 bs=1024 1024+0 records in 1024+0 records out 1048576 bytes (1.0 MB) copied, 0.0107194 seconds, 97.8 MB/s #创建一个大小为1M文件,该文件一个块是1024字节,一共是1024块(刚好1M),用/dev/zero文件内容填充它。输出创建到:testzero文件 [chengmo@centos5 shell]$dd if=/dev/zero of=/dev/磁盘分区 #这个命令一定不要随便用,有点象windows里面的粉碎文件工具。不过它是用x00填充整个分区。这样做数据是不可以恢复的了。 [chengmo@centos5 shell]$cat /dev/zero>testinputzero #这个命令也不能随便使用咯,/dev/zero设备一个特效是,如果你读取的话,是一个死循环会输出无穷的\x00,这样你将创建一个用\x00填充的文件。如果你没有限制该用户磁盘配额。它将耗尽整个磁盘空间。
在linux资源配额限制里面,如果没有现在普通用户的磁盘空间利用,或内存使用。一个普通用户就可以通过上面方法一会就塞满整个磁盘。也可以通过while(true) {fork……}类程序,启动无限线程,耗尽整个系统内存。
/dev/full设备
类Unix系统中,/dev/full(常满设备)是一个特殊设备文件,总是在向其写入时返回设备无剩余空间(错误码为ENOSPC),读取时则与/dev/zero相似,返回无限的空字符(NULL, ASCII NUL, 0×00)。这个设备通常被用来测试程序在遇到磁盘无剩余空间错误时的行为。
如:
[chengmo@centos5 shell]$ echo 'chengmo' >/dev/full -bash: echo: write error: 设备上没有空间 [chengmo@centos5 shell]$ echo $? 1 #命令执行返回错误
/dev/random[urandom]
在类UNIX操作系统中,/dev/random是一个特殊的设备文件,可以用作随机数发生器或伪随机数发生器。它允许程序访问来自设备驱动程序或其它来源的背景噪声。常用作随机数发生器。具体参考:linux shell实现随机数多种方法(date,random,uuid)
/dev/fd
记录用户打开的文件描述符
[chengmo@centos5 shell]$ ls /dev/fd/
0 1 2 3
详细参考:
linux shell数据重定向(输入重定向与输出重定向)详细分析 文件描述符介绍。
/dev/tcp[udp]/host/port
读取该类形式设备,将会创建一个连接host主机port端口的tcp[upd]连接。打开一个socket通讯接口。
详细使用可以参考:
linux shell 脚本实现tcp/upd协议通讯(重定向应用)
/dev/loop
在类UNIX操作系统中,Loop设备 可以把loop 文件,作为块设备挂载使用。
如:
[chengmo@centos5 shell]$mount -o loop example.img /home/chengmo/img
#将img镜像文件挂载到/home/chengmo/img目录下面,有了这个设备,我们不需要通过虚拟光驱就可以读虚拟磁盘格式的文件。
本文介绍了Linux /dev目录下的特殊设备文件,包括它们的分类、属性、命名规则等。我们还了解了一些常见的特殊设备文件,如/dev/null、/dev/zero、/dev/random、/dev/tty、/dev/sda等,以及它们的作用和用法。通过本文,我们可以更清楚地了解Linux系统中的设备管理和访问机制。
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!