В GNU/Linux, как и в других Unix-подобных системах, понимание типа файла не основывается на его расширении, как в Windows. Расширение, заключающееся в нескольких символах после точки, не играет роли.

Unix-подобные операционные системы не контролируют расширения файлов. Это означает, что связь между расширением файла и программой, которой будет обрабатываться файл, устанавливается обычно с помощью стороннего ПО. Приложения сами анализируют структуру файла, игнорируя его расширение.

Именно поэтому среди атрибутов файлов, сохраняемых в системах на базе ядра Linux, нет данных о типах информации в файлах. Там содержатся детали о более значительных различиях, поскольку в Unix-подобных системах все объекты представляются как файлы. Между объектами может быть значительное разнообразие. Поэтому тип файла в Linux обозначает скорее тип объекта, а не данных, как в Windows.

В системе GNU/Linux можно выделить следующие типы файлов: обычные файлы, каталоги, символьные ссылки, блочные устройства, символьные устройства, сокеты, каналы. Каждый из них обозначается уникальным символом, что будет полезно при изучении командной оболочки Bash.

Типы файлов Linux

Обычные файлы (-)

В эту категорию попадают файлы, которые сами по себе содержат полезные данные. Linux не различает, является файл текстовым, исполняемым или изображением; в любом случае это будет обычный (regular) файл, обозначаемый знаком минус "-". Остальные типы файлов считаются специальными (special).

Каталоги (d)

В Linux каталог является файлом, который хранит список имен вложенных файлов и других каталогов.

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

В Unix-подобных системах один файл может быть доступен под разными именами и/или в различных каталогах, но все они будут связаны с одним индексным дескриптором (что реализуется механизмом жестких ссылок).

Файлы должны быть включены в каталоги, ведь иначе они окажутся недоступны, так как система не будет содержать записи о них.

Символьные ссылки (l)

Символьная ссылка — это файл, содержащий путь к другому файлу по его имени, а не по индексному дескриптору.

При обращении к символьной ссылке осуществляется открытие файла, на который она указывает. Это аналог ярлыков в Windows.

Даже если исходный файл удален, символьная ссылка продолжит существовать, указывая на несуществующий файл.

Символьные ссылки не включают атрибуты файлов, на которые они указывают, они имеют собственные атрибуты.

Символьные (c) и блочные устройства (b)

Файлы устройств служат для взаимодействия с оборудованием компьютера, например, с дисками, принтерами и терминалами. При обращении к файлу устройства запрос передается ядром ОС к драйверу данного устройства.

Символьные устройства обрабатываются последовательно (символ за символом), например, терминал.

Блочные устройства позволяют считывать и записывать данные произвольно, блоками фиксированного размера. Примером служит жесткий диск.

Сокеты (s) и каналы (p)

Чтобы понять, что представляют собой каналы и сокеты, необходимо разобраться с механизмом работы процессов в ОС. Эти оба типа файлов предназначены для организации их взаимодействия; пользователи с ними редко имеют дело.

Основное различие заключается в том, что канал является однонаправленным — в нем один процесс передает данные другому, но не наоборот. Сокеты же позволяют обмениваться данными в обоих направлениях.

Канал представлен в файловой структуре только если имеет имя. Безымянные каналы существуют исключительно внутри ядра Linux.

Вопросы для самопроверки:

  1. Почему в Unix-подобных системах расширение файла не играет роли?
  2. Перечислите основные типы файлов в GNU/Linux.
  3. Как обозначаются обычные файлы в системе GNU/Linux?
  4. Какая функция у символьных ссылок в Linux?
  5. Как различаются символьные и блочные устройства в GNU/Linux?
  6. В чем основное различие между каналами и сокетами?

Программа курса:

  1. Описание курса
  2. История операционной системы Linux
  3. Основы лицензии GNU GPL и её преимущества
  4. Функции и структура ядра Linux-систем
  5. Структура и каталоги файловой системы Linux
  6. Основные типы файлов в системе Linux
  7. Интерфейс командной строки в Linux
  8. Командная оболочка Bash в Linux
  9. Использование параметров команд в Bash
  10. Использование Ctrl+C, Ctrl+D и Ctrl+Z
  11. Автодополнение и история команд в Bash
  12. Перенаправление ввода и вывода в Bash
  13. Документация Linux и Man-страницы
  14. Абсолютная и относительная адресация в Linux
  15. Команда ls - как просматривать каталоги в Linux
  16. Копирование, перемещение и удаление в Linux
  17. Жесткие и символьные ссылки в Linux
  18. Создание жестких и символических ссылок в Linux
  19. Права доступа к файлам и каталогам в Linux
  20. Изменение прав доступа к файлам с помощью chmod
  21. Использование шаблонов имен файлов в Linux
  22. Поиск файлов в Linux с помощью команды find
  23. Использование команды sudo в Linux
  24. Управление пакетами с помощью APT в Linux