Философия Unix (а Linux - часть семейства Unix-подобных ОС) такова, что все взаимодействие с чем бы то ни было, сводится к взаимодействию с файлами. Поэтому есть множество различных видов файлов. Даже директории - это тоже определенный вид файлов.
Из ОС Windows всем хорошо знакомы мультимедийные файлы, такие как картинки, текстовые, видео, презентации, архивы. Т.е. это файлы, которые содержат непосредственно какие-то данные. Конечно есть и другие виды файлов, но таких файлов больше всего.
В Linux помимо "обычных" файлов есть и специальные, например для взаимодействия с аппаратными устройствами (процессор, клавиатура, колонки, флешки, ...), для взаимодействия с Интернетом и сетями, файлы, существующие только в ОЗУ (временные файлы) и прочие. Но обо всем по порядку
Типы файлов:
* обычные
* блочные файлы - файлы аппаратных устройств
* файлы сокетов (socket)
* файлы туннелей (pipe)
* временные файлы (существующие только в ОЗУ)
* мягкие ссылки (аналог ярлыков в windows)
* директории (папки)
* прочие
Для того, чтобы посмотреть, какие файлы есть в текущей директории Linux через терминал (командную строку в Linux), нужно ввести команду:
ls -l (не заглавная i, а строчная l)
После чего будет выведены файлы, присутствующие в директории, где мы находимся.
Обычные файлы
Это файлы, хранящие в себе информацию - обычные мультимедийные файлы. У таких файлов обычно есть расширение, оно нужно, чтобы ОС знала через какую программу нужно открывать файл.
При выводе содержания директории командой ls -l они обозначаются начальной чертой. На слайде ниже я отфильтровал вывод, чтобы показывались только обычные файлы.
Далее пойдут более специализированные файлы
Блочные файлы
Это файлы устройств, которые обеспечивают буферизованный доступ к аппаратным компонентам. При записи данных на жесткий диск или на флешку нет смысла записывать данные сразу же после их поступления. Рациональнее подождать пока наберется достаточное количество данных а потом записать их за один раз. Эти данные и собираются в буфере. С помощью таких файлов, файловая система и другие утилиты могут обращаться к драйверам аппаратных устройств.
Символьные файлы
Это не буферизованные файлы, которые позволяют обращаться к ядру или к аппаратным компонентам. Они позволяют передавать данные по 1 байту за раз, а в целом это такие же файлы устройств, как и блочные.
Туннели и именованные туннели
Туннели позволяют связать процессы перенаправив вывод одного на вход другого. Именованные туннели используются для связи между 2 процессами и работают, как и обычные туннели.
Пример создания туннеля
создаем туннель:
mkfifo myPipe
передаем на его вход какие-нибудь данные, например строку:
echo “test text” > myPipe
После создания туннеля, мы передали в него некоторые данные и оболочка стала неинтерактивной. Она будет ждать, пока данные прочтут на другом конце туннеля. Теперь нужно перенаправить данные куда-нибудь. Для этого откроем другой терминал и выведем данные.
Конечно, можно написать скрипт, чтобы он забирал данные, или наоборот клал данные в туннель, или 2 скрипта.
Файлы сокетов
Это файлы, обеспечивающие прямую связь между процессами, которые могут быть запущены в разных средах или даже на разных машинах. С помощью них можно обмениваться данными по сети. По сути, сокет работает также как туннели, но в обе стороны.
Пример создания сокета
Создать сокет можно функцией socket() на языке Си, а чтение из него и запись в него осуществляются системными вызовами read() и write(). Мы ограничимся возможностями утилиты nc (netcat) для создания сокета:
Теперь оба терминала готовы к работе, вводя какой-нибудь текст в любом из них, после нажатия Enter он тут же отобразится в другом терминале, т.к. оба читают и пишут в один и тот же сокет
Также можно наладить связь на удаленных компьютерах через сокеты, но в этом случае она будет незащищена шифрованием. Но это уже речь о сетевых сокетах, а в примере выше мы рассматривали Linux-сокеты
Символические ссылки
Указывают на другие файлы по их имени. Это аналог ярлыков в ОС Windows.
Небольшой пример по созданию символьных (мягких) ссылок:
1. Сначала создали текстовый файл с текстом внутри.
2. Затем подождали минуту и создали мягкую ссылку.
3. Затем вывел информацию об этих файлах: как видно адрес иноды и права доступа разные у символической ссылки и исходного файла, а также время создания, а еще показывается на какой файл ссылается ссылка.
4. Далее мы удалили исходный файл и снова вывели информацию о файлах.
5. Мягкая ссылка стала красного цвета, что говорит об удалении исходного файла; при попытке считать его ничего не получилось, что было ожидаемо.
Вот основные особенности символических ссылок:
· Содержат только имя файла, а не его содержимое;
· Могут ссылаться на файлы и каталоги;
· После удаления, перемещения или переименования файла, символические ссылки становятся недействительными;
· При изменении прав доступа для исходного файла, права на ссылку останутся неизменными;
· Можно ссылаться на другие разделы диска;
· Права доступа и номер inode (индекса файла в ОС) отличаются от исходного файла
Есть еще и жесткие ссылки, в отличие от символических, указывают на область на ПЗУ. Поэтому это 2 разных файла, но с одинаковым содержимым, но об этом как-нибудь в другой раз
Директории (папки)
Специальные файлы, которые позволяют группировать другие файлы для более простой навигации и поиска. В Linux файлы организуются в директории, начиная с корня ( / ).
На этом пока пока все!