Символические и жёсткие ссылки в Linux.
Запись от algri14 размещена 15.03.2026 в 20:24
Показов 3718
Комментарии 3
|
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link), либо содержать путь к «файлу-ИСТОЧНИКУ», тогда это «символьная ссылка» (symbolic link). Принципиальное отличие ссылок от копирования файлов заключается в том, что при копировании создается новый inode с дублированием всех данных, что удваивает занимаемое дисковое пространство. Ссылка же не создает копию данных — она лишь предоставляет альтернативный способ доступа к уже существующему файлу. Применяются для организации работы с одним и тем же файлом или каталогом из нескольких мест операционной системы, чтобы не создавать множество копий и не занимать излишнее дисковое пространство. Информация на жёстком диске содержится в виде байтов и блоков, их структуру описывают индексные дескрипторы (inode). Операционная система в свою очередь предоставляет "ИНФОРМАЦИЮ" о байтах и блоках в виде файла. Файл — это интерфейс операционной системы, в Linux ВСЁ есть файл, в том числе и ссылки. При записи "ИНФОРМАЦИИ" на диск, операционная система присваивает ей "inode" и "НАЗВАНИЕ" выбранное пользователем, это и есть "файл-ИСТОЧНИК". Операционная система с помощью «файла-ИСТОЧНИКА» указывает и предоставляет пользователю «ИНФОРМАЦИЮ» записанную на жёсткий диск, он является первоисточником и одновременно самой первой жёсткой ссылкой-указателем. Символические ссылки. Символическая ссылка (от англ. symbolic link) или «симлинк», не содержит внутри себя копии самого файла, она всего лишь «стрелка-указатель» на файл, своего рода аналог ярлыка в Windows. Обладает собственными правами доступа, так как сама является небольшим файлом, в котором прописан путь до целевого «файла-источника». Удалив «файл-симлинк», «файл-источник» не удаляется, именно поэтому такие ссылки называют «мягкими» (soft links). Схема работы симлинка. «СИМЛИНК» только указывает на => «файл-ИСТОЧНИК», который в свою очередь уже предоставляет пользователю «ИНФОРМАЦИЮ» записанную на жёсткий диск. Если удалить, переименовать или переместить «файл-ИСТОЧНИК», то ссылка перестанет работать. В графическом файловом менеджере у «симлинка» в углу значка (файла или папки) стоит "стрелка" — которая поясняет, что это и есть «симлинк». При просмотре списка файлов, каталогов в терминале, с помощью команды " ls " , у символьных ссылок в конце названия стоит знак "@", а слеш "/" указывает на действительные каталоги (не симлинки).[user@localhost ~]$ ls tmp/, Документы@, 'Рабочий стол'/, file.txt, симлинк.txt@Основные свойства симлинков.
ls -li У целевого файла и ссылки разные inode => 225877 и 226500 (числа в начале строки), число "1" указывает количество ссылок на inode, говорит о том, что на "ИНФОРМАЦИЮ" ссылается только один файл (без разницы, будь он "файл-источник" или файл-ссылка). В данном случае у каждого файла своя информация, "file-источник" ссылается на "ИНФОРМАЦИЮ" с данными, а "link-симлинк" ссылается на информацию в которой прописан только путь к "file-источнику".
Создание симлинка. Симлинк можно создать как в файловом менеджере (например, Dolphin от KDE), пункт меню «Создать символическую ссылку», так и в терминале утилитой "ln" (из пакета coreutils): ln -s /путь/к/файлу/файл-ИСТОЧНИК /путь/к/симлинку/файл-СИМЛИНКОпция " -s " определяет, что симлинк будет «мягкой» ссылкой, без неё операционная система создаст «жёсткую» ссылку.«ИСТОЧНИК» — может быть файлом или каталогом. «СИМЛИНК» — может иметь одинаковое название с «ИСТОЧНИКОМ», если они находятся в разных каталогах. Симлинки свободно копируются, переименовываются и переносятся в другое место, сохраняя свои свойства, изменяется только их inode. Поиск символических ссылок. Никакого учёта символических ссылок в файловой системе нет. Для их поиска используют утилиты "find" или "symlinks" Поиск симлинков в текущем каталоге рекурсивно (т. е. и в подкаталогах): find . -type l Одна точка (.) — означает поиск в текущем каталоге. Две точки (..) — это родительский, предыдущий каталог. Узнать на что указывает симлинк: readlink /путь/к/симлинку/СИМЛИНКНайти как рабочие, так и битые ссылки: symlinks . - в первой строке, — рабочий симлинк - во второй, — битый симлинк, "файл2-источник" переименован, перемещён или удалён Поиск битых ссылок: find . -xtype lsymlinks [ОПЦИИ -cdorstvC] путь/к/каталогу/КАТАЛОГдля рукурсивного поиска требуется указать опцию " -r " symlinks -r /путь/к/каталогу/КАТАЛОГ symlinks -r . | grep '^dangling:' найдёт только битые ссылкиУдаление симлинков: rm /путь/к/симлинку/СИМЛИНКили unlink /путь/к/симлинку/СИМЛИНКВНИМАНИЕ! Если СИМЛИНК является каталогом и случайно в конце команды поставить слеш " / " (обозначает вхождение в каталог), то симлинк останется на месте, а удалится содержимое каталога-источника, на который этот симлинк указывает. В случае если СИМЛИНК это файл, то команда на удаление не сработает — и симлинк, и файл-источник останутся на месте; система сообщит об ошибке: невозможно удалить, нет такого файла или каталога.Удалить нерабочие симлинки: symlinks -d .dangling: /home/имя_юзера/файл-симлинк -> /mnt/archive/файл-источникЕсли команда запущена из каталога " ~/", т. е. из Домашней папки "имя_юзера", то удалит все "битые" ссылки только в этом каталоге /home/имя_юзера/Жёсткие ссылки. Жёсткая ссылка (hard link) — это дополнительная запись в файловой системе с указанием на индексный дескриптор (inode) «файла-источника», но не копия этого файла. В файловой системе выглядит как ещё один файл, имеет те же права доступа, владельца, дату изменения, что и целевой «файл-источник». Создавая жесткую ссылку на «файл-источник», создаётся «файл-синоним» на одни и те же данные, не дублируя физическое содержимое «файла-источника». По сути и «файл-источник», и «файл-синоним» для операционной системы оба являются жёсткими ссылками на «ИНФОРМАЦИЮ» записанную на жёсткий диск. Схема работы хардлинка. Как уже было сказано выше, — операционная система с помощью «файла-ИСТОЧНИКА» предоставляет и указывает пользователю на «ИНФОРМАЦИЮ» записанную на жёсткий диск. «ХАРДЛИНК», в отличии от «симлинка», напрямую, с помощью своего inode, указывает на записанную «ИНФОРМАЦИЮ», минуя указание на «файл-ИСТОЧНИК» и не зависит от него, так как у них одинаковые inode (в которых находятся метаданные о файле). Удаление «файла-ИСТОЧНИКА» не приведёт к удалению «ИНФОРМАЦИИ» с диска, если у него есть жёсткие ссылки, до тех пор пока счётчик ссылок на inode не будет равен 0, т.е. пока не удалятся все «ХАРДЛИНКИ» и «файл-ИСТОЧНИК». Например, если вы удалите файл /home/user/файл-ИСТОЧНИК, но у него остался файл /home/user/Документы/файл-ХАРДЛИНК, то «ИНФОРМАЦИЯ» с жёсткого диска удалена НЕ будет, до тех пор, пока существует «файл-ХАРДЛИНК». В графическом интерфейсе «файл-ХАРДЛИНК» смотрится как обычный файл и не имеет визуальных отличий в виде "стрелки", как у «симлинка». Команда " ls " выдаст лишь простое перечисление файлов, без знака " @ " (как у симлинка).[имя_юзера@localhost ~]$ lsПотому что — индексные дискрипторы (inode), права доступа, владелец, дата изменения — у них одинаковые. [user@localhost ~]$ ls -lihОбщее количество ссылок на их inode равно "2", т.е. на "ИНФОРМАЦИЮ" с данными (записанную на жёсткий диск) ссылаются оба файла и "original.txt", и "хардлинк.txt". Основные свойства хардлинков.
Утилита «ln» допускает возможность создания жёстких ссылок на каталог, но в большинстве дистрибутивов эту возможность блокируют. Если переместить «ХАРДЛИНК» на другой раздел, то это будет уже совершенно другой файл, так как изменится его номер inode, он перестанет быть «хардлинком» для «файла-ИСТОЧНИКА» и станет самостоятельным файлом (не ссылкой).
ВНИМАНИЕ! Применение «жестких» ссылок на каталог может повредить файловую систему, ибо практически невозможно различить жёсткую ссылку от исходного файла. Теоретически можно создать жёсткую ссылку на каталог, используя опцию -d или -F, но в большинстве дистрибутивов Linux операционная система этого не допустит, даже от root. Если файл и жёсткая ссылка находятся в разных каталогах, можно попробовать проверить mtime и другие параметры, чтобы узнать когда изменилось содержимое каталога, но даже это поможет не всегда. Если файл и ссылка находятся в одном каталоге, история удалена, то невозможно определить какой файл исходный, а какой — жёсткая ссылка, ибо у них одинаковые атрибуты. Жёсткая ссылка создаётся в терминале командой " ln " без опции "-s":[имя_юзера@localhost ~]$ ln original.txt hardlink.txtКоманда создаст «ссылку-хардлинк» в виде файла "hardlink.txt" на «файл-источник» "original.txt". В данном случае команда выполняется из " ~/", Домашней папки "имя_юзера", т. е. из /home/имя_юзера/ , без указания пути, значит «хардлинк» будет создан именно в ней.Из руководства " man ln", утилита "ln" имеет следующий синтаксис:ln [ОПЦИЯ]... [-T] ЦЕЛЬ ИМЯ_ССЫЛКИ -t, --target-directory=КАТАЛОГ указать КАТАЛОГ, в котором будут созданы ссылки -T, --no-target-directory всегда воспринимать ИМЯ_ССЫЛКИ как обычный файл ЦЕЛЬ — это имя "файла-ИСТОЧНИКА" или путь/к/файлу/файл-ИСТОЧНИК , ссылка создаётся на ЦЕЛЬ. ИМЯ_ССЫЛКИ — это имя "файла-ссылки" или путь/к/файлу/ИМЯ_ССЫЛКИ , с опцией " -s " создаётся «симлинк», без неё «хардлинк».Первая форма — создаст ссылку (хардлинк или симлинк) «ИМЯ_ССЫЛКИ» на «ЦЕЛЬ», с указанием пути или без него. Без указания пути ссылка создаётся в каталоге из которого дана команда. Вторая форма — создаст ссылку (хардлинк или симлинк) в текущем каталоге с тем же именем что и «ЦЕЛЬ», при условии, что в в нём нет файла с тем же именем. В третьей и четвёртой форме — возможно указание нескольких ЦЕЛЕЙ, о чём и говорится в руководстве к утилите " man ln" или справке "ln --help".«При использовании третьей и четвёртой форм создать в КАТАЛОГе ссылку на каждую ЦЕЛЬ.» КАТАЛОГ — это путь/к/каталогу/КАТАЛОГ в котором создаётся ссылка (хардлинк или симлинк). Создать жёсткую ссылку возможно и в графическом приложении, например Krusader (от KDE), но не все файловые менеджеры имеют такую функцию. При перемещении хардлинка в другой каталог (в пределах одного раздела), у него сохраняются все атрибуты и свойства. При простом копировании жёсткой ссылки её копия разыменовывается и превращается в самостоятельный файл. Возможно скопировать хардлинк консольной утилитой " cp" с опцией "-l",из руководства " man cp":« -l, --link — создавать жёсткие ссылки на файлы вместо копирования»[имя_юзера@localhost ~]$ cp -l хардлинк.txt /home/имя_юзера/Документы/Утилита скопирует файл "хардлинк.txt" из "Домашней папки" в "Документы" с тем же именем и свойствами хардлинка. А так же командой " ln", создавая хардлинк на хардлинк, которые оба будут указывать на один и тот же «файл-источник».После переименования хардлинка его свойства остаются прежними. Поиск жёстких ссылок: find /путь/к/КАТАЛОГу_проверки -samefile /путь/к/файлу/файл-ИСТОЧНИККаталог проверки на предмет поиска «хардлинков» должен быть в пределах одного раздела (файловой системы), что и «файл-источник». [user@localhost ~]$ find ~/ -xdev -samefile /путь/к/файлу/файл-ИСТОЧНИКСимволы " ~/" (тильда и слеш) в команде, указывают на "Домашнюю папку" пользователя "user", т. е. на /home/user/, а параметр -xdev исключает из поиска другие примонтированные (mounted) файловые системы (разделы), что ускоряет работу утилиты «find».Риски и безопасность. Хотя симлинки полезны, они могут представлять угрозу безопасности, если ими не управлять должным образом: • Атаки на симлинки: Хакеры могут создавать симлинки на важные файлы, потенциально обманывая других пользователей или программы, чтобы получить к ним доступ. • Повышение привилегий: Неправильное использование симлинков в привилегированных операциях может привести к непреднамеренному доступу. Подмена пути — программа, не проверяющая, куда ведёт симлинк, может оказаться жертвой подмены пути. Круговые ссылки — возможно создавать циклы вызывающие проблемы с некоторыми операциями. Некоторые программы резервного копирования могут некорректно работать с симлинками. Руководство для начинающих… Чтобы снизить риски, рекомендуется:
Проблема безопасности ссылок это отдельная тема, в статье затронуты лишь общие понятия, чтобы начинающие пользователи заинтересовались этими важными аспектами. Довольно хорошая статья на тему безопасности: «Как защитить жесткие и символические ссылки в CentOS / RHEL» ПРИМЕЧАНИЕ. В статье есть фразы с упоминанием о разделах, наподобие этой, — «симлинки могут ссылаться на другие разделы,» — говоря о "разделах", для упрощённого понимания, новичкам в Linux, имеются ввиду "файловые системы". Но на начальном этапе новички часто путают понятия "файловые системы" с "типом файловых систем", поэтому пришлось применить "разделы". Файловая система — это способ организации данных на жёстком диске, который определяет их запись, чтение и хранение. ФС тесно связана с ядром ОС, обеспечивая быстрый доступ к данным и надёжность операций ввода-вывода. Важно: файловая система не обязательно напрямую связана с физическим носителем информации — существуют виртуальные файловые системы, сетевые файловые системы, которые являются лишь способом доступа к файлам, находящихся на удалённом компьютере. Основные типы ФС:
Раздел — это логически выделенная область на физическом устройстве (жёсткий диск, флешка и пр.). В структуре MBR может быть только 4 основных (первичных) раздела или 3 основных плюс 1 расширенный (не содержит собственной файловой системы) с логическими разделами внутри. В структуре GPT количество разделов не ограничено. ФС создаётся на разделе, если разделов несколько, то в границах одного раздела находится только одна "ФС-1", в границах другого раздела другая "ФС-2", даже если обе они одинакового типа, например Ext4. Использованы материалы со следующих сайтов: Ссылки на сайты заинтересовавшие меня, но предупреждаю, в любом материале возможны либо ошибки, либо схематичное изложение, например команды консоли, которые не всегда стоит воспринимать прямолинейно и дословно. Сайты имеют свойство закрываться, поэтому возможно в будущем ссылки окажутся нерабочими «О мягких и жёстких ссылках в Linux.» «Кое-что об inode.» «Символические и жесткие ссылки Linux.» «Команда «.» (точка) в Linux.» «Что такое символические и жесткие ссылки в Linux.» «Символические и жесткие ссылки в Linux.» ПРИМЕЧАНИЕ: на этом сайте дана команда ln source.txt link1.txt link2.txt link3.txt, но она не создаст несколько хардлинков, либо автор ошибся, либо привёл схематический пример.«Жёсткая ссылка» (вики) , «Inode» (вики) Что такое симлинк и как его могут использовать злоумышленники Особенности файловой системы в Linux и распространенные типы Файловые системы в Linux: их структура и типы Посвящается моему первому админу «xxblx», человеку с большим терпением и необычайным умением доходчиво объяснять. Именно он пояснил мне что такое «симлинки» и как их создавать, ибо статьи в интернете были написаны слишком сложно для новичков. Поэтому я постарался как можно подробнее объяснить тему символьных и жёстких ссылок, а так же кое-что связанное с ними непосредственно. |
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 3
Комментарии
-
Не совсем так. В Windows тоже есть симлинки и симлинк там это более низкоуровенная сущность чем простой ярлык. Можно, допустим сделать симлинк на библиотеку в каталоге программы, чтобы прога "увидела" эту библиотеку, с ярлыком так не работает.
Сообщение от algri14
Сама по себе тема не такая уж и сложная, однако не только лишь все умеют или хотят нрмально писать статьи. Благо сейчас уже есть другие средства.. (хотя сейчас эти другие средства уже открыто используются и не во благо.. но, не будем о грустном..)
Сообщение от algri14
Запись от testuser2 размещена 16.03.2026 в 07:39
-
Запись от Royal_X размещена 16.03.2026 в 11:06
-
Эта статья в основном рассчитана на начинающих новичков, отсюда и пояснение Домашней папки" ~/ "(состоящей из тильды и слеша), и каталог пользователя как "имя_user", который чайники копируют дословно и вставляют в команду (вместо подстановки своего "имени"), потом не понимают, — почему команда не срабатывает. У новичков много курьёзов на начальном этапе, поэтому статья написана таким стилем.
Сообщение от algri14
Поэтому фраза написана не "аналог", а "своего рода аналог", т.е. — похожа на ярлык Windows. Но это мелочь, главная мысль раскрыта.
Сообщение от testuser2
Мне в своё время, мозг сломали и вывернули шиворот навыворот (лет 10 назад, когда был совсем чайником) строки из man'а:
ln [ОПЦИЯ]... [-T] ЦЕЛЬ ИМЯ_ССЫЛКИ
ln [ОПЦИЯ]... ЦЕЛЬ
ln [ОПЦИЯ]... ЦЕЛЬ... КАТАЛОГ
ln [ОПЦИЯ]... -t КАТАЛОГ ЦЕЛЬ…
ЦЕЛЬ, — какая цель, куда "прицель", и только админ «xxblx» всё по местам расставил. Мышление у новичков и опытных пользователей очень разное, ну как в детской сказке про букву «Я», когда девочка не могла понять букву и произносила «тыблоко», вместо «яблоко».
Если в man подставить "ИСТОЧНИК" (вместо ЦЕЛЬ), то будет понятно сразу всем чайникам. Хотя по логике ведь хардлинк делается на файл-ЦЕЛЬ, именно так думал автор мана, давая такое описание, совершенно не зная про «тыблоко» чайников.
А далее в инете много обширного материала по сопутствующим темам.Запись от algri14 размещена 16.03.2026 в 14:38


