Расскажите о типах файлов в ос linux

Обновлено: 03.07.2024

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

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

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

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

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

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

Каталоги (d)

В Linux каталог представляет собой такой тип файла, данными которого является список имен других файлов и каталогов, вложенных в данный каталог. Напрямую, то есть через какой-либо редактор, пользователь не может редактировать данные файла-каталога. Редактированием занимается ядро операционной системы, получая, в том числе от пользователя, команды создания файла, удаления и др.

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

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

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

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

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

Выполнение символьной ссылки приводит к открытию файла, на который она указывает. Это аналог ярлыков в операционной системе Windows.

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

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

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

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

К символьным устройствам обращение происходит последовательно (символ за символом). Примером символьного устройства может служить терминал.

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

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

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

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

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

Команда file

Хотя выше было сказано, что Линукс не делает предположение о типе данных в обычном файле, есть специальная утилита, которая выполняет эту задачу, – программа file. Для этого она анализирует начало содержимого файла и находит в нем специальные "сигналы", характерные для определенного типа – бинарного файла, текстового, изображения и др.

На скриншоте также показано, что расширение для программы file безразлично. Файл flag – копия flag.jpg, и программа успешно его идентифицировала как изображение.

Команда file имеет множество различных ключей.

В примере файл 2020.ods является символьной ссылкой на файл, находящийся в другом каталоге, о чем нам говорит команда file без ключей. С помощью ключа -L мы можем узнать тип файла, на который ссылается файл-ссылка.

Курс с ответами к заданиям и дополнительными уроками:
android-приложение, pdf-версия.

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

Существует несколько типов файлов:
· обычные файлы;
· каталоги;
· сокеты;
· файлы байт-ориентированных (символьных) устройств;
· файлы блочно-ориентированных (блочных) устройств;
· именованные каналы;
· символьные ссылки.
Обычные файлы (-)
Обычный файл – это файл, в котором хранится информация, которая сама по себе представляет ценность для операционной системы. Это может быть текст, изображения, архивы, файлы библиотек, исполняемые файлы и так далее.
Каталоги (d)
Каталоги – это файлы, которые представляют собой списки имен других системных файлов и каталогов. Именно здесь осуществляется связь между именем файла и его индексным дескриптором. Это значит, что если один и тот же файл может находиться в разных каталогах под разными именами, то он все равно будет связан с одним индексным дескриптором.
В Linux также имеются специальные файлы устройства. Они содержат данные, необходимые системе для интеграции с физическими устройствами, такими как дисководы, диски, принтеры и т.д.
Файлы блочного устройства (b)
Это файлы, которые обеспечивают интерфейс к реальным или виртуальным физическим блочным устройствам в виде файла. Доступ к блочному устройству осуществляется как к массиву байтов. Процесс взаимодействия между системой и устройствами происходит на основе обмена блоками данных. Это чаще всего устройства произвольного доступа – есть возможность указать, из какого именно места должен быть записан или прочитан блок данных. к блочным устройствам относятся:
· жесткий диск;
· СD-ROM;
· RAM IDE SCSI-диски;
· USB-накопители.
Файлы символьного устройства (с)
Это файлы, которые обеспечивает интерфейс к реальным или виртуальным физическим устройствам в результате посимвольного обмена информации. Доступ к символьному устройству осуществляется как к линейной последовательности байтов. Устройства этого вида, как правило, не имеют произвольного доступа, запись и чтение данных не буферизуются. Примеры символьных устройств:
· модем;
· клавиатура;
· телетайп/терминал;
· стример.
Доменное гнездо, или сокет (s)
Сокетом называется программный интерфейс, благодаря которому осуществляется межпроцессное взаимодействие двух никак не связанных между собой процессов. Существует большое количество разновидностей сокетов. Например, доменные сокеты Unix используются для взаимосвязи на локальном сервере. В то время как network-сокеты могут использовать пару из хост-имени и порта для идентификации «цели» взаимодействия, доменные сокеты используют для этих целей специальный файл, который находится в файловой системе.
Именованный канал (pipe)
Как и сокеты, именованные каналы обеспечивают связь двух процессов, которые выполняются на одном компьютере. Эти каналы называются каналами FIFO (First In, First Out).
Ссылки (l)
В Linux-системах есть файлы-ссылки двух типов: символические и жесткие. Жесткая ссылка прямая, ведет непосредственно к индексному дескриптору файла. Символическая или «мягкая» ссылка указывает на название файла или его псевдоним. Файл, адресуемый символической ссылкой, и сама ссылка – это разные объекты файловой системы.

