Типы файлов в Linux
Идея операционных систем Unix – «все является файлом». Это означает, что файлы являются основой всей работы с этой операционной системой. Эта идея применима и к Linux, поскольку она является ответвлением Unix. Существуют также файлы специального назначения, файлы устройств, файлы туннелирования, файлы сокетов и другие объекты, в которые мы записываем данные и информацию. Виды файлов linux будут рассмотрены нами, потому что Интернет делает плохо освещает эту тему.
На нашем жестком диске используют пространство несколько различных типов файлов. Когда создается файл, файловая система записывает его в определенном формате в нужное физическое место на жестком диске, например, в корневой раздел (/). Файловая система всегда используется для работы с файлами, но она не всегда записывает файлы на диск. Она может работать на лету, создавая файлы, такие как procfs, который может выполнять настройку ядра linux, или записывая файлы в оперативную память, такие как tmpfs, который находится в каталоге /tmp. Но все это не имеет значения, потому что в любом случае мы имеем дело именно с файлами.
В системе Linux не существует разницы между каталогами и файлами. Однако, папки могут объединять различные файлы, что упрощает поиск и использование файлов. Единственный способ, которым программы могут взаимодействовать с аппаратными устройствами, — это файлы, представляющие каждое аппаратное устройство и хранящиеся в каталоге dev.
Преимущество использования файлов для общей информации и оборудования заключается в том, что с ними можно использовать все распространенные утилиты Linux и интерфейсы API, что избавляет от необходимости создавать уникальные интерфейсы API для каждого устройства.
ОБЫЧНЫЕ ФАЙЛЫ
Это файлы, с которыми мы привыкли работать ежедневно и которые могут содержать текст, исполняемые инструкции программ, фотографии или другие типы данных. Это наиболее типичные системные файлы Linux. Рассмотрим краткий список связанных с ними файлов: исполняемые файлы, текстовые файлы, графические файлы, архивные записи, библиотечные файлы для программ и другие подобные типы файлов.
В режиме списка инструмент ls может определить тип файла; типичные файлы обозначаются тире, как в примере:
ls -l /bin/ | grep «^-«

Если бы мы говорили только о типах файлов и игнорировали форматы, этот пост был бы неполным. Все обычные файлы, в действительности, хранятся в определенном формате, чтобы сообщить системе, какое программное обеспечение использовать для доступа к ним.
Используя инструмент file, вы можете просмотреть форматы файлов Linux. Например:
file /bin/tar

Давайте рассмотрим обычный текстовый файл вместо того, что, по мнению системы, является исполняемым файлом:
Все популярные типы файлов могут быть распознаны этой программой. Введите file -l, чтобы увидеть все поддерживаемые форматы файлов linux.
СПЕЦИАЛЬНЫЕ ФАЙЛЫ
Специальные файлы используются для обмена данными с ядром, управления устройствами или облегчения взаимодействия между приложениями, гораздо более увлекательны. В зависимости от того, для чего они используются, эти файлы также могут быть разных видов.
Файлы устройств, называемые блочными файлами, предоставляют аппаратным компонентам буферизованный доступ. При записи на жесткий диск или флэш-устройство нет смысла записывать данные сразу после их получения. Таким образом мы просто растратим энергию и ресурс устройства. Можно подождать, пока не накопится достаточно информации, чтобы записать ее всю сразу. Эта информация собирается в буфер. Файловая система и другие инструменты могут обращаться к драйверам аппаратных устройств с помощью этих файлов. Эти файлы имеют возможность отправлять большие блоки данных все сразу.
Блочные файлы обозначаются буквой b программой ls; например, чтобы выбрать все блочные файлы из каталога /dev:
ls -l /dev/ | grep «^b»

Утилита file, которую мы рассматривали ранее, способна распознавать следующие типы файлов:
file /dev/sda

Небуферизованный доступ к ядру и аппаратным компонентам предоставляется через символьные файлы. Вы можете передавать только один символ за раз, потому что у них нет буфера. В остальном они идентичны блочным файлам и файлам устройств.
Кроме того, вы можете удалить их с помощью ls. Буква c (символ) обозначает символьные файлы:
ls -l /dev/ | grep «^c»

Символические ссылки — это файлы, которые используют имена других файлов для указания на них в системе. В Linux они могут указывать на общие файлы, папки или другие типы файлов. Они очень похожи на ярлыки Windows. Linux также поддерживает жесткие ссылки, но поскольку они реализованы на уровне файловой системы и рассматриваются как обычные файлы, они не имеют ничего общего с типами файлов. Это два отдельных файла с одинаковым содержимым, даже если они ссылаются на одно и то же место на диске.
Возвращаясь к символическим связям, Буква l (link) используется утилитой ls для их идентификации:
ls -l /dev/ | grep «^l»

С помощью утилиты ln можно создавать символические связи. Например:
ln -s file1.txt file2.txt
Чтобы убедиться, что это ссылка, используйте ls. Вы можете проверить жесткие ссылки таким же образом, чтобы определить, верно ли то, что я написал о них.
Путем маршрутизации выхода одного процесса на вход другого, туннели и именованные туннели — это файлы, которые позволяют объединить два процесса. Именованные туннели функционируют аналогично обычным туннелям и используются для связи между двумя процессами.
Буква p (pipe) обозначает следующие типы файлов linux:
ls -l /dev/ | grep «^p»

Используйте инструмент mkfifo для создания именованного туннеля:
mkfifo pipe1
echo «test test test» > pipe1
Мы построили туннель, отправили по нему данные, и оболочка перестала отвечать. Она будет ждать, пока информация не будет считана с противоположного конца туннеля. Прочитайте информацию, открыв противоположный конец туннеля.
while read line ;do echo «Data: ‘$line’ «; done<pipe1
Передавать информацию между процессами, работающими в различных условиях или даже на других компьютерах, можно с помощью файлов сокетов, которые обеспечивают прямое соединение между процессами. Это означает, что даже при общении по сети приложения могут использовать сокеты. Сокет функционирует примерно так же, как туннели, но только в обоих направлениях.
Для обозначения файлов сокетов используется буква s:
ls -l /dev/ | grep «^s»

Функция socket() языка программирования C позволяет создать сокет, который затем можно читать и записывать с помощью функций read() и write(). Но пока достаточно просто поиграть; нам не нужно разрабатывать настоящую программу. Поэтому мы воспользуемся утилитой nc. Теперь создадим сокет Unix:
nc -lU socket.sock

Подключаемся к нему с помощью другой консоли:
nc -U socket.sock
После нажатия клавиши Enter все данные, которые вы вводите на одной консоли, будут передаваться на другую; связь двусторонняя.
КАТАЛОГИ
Эти уникальные файлы позволяют организовать папки и другие файлы для более удобного просмотра и поиска. Они могут содержать любую форму файла linux, включая, конечно, обычные и специальные файлы. В Linux файлы располагаются в папках, начинающихся с корня (/).
Они обозначаются буквой d (директория):
ls -l /dev/ | grep «^d»

Команда linux mkdir может быть использована для создания каталога:
mkdir каталог1
ЗАКЛЮЧЕНИЕ
Теперь у вас есть лучшее представление о том, какие типы файлов доступны в вашей системе и почему все в Linux является файлами. Если у вас остались вопросы, вы можете задать их в комментариях. Вы можете найти дополнительную информацию о каждом типе файлов в Интернете.
