Перейти к основному содержанию
Рецепты Linux

Main navigation

  • Основы
  • Система
  • Команды
  • Программы
  • Дистро
  • Интерфейсы
  • Устройства
  • Доки
User account menu
  • Войти

Строка навигации

  1. Главная
  2. Linux: Введение
  3. Работа с файловой системой

Файл и его имена: ссылки

Жёсткие ссылки

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

Пользователь Linux может добавить файлу ещё одно имя (создать ещё одну жёсткую ссылку на файл) при помощи утилиты ln сокращение от англ. «link» — «соединять, связывать»). Первый параметр — это имя файла, на который нужно создать ссылку, второй — имя новой ссылки. По умолчанию ссылка будет создана в текущем каталоге.

[methody@localhost methody]$ ln examples/text text-hardlink
[methody@localhost methody]$ ls -lR
./:

. . .

drwxr-xr-x  3 methody methody 4096 Окт 16 04:45 examples
-rw-r--r--  2 methody methody  653 Окт  6 10:31 text-hardlink

./examples:
итого 92
-rw-r--r--  1 methody methody 84718 Окт  6 10:31 -filename-with-
-rw-r--r--  2 methody methody   653 Окт  6 10:31 text

Пример 12. Создание жёстких ссылок

Мефодий создал в своём домашнем каталоге жёсткую ссылку с именем «text-hardlink» на файл «text», который находится в подкаталоге «examples». Выведя подробный список файлов текущего каталога и его подкаталогов («ls -lR»), Мефодий обратил внимание, что у файлов «text» и «text-hardlink» совпадают и размер («653»), и время создания. Это его совершенно не удивило, поскольку он знает, что теперь «/home/methody/text-hardlink» и «/home/methody/examples/text» — это два имени одного и того же файла. В подробном описании, выведенном командой «ls -l», Мефодию остались непонятны только два первых поля. Как объяснил Гуревич, первое «слово», состоящее из знаков «-drwx», — это обозначение прав доступа к файлу, о которых речь пойдёт в лекции Права доступа. А следующее за ним число — количество жёстких ссылок на данный файл или каталог. У «text» и «text-hardlink» стоит число «2» — у этого файла два имени.

Доступ к одному и тому же файлу при помощи нескольких имён может понадобиться в следующих случаях:

  1. Одна и та же программа известна под несколькими именами.
  2. Доступ пользователей к некоторым каталогам в системе может быть ограничен из соображений безопасности. Однако если всё же нужно организовать доступ пользователей к файлу, который находится в таком каталоге, можно создать жёсткую ссылку на этот файл в другом каталоге.
  3. Современные файловые системы даже на домашних персональных компьютерах могут насчитывать до нескольких десятков тысяч файлов и тысячи каталогов. Обычно у таких файловых систем сложная многоуровневая иерархическая организация — в результате пути ко многим файлам становятся очень длинными. Чтобы организовать более удобный доступ к файлу, который находится очень «глубоко» в иерархии каталогов, также можно использовать жёсткую ссылку в более доступном каталоге.
  4. Полное имя некоторых программ может быть весьма длинным (например, i586-alt-linux-gcc-3.3), к таким программам удобнее обрщаться при помощи сокращённого имени (жёсткой ссылки) — gcc-3.3.

Индексные дескрипторы

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

Каталоги в Linux — тоже файлы особого типа, см. раздел Filesystem..Система файлов: каталоги

Индексный дескриптор — это описание файла, в котором содержится:

  • тип файла (обычный файл, каталог, файл-дырка и т. д.);
  • права доступа к файлу;
  • информация о том, кому принадлежит файл;
  • отметки о времени создания, модификации, последнего доступа к файлу;
  • размер файла;
  • указатели на физические блоки на диске, принадлежащие этому файлу — в этих блоках хранится «содержимое» файла.

Все индексные декрипторы пронумерованы, поэтому номер индексного дескриптора — это уникальный идентификатор файла в файловой системе — в отличие от имени файла (жёсткой ссылки на него), которых может быть несколько. Узнать номер индексного дескриптора любого файла можно при помощи всё той же утилиты ls с ключом -i:

[methody@localhost methody]$ ls -i ./text-hardlink examples/text 
127705 examples/text  127705 ./text-hardlink

Пример 13. Информация об индексных дескрипторах файлов

Мефодий решил поинтересоваться номерами индексных дескрипторов файла «text» и жёсткой ссылки на него «text-hardlink» — он обнаружил, что эти номера совпадают («127705»), то есть этим двум именам соответствует один индексный дескриптор, т. е. один и тот же файл.

