Was ist eine spezielle Datei?

In einem Computer-Betriebssystem ist eine spezielle Datei ein Dateityp, der in einem Dateisystem gespeichert werden kann. 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 vom Kernel erstellte und verwendete virtuelle Geräte), da Tools für Datei-E / A für den Zugriff auf das Gerät verwendet werden können.

Wenn Daten aus einer speziellen Datei rot sind oder in eine spezielle Datei geschrieben werden, wird die Operation sofort ausgeführt und unterliegt keinen herkömmlichen Dateisystemregeln.

In Linux gibt es zwei Arten von Spezialdateien: Blockieren von Spezialdateien und Zeichendateien .

Eine spezielle Blockdatei dient als direkte Schnittstelle zu einem Blockgerät. Ein Blockgerät ist ein beliebiges Gerät, das Daten-E / A in Blockeinheiten ausführt.

Beispiele für spezielle Blockdateien:

  • / dev / sd xn - 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 normalerweise die erste Partition auf der ersten physischen Speichereinheit.
  • / dev / loop n- loop-Geräte. Hierbei handelt es sich um spezielle Geräte, mit denen eine Datei im Dateisystem als Blockgerät verwendet werden kann. Die Datei kann ein ganzes Dateisystem enthalten und auf sie zugreifen, als wäre sie eine gemountete Partition auf einem physischen Speichergerät. Zum Beispiel kann eine ISO-Disk-Image-Datei als Loop-Gerät eingehängt werden.

Wenn Sie wissen möchten, wie groß ein Block in Ihrem System ist, führen Sie " blockdev --getbsz device " als root aus, zB:

 sudo blockdev --getbsz / dev / sda1 
 4096 

In diesem Beispiel beträgt die Blockgröße 4096 Byte (4 Kibibytes).

Zeichendateien

Eine spezielle Zeichendatei ähnelt einem Blockgerät, aber die Daten werden jeweils um ein Zeichen (acht Bits oder ein Byte) geschrieben.

Beispiele für Zeichendateien:

  • / dev / stdin (Standardeingabe.)
  • / dev / stdout (Standardausgabe.)
  • / dev / stderr (Standardfehler.)
  • / dev / random (PRNG, der 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 einen Wert zurückgibt.)
  • / dev / null (Das Nullgerät. Beim Lesen aus dieser Datei wird immer ein Nullbyte abgerufen. Das Schreiben in diese Datei führt zu keinem Erfolg.)

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.

Wie kann ich feststellen, ob eine Datei speziell ist?

Test auf Blockspezial

In Bash gibt der Befehl " test -b file " den Exit-Status 0 zurück, wenn die Datei blockspezifisch ist, oder 1, wenn die Datei von einem anderen Typ ist oder nicht vorhanden ist.

 test -b / dev / sda1; echo $? # Auf Block-Spezial prüfen, Echo-Exit-Status des Tests 
 0 
 test -b / dev / null; echo $? # -Zeildateien sind keine Sonderzeichen 
 1 

Testen Sie die Charaktereigenschaften

Verwenden Sie " test -c file ", um festzustellen, ob eine Datei speziell für Zeichen ist.

 test -c / dev / null; echo $? 
 0 

Verwenden von stat

Sie können den Dateityp auch mit stat überprüfen:

 stat / dev / sda1 
 Datei: / dev / sda1 Größe: 0 Blöcke: 0 IO Block: 4096 Block-Spezialdatei Gerät: 6h / 6d Inode: 7998 Links: 1 Gerätetyp: 8, 1 Zugriff: (0660 / brw-rw ----) Uid : (0 / root) Gid: (6 / Platte) Zugriff: 2018-07-08 06: 41: 25.540000000 -0400 Modifikation: 2018-07-08 06: 41: 25.540000000 -0400 Änderung: 2018-07-08 06: 41: 25.540000000 -0400 Geburt: - 
 stat / dev / zufällig 
 Datei: / dev / random Größe: 0 Blöcke: 0 IO Block: 4096- Zeichen-Spezialdatei Gerät: 6h / 6d Inode: 6518 Links: 1 Gerätetyp: 1, 8 Zugriff: (0666 / crw-rw-rw-) Uid: (0 / root) Gid: (0 / root) Zugriff: 2018-07-08 06: 41: 19.676000000 -0400 Modifizieren: 2018-07-08 06: 41: 19.676000000 -0400 Änderung: 2018-07-08 06:41 : 19.676000000 -0400 Geburt: - 

Inode, Betriebssystembegriffe, Standardeingabe (stdin), Standardausgabe (stdout)