Для удобства в Linux существует несколько различных типов файлов:
- обычные файлы;
- каталоги;
- жесткие и символические ссылки;
- файлы блочных устройств;
- файлы символьных устройств;
- файлы loop-устройств;
- локальные сокеты;
- именованные каналы.
Обычные файлы представляют собой набор байтов, содержащих какую-либо информацию и хранящихся на каком-то носителе. Если вы ранее работали на компьютере, то наверняка уже сталкивались с ними в виде текстовых, графических и других файлов.
Каталоги хранят в себе ссылки на другие файлы и каталоги. У папок существует две специальные ссылки, которые обозначаются как . и … Они указывают на саму папку и родительский каталог. Корневой каталог не имеет родительского, однако, если вы попытаетесь перейти по ссылке .. из корневого каталога, система не выдаст ошибку.
Жесткие и символические ссылки позволяют создавать несколько видимостей одного файла при том, что реально будет существовать только одна копия, на которую все остальные будут только ссылаться. Отличие между жесткими и символическими ссылками состоит в том, что символическая ссылка привязана только к пути, а жесткая – непосредственно к файлу, что реализовано средствами файловой системы, и будет оставаться действительной даже при перемещении файла. Это напоминает ситуацию с телефоном: от человека можно получить информацию, позвонив ему на домашний телефон (символическая ссылка); если человека часто не бывает дома, то для достижения того же результата ему можно позвонить на мобильный (жесткая ссылка).
Файлы блочных и символьных устройств играют роль посредников между программами пользователя и аппаратным обеспечением. Эти файлы управляются драйверами устройств, на которые создают ссылки эти драйверы. Ядро операционной системы получает запрос на ввод или вывод по отношению к файлу блочного или символьного устройства и передает информацию соответствующему драйверу, который, в свою очередь, взаимодействует с аппаратным обеспечением.
Loop-устройства представляют особый интерес, так как позволяют выдавать фактически не существующий носитель данных за существующий. Классическим примером является монтирование образа диска как реального устройства. Обычно loop-устройства находятся в каталоге /dev под названиями loop0, loop1 и т. д. В некоторых источниках loop-устройства также называют кольцевыми и петлевыми.
Локальные сокеты являются средством взаимодействия процессов. В противоположность сетевым, локальные сокеты доступны только локальным, то есть запущенным на одной машине, процессам. Именованные каналы имеют то же назначение.