В книге Драйверы устройств Linux (настоятельно рекомендуется) это подробно объясняется, и вы даже можете создать модуль ядра, который делает это как пример, но в двух словах, каждый драйвер устройства имеет определенные функции, которые вызываются, когда файл открывается, закрывается, читается, записывается и т. д. «Специальные» файлы просто делают что-то особенное внутри этих функций, вместо доступа к оборудованию хранения на диске.
Например, функция записи для / dev / null
просто ничего не делает, игнорируя байты. Функция чтения для / dev / random
возвращает случайное число.
$ for i in *;do tar zcvf ${i}.tgz $i; rm -fr $i;done
$ for i in *;do tar zcvf ${i}.tgz $i; rm -fr $i;done
stresstest/
stresstest/file1
stresstest/file2
stresstest/file3
$ ll
total 4
-rw-r--r-- 1 root root 162 Jul 5 05:18 stresstest.tgz
(dir="stresstest"; tar zcvf ${dir}.tgz ${dir}; rm -rf $dir)