Heim > System-Tutorial > LINUX > Hauptteil

Linux /dev-Verzeichnis: Einführung und Anwendung spezieller Gerätedateien

PHPz
Freigeben: 2024-02-11 20:45:24
nach vorne
1200 Leute haben es durchsucht

Im Linux-System ist alles eine Datei. Dies bedeutet, dass neben gewöhnlichen Textdateien und Binärdateien auch verschiedene Geräte im System in Form von Dateien dargestellt und aufgerufen werden können. Diese Gerätedateien werden normalerweise im Verzeichnis /dev gespeichert. Sie haben einige spezielle Attribute und Funktionen, wie z. B. Hauptgerätenummer, Nebengerätenummer, Zeichengerät, Blockgerät usw. Was sind die häufigsten speziellen Gerätedateien in Linux-Systemen? Was sind ihre Funktionen und Verwendungszwecke? In diesem Artikel werden die speziellen Gerätedateien im Linux-Verzeichnis /dev anhand von Konzepten und Beispielen ausführlich vorgestellt.

Linux /dev目录:特殊设备文件的介绍与应用

Linux ist ein Dateisystem und alle Hardware wie Software verfügt über entsprechende Dateidarstellungen in den entsprechenden Verzeichnissen. Für das Dev-Verzeichnis wissen wir, dass die Dateien darunter Linux-Geräte darstellen. In Windows-Systemen sind Geräte für jedermann verständlich, z. B. Festplatten, und Festplatten beziehen sich auf tatsächliche Hardware. Unter dem Linux-Dateisystem gibt es Dateien, die diesen Geräten zugeordnet sind. Der Zugriff darauf kann auf tatsächlicher Hardware erfolgen. Denken Sie darüber nach, Linux ist flexibler. Verwandeln Sie es in eine Datei, wie einfach wäre der Vorgang. Es ist nicht erforderlich, die vorherigen Schnittstellen com, prt und andere aufzurufen. Lesen Sie die Datei direkt und schreiben Sie die Datei, um den Lese- oder Schreibvorgang an das Gerät zu senden. Je nach Art des Lesens, Schreibens und Speicherns von Daten können wir die Geräte in die folgenden Typen einteilen: Zeichengeräte, Blockgeräte und Pseudogeräte.

1. Geräteklassifizierung

  • Zeichengerät

Zeichengerät bezieht sich auf ein Gerät, das jeweils ein Zeichen an das System überträgt. Diese Geräteknoten stellen normalerweise Streaming-Kommunikationsdienste für Geräte wie Faxgeräte, virtuelle Terminals sowie serielle Modems und Tastaturen bereit. Sie unterstützen normalerweise keine Direktzugriffsdaten. Bei der Implementierung von Zeichengeräten verwenden die meisten keine Puffer. Das System liest/schreibt jedes Zeichen direkt vom Gerät. Beispielsweise stellt ein Gerät wie eine Tastatur einen Datenstrom bereit. Wenn Sie die Zeichenfolge „cnblogs“ eingeben, gibt der Tastaturtreiber diesen sieben Zeichen umfassenden Datenstrom in genau derselben Reihenfolge zurück wie die Eingabe. Sie sind sequentiell und geben zuerst c und zuletzt s zurück.

  • Geräte blockieren

Blockgeräte beziehen sich auf Geräte, die Blöcke zum Verschieben von Daten zwischen Systemen verwenden. Diese Geräteknoten stellen typischerweise adressierbare Geräte wie Festplatten, CD-ROMs und Speicherbereiche dar.

Blockgeräte unterstützen normalerweise wahlfreien Zugriff und Adressierung und verwenden Caches. Das Betriebssystem weist Puffer für die Eingabe und Ausgabe zu, um einen Datenblock zu speichern. Wenn ein Programm eine Anfrage zum Lesen oder Schreiben von Daten an das Gerät sendet, speichert das System jedes Zeichen in den Daten im entsprechenden Cache. Wenn der Cache voll ist, werden entsprechende Maßnahmen ergriffen (die Daten werden weg übertragen) und das System löscht den Cache. Der Unterschied zu Zeichengeräten besteht darin, ob es zufällige Speicherung unterstützt. Der Zeichentyp liegt in Stream-Form vor und wird einzeln gespeichert.

  • Pseudogerät

In Unix-ähnlichen Betriebssystemen entsprechen Geräteknoten nicht unbedingt physischen Geräten. Geräte ohne diese Entsprechung sind Pseudogeräte. Betriebssysteme nutzen die verschiedenen Funktionen, die sie bereitstellen. Einige häufig verwendete Pseudogeräte sind: null, null, vollständig, Schleife, zufällig, urandom

2. Besondere Ausstattung und Nutzung

Die hier erwähnten Spezialgeräte sind außer Festplatten, Motherboards usw., aber sie verfügen über spezielle Funktionen im Linux-Shell-Befehl und werden daher separat herausgenommen. Diese Geräte sind:

/dev/stdin

/dev/stdout

/dev/stderr

/dev/null

/dev/zero

/dev/full

/dev/random,urandom

/dev/fd

/dev/tcp|upd

/dev/loop

1. Standard-Ausgabe- und Eingabegeräte

Erinnern Sie sich, was ich letztes Mal gesagt habe, Linux-Umleitung? Sie können lesen: Detaillierte Analyse der Linux-Shell-Datenumleitung (Eingabeumleitung und Ausgabeumleitung). Sie entsprechen mehreren speziellen Dateideskriptoren, fd0, fd1, fd2 (stdin, stdout, stderr)

Zum Beispiel:

[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
Nach dem Login kopieren

/dev/stdin bezieht sich auf das Tastaturgerät

[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,管道只能传递标准输出

Nach dem Login kopieren

/dev/null-Gerät

ist ein Black-Hole-Gerät, das alle darauf geschriebenen Daten verwirft. Leere Geräte werden normalerweise verwendet, um unnötige Ausgabeströme zu verwerfen. Ich erinnere mich, dass es unter Windows ein ähnliches Gerät gab: NUL, das die gleiche Funktion hatte. Alle auf das Gerät geschriebenen Daten werden verworfen. Das Lesen von Daten daraus gibt leer zurück. Senden Sie häufig ungenutzte Inhalte an dieses Gerät und verwerfen Sie unnötige Daten.

Zum Beispiel:

[chengmo@centos5 shell]$ cat /dev/null
[chengmo@centos5 shell]$ cat test.sh >/dev/null
 
#读该设备为空,写入该设备数据都丢弃了

Nach dem Login kopieren

/dev/zero device

In UNIX-ähnlichen Betriebssystemen ist /dev/zero eine spezielle Datei, die beim Lesen unbegrenzte Nullzeichen (NULL, ASCII NUL, 0×00) bereitstellt. Eine typische Verwendung besteht darin, Informationen mit dem bereitgestellten Zeichenstrom zu überschreiben. Eine andere häufige Verwendung besteht darin, eine leere Datei einer bestimmten Größe zu generieren.

Zum Beispiel:

[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填充的文件。如果你没有限制该用户磁盘配额。它将耗尽整个磁盘空间。

Nach dem Login kopieren

在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
#命令执行返回错误
Nach dem Login kopieren

/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系统中的设备管理和访问机制。

Das obige ist der detaillierte Inhalt vonLinux /dev-Verzeichnis: Einführung und Anwendung spezieller Gerätedateien. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:lxlinux.net
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!