Файл — именованная область внешней памяти: виды объектов файловой системы

Файл - именованная область внешней памяти: виды объектов файловой системы Полезное

Именованная область внешней памяти — это файл. Так его определяют в школьном курсе информатики: данные лежат на диске, флешке или SSD (внешняя, то есть долговременная память), и к ним обращаются по имени. В тестах вопрос встречается в разных формулировках: «Именованная область внешней памяти, в которую можно записывать и из которой можно считывать данные» или «Логически связанная совокупность данных или программ, для размещения которой во внешней памяти выделяется именованная область» (варианты: файл, каталог, директория). Правильный ответ в обоих случаях — файл.

Определение учебное и упрощенное: оно описывает обычный файл с данными. Кроме него в файловой системе есть каталоги, ссылки и специальные файлы устройств, и у каждого объекта есть имя и атрибуты. Ниже — чем эти объекты отличаются и как увидеть разницу своими глазами. Примеры проверены в Ubuntu 24.04 (bash 5.2, GNU coreutils 9.4) 30 сентября 2026 года.

Четыре термина, которые путают

  • Файл — данные плюс служебная запись о них (размер, права, время, где лежат блоки).
  • Имя — строка в каталоге, которая указывает на файл. В Linux имя хранится не в самом файле, а в каталоге.
  • Каталог (папка) — объект, который хранит список «имя -> объект». «Папка» — то же самое в графическом интерфейсе.
  • Ссылка — еще одно имя того же файла (жесткая) или отдельный маленький объект с путем к другому объекту (символическая).

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

Виды объектов: сводная таблица

В Linux тип объекта виден первым символом в выводе ls -l.

Объект Символ в ls -l Что это Пример
Обычный файл - Данные: текст, картинка, программа note.txt
Каталог d Список имен и объектов, на которые они указывают /home
Символическая ссылка l Объект, внутри которого записан путь к другому объекту soft.txt -> note.txt
Символьное устройство c Вход в драйвер, обмен по байтам /dev/null, /dev/tty
Блочное устройство b Вход в драйвер, обмен блоками диск, например /dev/sda
Именованный канал (FIFO) p Труба между процессами создается mkfifo
Сокет s Точка обмена между процессами сокеты служб в /run

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

Проверяем на практике: файл, каталог, две ссылки

Команды ниже работают во временном каталоге, который создает mktemp, и не трогают ваши данные. Выполняйте блоки по порядку в одном окне терминала.

box=$(mktemp -d /tmp/fsobj.XXXXXX)
cd "$box"
printf 'privet\n' > note.txt
mkdir docs
ln note.txt hard.txt
ln -s note.txt soft.txt
mkfifo pipe
ls -li

В консоли появится список из пяти объектов (номера в первой колонке, владелец и время у вас будут свои):

total 12
680616 drwxr-xr-x 2 root root 4096 Sep 30 11:44 docs
680615 -rw-r--r-- 2 root root    7 Sep 30 11:44 hard.txt
680615 -rw-r--r-- 2 root root    7 Sep 30 11:44 note.txt
680646 prw-r--r-- 1 root root    0 Sep 30 11:44 pipe
680619 lrwxrwxrwx 1 root root    8 Sep 30 11:44 soft.txt -> note.txt

Что здесь видно:

  • Первая колонка — номер индексного дескриптора (inode), то есть той самой служебной записи о файле. У note.txt и hard.txt он одинаковый: это один файл с двумя именами.
  • Число после прав — счетчик жестких ссылок. У файла с двумя именами он равен 2.
  • У soft.txt свой inode и размер 8 байт: внутри записан путь note.txt, в нем ровно восемь символов.
  • У каталога docs счетчик 2: одно имя в родительском каталоге и запись . внутри самого каталога. Так считает ext4; в некоторых файловых системах (например, Btrfs) у каталога всегда 1.

Тот же результат словами выдает stat:

stat -c '%n: %F, inode %i, ссылок %h' note.txt hard.txt soft.txt docs pipe /dev/null
note.txt: regular file, inode 680615, ссылок 2
hard.txt: regular file, inode 680615, ссылок 2
soft.txt: symbolic link, inode 680619, ссылок 1
docs: directory, inode 680616, ссылок 2
pipe: fifo, inode 680646, ссылок 1
/dev/null: character special file, inode 5, ссылок 1

Жесткая и символическая ссылка: в чем разница

Разницу проще всего увидеть, удалив исходное имя.

rm note.txt
cat hard.txt
cat soft.txt
privet
cat: soft.txt: No such file or directory

Жесткая ссылка продолжает работать: rm удалил одно имя, счетчик упал с 2 до 1, данные остались. Символическая ссылка «повисла»: она хранит путь, а объекта по этому пути больше нет. Исправление — направить ее на существующее имя:

ln -sf hard.txt soft.txt
cat soft.txt
privet
Свойство Жесткая ссылка Символическая ссылка
Что это Еще одно имя того же файла Отдельный объект с путем внутри
Свой inode Нет, общий с файлом Да
После удаления исходного имени Данные доступны Ссылка не работает
На другой раздел (файловую систему) Нельзя Можно
На каталог В Linux обычно запрещено Можно

