Найти в Дзене
turn on me

Типы файлов в Linux

Философия Unix (а Linux - часть семейства Unix-подобных ОС) такова, что все взаимодействие с чем бы то ни было, сводится к взаимодействию с файлами. Поэтому есть множество различных видов файлов. Даже директории - это тоже определенный вид файлов. Из ОС Windows всем хорошо знакомы мультимедийные файлы, такие как картинки, текстовые, видео, презентации, архивы. Т.е. это файлы, которые содержат непосредственно какие-то данные. Конечно есть и другие виды файлов, но таких файлов больше всего. В Linux помимо "обычных" файлов есть и специальные, например для взаимодействия с аппаратными устройствами (процессор, клавиатура, колонки, флешки, ...), для взаимодействия с Интернетом и сетями, файлы, существующие только в ОЗУ (временные файлы) и прочие. Но обо всем по порядку Типы файлов:
* обычные
* блочные файлы - файлы аппаратных устройств
* файлы сокетов (socket)
* файлы туннелей (pipe)
* временные файлы (существующие только в ОЗУ)
* мягкие ссылки (аналог ярлыков в windows)
* директории
Оглавление
Философия Unix (а Linux - часть семейства Unix-подобных ОС) такова, что все взаимодействие с чем бы то ни было, сводится к взаимодействию с файлами. Поэтому есть множество различных видов файлов. Даже директории - это тоже определенный вид файлов.

Из ОС Windows всем хорошо знакомы мультимедийные файлы, такие как картинки, текстовые, видео, презентации, архивы. Т.е. это файлы, которые содержат непосредственно какие-то данные. Конечно есть и другие виды файлов, но таких файлов больше всего.

В Linux помимо "обычных" файлов есть и специальные, например для взаимодействия с аппаратными устройствами (процессор, клавиатура, колонки, флешки, ...), для взаимодействия с Интернетом и сетями, файлы, существующие только в ОЗУ (временные файлы) и прочие. Но обо всем по порядку

Типы файлов:
* обычные
* блочные файлы - файлы аппаратных устройств
* файлы сокетов (socket)
* файлы туннелей (pipe)
* временные файлы (существующие только в ОЗУ)
* мягкие ссылки (аналог ярлыков в windows)
* директории (папки)
* прочие

Для того, чтобы посмотреть, какие файлы есть в текущей директории Linux через терминал (командную строку в Linux), нужно ввести команду:
ls -l (не заглавная i, а строчная l)
После чего будет выведены файлы, присутствующие в директории, где мы находимся.

В первом столбце на первой позиции как раз и содержится информация о типе файла
В первом столбце на первой позиции как раз и содержится информация о типе файла

Обычные файлы

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

В ls они обозначены  дефисом
В ls они обозначены дефисом
Далее пойдут более специализированные файлы

Блочные файлы

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

В ls они обозначены буквой   b (block)
В ls они обозначены буквой b (block)

Символьные файлы

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

В ls они обозначаются буквой   с (character)
В ls они обозначаются буквой с (character)

Туннели и именованные туннели

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

Пример создания туннеля
создаем туннель:
mkfifo myPipe

В утилите ls обозначаются буквой p  (pipe)
В утилите ls обозначаются буквой p (pipe)

передаем на его вход какие-нибудь данные, например строку:
echo “test text” > myPipe

терминал "завис" в ожидании
терминал "завис" в ожидании

После создания туннеля, мы передали в него некоторые данные и оболочка стала неинтерактивной. Она будет ждать, пока данные прочтут на другом конце туннеля. Теперь нужно перенаправить данные куда-нибудь. Для этого откроем другой терминал и выведем данные.

второй терминал вывел данные, а первый терминал снова готов к вводу команд
второй терминал вывел данные, а первый терминал снова готов к вводу команд

Конечно, можно написать скрипт, чтобы он забирал данные, или наоборот клал данные в туннель, или 2 скрипта.

Файлы сокетов

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

В ls они обозначаются буквой  s (socket)
В ls они обозначаются буквой s (socket)

Пример создания сокета
Создать сокет можно функцией socket() на языке Си, а чтение из него и запись в него осуществляются системными вызовами read() и write(). Мы ограничимся возможностями утилиты nc (netcat) для создания сокета:

создали сокет и подключились к нему
создали сокет и подключились к нему
открыли второй терминал и подключились к созданному ранее сокету
открыли второй терминал и подключились к созданному ранее сокету

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

-11

Также можно наладить связь на удаленных компьютерах через сокеты, но в этом случае она будет незащищена шифрованием. Но это уже речь о сетевых сокетах, а в примере выше мы рассматривали Linux-сокеты

Символические ссылки

Указывают на другие файлы по их имени. Это аналог ярлыков в ОС Windows.

В ls они обозначаются буквой   l (link). В последнем столбце видно, на какой файл указывает символическая ссылка
В ls они обозначаются буквой l (link). В последнем столбце видно, на какой файл указывает символическая ссылка

Небольшой пример по созданию символьных (мягких) ссылок:
1. Сначала создали текстовый файл с текстом внутри.
2. Затем подождали минуту и создали мягкую ссылку.
3. Затем вывел информацию об этих файлах: как видно адрес иноды и права доступа разные у символической ссылки и исходного файла, а также время создания, а еще показывается на какой файл ссылается ссылка.
4. Далее мы удалили исходный файл и снова вывели информацию о файлах.
5. Мягкая ссылка стала красного цвета, что говорит об удалении исходного файла; при попытке считать его ничего не получилось, что было ожидаемо.

Вот основные особенности символических ссылок:
· Содержат только имя файла, а не его содержимое;
· Могут ссылаться на файлы и каталоги;
· После удаления, перемещения или переименования файла, символические ссылки становятся недействительными;
· При изменении прав доступа для исходного файла, права на ссылку останутся неизменными;
· Можно ссылаться на другие разделы диска;
· Права доступа и номер inode (индекса файла в ОС) отличаются от исходного файла

Есть еще и жесткие ссылки, в отличие от символических, указывают на область на ПЗУ. Поэтому это 2 разных файла, но с одинаковым содержимым, но об этом как-нибудь в другой раз

Директории (папки)

Специальные файлы, которые позволяют группировать другие файлы для более простой навигации и поиска. В Linux файлы организуются в директории, начиная с корня ( / ).

В ls будут обозначаются буквой  d (directory)
В ls будут обозначаются буквой d (directory)

На этом пока пока все!