- Использование жестких ссылок для линковки файлов в Linux
- Зачем использовать жесткие ссылки?
- Как создать жесткую ссылку
- Как определить разницу между жесткой связью и символической связью
- Как найти все жесткие ссылки на файл
- Символические и жесткие ссылки в Linux. Команда ln
- Что такое ссылка на файл в Linux
- Что такое символические ссылки
- Что такое жесткие ссылки
- Отличия символических ссылок от жестких
- Как создавать ссылки в Linux. Команда ln
- Создание символических ссылок
- Создание жестких ссылок
- Как удалить ссылку
- Создание ссылок через файловый менеджер
- Резюме
Использование жестких ссылок для линковки файлов в Linux
Существует два типа ссылок, которые вы можете создать в Linux:
Символическая ссылка очень похожа на ярлык на рабочем столе в Windows. Символическая ссылка просто указывает на местоположение файла.
Удаление символической ссылки не влияет на физический файл, на который указывает ссылка.
Символическая ссылка может указывать на любой файл в текущей файловой системе или даже в других файловых системах. Это делает его более гибким, чем жесткая ссылка.
Жесткая ссылка – это тот же файл, на который она ссылается, но с другим именем. Самый простой способ думать об этом заключается в следующем:
Представь, что ты родился с именем Роберт. Другие люди могут знать вас как Робби, Боб, Бобби или Роб. Каждый человек будет говорить о том же человеке.
Каждая ссылка добавляет 1 к счетчику ссылок, что означает удаление физического файла, который необходимо удалить для каждой ссылки.
Зачем использовать жесткие ссылки?
Жесткие ссылки обеспечивают эффективный способ организации файлов. Самый простой способ описать это со старым эпизодом Улицы Сезам.
Берт сказал Эрни убрать все свои вещи, и поэтому Эрни приступил к выполнению своей задачи. Прежде всего он решил убрать все красные вещи. «Пожарная машина красная». Итак, Эрни убирает пожарную машину.
Далее Эрни решает убрать все игрушки на колесиках. Пожарная машина имеет колеса. Итак, Эрни убрал пожарную машину.
Само собой разумеется, Берт приходит домой, чтобы найти точно такой же беспорядок, как и раньше, но Эрни убирал пожарную машину с полдюжины раз.
Представьте, что пожарная машина была просто изображением пожарной машины. Вы можете иметь разные папки на вашем компьютере следующим образом:
- Фотографии красных вещей
- Фотографии транспортных средств
- Фотографии экстренных служб
Теперь вы можете создать копию фотографии и поместить ее в каждую из папок. Это означает, что у вас есть три копии одного и того же файла, занимающие в три раза больше места.
Категоризация фотографий путем их копирования может не занимать слишком много места, но если вы попробуете то же самое с видео, вы значительно сократите свое дисковое пространство.
Жесткая ссылка не занимает места вообще. Таким образом, вы можете хранить одно и то же видео в разных категориях (например, по годам, жанрам, актерам, режиссерам), не уменьшая места на диске.
Как создать жесткую ссылку
Вы можете создать жесткую ссылку, используя следующий синтаксис:
ln path/to/file/path/to/hard/link
Например, на изображении выше у нас есть папка с музыкой Алисы Купер, которая называется Trash, по пути/home/gary/Music/Alice Cooper/Trash. В этой папке 10 песен, одна из которых классическая Poison.
Теперь Poison – это рок-трек, поэтому мы создали папку с именем Rock в папке music и создали жесткую ссылку на Poison, введя следующий файл:
ln "01 - Poison.mp3" "~/Music/rock/Poison.mp3"
Это хороший способ организовать музыку.
Как определить разницу между жесткой связью и символической связью
Вы можете определить, имеет ли файл жесткую ссылку, с помощью команды ls:
Стандартный файл без ссылок будет выглядеть следующим образом
-rw-r - r-- 1 гари гэри 1000 дек 18 21:52 toxic.mp3
- -rw-r – r– = разрешения
- 1 = количество ссылок
- гэри = группа
- Гари = владелец
- 1000 = размер файла
- 18 декабря = дата
- 21:52 = время
- toxic.mp3 = имя файла
Если бы это была жесткая ссылка, результат выглядел бы следующим образом:
-rw-r - r-- 2 гари гэри 1000 дек 18 21:52 toxic.mp3
Обратите внимание, что в столбце количества ссылок отображается 2. Каждый раз, когда создается жесткая ссылка, это число будет увеличиваться.
Символическая ссылка будет выглядеть следующим образом:
-rw-r - r-- 1 Гари Гари 1000 дек 18 21:52 toxic.mp3 -> toxic.mp3
Вы можете ясно видеть, что один файл указывает на другой.
Как найти все жесткие ссылки на файл
Все файлы в вашей системе Linux содержат номер инода, который однозначно идентифицирует файл. Файл и его жесткая ссылка будут содержать один и тот же индекс.
Чтобы увидеть номер индекса для файла, введите следующую команду:
Вывод для одного файла будет следующим:
Чтобы найти жесткие ссылки на файл, вам просто нужно выполнить поиск файлов по всем файлам с одинаковым индексом (т. Е. 1234567).
Вы можете сделать это с помощью следующей команды:
Символические и жесткие ссылки в Linux. Команда ln
Что такое символические и жесткие ссылки в Linux. Чем они отличаются. Как создавать ссылки. Использование команды ln.
Что такое ссылка на файл в Linux
Ссылка на файл в Linux — это указатель на файл. Если проводить аналогию с Windows, то ссылки чем-то похожи на ярлыки. То есть вы создаете ссылку, которая указывает на какой-либо файл или директорию, и можете разместить эту ссылку в другом каталоге. Обращаясь к такой ссылке, вы будете обращаться к настоящему файлу или каталогу.
Ссылки в Linux бывают двух типов: символические и жесткие. Не смотря на то, что оба типа называются ссылками, они имеют существенные отличия друг от друга. Поэтому очень важно понимать, как создавать и использовать тот или иной тип ссылок.
Что такое символические ссылки
Символическая ссылка (symbolic link) — это специальный файл, который является ссылкой на другой файл или каталог (их еще называют целевым файлом, целевым каталогом).
Символические ссылки также называют символьными, мягкими ссылками (soft links) или сим-ссылками (sym-link).
Важно понимать, что символическая ссылка не содержит в себе внутри копии самого файла, на которую она указывает. Она является всего лишь указателем на файл. Не смотря на это, символическая ссылка обладает собственными правами доступа, так как сама является небольшим файлом, который содержит путь до целевого файла.
Возвращаясь к аналогии с ярлыками в Windows, символические ссылки это своего рода ярлыки на файлы. Можно создавать несколько символических ссылок на один файл и эти ссылки могут иметь разные имена.
Связь между символической ссылкой и файлом, на который она указывает, является «мягкой». Если удалить символическую ссылку, то файл, на который она указывает, не удаляется.
Если удалить файл, на который указывает ссылка, то сама ссылка не обновляется и остается на диске. При этом она указывает на уже несуществующий файл. Аналогично, если переименовать или переместить целевой файл, то ссылка не обновляется автоматически.
При создании символических ссылок можно указывать относительный путь до целевого файла. В таком случае ссылка считает, что относительный путь указан относительно каталога, в котором создана сама ссылка (но не относительно каталога, из которого она была создана).
Схематично отношение между файлом, символической ссылкой и данными, которые хранятся в файле, можно показать следующим образом:
Что такое жесткие ссылки
Жесткая ссылка (hard link) является своего рода синонимом для существующего файла. Когда вы создаете жесткую ссылку, создается дополнительный указатель на существующий файл, но не копия файла.
Жесткие ссылки выглядят в файловой структуре как еще один файл. Если вы создаете жесткую ссылку в том же каталоге, где находится целевой файл, то они должны иметь разные имена. Жесткая ссылка на файл должна находится в той же файловой системе, где и другие жесткие ссылки на этот файл.
В Linux каждый файл имеет уникальный идентификатор — индексный дескриптор (inode). Это число, которое однозначно идентифицирует файл в файловой системе. Жесткая ссылка и файл, для которой она создавалась имеют одинаковые inode. Поэтому жесткая ссылка имеет те же права доступа, владельца и время последней модификации, что и целевой файл. Различаются только имена файлов. Фактически жесткая ссылка это еще одно имя для файла.
Жесткие ссылки нельзя создавать для директорий.
Жесткая ссылка не может указывать на несуществующий файл.
Жесткие ссылки появились раньше, чем символические, но сейчас уже устаревают. В повседневной работе жесткие ссылки используются редко.
Схематично отношение между исходным файлом, жесткой ссылкой и данными можно показать следующей схемой:
Отличия символических ссылок от жестких
Кратко подведем итог, написанного выше.
Символическая ссылка:
- Указывает на целевой файл или каталог. Фактически является небольшим файлом, содержащим путь до целевого файла.
- Не содержит внутри себя содержимого самого файла. Содержит путь к целевому файлу.
- Имеет собственные права доступа, которые не распространяются на целевой файл.
- Удаление / переименование / перемещение целевого файла не обновляет автоматически ссылку. Ссылка начинает указывать на несуществующий файл, становится неработающей.
- Изменение прав доступа у целевого файла не обновляет права доступа у ссылки.
- Может быть создана для директории.
- Ссылка и целевой файл имеют разные файловые индексы (inode) в файловой системе.
- Может указывать на несуществующий файл.
- Символическая ссылка может использовать относительный путь до целевого файла.
Жесткая ссылка:
- Является своего рода еще одним именем на файл.
- Не может указывать на директорию.
- Нельзя создавать жесткие ссылки между файлами разных файловых систем.
- Не может указывать на несуществующий файл.
- Жесткая ссылка и файл, для которого она создавалась, имеют одинаковые индексы (inode) в файловой системе.
Как создавать ссылки в Linux. Команда ln
Для создания ссылок в Linux используется команда ln (от слова link).
Обычно используется только одна опция -s . Полный список опций можно получить, выполнив команду man ln.
Создание символических ссылок
Чтобы создать символическую ссылку, нужно выполнить команду ln с опцией -s :
ln -s целевой_файл имя_символьной_ссылки
Например, создадим в текущем каталоге символическую ссылку с именем mylink на файл /home/pingvinus/myfile :
ln -s /home/pingvinus/myfile.txt mylink
Выполнив команду ls -li , можно увидеть, что ссылка myfile указывает на файл /home/pingvinus/myfile
ls -li 792300 -rw-rw-r-- 1 pingvinus pingvinus 13 фев 13 13:07 myfile.txt 787622 lrwxrwxrwx 1 pingvinus pingvinus 10 фев 13 13:08 mylink -> /home/pingvinus/pingvinus/myfile
Обратите внимание, что ссылка и целевой файл имеют разные inode (792300 и 787622. См. число в начале строки).
Если теперь удалить целевой файл, а затем попробовать просмотреть его содержимое, используя ссылку, то получим сообщение о том, что файл не найден:
rm myfile.txt ls -li 787622 lrwxrwxrwx 1 pingvinus pingvinus 10 фев 13 13:08 mylink -> /home/pingvinus/pingvinus/myfile cat mylink cat: mylink: Нет такого файла или каталога
Пример создания и использования символьной ссылки (при создании ссылки используется относительный путь до целевого файла, если такую ссылку переместить, то она будет невалидна):
Создание жестких ссылок
Чтобы создать жесткую ссылку нужно использовать команду ln без опции -s .
ln целевой_файл имя_жесткой_ссылки
Например, создадим жесткую ссылку с именем hardlinktofile на файл myfile.txt :
ln myfile.txt hardlinktofile
ls -li 787622 -rw-rw-r-- 2 pingvinus pingvinus 13 фев 13 13:19 hardlinktofile 787622 -rw-rw-r-- 2 pingvinus pingvinus 13 фев 13 13:19 myfile.txt
Можно заметить, что hardlinktofile и myfile.txt имеют одинаковый inode=787622, так как являются фактически разными именами для одного файла (inode которого 787622).
Также видно, что на данный inode имеется 2 ссылки (см. цифру 2 в 3-м столбце). Если мы удалим исходный файл, то количество ссылок на него уменьшается на 1, то есть на самом деле файл не удаляется, так как на него больше, чем 1 ссылка. И мы по прежнему можем работать с файлом по имени hardlinktofile.
rm myfile.txt ls -li 787622 -rw-rw-r-- 1 pingvinus pingvinus 13 фев 13 13:19 hardlinktofile cat hardlinktofile Hello World!
Обратите внимание, что после выполнения команды rm, количество ссылок на файл стало равно 1.
Пример создания и использования жесткой ссылки:
Как удалить ссылку
Ссылки, как и обычные файлы, можно удалять, используя команду rm :
Создание ссылок через файловый менеджер
Некоторые графические файловые менеджеры поддерживают создание символических ссылок. Чтобы создать символическую ссылку в таком файловом менеджере, достаточно кликнуть правой кнопкой мыши по файлу и выбрать в меню пункт Создать ссылку ( Create Link , Make Link ).
Ссылка создается в том же каталоге, где находится целевой файл. После создания ссылку можно переместить в другой каталог.
Резюме
Ссылки — это удобный инструмент при работе с файлами в Linux. Мы рассмотрели два вида ссылок, которые существуют в Linux. Рассмотрели отличия символических ссылок от жестких. Для создания ссылок используется команда ln . При повседневной работе обычно используются символические ссылки, в то время как жесткие ссылки используются редко.