In einem Computerbetriebssystem ist eine spezielle Datei ein Dateityp, der in einem Dateisystem gespeichert ist. Eine spezielle Datei wird manchmal auch als Gerätedatei bezeichnet.
Der Zweck einer speziellen Datei besteht darin, das Gerät als Datei im Dateisystem verfügbar zu machen. Eine spezielle Datei bietet eine universelle Schnittstelle für Hardwaregeräte (und virtuelle Geräte, die vom Kernel erstellt und verwendet werden), da Tools für Datei-I/O auf das Gerät zugreifen können.
Wenn Daten aus einer speziellen Datei gelesen oder in eine spezielle Datei geschrieben werden, erfolgt die Operation sofort und unterliegt nicht den herkömmlichen Dateisystemregeln.
Unter Linux gibt es zwei Arten von Spezialdateien: Block-Spezialdatei und Zeichen-Spezialdatei.
Sperren Sie spezielle Dateien
Eine spezielle Blockdatei fungiert als direkte Schnittstelle zu einem Blockgerät. Ein Blockgerät ist jedes Gerät, das Daten-E/A in Einheiten von Blöcken durchführt.
Beispiele für spezielle Blockdateien:
-
/dev/sdxn – gemountete Partitionen von physischen Speichergeräten. Der Buchstabe x bezieht sich auf ein physisches Gerät, und die Zahl n bezieht sich auf eine Partition auf diesem Gerät. Beispielsweise ist /dev/sda1 die erste Partition auf dem ersten physischen Speichergerät.
-
/dev/loopn – Schleifengeräte. Dies sind spezielle Geräte, die es ermöglichen, eine Datei im Dateisystem als Blockgerät zu verwenden. Die Datei kann ein vollständiges eigenes Dateisystem enthalten und auf sie zugegriffen werden, als wäre sie eine gemountete Partition auf einem physischen Speichergerät. Beispielsweise kann eine ISO-Disk-Image-Datei als Loop-Gerät gemountet werden.
Wenn Sie wissen möchten, wie groß ein Block auf Ihrem System ist, führen Sie “blockdev –getbsz device” als root aus, z.
sudo blockdev --getbsz /dev/sda1
4096
In diesem Beispiel beträgt die Blockgröße 4096 Byte (4 Kibibyte).
Charakterspezifische Dateien
Eine spezielle Zeichendatei ähnelt einem Blockgerät, aber die Daten werden zeichenweise (acht Bits oder ein Byte) auf einmal geschrieben.
Beispiele für spezielle Zeichendateien:
-
/dev/stdin (Standardeingabe.)
-
/dev/stdout (Standardausgabe.)
-
/dev/stderr (Standardfehler.)
-
/dev/random (PRNG, das die Rückgabe eines Werts verzögern kann, um zusätzliche Entropie zu erhalten.)
-
/dev/urandom (PRNG, das unabhängig von der erforderlichen Entropie immer sofort einen Wert zurückgibt.)
-
/dev/null (Das Null-Gerät. Das Lesen aus dieser Datei erhält immer ein Null-Byte; das erfolgreiche Schreiben in diese Datei bewirkt nichts.)
Linux-Dateitypen
Im Linux-Kernel werden Dateitypen in der Header-Datei sys/stat.h deklariert. Der Typname, der symbolische Name und die Bitmaske für jeden Linux-Dateityp sind unten aufgeführt.
Modellname | Symbolischer Name | Bitmaske |
---|---|---|
Steckdose | S_IFSOCK | 0140000 |
Symbolischer Link | S_IFLNK | 0120000 |
Normale Datei | S_IFREG | 0100000 |
Spezielle Datei blockieren | S_IFBLK | 0060000 |
Verzeichnis | S_IFDIR | 0040000 |
Charakter-Spezialdatei | S_IFCHR | 0020000 |
FIFO (benannte Pipe) | S_IFIFO | 0010000 |
Wie kann ich feststellen, ob eine Datei etwas Besonderes ist?
Test für Block Special
In Bash gibt der Befehl „test -b file“ einen Exit-Status von 0 zurück, wenn die Datei blockspezifisch ist, oder 1, wenn die Datei einen anderen Typ hat oder nicht existiert.
test -b /dev/sda1; echo $? # check for block special, echo exit status of test
0
test -b /dev/null; echo $? # character special files are not block special
1
Test für besondere Charaktere
Um festzustellen, ob eine Datei ein Sonderzeichen ist, verwenden Sie “test -c file”:
test -c /dev/null; echo $?
0
Verwenden von stat
Sie können den Typ einer Datei auch mit stat überprüfen:
stat /dev/sda1
File: /dev/sda1 Size: 0 Blocks: 0 IO Block: 4096 block special file Device: 6h/6d Inode: 7998 Links: 1 Device type: 8,1 Access: (0660/brw-rw----) Uid: ( 0/ root) Gid: ( 6/ disk) Access: 2018-07-08 06:41:25.540000000 -0400 Modify: 2018-07-08 06:41:25.540000000 -0400 Change: 2018-07-08 06:41:25.540000000 -0400 Birth: -
stat /dev/random
File: /dev/random Size: 0 Blocks: 0 IO Block: 4096 character special file Device: 6h/6d Inode: 6518 Links: 1 Device type: 1,8 Access: (0666/crw-rw-rw-) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2018-07-08 06:41:19.676000000 -0400 Modify: 2018-07-08 06:41:19.676000000 -0400 Change: 2018-07-08 06:41:19.676000000 -0400 Birth: -
Inode, Betriebssystembegriffe, Standardeingabe (stdin), Standardausgabe (stdout)