Когда вы выводите список файлов в детальном режиме, вы видите много информации. Давайте рассмотрим предыдущий пример информации об inode из команды ls -li:
pete@icebox:~$ ls -li
140 drwxr-xr-x 2 pete pete 6 Jan 20 20:13 Desktop
141 drwxr-xr-x 2 pete pete 6 Jan 20 20:01 Documents
Ранее мы пропустили третье поле в этом выводе. Это поле — счетчик ссылок.
Счетчик ссылок в Linux
Счетчик ссылок в linux — это общее количество жестких ссылок, имеющихся у файла. Чтобы понять, что это значит, сначала нужно обсудить, что такое ссылки. В Linux существует два типа ссылок: символические ссылки (symlinks) и жесткие ссылки.
Понимание символических ссылок
В операционной системе Windows есть ярлыки, которые, по сути, являются псевдонимами, указывающими на другие файлы. В Linux эквивалентом является символическая ссылка, также известная как мягкая ссылка или symlink. Символическая ссылка — это специальный тип файла, который указывает на другой файл или каталог по его имени.
Давайте посмотрим на это на практике. Мы создадим несколько файлов, а затем символическую ссылку.
pete@icebox:~/Desktop$ echo 'myfile' > myfile
pete@icebox:~/Desktop$ echo 'myfile2' > myfile2
pete@icebox:~/Desktop$ echo 'myfile3' > myfile3
pete@icebox:~/Desktop$ ln -s myfile myfilelink
pete@icebox:~/Desktop$ ls -li
total 12
151 -rw-rw-r-- 1 pete pete 7 Jan 21 21:36 myfile
93401 -rw-rw-r-- 1 pete pete 8 Jan 21 21:36 myfile2
93402 -rw-rw-r-- 1 pete pete 8 Jan 21 21:36 myfile3
93403 lrwxrwxrwx 1 pete pete 6 Jan 21 21:39 myfilelink -> myfile
Здесь мы создали символическую ссылку с именем myfilelink, которая указывает на myfile. Когда вы используете ls для просмотра ls symlink, она четко идентифицируется по букве l в начале строки разрешений и символу ->, указывающему на цель. Обратите внимание, что символическая ссылка имеет свой собственный уникальный номер inode (93403). Поскольку символические ссылки указывают на имена файлов, а не на inode, они могут охватывать разные файловые системы.
Понимание жестких ссылок
Другой тип ссылки — жесткая ссылка. Жесткая ссылка создает еще одну файловую запись, которая указывает непосредственно на тот же inode, что и исходный файл.
Давайте создадим жесткую ссылку для myfile2:
pete@icebox:~/Desktop$ ln myfile2 myhardlink
pete@icebox:~/Desktop$ ls -li
total 16
151 -rw-rw-r-- 1 pete pete 7 Jan 21 21:36 myfile
93401 -rw-rw-r-- 2 pete pete 8 Jan 21 21:36 myfile2
93402 -rw-rw-r-- 1 pete pete 8 Jan 21 21:36 myfile3
93403 lrwxrwxrwx 1 pete pete 6 Jan 21 21:39 myfilelink -> myfile
93401 -rw-rw-r-- 2 pete pete 8 Jan 21 21:36 myhardlink
Обратите внимание, что myhardlink имеет тот же номер inode (93401), что и myfile2. Счетчик ссылок для обоих файлов также увеличился до 2. Это связано с тем, что теперь две файловые записи указывают на один и тот же inode. Если вы измените содержимое myfile2, изменения отразятся в myhardlink, и наоборот. Если вы удалите myfile2, данные файла по-прежнему будут доступны через myhardlink. Inode и его данные удаляются с диска только тогда, когда счетчик ссылок падает до нуля. Поскольку жесткие ссылки указывают на inode, которые уникальны в пределах одной файловой системы, они не могут охватывать разные файловые системы.
Создание символических ссылок и жестких ссылок
Вы можете создавать оба типа ссылок с помощью команды ln. Синтаксис прост.
Для создания символической ссылки используйте флаг -s:
ln -s /path/to/original /path/to/link
Для создания жесткой ссылки опустите флаг -s:
ln /path/to/original /path/to/link
Использование команд ls symlinks или общих ls links с опцией -l имеет решающее значение для управления и идентификации этих различных типов файлов.