Diskussion:Gerätedatei: Unterschied zwischen den Versionen
Die Seite wurde neu angelegt: „===== Gerätedateien ===== Die Dateien im <tt>'''/dev'''</tt> Verzeichnis sind, wie bereits angedeutet "Pipelines" zur Hardware des Computers. Die meisten Dateien können (die entsprechenden Zugriffsrechte vorausgesetzt) sowohl ausgelesen als auch beschrieben werden. Einige, welche Statusinformationen über die Hardware liefern können selbstverständlich nur ausgelesen werden, während andere, welche die Hardware konfigurieren nur geschrieben werden k…“ |
Keine Bearbeitungszusammenfassung |
||
Zeile 1: | Zeile 1: | ||
= Gerätedateien = | |||
Die Dateien im | Die Dateien im '''/dev''' Verzeichnis sind, wie bereits angedeutet "Pipelines" zur Hardware des Computers. | ||
Die meisten Dateien können (die entsprechenden Zugriffsrechte vorausgesetzt) sowohl ausgelesen als auch beschrieben werden. | Die meisten Dateien können (die entsprechenden Zugriffsrechte vorausgesetzt) sowohl ausgelesen als auch beschrieben werden. | ||
Zeile 6: | Zeile 6: | ||
Einige, welche Statusinformationen über die Hardware liefern können selbstverständlich nur ausgelesen werden, während andere, welche die Hardware konfigurieren nur geschrieben werden können. | Einige, welche Statusinformationen über die Hardware liefern können selbstverständlich nur ausgelesen werden, während andere, welche die Hardware konfigurieren nur geschrieben werden können. | ||
D.h. | D.h. auf die einzelnen Hardwarekomponenten des Computers kann wie auf Dateien zugegriffen werden. | ||
Vorteil dieses Konzepts: Auf diese Weise kann auf die Hardware zugegriffen werden (z. B. | Vorteil dieses Konzepts: Auf diese Weise kann auf die Hardware zugegriffen werden (z. B. | ||
Zeile 19: | Zeile 18: | ||
!colspan="2" | | Bedeutung | !colspan="2" | | Bedeutung | ||
|- | |- | ||
| | | | | '''sdasdbsdcsdd''' | ||
| | erstezweitedrittevierte | | | erstezweitedrittevierte | ||
| | SCSI/SATA-Festplatte | | | SCSI/SATA-Festplatte | ||
|- | |- | ||
| | | | | '''sda1sda2sda3sda4''' | ||
| | erstezweitedrittevierte | | | erstezweitedrittevierte | ||
| | Festplattenpartition auf der ersten SCSI/SATA-Festplatte | | | Festplattenpartition auf der ersten SCSI/SATA-Festplatte | ||
|- | |- | ||
| | | | | '''hda''' | ||
| colspan="2" | wie s | | colspan="2" | wie s'''da''', nur für IDE-Festplatten | ||
|- | |- | ||
| | | | | '''ttyS0ttyS1''' | ||
| colspan="2" | Erste und zweite serielle Schnittstelle (COM1 und COM2 unter DOS) | | colspan="2" | Erste und zweite serielle Schnittstelle (COM1 und COM2 unter DOS) | ||
|- | |- | ||
| | | | | '''audiodspsndstatmidi00''' | ||
| colspan="2" | Zugriff auf die Soundblasterkarte | | colspan="2" | Zugriff auf die Soundblasterkarte | ||
|- | |- | ||
| | | | | '''psaux''' | ||
| colspan="2" | Zugriff auf die PS/2 Schnittstelle | | colspan="2" | Zugriff auf die PS/2 Schnittstelle | ||
|- | |- | ||
| | | | | '''lp0lp1lp2''' | ||
| colspan="2" | Zugriff auf die parallele Schnittstelle | | colspan="2" | Zugriff auf die parallele Schnittstelle | ||
|- | |- | ||
| | | | | '''fd0''' | ||
| colspan="2" | Zugriff auf das erste Diskettenlaufwerk | | colspan="2" | Zugriff auf das erste Diskettenlaufwerk | ||
|- | |- | ||
Zeile 51: | Zeile 50: | ||
/usr/src/linux/Documentation/devices.txt | /usr/src/linux/Documentation/devices.txt | ||
==== Besondere Geräte ==== | |||
{| class="wikitable sortable" | {| class="wikitable sortable" | ||
|- | |- | ||
| | | | | '''/dev/zero''' | ||
| | liefert unendlich vielen Nullen | | | liefert unendlich vielen Nullen | ||
|- | |- | ||
| | | | | '''/dev/null''' | ||
| | schluckt alle Daten die es erhält | | | schluckt alle Daten die es erhält | ||
|- | |- | ||
Zeile 68: | Zeile 67: | ||
|- | |- | ||
|} | |} | ||
===== /dev/null ===== | |||
'''/dev/null''' ([http://de.wikipedia.org/wiki/Englische_Sprache englisch] ''null'': dt. „nichts“) ist der Name einer speziellen [http://de.wikipedia.org/wiki/Gerätedatei#Virtuelle_Ger.C3.A4tedateien virtuellen Gerätedatei], des ''Nulldevice'', auf [http://de.wikipedia.org/wiki/Unix Unix] und Unix-ähnlichen [http://de.wikipedia.org/wiki/Betriebssystem Betriebssystemen], die jegliche Daten, die dorthin geschrieben werden, verwirft. | '''/dev/null''' ([http://de.wikipedia.org/wiki/Englische_Sprache englisch] ''null'': dt. „nichts“) ist der Name einer speziellen [http://de.wikipedia.org/wiki/Gerätedatei#Virtuelle_Ger.C3.A4tedateien virtuellen Gerätedatei], des ''Nulldevice'', auf [http://de.wikipedia.org/wiki/Unix Unix] und Unix-ähnlichen [http://de.wikipedia.org/wiki/Betriebssystem Betriebssystemen], die jegliche Daten, die dorthin geschrieben werden, verwirft. | ||
* Unter [http://de.wikipedia.org/wiki/CP/M CP/M] und seinen Abkömmlingen [http://de.wikipedia.org/wiki/PC-kompatibles_DOS DOS], [http://de.wikipedia.org/wiki/OS/2 OS/2] und [http://de.wikipedia.org/wiki/Microsoft_Windows Microsoft Windows] wird das Nulldevice als | * Unter [http://de.wikipedia.org/wiki/CP/M CP/M] und seinen Abkömmlingen [http://de.wikipedia.org/wiki/PC-kompatibles_DOS DOS], [http://de.wikipedia.org/wiki/OS/2 OS/2] und [http://de.wikipedia.org/wiki/Microsoft_Windows Microsoft Windows] wird das Nulldevice als NUL: angesprochen. | ||
* Unter [http://de.wikipedia.org/wiki/Disk_Operating_System DOS] und Nachfolgerbetriebssystemen existiert das Nulldevice in jedem Verzeichnis unter dem Dateinamen | * Unter [http://de.wikipedia.org/wiki/Disk_Operating_System DOS] und Nachfolgerbetriebssystemen existiert das Nulldevice in jedem Verzeichnis unter dem Dateinamen NUL. | ||
* Die Datei | * Die Datei /dev/null ist durch den [http://de.wikipedia.org/wiki/Portable_Operating_System_Interface POSIX]-Standard standardisiert. | ||
; Verwendung | |||
Eine häufige Verwendung ist z. B. , in einer [http://de.wikipedia.org/wiki/Unix-Shell Shell]-Sitzung die Meldungen eines Programms von der [http://de.wikipedia.org/wiki/Stdout Standardausgabe] statt auf den Bildschirm nach | Eine häufige Verwendung ist z. B. , in einer [http://de.wikipedia.org/wiki/Unix-Shell Shell]-Sitzung die Meldungen eines Programms von der [http://de.wikipedia.org/wiki/Stdout Standardausgabe] statt auf den Bildschirm nach /dev/null umzuleiten, wenn man an ihnen nicht interessiert ist; sie werden dann nicht angezeigt. | ||
Das Gerät | Das Gerät /dev/null kann auch als Ziel bei Dateisystemoperationen dienen. | ||
Ein solcher Zweck tritt gelegentlich auf, wenn Shellskripte oder Programme unbedingt eine Dateiangabe erfordern, diese im vorliegenden Fall aber keinen Sinn ergibt oder unerwünscht ist. | Ein solcher Zweck tritt gelegentlich auf, wenn Shellskripte oder Programme unbedingt eine Dateiangabe erfordern, diese im vorliegenden Fall aber keinen Sinn ergibt oder unerwünscht ist. | ||
Zeile 84: | Zeile 84: | ||
* Dabei verhält sich das Gerät wie eine gewöhnliche Datei, das öffnende Programm muss also keine besonderen Vorkehrungen treffen. | * Dabei verhält sich das Gerät wie eine gewöhnliche Datei, das öffnende Programm muss also keine besonderen Vorkehrungen treffen. | ||
In der [http://de.wikipedia.org/wiki/Netzkultur Netzkultur] ist | In der [http://de.wikipedia.org/wiki/Netzkultur Netzkultur] ist /dev/null ein umgangssprachlich verwendeter Begriff für eine Art gedankliches [http://de.wikipedia.org/wiki/Schwarzes_Loch Schwarzes Loch], meist um Desinteresse an der Aussage des Gesprächspartners zu bekunden. | ||
===== Beispiele ===== | |||
Wenn man nur die normale Ausgabe eines Programms sehen will, nicht aber die Fehlermeldungen und sonstigen Informationen, die das Programm in die [http://de.wikipedia.org/wiki/Standard-Datenströme#Standardfehlerausgabe_.28stderr.29 Standardfehlerausgabe] schreibt, kann man diese umleiten: | Wenn man nur die normale Ausgabe eines Programms sehen will, nicht aber die Fehlermeldungen und sonstigen Informationen, die das Programm in die [http://de.wikipedia.org/wiki/Standard-Datenströme#Standardfehlerausgabe_.28stderr.29 Standardfehlerausgabe] schreibt, kann man diese umleiten: | ||
$ programm 2>/dev/null | $ programm 2>/dev/null | ||
Möchte man für Shell-Skripte nur den Rückgabewert eines Programms verwenden und somit sämtliche Ausgaben nach | Möchte man für Shell-Skripte nur den Rückgabewert eines Programms verwenden und somit sämtliche Ausgaben nach /dev/null umleiten, kann die folgende Syntax verwendet werden: | ||
$ programm >/dev/null 2>&1 | $ programm >/dev/null 2>&1 | ||
Mittels Shell-[http://de.wikipedia.org/wiki/Pipe_%28Informatik%29 Pipes] kann man selektiv uninteressante (Fehler-)Meldungen von Teilen der Pipeline ausblenden: | Mittels Shell-[http://de.wikipedia.org/wiki/Pipe_%28Informatik%29 Pipes] kann man selektiv uninteressante (Fehler-)Meldungen von Teilen der Pipeline ausblenden: | ||
$ programm1 2>/dev/null | programm2 | ... | $ programm1 2>/dev/null | programm2 | ... | ||
Ähnlich ist die Verwendung mittels [http://de.wikipedia.org/wiki/Symbolische_Verknüpfung symbolischer Verknüpfung], danach wird alles, was in die verlinkte Datei ( | Ähnlich ist die Verwendung mittels [http://de.wikipedia.org/wiki/Symbolische_Verknüpfung symbolischer Verknüpfung], danach wird alles, was in die verlinkte Datei (~/.bash_history) geschrieben wird, nicht gespeichert, beispielsweise zum [http://de.wikipedia.org/wiki/Datenschutz Datenschutz]: | ||
$ ln -sf /dev/null ~/.bash_history | $ ln -sf /dev/null ~/.bash_history | ||
Auch üblich ist die Verwendung für die Standardeingabe. | Auch üblich ist die Verwendung für die Standardeingabe. | ||
* Ein Beispiel dafür ist das Ausführen eines Kommandos im Hintergrund während einer [http://de.wikipedia.org/wiki/Secure_Shell SSH]-Sitzung. | * Ein Beispiel dafür ist das Ausführen eines Kommandos im Hintergrund während einer [http://de.wikipedia.org/wiki/Secure_Shell SSH]-Sitzung. | ||
* Dabei wird die Standardeingabe an | * Dabei wird die Standardeingabe an /dev/null übergeben, womit das Programm im Hintergrund weiterläuft, auch wenn man sich aus der SSH-Sitzung ausloggt: | ||
$ ssh example.com "programm </dev/null >/dev/null 2>&1 &" | $ ssh example.com "programm </dev/null >/dev/null 2>&1 &" | ||
Man kann auch einen Datenträger überprüfen, indem z. B. | Man kann auch einen Datenträger überprüfen, indem z. B. /dev/cdrom0 nach /dev/null kopiert wird. | ||
* Wenn hierbei ein Fehler auftritt, ist der entsprechende Datenträger beschädigt oder nicht vorhanden. | * Wenn hierbei ein Fehler auftritt, ist der entsprechende Datenträger beschädigt oder nicht vorhanden. | ||
$ dd if=/dev/cdrom of=/dev/null | $ dd if=/dev/cdrom of=/dev/null | ||
==== /dev/zero ==== | |||
'''/dev/zero''' ist eine spezielle [http://de.wikipedia.org/wiki/Virtuelle_Gerätedatei virtuellen Gerätedatei] auf [http://de.wikipedia.org/wiki/Unix Unix] und [http://de.wikipedia.org/wiki/Unixoides_System unixoiden Systemen], die bei jedem Lesezugriff [http://de.wikipedia.org/wiki/Nullzeichen Nullzeichen] zurückgeliefert. | |||
* Im Gegensatz zu [http://de.wikipedia.org/wiki//dev/null /dev/null] ist | * Im Gegensatz zu [http://de.wikipedia.org/wiki//dev/null /dev/null] ist /dev/zero nicht Bestandteil des [http://de.wikipedia.org/wiki/Portable_Operating_System_Interface POSIX]-Standard. | ||
/dev/zero wurde mit [http://de.wikipedia.org/wiki/SunOS SunOS]-4.0 im Jahre 1987 gemeinsam mit dem neuen VM-Subsystem eingeführt. | |||
==== Details ==== | |||
Wenn auf | Wenn auf /dev/zero geschrieben wird, verhält sich /dev/zero wie /dev/null. | ||
Bei einem ''mmap'' auf | Bei einem ''mmap'' auf /dev/zero werden anonyme genullte Seiten aus dem virtuellen [http://de.wikipedia.org/wiki/Speicherpool Speicherpool] des [http://de.wikipedia.org/wiki/Kernel_%28Betriebssystem%29 Kernels] zur Verfügung gestellt. | ||
Viele Betriebssysteme verwenden diesen ''mmap''-Mechanismus, um Programmen und [http://de.wikipedia.org/wiki/Shared_Library Shared Libraries] den sogenannten ''nichtinitialisierten''-Datenbereich zur Verfügung zu stellen. | Viele Betriebssysteme verwenden diesen ''mmap''-Mechanismus, um Programmen und [http://de.wikipedia.org/wiki/Shared_Library Shared Libraries] den sogenannten ''nichtinitialisierten''-Datenbereich zur Verfügung zu stellen. | ||
Viele Programme verwenden Datenbereiche, die durch einen ''mmap'' auf | Viele Programme verwenden Datenbereiche, die durch einen ''mmap'' auf /dev/zero erzeugt wurden, als Basis für [http://de.wikipedia.org/wiki/Shared_Memory Shared Memory], das zur Kommunikation zwischen mehreren [http://de.wikipedia.org/wiki/Prozess_%28Informatik%29 Prozessen] verwendet wird. | ||
===== Beispiele ===== | |||
Das folgende [http://de.wikipedia.org/wiki/Unix-Kommando Unix-Kommando] erzeugt eine Datei namens ''file'', die 12 MB groß ist und nur das [http://de.wikipedia.org/wiki/Nullzeichen Nullzeichen] enthält: | Das folgende [http://de.wikipedia.org/wiki/Unix-Kommando Unix-Kommando] erzeugt eine Datei namens ''file'', die 12 MB groß ist und nur das [http://de.wikipedia.org/wiki/Nullzeichen Nullzeichen] enthält: | ||
[http://de.wikipedia.org/wiki/Dd_%28Unix%29 dd] if=/dev/zero of=file bs=1M count=12 | [http://de.wikipedia.org/wiki/Dd_%28Unix%29 dd] if=/dev/zero of=file bs=1M count=12 | ||
=== /dev/random === | |||
/dev/random ist eine zeichen-orientierte [http://de.wikipedia.org/wiki/Virtuelle_Gerätedatei virtuelle Gerätedatei], über die Programme auf einen systemweiten [http://de.wikipedia.org/wiki/Zufallszahlengenerator Zufallszahlengenerator] von hoher Qualität zugreifen können. | |||
Da für [http://de.wikipedia.org/wiki/Rechnernetz netzwerk]-orientierte Systeme wie Unix [http://de.wikipedia.org/wiki/Kryptografie Kryptografie]-Dienste und damit [http://de.wikipedia.org/wiki/Zufallszahl Zufallszahlen] eine bedeutende Rolle spielen, kommt dieser Datei und dem dahinterstehenden Treiber eine wichtige Bedeutung zu. | Da für [http://de.wikipedia.org/wiki/Rechnernetz netzwerk]-orientierte Systeme wie Unix [http://de.wikipedia.org/wiki/Kryptografie Kryptografie]-Dienste und damit [http://de.wikipedia.org/wiki/Zufallszahl Zufallszahlen] eine bedeutende Rolle spielen, kommt dieser Datei und dem dahinterstehenden Treiber eine wichtige Bedeutung zu. | ||
Zeile 143: | Zeile 143: | ||
Aus diesem Pool werden die Zufallszahlen generiert. | Aus diesem Pool werden die Zufallszahlen generiert. | ||
* Beim Lesen gibt | * Beim Lesen gibt /dev/random nur solange Zufallszahlen zurück, bis die abgeschätzte Entropiemenge erschöpft ist. | ||
Wenn der Entropiepool erschöpft ist, blockieren Lesezugriffe auf | Wenn der Entropiepool erschöpft ist, blockieren Lesezugriffe auf /dev/random, bis zusätzliches Umgebungsrauschen erhalten wurde. /dev/random sollte ausreichend sein für Anwendungszwecke, die auf eine sehr hohe Qualität der Zufälligkeit angewiesen sind, wie etwa [http://de.wikipedia.org/wiki/Kryptografie Kryptografie] (beispielsweise [http://de.wikipedia.org/wiki/One-Time-Pad One-Time-Pads] oder [http://de.wikipedia.org/wiki/Public_Key Schlüsselerzeugung]). | ||
Aus Performancegründen wird in der Praxis oft nur der Seed eines Pseudo-Zufallszahlengenerators von | Aus Performancegründen wird in der Praxis oft nur der Seed eines Pseudo-Zufallszahlengenerators von /dev/random gelesen (z. B. | ||
* in [http://de.wikipedia.org/wiki/OpenSSL OpenSSL], [http://de.wikipedia.org/wiki/Pretty_Good_Privacy PGP] und [http://de.wikipedia.org/wiki/GnuPG GnuPG]). | * in [http://de.wikipedia.org/wiki/OpenSSL OpenSSL], [http://de.wikipedia.org/wiki/Pretty_Good_Privacy PGP] und [http://de.wikipedia.org/wiki/GnuPG GnuPG]). | ||
Der aktuelle Füllstand des Entropiepools lässt sich unter [http://de.wikipedia.org/wiki/Linux_%28Kernel%29 Linux] aus der Datei | Der aktuelle Füllstand des Entropiepools lässt sich unter [http://de.wikipedia.org/wiki/Linux_%28Kernel%29 Linux] aus der Datei /proc/sys/kernel/random/entropy_avail ermitteln. | ||
Eine Ausgabe der Datei liefert die verfügbare Entropie in bit, wobei das Maximum von 4096 bit einem vollständig gefüllten Entropiepool entspricht. | Eine Ausgabe der Datei liefert die verfügbare Entropie in bit, wobei das Maximum von 4096 bit einem vollständig gefüllten Entropiepool entspricht. | ||
=== /dev/urandom === | |||
Aus | Aus /dev/urandom (von engl. | ||
* unlimited random(ness)) können wie aus | * unlimited random(ness)) können wie aus /dev/random Zufallszahlen gelesen werden. | ||
Im Gegensatz zu letzterem blockiert es jedoch nicht, wenn eine definierte Entropieschwelle unterschritten wird. | Im Gegensatz zu letzterem blockiert es jedoch nicht, wenn eine definierte Entropieschwelle unterschritten wird. | ||
Zeile 162: | Zeile 162: | ||
In diesem Fall ist es theoretisch möglich, dass die erzeugten [http://de.wikipedia.org/wiki/Pseudozufall Pseudozufallszahlen] im Nachhinein von einem Angreifer berechnet werden können. | In diesem Fall ist es theoretisch möglich, dass die erzeugten [http://de.wikipedia.org/wiki/Pseudozufall Pseudozufallszahlen] im Nachhinein von einem Angreifer berechnet werden können. | ||
* Im Zweifelsfall sollte bei hohen Anforderungen, z. B. | * Im Zweifelsfall sollte bei hohen Anforderungen, z. B. | ||
* bei One-Time-Pads, auf | * bei One-Time-Pads, auf /dev/random zurückgegriffen werden. | ||
==== Verbesserung der Entropie ==== | |||
Über Software, wie z. B. | Über Software, wie z. B. timer_entropyd, haveged, randomsound, lässt sich die Entropie verbessern sowie bzw. | ||
* der Entropie-Pool vergrößern, sodass mehr Zufallszahlen zur Verfügung stehen. | * der Entropie-Pool vergrößern, sodass mehr Zufallszahlen zur Verfügung stehen. | ||
Mit der [http://de.wikipedia.org/wiki/GNU GNU]-Software | Mit der [http://de.wikipedia.org/wiki/GNU GNU]-Software rng-tools lassen sich unter Linux und ähnlichen Betriebssystemen [http://de.wikipedia.org/wiki/Zufallszahlengenerator#Physikalischer_Zufallszahlengenerator physikalische Zufallszahlengeneratoren] einbinden. | ||
=== Zusammenfassung: Gerätedateien === | |||
* Spezialdateien (special files) | |||
* Geräte werden als Spezialdatei eingetragen | |||
* Zugriff auf Gerät Zugriff auf eine Datei | |||
* Schutzmechanismus wie für normale Dateien | |||
* Blockorientierte und zeichenorientierte Geräte | |||
==== Named Pipes estellen (mkfifo) ==== | |||
mkfifo erstellt named pipes (FIFOs) mit dem übergebenen Namen. | |||
'''mkfifo '''[''OPTION'']... ''NAME''... | |||
===== Optionen ===== | |||
-'''m''', --'''mode'''<nowiki>=</nowiki>''MODE Setzt Zugriffsrechte mit Bitmaske (MODE)'' | |||
-'''Z''', --'''context'''<nowiki>=</nowiki>''CTX Setzt den ''SELinux security context für jeden NAME auf CTX | |||
==== Gerätedateien erzeugen (mknod) ==== | |||
'''mknod''' erzeugt eine Spezialdatei | |||
'''mknod''' ''[-m Modus] [-mode=Modus] Name {bcu} Major Minor'' | |||
'''mknod''' ''[-m Modus] [-mode=Modus] Pfad p'' | |||
'''mknod''' erzeugt ein FIFO, eine Gerätedatei für ein zeichenorientiertes Gerät (character device) oder für ein blockorientiertes Gerät (block-device) mit dem angegebenen ''Namen''. | |||
Die Gerätedateien werden über die Major Device Nummern (Hauptgerätenummern) mit den entsprechenden Gerätetreibern im Kernel verbunden. | |||
Mehrere Geräte der gleichen Art werden vom Gerätetreiber durch die Minor Device Nummern (Untergerätenummern) unterschieden. | |||
Eine vollständige Liste aller Gerätenummern finden Sie bei den Kernelsourcen in der Datei ./src/linux/Documentation/devices.txt. | |||
* Die verbindliche Liste aller registrierten Hauptgerätenummern befindet sich in der Includedatei <linux/major.h>. | |||
Die Zugriffsrechte auf die Datei werden aus der Bitdifferenz von 0666 und der aktuellen ''umask'' des aufrufenden Prozesses gebildet. | |||
Der erste Buchstabe nach dem ''Namen'' gibt den Typ der Datei an: | |||
{| class="wikitable sortable" | |||
|- | |||
| | '''p ''' | |||
| | (pipe) erzeugt eine FIFO Spezialdatei (wie [../../../../ebooks/computer/betriebssysteme/linux/allgemein/unsortiert/linux_anwender_handbuch/linux_anwenderhandbuch_7-0/node79.html#mkfifo mkfifo]) | |||
|- | |||
| | '''b ''' | |||
| | (block) erzeugt eine Gerätedatei für ein (gepuffertes) blockorientiertes Gerät | |||
|- | |||
| | '''c ''' | |||
| | (character) erzeugt eine ungepufferte Gerätedatei für ein zeichenorientiertes Gerät | |||
|- | |||
| | '''u ''' | |||
| | (unbuffered) das Gleiche wie ''c'' | |||
|- | |||
|} | |||
===== Optionen ===== | |||
{| class="wikitable sortable" | |||
|- | |||
| | '''-m ''Modus'' ''' | |||
| | setzt die Rechte der Dateien auf ''Modus'' wie bei [../../../../ebooks/computer/betriebssysteme/linux/allgemein/unsortiert/linux_anwender_handbuch/linux_anwenderhandbuch_7-0/node29.html#chmod chmod] | |||
|- | |||
|} | |||
==== Verwaltung der Gerätedateien mit udev ==== | |||
[[Gerätedatei/udev]] |
Aktuelle Version vom 26. Oktober 2024, 00:29 Uhr
Gerätedateien
Die Dateien im /dev Verzeichnis sind, wie bereits angedeutet "Pipelines" zur Hardware des Computers.
Die meisten Dateien können (die entsprechenden Zugriffsrechte vorausgesetzt) sowohl ausgelesen als auch beschrieben werden.
Einige, welche Statusinformationen über die Hardware liefern können selbstverständlich nur ausgelesen werden, während andere, welche die Hardware konfigurieren nur geschrieben werden können.
D.h. auf die einzelnen Hardwarekomponenten des Computers kann wie auf Dateien zugegriffen werden.
Vorteil dieses Konzepts: Auf diese Weise kann auf die Hardware zugegriffen werden (z. B.
- aus Shellscripten heraus), ohne dass spezielle Hilfsprogramme geschrieben werden müssen.
Die folgende Tabelle enthält eine Liste der wichtigsten Gerätedateien, samt Beschreibung:
Gerätedatei | | Bedeutung | |
---|---|---|
sdasdbsdcsdd | erstezweitedrittevierte | SCSI/SATA-Festplatte |
sda1sda2sda3sda4 | erstezweitedrittevierte | Festplattenpartition auf der ersten SCSI/SATA-Festplatte |
hda | wie sda, nur für IDE-Festplatten | |
ttyS0ttyS1 | Erste und zweite serielle Schnittstelle (COM1 und COM2 unter DOS) | |
audiodspsndstatmidi00 | Zugriff auf die Soundblasterkarte | |
psaux | Zugriff auf die PS/2 Schnittstelle | |
lp0lp1lp2 | Zugriff auf die parallele Schnittstelle | |
fd0 | Zugriff auf das erste Diskettenlaufwerk |
Dies ist selbstverständlich nur eine kleine Zusammenstellung.
- Eine vollständige Liste findet sich unter:
/usr/src/linux/Documentation/devices.txt
Besondere Geräte
/dev/zero | liefert unendlich vielen Nullen |
/dev/null | schluckt alle Daten die es erhält |
/dev/random | liefert Zufallszahlen von hoher Qualität |
/dev/urandom | liefert unendlich viele Zufallszahlen |
/dev/null
/dev/null (englisch null: dt. „nichts“) ist der Name einer speziellen virtuellen Gerätedatei, des Nulldevice, auf Unix und Unix-ähnlichen Betriebssystemen, die jegliche Daten, die dorthin geschrieben werden, verwirft.
- Unter CP/M und seinen Abkömmlingen DOS, OS/2 und Microsoft Windows wird das Nulldevice als NUL: angesprochen.
- Unter DOS und Nachfolgerbetriebssystemen existiert das Nulldevice in jedem Verzeichnis unter dem Dateinamen NUL.
- Die Datei /dev/null ist durch den POSIX-Standard standardisiert.
- Verwendung
Eine häufige Verwendung ist z. B. , in einer Shell-Sitzung die Meldungen eines Programms von der Standardausgabe statt auf den Bildschirm nach /dev/null umzuleiten, wenn man an ihnen nicht interessiert ist; sie werden dann nicht angezeigt.
Das Gerät /dev/null kann auch als Ziel bei Dateisystemoperationen dienen.
Ein solcher Zweck tritt gelegentlich auf, wenn Shellskripte oder Programme unbedingt eine Dateiangabe erfordern, diese im vorliegenden Fall aber keinen Sinn ergibt oder unerwünscht ist.
Lesezugriffe liefern sofort ein Dateiende (End of File, „EOF“).
- Dabei verhält sich das Gerät wie eine gewöhnliche Datei, das öffnende Programm muss also keine besonderen Vorkehrungen treffen.
In der Netzkultur ist /dev/null ein umgangssprachlich verwendeter Begriff für eine Art gedankliches Schwarzes Loch, meist um Desinteresse an der Aussage des Gesprächspartners zu bekunden.
Beispiele
Wenn man nur die normale Ausgabe eines Programms sehen will, nicht aber die Fehlermeldungen und sonstigen Informationen, die das Programm in die Standardfehlerausgabe schreibt, kann man diese umleiten:
$ programm 2>/dev/null
Möchte man für Shell-Skripte nur den Rückgabewert eines Programms verwenden und somit sämtliche Ausgaben nach /dev/null umleiten, kann die folgende Syntax verwendet werden:
$ programm >/dev/null 2>&1
Mittels Shell-Pipes kann man selektiv uninteressante (Fehler-)Meldungen von Teilen der Pipeline ausblenden:
$ programm1 2>/dev/null | programm2 | ...
Ähnlich ist die Verwendung mittels symbolischer Verknüpfung, danach wird alles, was in die verlinkte Datei (~/.bash_history) geschrieben wird, nicht gespeichert, beispielsweise zum Datenschutz:
$ ln -sf /dev/null ~/.bash_history
Auch üblich ist die Verwendung für die Standardeingabe.
- Ein Beispiel dafür ist das Ausführen eines Kommandos im Hintergrund während einer SSH-Sitzung.
- Dabei wird die Standardeingabe an /dev/null übergeben, womit das Programm im Hintergrund weiterläuft, auch wenn man sich aus der SSH-Sitzung ausloggt:
$ ssh example.com "programm </dev/null >/dev/null 2>&1 &"
Man kann auch einen Datenträger überprüfen, indem z. B. /dev/cdrom0 nach /dev/null kopiert wird.
- Wenn hierbei ein Fehler auftritt, ist der entsprechende Datenträger beschädigt oder nicht vorhanden.
$ dd if=/dev/cdrom of=/dev/null
/dev/zero
/dev/zero ist eine spezielle virtuellen Gerätedatei auf Unix und unixoiden Systemen, die bei jedem Lesezugriff Nullzeichen zurückgeliefert.
/dev/zero wurde mit SunOS-4.0 im Jahre 1987 gemeinsam mit dem neuen VM-Subsystem eingeführt.
Details
Wenn auf /dev/zero geschrieben wird, verhält sich /dev/zero wie /dev/null.
Bei einem mmap auf /dev/zero werden anonyme genullte Seiten aus dem virtuellen Speicherpool des Kernels zur Verfügung gestellt.
Viele Betriebssysteme verwenden diesen mmap-Mechanismus, um Programmen und Shared Libraries den sogenannten nichtinitialisierten-Datenbereich zur Verfügung zu stellen.
Viele Programme verwenden Datenbereiche, die durch einen mmap auf /dev/zero erzeugt wurden, als Basis für Shared Memory, das zur Kommunikation zwischen mehreren Prozessen verwendet wird.
Beispiele
Das folgende Unix-Kommando erzeugt eine Datei namens file, die 12 MB groß ist und nur das Nullzeichen enthält:
dd if=/dev/zero of=file bs=1M count=12
/dev/random
/dev/random ist eine zeichen-orientierte virtuelle Gerätedatei, über die Programme auf einen systemweiten Zufallszahlengenerator von hoher Qualität zugreifen können.
Da für netzwerk-orientierte Systeme wie Unix Kryptografie-Dienste und damit Zufallszahlen eine bedeutende Rolle spielen, kommt dieser Datei und dem dahinterstehenden Treiber eine wichtige Bedeutung zu.
Der Zufallsgenerator sammelt Umgebungsrauschen von Gerätetreibern und anderen Quellen in einem Entropiepool.
- Der Generator speichert auch eine Abschätzung über die Anzahl der Bit im Entropiepool.
Aus diesem Pool werden die Zufallszahlen generiert.
- Beim Lesen gibt /dev/random nur solange Zufallszahlen zurück, bis die abgeschätzte Entropiemenge erschöpft ist.
Wenn der Entropiepool erschöpft ist, blockieren Lesezugriffe auf /dev/random, bis zusätzliches Umgebungsrauschen erhalten wurde. /dev/random sollte ausreichend sein für Anwendungszwecke, die auf eine sehr hohe Qualität der Zufälligkeit angewiesen sind, wie etwa Kryptografie (beispielsweise One-Time-Pads oder Schlüsselerzeugung).
Aus Performancegründen wird in der Praxis oft nur der Seed eines Pseudo-Zufallszahlengenerators von /dev/random gelesen (z. B.
Der aktuelle Füllstand des Entropiepools lässt sich unter Linux aus der Datei /proc/sys/kernel/random/entropy_avail ermitteln.
Eine Ausgabe der Datei liefert die verfügbare Entropie in bit, wobei das Maximum von 4096 bit einem vollständig gefüllten Entropiepool entspricht.
/dev/urandom
Aus /dev/urandom (von engl.
- unlimited random(ness)) können wie aus /dev/random Zufallszahlen gelesen werden.
Im Gegensatz zu letzterem blockiert es jedoch nicht, wenn eine definierte Entropieschwelle unterschritten wird.
In diesem Fall ist es theoretisch möglich, dass die erzeugten Pseudozufallszahlen im Nachhinein von einem Angreifer berechnet werden können.
- Im Zweifelsfall sollte bei hohen Anforderungen, z. B.
- bei One-Time-Pads, auf /dev/random zurückgegriffen werden.
Verbesserung der Entropie
Über Software, wie z. B. timer_entropyd, haveged, randomsound, lässt sich die Entropie verbessern sowie bzw.
- der Entropie-Pool vergrößern, sodass mehr Zufallszahlen zur Verfügung stehen.
Mit der GNU-Software rng-tools lassen sich unter Linux und ähnlichen Betriebssystemen physikalische Zufallszahlengeneratoren einbinden.
Zusammenfassung: Gerätedateien
- Spezialdateien (special files)
- Geräte werden als Spezialdatei eingetragen
- Zugriff auf Gerät Zugriff auf eine Datei
- Schutzmechanismus wie für normale Dateien
- Blockorientierte und zeichenorientierte Geräte
Named Pipes estellen (mkfifo)
mkfifo erstellt named pipes (FIFOs) mit dem übergebenen Namen.
mkfifo [OPTION]... NAME...
Optionen
-m, --mode=MODE Setzt Zugriffsrechte mit Bitmaske (MODE)
-Z, --context=CTX Setzt den SELinux security context für jeden NAME auf CTX
Gerätedateien erzeugen (mknod)
mknod erzeugt eine Spezialdatei
mknod [-m Modus] [-mode=Modus] Name {bcu} Major Minor
mknod [-m Modus] [-mode=Modus] Pfad p
mknod erzeugt ein FIFO, eine Gerätedatei für ein zeichenorientiertes Gerät (character device) oder für ein blockorientiertes Gerät (block-device) mit dem angegebenen Namen.
Die Gerätedateien werden über die Major Device Nummern (Hauptgerätenummern) mit den entsprechenden Gerätetreibern im Kernel verbunden.
Mehrere Geräte der gleichen Art werden vom Gerätetreiber durch die Minor Device Nummern (Untergerätenummern) unterschieden.
Eine vollständige Liste aller Gerätenummern finden Sie bei den Kernelsourcen in der Datei ./src/linux/Documentation/devices.txt.
- Die verbindliche Liste aller registrierten Hauptgerätenummern befindet sich in der Includedatei <linux/major.h>.
Die Zugriffsrechte auf die Datei werden aus der Bitdifferenz von 0666 und der aktuellen umask des aufrufenden Prozesses gebildet.
Der erste Buchstabe nach dem Namen gibt den Typ der Datei an:
p | (pipe) erzeugt eine FIFO Spezialdatei (wie [../../../../ebooks/computer/betriebssysteme/linux/allgemein/unsortiert/linux_anwender_handbuch/linux_anwenderhandbuch_7-0/node79.html#mkfifo mkfifo]) |
b | (block) erzeugt eine Gerätedatei für ein (gepuffertes) blockorientiertes Gerät |
c | (character) erzeugt eine ungepufferte Gerätedatei für ein zeichenorientiertes Gerät |
u | (unbuffered) das Gleiche wie c |
Optionen
-m Modus | setzt die Rechte der Dateien auf Modus wie bei [../../../../ebooks/computer/betriebssysteme/linux/allgemein/unsortiert/linux_anwender_handbuch/linux_anwenderhandbuch_7-0/node29.html#chmod chmod] |