linux-types-of-files

Разбираем файловую систему до мелочей, проделываем различные трюки с файлами на нашем авторском курсе «Администрирование Linux. Базовый уровень».

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

Пространство нашего жесткого диска занято файлами разных типов. Например, взять даже наш корневой раздел (/), при создании файла, файловая система записывает его в определенном формате на нужное физическое место жесткого диска. Всегда, для работы с файлами используется файловая система, но не всегда она записывает файлы на диск, файловая система может работать на лету, генерируя файлы, например, как procfs, с помощью которой может быть выполнена настройка ядра linux или записывать файлы в оперативную память, как tmpfs расположенная в папке /tmp. Но все это не имеет значения, ведь в любом случае мы имеем дело именно с файлами.

В системе Linux нет различий между каталогами и файлами. Но каталоги могут объединять другие файлы в группы, чтобы их было легче найти и использовать. Все аппаратные устройства представлены в виде файлов и находятся в каталоге dev, только через эти файлы программы могут работать с ними.

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

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

Файлы в операционной системе Linux можно поделить на три основных типа:

  • Обычные файлы, для хранения информации
  • Специальные файлы - для устройств и туннелей
  • Директории

Дальше рассмотрим более подробно эти типы файлов linux.

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

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

  • Текстовые файлы
  • Исполняемые файлы
  • Файлы изображений
  • Файлы архивов
  • Файлы библиотек программ
  • И другие подобные типы

Утилита ls может определять тип файла в режиме списка, обычные файлы обозначаются черточкой, например:

files1

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

Посмотреть форматы файлов linux можно с помощью утилиты file. Например:

files2

Система сообщила что это исполняемый файл, а теперь посмотрим обычный, текстовый:

files3

Утилита умеет распознавать все известные форматы файлов. Чтобы узнать вывести все доступные форматы файлов linux наберите:

Специальные файлы

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

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

Утилита ls обозначает блочные файлы буквой b, например, выберем все блочные файлы из каталога /dev:

ls -l /dev/ | grep "^b"

files

Утилита file, которую мы рассматривали в предыдущем разделе тоже умеет определять типы файлов:

files4

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

Вы также можете отфильтровать их с помощью ls. Символьные файлы обозначаются буквой c (character):

ls -l /dev/ | grep "^c"

files5

Символические ссылки - это файлы, которые указывают на другие файлы в системе по их имени. Они могут указывать как на обычные файлы, таки на каталоги или другие типы файлов в linux. По сути, это те же ярлыки Windows. В Linux еще есть жесткие ссылки, но они не имеют отношения к типу файлов, потому что реализованы на уровне файловой системы и считаются обычными файлами. Поскольку они указывают на одно и то же место на диске, это два разных файла, с одинаковым содержимым.

Но вернемся к символическим ссылкам. Утилита ls обозначает их буквой l (link):

ls -l /dev/ | grep "^l"

files6

Создавать символические ссылки можно с помощью утилиты ln. Например:

ln -s file1.txt file2.txt

Можете использовать ls чтобы убедиться в том, что это ссылка. Проверьте таким же образом жесткие ссылки, чтобы убедиться, что то что я сказал о них - правда.

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

Обозначаются такие типы файлов linux буквой p (pipe):

ls -l /dev/ | grep "^p"

files7

Чтобы создать именованный тоннель вы можете использовать утилиту mkfifo:

echo "test test test" > pipe1

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

while read line ;do echo "Data: '$line' "; done<pipe1

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

Файлы сокетов обозначаются буквой s:

ls -l /dev/ | grep "^s"

files11

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

nc -lU socket.sock

files9

Подключаемся к нему из другой консоли:

nc -U socket.sock

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

Каталоги

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

Обозначаются каталоги буквой d (directory):

files10

Создать каталог в linux можно с помощью команды mkdir:

Заключение