Все операции с файловой системой — создание, удаление и перемещение файлов — производятся на самом деле над индексными дескрипторами, имена нужны только для того, чтобы пользователь мог легко ориентироваться в файловой системе. (Было бы очень неудобно запоминать многозначный номер каждого нужного файла или каталога.) Более того, имя (или имена) файла не указаны в его индексном дескрипторе. В файловой системе Ext2 имена файлов хранятся в каталогах: каждый каталог представляет собой список имён файлов и номеров их индексных дескрипторов. Жёсткую ссылку (имя файла, хранящееся в каталоге) можно представлять как каталожную карточку, на которой указан номер индексного дескриптора — идентификатор файла.

жёсткая ссылка
Запись вида имя файла+номер индексного дескриптора в каталоге. Жёсткие ссылки в Linux — основной способ обратиться к файлу по имени.

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

У жёстких ссылок есть два существенных ограничения:

  1. Жёсткая ссылка может указывать только на файл, но не каталог, потому что в противном случае в файловой системе могут возникнуть циклы — бесконечные пути.
  2. Жёсткая ссылка не может указывать на файл на другой файловой системе. Например, невозможно создать на жёстком диске жёсткую ссылку на файл, расположенный на дискете.

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

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

символьная ссылка
Файл особого типа («l»), в котором содержится путь к другому файлу. Если на пути к файлу встречается символьная ссылка, система выполняет подстановку: исходный путь заменяется на тот, что содержится в ссылке.

Символьную ссылку можно создать при помощи команды ln с ключом «-s» (сокращение от «symbolic»):

[methody@localhost methody]$ ln -s examples/text text-symlink
[methody@localhost methody]$ ls -li

. . .

127699 drwxr-xr-x  2 methody methody 4096 Окт  4 17:12 examples
127705 -rw-r--r--  2 methody methody  653 Сен 30 10:04 text-hardlink
  3621 lrwxrwxrwx  1 methody methody   13 Окт  4 18:05 text-symlink -> examples/text
[methody@localhost methody]$ 

Пример 14. Создание символьных ссылок

Теперь Мефодий решил создать в своём домашнем каталоге и символьную ссылку на файл text и назвать её text-symlink. Команда ls -li отобразила этот файл совсем не так, как остальные: стрелочка («->») указывает, куда направлена ссылка. Кроме того, Мефодий обратил внимание, что номер индексного дескриптора (первое поле), размер и время создания файла text-symlink отличаются text-hardlink, а также во втором поле (количество жёстких ссылок на файл) text-symlink указано «1». Все эти признаки недвусмысленно свидетельствуют о том, что text-symlink и text — это разные файлы. Однако если выполнить команду cat text-symlink, то на экран будет выведено содержимое файла text.

Символьная ссылка вполне может содержать имя несуществующего файла, в этом случае ссылка будет существовать, но не будет «работать»: например, если попробовать вывести содержимое такой «битой» ссылки при помощи команды cat, будет выдано сообщение об ошибке.

Узнать, куда указывает символьная ссылка, можно при помощи утилиты realpath:

[methody@localhost methody]$ realpath text-symlink
/home/methody/examples/text

Пример 15. Раскрытие символьных ссылок

Перекрёстные ссылки книги для Файл и его имена: ссылки

  • Копирование и перемещение файлов
  • Вверх
  • Удаление файлов и каталогов

Book navigation

  • Предисловие
  • Сеанс работы в Linux
  • Терминал и командная строка
  • Структура файловой системы
  • Работа с файловой системой
    • Текущий каталог
    • Домашний каталог
    • Информация о каталоге
    • Перемещение по дереву каталогов
    • Создание каталогов
    • Копирование и перемещение файлов
    • Файл и его имена: ссылки
    • Удаление файлов и каталогов
  • Доступ процессов к файлам и каталогам
  • Права доступа
  • Работа с текстовыми данными
  • Возможности командной оболочки
  • Текстовые редакторы
  • Этапы загрузки системы
  • Работа с внешними устройствами
  • Конфигурационные файлы
  • Управление пакетами
  • Сеть TCP/IP в Linux
  • Сетевые и серверные возможности
  • Графический интерфейс (X11)
  • Прикладные программы
  • Политика свободного лицензирования

Последние материалы

  • Утилита sensors
    20 hours ago
  • Сканер Rkhunter
    1 week 1 day ago
  • Программа resize2fs
    1 week 6 days ago
  • Аудиопроигрыватель QMMP
    2 weeks 5 days ago
  • Программа Timeshift
    3 weeks 4 days ago
RSS feed

Secondary menu

  • О проекте

© 2008–2025 Олег Меньшенин mensh@yandex.ru