Структура и типы файловых систем в Linux

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

Типы ссылок

В системах Linux/UNIX существует два типа ссылок:

  • Жесткие ссылки. Вы можете считать жесткую ссылку в качестве дополнительного имени для существующего файла. Жесткие ссылки связывают два или более имени файла с тем же inode. Вы можете создать одну или несколько жестких ссылок для одного файла. Жесткие ссылки не могут быть созданы для каталогов и файлов в другой файловой системе или разделе.
  • Мягкие ссылки. Soft link – это что-то вроде ярлыка в Windows. Это косвенный указатель на файл или каталог. В отличие от жесткой ссылки, символическая ссылка может указывать на файл или каталог на другой файловой системе или разделе.

Файловые системы в операционной системе Linux. Базовые понятия

ОС Linux предоставляет выбор еще на стадии установки: в ядро системы встроены разные файловые системы (ФС). При этом пользователь должен выбрать ту, что отвечает его требованиям и задачам. Перед теми, кто использует Windows, такой вопрос не стоит — эту ОС можно установить только на NTFS. Отличается от Windows и иерархическое устройство самих ФС, и структура каталогов.

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

Читайте также:  Взлом Wi-Fi с помощью Kali Linux: записки очкастого эксперта

Характеристика средств

Средства управления файлами в Base Linux входят в состав пакета coreutils (в него с некоторого времени объединены три ранее самостоятельных комплекта — fileutils, sh-utils и textutils). Он включает в себя множество команд для создания файлов различных типов, установки атрибутов файлов, копирования, перемещения, переименования и удаления файлов, а также получения информации о файлах. Последней цели служит также набор file, включающий единственную, одноименную, команду.

Кроме того, к этому же кругу утилит относится пакет findutils, в который входят команды: bigram, code, find, frcode, locate, updatedb and xargs. Большая их часть предназначена для определения местоположения файлов, а команда find (особенно в сочетании с xargs) — практически универсальное средство обработки файлов.

Практически все перечисленные команды имеются и в BSD-системах, выступая там под теми же именами и обладая теми же функциями. Там они, разумеется, не делятся на пакеты, попадая целиком под понятие Base Distributions.

Ниже я рассмотрю основные команды из этих наборов, предназначенные для файловых операций, вместе с их наиболее используемыми опциями. Чтобы не возвращаться далее к этому вопросу, скажу сразу: почти все команды этой заметки (и большинство из заметок последующих) имеет три стандартные опции (т.н. GNU Standard Options, впрочем, они же имеются и в BSD-утилитах, и, более того, именно оттуда и происходят:-)): —help (иногда также -h или -?) для получения помощи, —verbose (иногда также -v) для вывода информации о текущей версии, и —, символизирующей окончание перечня опций (т.е. любой символ или их последовательность после нее интерпретируются как аргумент). Так что далее эти опции в описания фигурировать не будут.

Читайте также:  Выпущена iOS 12.3 beta 1 — новая версия для разработчиков

И еще. В этих заметках будет говориться только о самостоятельных командах и утилитах — тех, которым соответствует собственный исполняемый файл (обычно в каталогах /bin, /sbin, /usr/bin и /usr/sbin). Для встроенных команд оболочки (а они подчас совпадают с внешними утилитами по назначению и имени) в свое время найдется и свое место.

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

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

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

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

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

file /dev/sda

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

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

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

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

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

Читайте также:  Apple iOS 12 beta 9 — что нового, полный список изменений

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

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

ln -s

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

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

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

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

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

mkfifo pipe1 echo "test test test" > pipe1

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

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

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

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

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

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

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

nc -lU

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

nc -U

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