Теперь у вас более четкое представление о том, почему в linux все является файлами, а также какие типы файлов в linux существуют в вашей системе. Вы можете найти более подробную информацию по каждому виду файлов в интернете, но если у вас остались вопросы, можете задать их в комментариях!

Linux_Deep_24.3-5020-ede7c1.jpg

В Unix-подобных системах, куда входит и Linux, существует концепция «Всё есть файл». Согласно ей, работа с системой сводится к работе с файлами. Однако файлы в системе «Линукс» бывают разные. Об этом — наша статья.

К файлам в системе Linux относят и объекты, куда мы записываем наши данные, и исполняемые файлы, и файлы специального назначения (устройств, туннелей, сокетов и пр.). Но всё это неважно, ведь мы в любом случае работаем именно с файлами, которые используются и для обычных данных, и для устройств.

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

Основные типы файлов Linux

В системе Linux файлы делят на 3 главных типа: 1) обыкновенные (для хранения информации); 2) специальные (для туннелей и устройств); 3) директории.

Теперь рассмотрим каждый из этих типов подробнее.

Обыкновенные файлы

С обычными файлами мы работаем ежедневно. Они содержат текст, изображения, инструкции для работы софта и прочие данные. Это наиболее распространённый файловый тип в системе Linux. Сюда входят: 1) текстовые файлы; 2) файлы изображений, архивов, библиотек; 3) исполняемые и другие файлы.

Для определения файлового типа в режиме списка используется утилита ls. Обычные файлы будут обозначаться чертой:

files1_1-20219-4c6aa5.jpg

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

files2_1-20219-7c9771.jpg

В примере выше система сообщила, что файл является исполняемым. А вот как обстоит дело в случе, если он текстовый:

files3_1-20219-7749c6.jpg

Так вы можете посмореть все файловые форматы:

Специальные файлы

Файлы этого типа обеспечивают обмен информацией с ядром, работу с устройствами либо общение между утилитами. С учётом своего назначения они делятся на несколько видов: 1.Блочные. Файлы устройств, обеспечивающие буферный доступ к аппаратным компонентам. В процессе записи информации на жёсткий диск либо съёмный носитель данные не записываются сразу — это нерационально с точки зрения расходования ресурсов. Поэтому данные сначала собираются в буфере, для чего и используются блочные файлы. Они способны передавать большие блоки информации за один раз, и с их помощью файловая система и прочие утилиты получают возможность взаимодействовать с драйверами аппаратных устройств.

Если вернутся к уже упомянутой программе ls, то блочные файлы обозначаются буквой b. Давайте выведем их из /dev:

files_1-20219-84fc25.jpg

Файловые типы также умеет определять и утилита file:

files4_1-20219-e7525a.jpg

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

Как и в случае с блочными, вы можете отсортировать их посредством ls. Для символьных файлов предусмотрена буква c (character):

files5_1-20219-4e48ad.jpg

3.Символические ссылки. Они указывают на другие файлы по их имени, способны указывать и на обыкновенные файлы, и на каталоги, и на другие файловые типы. Можно сказать, что они аналогичны ярлыкам в системе Windows. Обозначаются буквой l (link):

files6_1-20219-b36a69.jpg

Создать символические ссылки можно посредством утилиты ln:

4.Туннели/именованные туннели. Обеспечивают настройку связи между 2-мя процессами в системе, перенаправляя вывод одного на вход другого. Туннели именованного типа тоже применяются для связи между 2-мя процессами и функционируют, как и обыкновенные туннели.

Для их обозначения существует буква p (pipe):

files7_1-20219-93079d.jpg

Для создания именованного туннеля воспользуйтесь утилитой mkfifo:

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

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

Для обозначения предусмотрена буква s:

files11_1-20219-a52de6.jpg

Создадим Unix-сокет с помощью утилиты nc:

files9_1-20219-494756.jpg

И теперь подключимся к этому сокету из другой консоли:

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

Каталоги

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

Каталоги обозначаются буквой d (directory):

files10_1-20219-715e52.jpg

Для создания каталога используют команду mkdir :

Вывод

В статье мы рассмотрели довольно простые вещи, которые касались типов файлов в Linux. Но если вы хотите освоить администрирование операционной системы Linux на продвинутом уровне, имеет смысл ознакомиться со специализированным курсом от практикующих администраторов. Не пропустите:

Читайте также: