Какво е специален файл?

В компютърна операционна система специален файл е един вид файл, който може да бъде съхранен във файлова система. Специален файл понякога се нарича и файл с устройство .

Целта на специален файл е да изложи устройството като файл във файловата система. Специален файл осигурява универсален интерфейс за хардуерни устройства (и виртуални устройства, създадени и използвани от ядрото), тъй като за достъп до устройството могат да се използват инструменти за I / O файл.

Когато данните са червени от или записани в специален файл, операцията се случва незабавно и не подлежи на конвенционални правила на файловата система.

В Linux има два вида специални файлове: блокирайте специални файлове и специални файлове със символи .

Специалният блок блок действа като директен интерфейс към блоково устройство. Блок устройство е всяко устройство, което изпълнява входни / изходни данни в блокове.

Примери за специални файлове в блока:

  • / dev / sd xn - монтирани дялове на физически устройства за съхранение. Буквата x се отнася за физическо устройство, а числото n се отнася за дял на това устройство. Например, / dev / sda1 обикновено е първият дял на първото физическо устройство за съхранение.
  • / dev / loop n - loop устройства. Това са специални устройства, които позволяват даден файл в файловата система да се използва като блок устройство. Файлът може да съдържа собствена собствена файлова система и да бъде достъпен, както ако е монтиран дял на физическо устройство за съхранение. Например, ISO файл с изображение на диска може да бъде монтиран като устройство с линия.

Ако искате да знаете колко голям е блокът във вашата система, изпълнете " blockdev --getbsz device " като root, например:

 sudo blockdev --getbsz / dev / sda1 
 4096 

В този пример размерът на блока е 4096 байта (4 kibibytes).

Специални файлове със знаци

Специалният файл със символи е подобен на блоково устройство, но данните се записват по един знак (осем бита или един байт) едновременно.

Примери за специални файлове със знаци:

  • / dev / stdin (стандартен вход.)
  • / dev / stdout (стандартен изход.)
  • / dev / stderr (Стандартна грешка.)
  • / dev / random (PRNG, който може да забави връщането на стойност, за да придобие допълнителна ентропия.)
  • / dev / urandom (PRNG, която винаги връща стойност веднага, независимо от изискваната ентропия.)
  • / dev / null (Нулевото устройство. Четенето от този файл винаги получава нулев байт; записването в този файл успешно не прави нищо.)

Типове файлове на Linux

В ядрото на Linux типовете файлове са декларирани в заглавния файл sys / stat.h. Името на типа, символното име и битова маска за всеки тип файл с Linux са изброени по-долу.

Как мога да разбера дали даден файл е специален?

Тест за специален блок

В bash командата " test -b file " връща статус на изход 0, ако файлът е специален, или 1, ако файлът е от друг тип или не съществува.

 тест -b / dev / sda1; echo $? # проверява за специален блок, ехо излизане от теста 
 0 
 тест -b / dev / null; echo $? # характер специални файлове не са специални блок 
 1 

Тест за специален характер

За да определите дали даден файл е специален, използвайте " test -c file ":

 тест -c / dev / null; echo $? 
 0 

Използване на stat

Можете също да проверите типа на файла с помощта на stat :

 stat / dev / sda1 
 Файл: / dev / sda1 Размер: 0 Блокове: 0 Блок IO: 4096 блок специален файл Устройство: 6h / 6d Индекс: 7998 Връзки: 1 Тип устройство: 8, 1 Достъп: (0660 / brw-rw ----) Uid : (0 / root) Gid: (6 / диск) Достъп: 2018-07-08 06: 41: 25.540000000 -0400 Промяна: 2018-07-08 06: 41: 25.540000000 -0400 Промяна: 2018-07-08 06: 41: 25.540000000 -0400 Раждане: - 
 stat / dev / random 
 Файл: / dev / random Размер: 0 Блокове: 0 IO Блок: 4096 знака специален файл Устройство: 6h / 6d Inode: 6518 Връзки: 1 Тип устройство: 1, 8 Достъп: (0666 / crw-rw-rw-) Uid: (0 / root) Gid: (0 / root) Достъп: 2018-07-08 06: 41: 19.676000000 -0400 Промяна: 2018-07-08 06: 41: 19.676000000 -0400 Промяна: 2018-07-08 06:41 : 19.676000000 -0400 Раждане: - 

Inode, термини на операционната система, стандартен вход (stdin), стандартен изход (stdout)