|
|
Zeile 8: |
Zeile 8: |
|
| |
|
| == Gerätedateien == | | == Gerätedateien == |
| Die Dateien im '''/dev''' Verzeichnis sind, wie bereits angedeutet "Pipelines" zur Hardware des Computers.
| | [[Gerätedatei]] |
| | |
| 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:
| |
| | |
| {| class="wikitable sortable"
| |
| |-
| |
| ! | Gerätedatei
| |
| !colspan="2" | | Bedeutung
| |
| |-
| |
| | | '''sdasdbsdcsdd'''
| |
| | | erstezweitedrittevierte
| |
| | | SCSI/SATA-Festplatte
| |
| |-
| |
| | | '''sda1sda2sda3sda4'''
| |
| | | erstezweitedrittevierte
| |
| | | Festplattenpartition auf der ersten SCSI/SATA-Festplatte
| |
| |-
| |
| | | '''hda'''
| |
| | colspan="2" | wie s'''da''', nur für IDE-Festplatten
| |
| |-
| |
| | | '''ttyS0ttyS1'''
| |
| | colspan="2" | Erste und zweite serielle Schnittstelle (COM1 und COM2 unter DOS)
| |
| |-
| |
| | | '''audiodspsndstatmidi00'''
| |
| | colspan="2" | Zugriff auf die Soundblasterkarte
| |
| |-
| |
| | | '''psaux'''
| |
| | colspan="2" | Zugriff auf die PS/2 Schnittstelle
| |
| |-
| |
| | | '''lp0lp1lp2'''
| |
| | colspan="2" | Zugriff auf die parallele Schnittstelle
| |
| |-
| |
| | | '''fd0'''
| |
| | colspan="2" | 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 ====
| |
| {| class="wikitable sortable"
| |
| |-
| |
| | | '''/dev/zero'''
| |
| | | liefert unendlich vielen Nullen
| |
| |-
| |
| | | '''/dev/null'''
| |
| | | schluckt alle Daten die es erhält
| |
| |-
| |
| | | '''/dev/random'''
| |
| | | liefert [http://de.wikipedia.org/wiki/Zufallszahlengenerator Zufallszahlen] von hoher Qualität
| |
| |-
| |
| | | '''/dev/urandom'''
| |
| | | liefert unendlich viele [http://de.wikipedia.org/wiki/Zufallszahlengenerator Zufallszahlen]
| |
| | |
| |-
| |
| |}
| |
| | |
| ===== /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.
| |
| * 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 NUL.
| |
| * 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 /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 ([http://de.wikipedia.org/wiki/End_of_File 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 [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:
| |
| | |
| $ 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-[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 | ...
| |
| | |
| Ä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
| |
| | |
| 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.
| |
| * 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 [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 /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 /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 [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 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:
| |
| | |
| [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.
| |
| | |
| Der Zufallsgenerator sammelt [http://de.wikipedia.org/w/index.php?title=Umgebungsrauschen&action=edit&redlink=1 Umgebungsrauschen] von [http://de.wikipedia.org/wiki/Gerätetreiber Gerätetreibern] und anderen Quellen in einem [http://de.wikipedia.org/wiki/Entropie_%28Informationstheorie%29 Entropiepool].
| |
| * Der Generator speichert auch eine Abschätzung über die Anzahl der [http://de.wikipedia.org/wiki/Bit 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 [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 /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]).
| |
| | |
| 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.
| |
| | |
| === /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 [http://de.wikipedia.org/wiki/Pseudozufall 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 [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 ====
| |
| udev ersetzt seit dem Kernel 2.6 das früher genutzte [http://de.wikipedia.org/wiki/Devfs devfs]-Dateisystem, dessen Aufgaben es damit übernimmt.
| |
| | |
| Genauso wie devfs verwaltet udev das /dev-Verzeichnis, welches die speziellen [http://de.wikipedia.org/wiki/Gerätedatei Gerätedateien] enthält, um von Programmen aus auf die vom System zur Verfügung gestellten Geräte zuzugreifen.
| |
| | |
| Mit der Einführung von udev waren sowohl udev als auch devfs im Kernel enthalten.
| |
| * Seit Ende Juni 2006 ist nur noch udev enthalten, devfs wurde vollständig entfernt.
| |
| | |
| ===== Arbeitsweise =====
| |
| '''udev''' überwacht und wertet [http://de.wikipedia.org/wiki/Hot-Plug hotplug]-Ereignisse aus.
| |
| | |
| Finden sich dort Informationen über ein neu angeschlossenes Gerät, werden zusätzliche zu diesem Gerät vorhandene Informationen dem [http://de.wikipedia.org/w/index.php?title=Sysfs&action=edit&redlink=1 sysfs]-Dateisystem entnommen und eine neue Gerätedatei im /dev-Verzeichnis erzeugt.
| |
| | |
| Dabei ist der für die spezielle Datei verwendete Name und die [http://de.wikipedia.org/wiki/Dateiberechtigung Zugriffsberechtigung] frei durch Regeln konfigurierbar.
| |
| | |
| ===== Konfiguration =====
| |
| Installiert man udev, so findet man die Standardregeln unter /etc/udev/rules.d/50-udev.rules.
| |
| | |
| Um die eigenen Regeln anwenden zu können, sollte man diese Datei nicht verändern, sondern eine neuere mit kleinerer Nummer erzeugen, zum Beispiel /etc/udev/rules.d/10-udev.rules.
| |
| | |
| Somit ist gewährleistet, dass diese Regeln zuerst erkannt werden.
| |
| * Wurde eine Regel gefunden, so wird diese, und auch jede passende folgende, angewandt.
| |
| | |
| ===== Vorteile =====
| |
| Im Unterschied zu devfs, welches im Linux-Kernel selbst integriert ist, arbeitet udev im [http://de.wikipedia.org/wiki/Userspace userspace], wird also als normales Programm gestartet.
| |
| | |
| Die Verwaltung und Namensgebung der angeschlossenen Geräte liegt dadurch nicht mehr beim Kernel und ist somit einfacher konfigurierbar.
| |
| | |
| Weitere Vorteile:
| |
| * die Zuordnung von Geräten ist eindeutig – es entstehen keine Probleme mehr, wenn man z. B.
| |
| * die Reihenfolge von zwei angeschlossenen USB-Druckern ändert
| |
| * die Benennung der Geräte kann durch den Nutzer gewählt werden; sie bleibt beständig
| |
| * für die Ermittlung der Gerätenamen können beliebige Verfahren zur Anwendung kommen, neben statischen Listen und Regeln z. B.
| |
| * auch die Abfrage einer externen Datenbank, wodurch sich beispielsweise Geräte innerhalb eines Unternehmensnetzwerkes - durch ihre Seriennummer identifiziert - einheitlich verhalten
| |
| * die Benennung ist [http://de.wikipedia.org/wiki/Linux_Standard_Base Linux-Standard-Base]-konform
| |
| | |
| ===== Nachteile =====
| |
| Ein beabsichtigter Nachteil von udev besteht darin, dass es im Gegensatz zu devfs beim Aufruf eines /dev-Knotens nicht automatisch die entsprechenden [http://de.wikipedia.org/wiki/Gerätetreiber Gerätetreiber] lädt.
| |
| | |
| Funktioniert beim Einstecken eines Gerätes HotPlug nicht richtig und laden die benötigten Treiber nicht, können diese nicht mit udev nachgeladen werden.
| |
|
| |
|
| == Anhang == | | == Anhang == |