Запрет из последней строки легко проверить:

ln docs docs2
ln: docs: hard link not allowed for directory

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

В Windows на NTFS есть те же два вида ссылок (команда mklink в cmd, ключ /H для жесткой), плюс точки соединения для каталогов. Жесткую ссылку и точку соединения обычный пользователь создает без повышения прав, а для символической ссылки нужна командная строка от имени администратора или включенный режим разработчика (Windows 10 версии 1703 и новее, Windows 11). Ярлык .lnk к ссылкам файловой системы не относится: это обычный файл, который умеет читать проводник, а программа, открывающая его напрямую, увидит содержимое самого ярлыка.

Специальные файлы устройств

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

ls -l /dev/null /dev/tty
crw-rw-rw- 1 root root 1, 3 Sep 30 11:44 /dev/null
crw-rw-rw- 1 root root 5, 0 Sep 30 11:44 /dev/tty

На месте размера стоят два числа — старший и младший номер устройства: по ним ядро находит драйвер. Данных на диске у такого файла нет. Символьные устройства (c) передают поток байтов: терминал, /dev/null. Блочные (b) читаются блоками с произвольным доступом — это диски и разделы.

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

Имена объектов и их ограничения

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

Параметр Linux (ext4) Windows (NTFS)
Запрещено в имени / и нулевой байт \ / : * ? " < >, вертикальная черта, символы с кодами 0-31
Длина одного имени 255 байт 255 символов (кодовых единиц UTF-16)
Регистр букв a.txt и A.txt — разные имена по умолчанию не различается, но сохраняется в имени
Зарезервированные имена . и .. CON, PRN, AUX, NUL, COM1, LPT1 и подобные
Разделитель в пути / \

Обратите внимание на единицы. В Linux лимит считается в байтах, а русская буква в UTF-8 занимает два байта, поэтому кириллическое имя короче 255 букв:

touch "$(printf 'я%.0s' $(seq 1 127))"; echo "127 букв: код $?"
touch "$(printf 'я%.0s' $(seq 1 128))" 2>/dev/null; echo "128 букв: код $?"
127 букв: код 0
128 букв: код 1

Во втором случае touch отказывает с ошибкой File name too long: 128 букв — это 256 байт.

Расширение (.txt, .jpg) — часть имени после последней точки, а не отдельное свойство. Windows по нему выбирает программу для открытия. В Linux расширение — соглашение для человека и приложений: исполняемость определяется правами, а не окончанием .exe.

Атрибуты: что система знает об объекте

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

  • В Linux в inode записаны тип, размер, владелец и группа, права доступа, счетчик ссылок и отметки времени: последнего доступа, изменения данных и изменения самого inode. Имени там нет — оно в каталоге.
  • В Windows у файла есть классические флаги «только чтение», «скрытый», «системный», «архивный», отметки времени, а на NTFS — еще и списки прав доступа.

Частая путаница: время ctime в Linux — это изменение атрибутов, а не создание файла. Время создания есть не во всех файловых системах и показывается не всеми утилитами.

После экспериментов уберите песочницу. Запись ${box:?} остановит команду, если переменная пуста:

cd / && rm -r -- "${box:?}"

Выводы

  • Именованная область внешней памяти — это файл; определение точно для обычных файлов с данными.
  • Объектов в файловой системе больше: каталоги, символические ссылки, а в Linux еще файлы устройств, каналы и сокеты.
  • Имя и файл — разные вещи: в Linux имя живет в каталоге, и у одного файла имен может быть несколько.
  • Жесткая ссылка — второе имя того же файла, символическая — отдельный объект с путем; после удаления исходного имени работает только первая.
  • Ограничения имен и набор атрибутов зависят от системы: 255 байт в ext4 и 255 кодовых единиц UTF-16 в NTFS — не одно и то же.

Где применяется / связь с практикой

Типы объектов — ежедневная работа администратора. По первому символу в ls -l понимают, с чем имеют дело; символическими ссылками переключают версии программ и конфигураций; счетчик ссылок объясняет, почему место на диске не освободилось после удаления; файлы в /dev нужны при разметке дисков и монтировании.

Освойте тему на практике

Системно эти темы разбирают на курсе «Администратор Linux. Базовый уровень». Познакомиться с форматом занятий можно на открытых уроках Otus.

Смежные темы: файловые системы, файлы и пути к ним.

FAQ

Чем каталог отличается от файла, если «в Linux все есть файл»?
Каталог тоже объект с inode, но его содержимое — список имен, и менять его напрямую записью байтов нельзя: только через создание, переименование и удаление объектов внутри.

Можно ли сделать жесткую ссылку на файл с другого диска?
Нет. Жесткая ссылка указывает на inode, а нумерация inode у каждой файловой системы своя. Между разделами используют символическую ссылку.

Что будет, если скопировать символическую ссылку на флешку?
Зависит от программы и файловой системы флешки: FAT32 и exFAT символических ссылок не хранят, поэтому копируется либо содержимое целевого файла, либо выдается ошибка.

OTUS Журнал