Wat is een speciaal bestand?

In een computerbesturingssysteem is een speciaal bestand één type bestand dat in een bestandssysteem kan worden opgeslagen. Een speciaal bestand wordt soms ook een apparaatbestand genoemd .

Het doel van een speciaal bestand is om het apparaat als een bestand in het bestandssysteem te tonen. Een speciaal bestand biedt een universele interface voor hardwareapparaten (en virtuele apparaten gemaakt en gebruikt door de kernel), omdat hulpmiddelen voor bestands-I / O kunnen worden gebruikt om toegang te krijgen tot het apparaat.

Wanneer gegevens rood zijn van of geschreven naar een speciaal bestand, gebeurt de bewerking onmiddellijk en is deze niet onderhevig aan conventionele regels van het bestandssysteem.

In Linux zijn er twee soorten speciale bestanden: blokkeer speciale bestanden en teken speciale bestanden .

Een speciaal blokbestand fungeert als een directe interface naar een blokapparaat. Een blokapparaat is elk apparaat dat data-I / O uitvoert in eenheden van blokken.

Voorbeelden van speciale bestanden blokkeren:

  • / dev / sd xn - gekoppelde partities van fysieke opslagapparaten. De letter x verwijst naar een fysiek apparaat en het getal n verwijst naar een partitie op dat apparaat. Bijvoorbeeld, / dev / sda1 is meestal de eerste partitie op het eerste fysieke opslagapparaat.
  • / dev / loop n - loop-apparaten. Dit zijn speciale apparaten waarmee een bestand in het bestandssysteem als blokapparaat kan worden gebruikt. Het bestand kan een volledig eigen bestandssysteem bevatten en kan worden geopend alsof het een gekoppelde partitie op een fysiek opslagapparaat is. Een ISO-schijfimagebestand kan bijvoorbeeld zijn gekoppeld als een lusapparaat.

Als u wilt weten hoe groot een blok op uw systeem is, voert u " blockdev --getbsz device " als root uit, bijvoorbeeld:

 sudo blockdev --getbsz / dev / sda1 
 4096 

In dit voorbeeld is de blokgrootte 4096 bytes (4 kibibytes).

Teken speciale bestanden

Een speciaal tekenbestand lijkt op een blokapparaat, maar gegevens worden één teken (acht bits of één byte) per keer geschreven.

Voorbeelden van speciale tekens voor tekens:

  • / dev / stdin (standaardinvoer.)
  • / dev / stdout (standaarduitvoer.)
  • / dev / stderr (standaard fout.)
  • / dev / random (PRNG die het retourneren van een waarde kan vertragen om extra entropie te verwerven.)
  • / dev / urandom (PRNG die altijd onmiddellijk een waarde retourneert, ongeacht de vereiste entropie.)
  • / dev / null (Het nulapparaat. Het lezen van dit bestand krijgt altijd een lege byte, schrijven naar dit bestand doet niets.)

Linux bestandstypes

In de Linux-kernel worden bestandstypen gedeclareerd in het headerbestand sys / stat.h. De typenaam, symbolische naam en bitmask voor elk Linux-bestandstype worden hieronder weergegeven.

Hoe weet ik of een bestand speciaal is?

Test voor blok speciaal

In bash retourneert het commando " test -b file " een exit-status van 0 als het bestand block special is, of 1 als het bestand van een ander type is of niet bestaat.

 test -b / dev / sda1; echo $? # check voor blok speciaal, echo exit-status van test 
 0 
 test -b / dev / null; echo $? # character special files zijn niet block special 
 1 

Test voor karakter speciaal

Gebruik " test -c file " om te bepalen of een bestand karakter-speciaal is:

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

Stat gebruiken

U kunt ook het type van een bestand controleren met stat :

 stat / dev / sda1 
 Bestand: / dev / sda1 Grootte: 0 Blokken: 0 IO Block: 4096 block special file Apparaat: 6h / 6d Inode: 7998 Links: 1 Apparaattype: 8, 1 Toegang: (0660 / brw-rw ----) Uid : (0 / root) Gid: (6 / disk) Toegang: 2018-07-08 06: 41: 25.540000000 -0400 Wijzigen: 2018-07-08 06: 41: 25.540000000 -0400 Wijzigen: 2018-07-08 06: 41: 25.540000000 -0400 Geboorte: - 
 stat / dev / willekeurig 
 Bestand: / dev / random Grootte: 0 Blokken: 0 IO Block: 4096 tekens speciaal bestand Apparaat: 6h / 6d Inode: 6518 Links: 1 Apparaattype: 1, 8 Toegang: (0666 / crw-rw-rw-) Uid: (0 / root) Gid: (0 / root) Toegang: 2018-07-08 06: 41: 19.676000000 -0400 Wijzigen: 2018-07-08 06: 41: 19.676000000 -0400 Wijzigen: 2018-07-08 06:41 : 19.676000000 -0400 Geboorte: - 

Inode, Operating systeemtermen, Standaard input (stdin), Standaard output (stdout)