- Использование жестких ссылок для линковки файлов в Linux
- Зачем использовать жесткие ссылки?
- Как создать жесткую ссылку
- Как определить разницу между жесткой связью и символической связью
- Как найти все жесткие ссылки на файл
- Фундаментальные основы Linux. Часть VIII. Механизмы безопасной работы с файлами
- Глава 33. Ссылки на файлы
- Структуры inode
- О директориях
- Жесткие ссылки
- Символьные ссылки
- Удаление ссылок
- Практическое задание: ссылки на файлы
- Корректная процедура выполнения практического задания: ссылки на файлы
- Как найти все жесткие ссылки (hard link) в каталоге в Linux
- Как найти все жесткие ссылки на предоставленный файл
- Примеры
- Найдите и удаляйте все жесткие ссылки на файл с именем foo в /tmp/ директории
- Справка, параметр -samefile не поддерживается моей командой find
- Символические и жесткие ссылки Linux
- Символические ссылки
- Жесткие ссылки
- Использование ссылок в Linux
- Создание символических ссылок
- Создание жестких ссылок
- Выводы
Использование жестких ссылок для линковки файлов в Linux
Существует два типа ссылок, которые вы можете создать в Linux:
- Жесткие ссылки
- Символические ссылки
Символическая ссылка очень похожа на ярлык на рабочем столе в Windows. Символическая ссылка просто указывает на местоположение файла.
Удаление символической ссылки не влияет на физический файл, на который указывает ссылка.
Символическая ссылка может указывать на любой файл в текущей файловой системе или даже в других файловых системах. Это делает его более гибким, чем жесткая ссылка.
Жесткая ссылка – это тот же файл, на который она ссылается, но с другим именем. Самый простой способ думать об этом заключается в следующем:
Представь, что ты родился с именем Роберт. Другие люди могут знать вас как Робби, Боб, Бобби или Роб. Каждый человек будет говорить о том же человеке.
Каждая ссылка добавляет 1 к счетчику ссылок, что означает удаление физического файла, который необходимо удалить для каждой ссылки.
Зачем использовать жесткие ссылки?
Жесткие ссылки обеспечивают эффективный способ организации файлов. Самый простой способ описать это со старым эпизодом Улицы Сезам.
Берт сказал Эрни убрать все свои вещи, и поэтому Эрни приступил к выполнению своей задачи. Прежде всего он решил убрать все красные вещи. «Пожарная машина красная». Итак, Эрни убирает пожарную машину.
Далее Эрни решает убрать все игрушки на колесиках. Пожарная машина имеет колеса. Итак, Эрни убрал пожарную машину.
Само собой разумеется, Берт приходит домой, чтобы найти точно такой же беспорядок, как и раньше, но Эрни убирал пожарную машину с полдюжины раз.
Представьте, что пожарная машина была просто изображением пожарной машины. Вы можете иметь разные папки на вашем компьютере следующим образом:
- Фотографии красных вещей
- Фотографии транспортных средств
- Фотографии экстренных служб
Теперь вы можете создать копию фотографии и поместить ее в каждую из папок. Это означает, что у вас есть три копии одного и того же файла, занимающие в три раза больше места.
Категоризация фотографий путем их копирования может не занимать слишком много места, но если вы попробуете то же самое с видео, вы значительно сократите свое дисковое пространство.
Жесткая ссылка не занимает места вообще. Таким образом, вы можете хранить одно и то же видео в разных категориях (например, по годам, жанрам, актерам, режиссерам), не уменьшая места на диске.
Как создать жесткую ссылку
Вы можете создать жесткую ссылку, используя следующий синтаксис:
Например, на изображении выше у нас есть папка с музыкой Алисы Купер, которая называется Trash, по пути/home/gary/Music/Alice Cooper/Trash. В этой папке 10 песен, одна из которых классическая Poison.
Теперь Poison – это рок-трек, поэтому мы создали папку с именем Rock в папке music и создали жесткую ссылку на Poison, введя следующий файл:
Это хороший способ организовать музыку.
Как определить разницу между жесткой связью и символической связью
Вы можете определить, имеет ли файл жесткую ссылку, с помощью команды ls:
Стандартный файл без ссылок будет выглядеть следующим образом
- -rw-r – r– = разрешения
- 1 = количество ссылок
- гэри = группа
- Гари = владелец
- 1000 = размер файла
- 18 декабря = дата
- 21:52 = время
- toxic.mp3 = имя файла
Если бы это была жесткая ссылка, результат выглядел бы следующим образом:
Обратите внимание, что в столбце количества ссылок отображается 2. Каждый раз, когда создается жесткая ссылка, это число будет увеличиваться.
Символическая ссылка будет выглядеть следующим образом:
Вы можете ясно видеть, что один файл указывает на другой.
Как найти все жесткие ссылки на файл
Все файлы в вашей системе Linux содержат номер инода, который однозначно идентифицирует файл. Файл и его жесткая ссылка будут содержать один и тот же индекс.
Чтобы увидеть номер индекса для файла, введите следующую команду:
Вывод для одного файла будет следующим:
Чтобы найти жесткие ссылки на файл, вам просто нужно выполнить поиск файлов по всем файлам с одинаковым индексом (т. Е. 1234567).
Вы можете сделать это с помощью следующей команды:
Источник
Фундаментальные основы Linux. Часть VIII. Механизмы безопасной работы с файлами
Глава 33. Ссылки на файлы
В файловой системе среднестатистического компьютера, работающего под управлением Linux, используется множество жестких и символьных ссылок на файлы .
Для понимания концепции ссылок на файлы в рамках файловой системы следует в первую очередь разобраться со структурами inode .
Структуры inode
Содержимое структуры inode
Inode является структурой данных, содержащей относящиеся к файлу метаданные. При сохранении нового файла на диске в рамках файловой системы происходит сохранение не только самого содержимого файла (данных), но и таких дополнительных параметров файла, как имя, дата создания, права доступа и других. Вся эта информация (за исключением имени файла и его содержимого) сохраняется в рамках структуры inode , соответствующей данному файлу.
Таблица структур inode
В приведенном выше примере вывода команды df -i вы можете обнаружить процентные показатели использования структур inode для некоторых смонтированных файловых систем . Данный показатель не приводится для устройства /dev/sdb5 ввиду того, что на этом устройстве используется файловая система fat .
Идентификатор структуры inode
Три этих файла создавались последовательно, причем им соответствуют три различные структуры inode (идентификаторы которых выводятся в первом столбце). Вся информация из вывода данной команды ls , за исключением имен файлов (которые хранятся в файле директории), содержится в структурах inode .
Структуры inode и содержимое файлов
Данные, выводимые при использовании команды cat , содержатся не в структуре inode , а где-то на диске. Структура inode содержит указатель на эти данные.
О директориях
Директория является таблицей
В выводе приведены пять имен файлов, а также информация об их соответствии пяти структурам inode. Имя файла, представленное символом точки ( . ), соответствует текущей директории, а имя файла, представленное двумя символами точки ( .. ) — родительской директории. Имена трех других файлов соответствуют различным структурам inode.
Жесткие ссылки
Создание жестких ссылок
Оба файла будут использовать одну и ту же структуру inode, поэтому они в любом случае будут иметь одни и те же права доступа, а также одного и того же владельца. Оба этих файла также будут иметь одно и то же содержимое. На самом деле, оба этих файла будут идентичными и это означает, что вы можете безопасно удалить оригинальный файл и это никак не повлияет на существование файла, являющегося жесткой ссылкой. Структура inode содержит счетчик, использующийся для подсчета количества жестких ссылок на нее. В момент, когда значение счетчика уменьшается до нуля, содержимое структуры inode очищается.
Поиск жестких ссылок
Символьные ссылки
Права доступа к символьной ссылке не имеют значения, так как в итоге будут учитываться права доступа к целевому файлу. Жесткие ссылки ограничены своими разделами дисков (ввиду того, что они указывают на структуры inode), в то время, как символьные ссылки могут указывать на какие угодно файлы (из других файловых систем, даже сетевых).
Удаление ссылок
Практическое задание: ссылки на файлы
1. Создайте два файла с именами winter.txt и summer.txt, поместите какие-либо текстовые данные в них.
2. Создайте жесткую ссылку на файл winter.txt с именем hlwinter.txt.
3. Выведите информацию об идентификаторах структур inode, соответствующих этим трем файлам, жесткие ссылки должны использовать структуры inode файлов, на которые они ссылаются.
4. Используйте утилиту find для вывода информации о файлах, на которые установлены жесткие ссылки.
5. Все данные файла, помимо двух типов данных, хранятся в соответствующей структуре inode. Назовите эти два типа данных!
6. Создайте символьную ссылку на файл summer.txt с именем slsummer.txt.
7. Найдите все файлы с идентификатором структуры inode, равным 2. Какой вывод вы можете сделать на основе полученной информации?
8. Исследуйте директории /etc/init.d/ /etc/rc.d/ /etc/rc3.d/ . обнаружили ли вы ссылки на файлы в них?
9. Выведите список файлов директории /lib с помощью команды ls -l.
10. Используйте утилиту find для поиска в вашей домашней директории обычных файлов, на которые не установлено (!) ни одной жесткой ссылки.
Корректная процедура выполнения практического задания: ссылки на файлы
1. Создайте два файла с именами winter.txt и summer.txt, поместите какие-либо текстовые данные в них.
2. Создайте жесткую ссылку на файл winter.txt с именем hlwinter.txt.
3. Выведите информацию об идентификаторах структур inode, соответствующих этим трем файлам, жесткие ссылки должны использовать структуры inode файлов, на которые они ссылаются.
4. Используйте утилиту find для вывода информации о файлах, на которые установлены жесткие ссылки.
5. Все данные файла, помимо двух типов данных, хранятся в соответствующей структуре inode. Назовите эти два типа данных!
Имя файла, которое хранится в файле директории и данные файла, которые хранятся где-либо на диске.
6. Создайте символьную ссылку на файл summer.txt с именем slsummer.txt.
7. Найдите все файлы с идентификатором структуры inode, равным 2. Какой вывод вы можете сделать на основе полученной информации?
Можно сделать вывод о том, что в рамках системы существует более одной таблицы структур inode (по одной для каждого отформатированного раздела + виртуальные файловые системы).
8. Исследуйте директории /etc/init.d/ /etc/rc.d/ /etc/rc3.d/ . обнаружили ли вы ссылки на файлы в них?
9. Выведите список файлов директории /lib с помощью команды ls -l.
10. Используйте утилиту find для поиска в вашей домашней директории обычных файлов, на которые не установлено (!) ни одной жесткой ссылки.
Источник
Как найти все жесткие ссылки (hard link) в каталоге в Linux
У меня есть файл с именем /etc/passwd i , и я хотел бы найти все жесткие ссылки на этот файл в каталоге. Как узнать все остальные жесткие ссылки в каталоге /etc/passwd in/backups/ ? Как найти все жесткие ссылки на данный файл с помощью командной строки Linux или Unix?
Вы можете использовать команду find в Linux, Apple MacOS, FreeBSD и других операционных системах, чтобы узнать все жесткие ссылки.
Как найти все жесткие ссылки на предоставленный файл
Жесткая ссылка — это не что иное, как конкретное местоположение физических данных. Вы даете разные имена, относящиеся к одному и тому же файлу. Файл относится к тому же inode, что и имя. Жесткие ссылки на файл foo можно создать следующим образом:
В приведенном выше примере bar и foobar являются другими именами файла foo. Lля поиска всех жестких ссылок для файла foo в текущем каталоге cинтаксис будет выглядеть следующим образом:
Примеры
Если есть файл с именем /etc/passwd и вам нужно получить все жесткие ссылки на него, которые существуют в каталоге /backups/ , запустите:
Примеры возможных выводов данных:
Если вы не хотите спускать каталоги на другие файловые системы, смонтированные однажды, попробуйте ввести:
Найдите и удаляйте все жесткие ссылки на файл с именем foo в /tmp/ директории
Введите следующую команду:
Примеры возможных выводов данных:
Справка, параметр -samefile не поддерживается моей командой find
Найдите номер файлов inode, для этого введите:
Примеры возможных выводов данных:
Первый столбец вышеприведенного вывода отображает индекс inode # 4065089 . Теперь альтернативный синтаксис выглядит следующим образом для поиска всех жестких ссылок (hard link) для файла с именем /tmp/demo.txt , используя inode # 4065089 :
Примеры возможных выводов данных:
Чтобы найти и удалить все жесткие ссылки (hard link) на файл с номером inode # 4065089 , запустите:
Вот пример моей сессии:
Рисунок 01: Как найти все жесткие ссылки (hard link) на заданное имя файла.
Источник
Символические и жесткие ссылки Linux
Символические и жесткие ссылки — это особенность файловой системы Linux, которая позволяет размещать один и тот же файл в нескольких директориях. Это очень похоже на ярлыки в Windows, так как файл на самом деле остается там же где и был, но вы можете на него сослаться из любого другого места.
В Linux существует два типа ссылок на файлы. Это символические и жесткие ссылки Linux. Они очень сильно отличаются и каждый тип имеет очень важное значение. В этой небольшой статье мы рассмотрим чем же отличаются эти ссылки, зачем они нужны, а также как создавать ссылки на файлы в Linux.
Символические ссылки
Символические ссылки более всего похожи на обычные ярлыки. Они содержат адрес нужного файла в вашей файловой системе. Когда вы пытаетесь открыть такую ссылку, то открывается целевой файл или папка. Главное ее отличие от жестких ссылок в том, что при удалении целевого файла ссылка останется, но она будет указывать в никуда, поскольку файла на самом деле больше нет.
Вот основные особенности символических ссылок:
- Могут ссылаться на файлы и каталоги;
- После удаления, перемещения или переименования файла становятся недействительными;
- Права доступа и номер inode отличаются от исходного файла;
- При изменении прав доступа для исходного файла, права на ссылку останутся неизменными;
- Можно ссылаться на другие разделы диска;
- Содержат только имя файла, а не его содержимое.
Теперь давайте рассмотрим жесткие ссылки.
Жесткие ссылки
Этот тип ссылок реализован на более низком уровне файловой системы. Файл размещен только в определенном месте жесткого диска. Но на это место могут ссылаться несколько ссылок из файловой системы. Каждая из ссылок — это отдельный файл, но ведут они к одному участку жесткого диска. Файл можно перемещать между каталогами, и все ссылки останутся рабочими, поскольку для них неважно имя. Рассмотрим особенности:
- Работают только в пределах одной файловой системы;
- Нельзя ссылаться на каталоги;
- Имеют ту же информацию inode и набор разрешений что и у исходного файла;
- Разрешения на ссылку изменяться при изменении разрешений файла;
- Можно перемещать и переименовывать и даже удалять файл без вреда ссылке.
Использование ссылок в Linux
Теоретические отличия вы знаете, но осталось закрепить все это на практике, поэтому давайте приведем несколько примеров работы со ссылками в Linux. Для создания символических ссылок существует утилита ln. Ее синтаксис очень прост:
$ ln опции файл_источник файл_ссылки
Рассмотрим опции утилиты:
- -d — разрешить создавать жесткие ссылки для директорий суперпользователю;
- -f — удалять существующие ссылки;
- -i — спрашивать нужно ли удалять существующие ссылки;
- -P — создать жесткую ссылку;
- -r — создать символическую ссылку с относительным путем к файлу;
- -s — создать символическую ссылку.
Создание символических ссылок
Сначала создайте папку test и перейдите в нее:
mkdir test && cd test
Затем создайте файл с именем source с каким-либо текстом:
echo «текст текст текст текст» > source
$ cat source
Файл готов, дальше создадим символическую ссылку Linux, для этого используется команда ln с опцией -s:
ln -s source softlink
Попробуем посмотреть содержимое файла по ссылке:
Как видите, нет никакой разницы между ней и исходным файлом. Но утилита ls покажет что это действительно ссылка:
Несмотря на то, что содержимое одинаковое, здесь мы видим, что адрес иноды и права доступа к файлам отличаются, кроме того, явно показано что это символическая ссылка Linux.
Теперь удалите исходный файл и посмотрите что будет:
Вы получите ошибку, что такого файла не существует, потому что мы действительно удалили исходный файл. Если вы удалите ссылку, то исходный файл останется на месте.
Создание жестких ссылок
Снова создайте файл source с произвольным текстом:
echo «текст текст текст текст» > source
$ cat source
Теперь создадим жесткую ссылку Linux. Для этого достаточно вызвать утилиту без параметров:
ln source hardlink
Посмотрите содержимое файла:
Данные те же самые, а если мы посмотрим вывод утилиты ls, то увидим что inode и права доступа тоже совпадают:
Если для одного из файлов поменять разрешения, то они изменяться и у другого. Теперь удалите исходный файл:
Затем посмотрите содержимое:
Как видите, ничего не произошло и ссылка по-прежнему указывает на нужный участок диска, это главное отличие жесткой ссылки от символической. Мы можем сделать вывод, что жесткая ссылка linux это обычный файл. Каждый файл имеет как минимум одну ссылку, но для некоторых мы можем создать несколько ссылок.
Выводы
Это все, что вам было необходимо знать про символические и жесткие ссылки linux. Надеюсь, вы получили общее представление об этих возможностях файловой системы и сможете использовать их для решения своих задач.
На завершение видео про ссылки в Linux:
Источник