- ИТ База знаний
- Полезно
- Навигация
- Серверные решения
- Телефония
- Корпоративные сети
- Команда Ln: как создавать символические ссылки в Linux
- Команда Ln для создания символических ссылок
- Создать символическую ссылку на каталог Linux
- Принудительно перезаписать символические ссылки
- Удаление ссылок
- Soft Links против Hard Links
- Символические ссылки (Soft Links)
- Жесткие ссылки (Hard Links)
- Как скопировать символьные ссылки с одной машины на другую?
- Как скопировать символические ссылки?
- Как скопировать символьные ссылки?
- 9 ответов
- Урок 7. Копирование файлов и каталогов, жесткие и символьные ссылки
ИТ База знаний
Курс по Asterisk
Полезно
— Узнать IP — адрес компьютера в интернете
— Онлайн генератор устойчивых паролей
— Онлайн калькулятор подсетей
— Калькулятор инсталляции IP — АТС Asterisk
— Руководство администратора FreePBX на русском языке
— Руководство администратора Cisco UCM/CME на русском языке
— Руководство администратора по Linux/Unix
Навигация
Серверные решения
Телефония
FreePBX и Asterisk
Настройка программных телефонов
Корпоративные сети
Протоколы и стандарты
Команда Ln: как создавать символические ссылки в Linux
Жесткие и мягкие ссылки
4 минуты чтения
Символические ссылки используются в Linux для управления файлами и их сопоставления.
Мини — курс по виртуализации
Знакомство с VMware vSphere 7 и технологией виртуализации в авторском мини — курсе от Михаила Якобсена
В этом руководстве вы узнаете, как использовать команду ln для создания символических ссылок в Linux.
Команда Ln для создания символических ссылок
Чтобы использовать команду ln, откройте окно терминала и введите команду в следующем формате:
- По умолчанию команда ln создает hard link (жесткая ссылка).
- Используйте параметр -s , чтобы создать символическую ссылку, она же soft link.
- Параметр -f заставит команду перезаписать уже существующий файл.
- Source — это файл или каталог, на который делается ссылка.
- Destination — это место для сохранения ссылки — если это поле не заполнено, символическая ссылка сохраняется в текущем рабочем каталоге.
Например, создайте символическую ссылку с помощью:
Это создает символическую ссылку link file.text , которая указывает на testfile.txt .
Чтобы проверить, создана ли символическая ссылка, используйте команду ls :
Создать символическую ссылку на каталог Linux
Символическая ссылка может относиться к каталогу. Чтобы создать символическую ссылку на каталог в Linux:
В этом примере создается символическая ссылка с именем stock_photos в домашнем каталоге
/ . Ссылка относится к каталогу stock_photos на внешнем диске external_drive .
Примечание. Если система подключена к другому компьютеру, например к корпоративной сети или удаленному серверу, символические ссылки могут быть связаны с ресурсами в этих удаленных системах.
Принудительно перезаписать символические ссылки
Вы можете получить сообщение об ошибке, как показано на изображении ниже:
Сообщение об ошибке означает, что в месте назначения уже есть файл с именем link_file.txt . Используйте параметр -f , чтобы система перезаписывала целевую ссылку:
Примечание. Использование опции -f навсегда удалит существующий файл.
Удаление ссылок
Если исходный файл будет перемещен, удален или станет недоступным (например, сервер отключится), ссылку нельзя будет использовать. Чтобы удалить символическую ссылку, используйте команду rm (remove) или unlink :
Soft Links против Hard Links
Команду ln можно использовать для создания двух разных типов ссылок:
- Hard Links (жесткие ссылки)
- Soft Links (символические или мягкие ссылки)
Символические ссылки (Soft Links)
Символическая ссылка, иногда называемая мягкой ссылкой или soft link, указывает на расположение или путь к исходному файлу. Она работает как гиперссылка в Интернете.
Вот несколько важных аспектов символической ссылки:
- Если файл символьной ссылки удаляется, исходные данные остаются.
- Если исходный файл будет перемещен или удален, символическая ссылка работать не будет.
- Символическая ссылка может относиться к файлу в другой файловой системе.
- Символические ссылки часто используются для быстрого доступа к часто используемым файлам без ввода всего местоположения.
Жесткие ссылки (Hard Links)
Когда файл хранится на жестком диске, происходит несколько вещей:
- Данные физически записываются на диск.
- Создается справочный файл, называемый индексом, который указывает на расположение данных.
- Имя файла создается для ссылки на данные inode.
Жесткая ссылка работает путем создания другого имени файла, которое ссылается на данные inode исходного файла. На практике это похоже на создание копии файла.
Вот несколько важных аспектов жестких ссылок:
- Если исходный файл удален, к данным файла все равно можно будет получить доступ через другие жесткие ссылки.
- Если исходный файл перемещен, жесткие ссылки по-прежнему работают.
- Жесткая ссылка может относиться только к файлу в той же файловой системе.
- Если количество жестких ссылок равно нулю, индексный дескриптор и данные файла удаляются безвозвратно.
Онлайн курс по Linux
Мы собрали концентрат самых востребованных знаний, которые позволят тебе начать карьеру администратора Linux, расширить текущие знания и сделать уверенный шаг к DevOps
Источник
Как скопировать символьные ссылки с одной машины на другую?
Давайте предположим, что у меня есть две идентичные системы. В первой системе я создал символическую ссылку. На втором я хочу скопировать эту символическую ссылку через sftp, и символьная ссылка будет работать одинаково (то есть, если ссылка на символическую ссылку /etc/ , после ее копирования, будет скопирована только символическая ссылка и только символическая ссылка (не связанные файлы))
Любые идеи о том, как я могу это сделать / если я могу это сделать? Я только хочу скопировать символическую ссылку, ничего больше; просто ссылка.
Если вы скопируете символическую ссылку, вы можете скопировать архив на удаленный компьютер любым удобным для вас способом. Распаковав его, вы обнаружите, что скопировали только символическую ссылку и ничего больше. Например:
Чтобы проверить это, сначала я создал текстовый файл.
Затем создайте символическую ссылку на файл и сожмите ее в tar-архив.
Перенесите этот файл на другой компьютер, а затем распакуйте его:
Вы обнаружите, что есть символическая ссылка, но не оригинальный файл, на который она указала.
Конечно, если вы хотите передать как исходный файл, так и символьную ссылку, сохранив их связь, вы можете поместить их оба в архив, и они будут перенесены, и символическая ссылка все равно должна быть правильно указана на исходный файл при распаковке. тарбол в месте назначения.
Немного неясно, как именно вы хотите иметь дело с символической ссылкой. Насколько я понимаю, вы хотите воссоздать символическую ссылку в другой системе. Симлинки зависят от файловой системы, об этом должен знать протокол, используемый для копирования файлов. Хорошим примером является использование rsync с -a опцией.
конкретнее, -l вариант, но -a , вероятно, то, что вы хотите.
Он будет воссоздавать символические ссылки без перетягивания целей (разыменование ссылок).
Источник
Как скопировать символические ссылки?
У меня есть каталог, который содержит несколько символических ссылок:
Мне нужно скопировать их в текущий каталог. Получающиеся ссылки должны быть независимы от их прототипов и вести непосредственно к их целевым объектам.
- cp -s создает ссылки на ссылки, которые не соответствуют поведению.
- cp -s -L отказывается копировать ссылки на каталоги
- cp -s -L -r отказывается копировать относительные ссылки в нерабочий каталог
Что я должен делать?
Со страницы руководства:
Лично я использую cp -av для большинства моих тяжелых копий. Таким образом, я могу сохранить все — даже рекурсивно — и посмотреть результат. Конечно, это всего лишь личные предпочтения.
Что касается того, почему другие ваши варианты не сделали того, что вы ожидали, вместо копирования создайте -s ссылку и перейдите по ссылкам в источнике, чтобы найти файл для копирования вместо того, чтобы копировать сами ссылки. -L
Как написано на странице руководства, используйте -P .
Если ссылки содержат относительные пути, то копирование ссылки не будет корректировать относительный путь. Используйте readlink , с переключателем, -f чтобы следовать рекурсивно, чтобы получить абсолютный путь ссылки. Например:
Если сохранение относительных путей является то , что вы хотите, чем вариант -P с cp , как сказал Игнасио Васкес-Abrams, является то , что вам нужно.
Как некоторые прокомментировали:
Я использовал следующее, чтобы дублировать действительно большой каталог. Все символические ссылки были сохранены, копия была сделана рекурсивно, и я смог получить некоторую визуальную обратную связь с процессом:
В большинстве случаев, когда мне нужно скопировать много символических ссылок, я на самом деле пытаюсь отразить дерево каталогов. Поэтому я хочу символические ссылки и все остальное.
Это избыточно для копирования всего нескольких символических ссылок, но если вы на самом деле пытаетесь скопировать целое дерево, это может быть очень полезно:
Используйте смолу .
tar не разрешает символическую ссылку по умолчанию, поэтому символические ссылки в зеркальной копии будут указывать на те же места, что и в исходном дереве.
Этот трюк использует подоболочки, чтобы получить команду tar в корне каталога, который нужно отразить; вы можете оставить один из них (вместе со связанной командой cd ), если вы уже находитесь в каталогах src или dest :
Опять же, это не подходит для каждого случая, когда вы хотите скопировать символические ссылки, но это очень полезный фрагмент кода.
Источник
Как скопировать символьные ссылки?
у меня есть каталог, содержащий символические ссылки:
мне нужно скопировать их в текущий каталог. Полученные связи должны быть независимы от своих прототипов и вести непосредственно к их целевым объектам.
- cp -s создает ссылки на ссылки, не соответствующие поведению.
- cp -s -L отказывается копировать ссылки в каталогах
- cp -s -L -r отказывается копировать ссылки на нерабочие каталог
9 ответов
со страницы man:
лично я использую cp -av для большинства моих тяжелых копирования. Таким образом, я могу сохранить все — даже рекурсивно — и увидеть результат. Конечно, это только личные предпочтения.
о том, почему ваши другие варианты не сделали то, что вы ожидали, -s делает ссылку вместо копирование и -L ссылки на источник, чтобы найти файл для копирования, а не копировать ссылки себе сам.
Так же, как говорит страница man, используйте -P .
если ссылки содержат относительные пути, то копирование ссылки не будет регулировать относительный путь. Используйте readlink , установив переключатель -f следовать рекурсивно, чтобы получить абсолютный путь ссылки. Например:
если вы хотите сохранить относительные пути, то опция -P на cp , как сказал Игнасио Васкес-Абрамс, это то, что вам нужно.
как некоторые прокомментировали:
я использовал следующее, чтобы дублировать действительно большой каталог. Все символические ссылки были сохранены, копия была сделана рекурсивно, и я смог получить некоторую визуальную обратную связь процесса:
большую часть времени, когда мне нужно скопировать много символических ссылок, я на самом деле пытаюсь отразить дерево каталогов. Мне нужны символические ссылки и все остальное.
это перебор для копирования всего нескольких символических ссылок, но если вы на самом деле пытаетесь скопировать целое дерево, это может быть очень полезно:
использовать tar.
tar не разрешает символическую ссылку по умолчанию, поэтому символические ссылки в зеркальной копии будут указывать на то же самое места, как те, в исходном дереве.
этот трюк использует подоболочек, чтобы получить tar команда в положение в корне каталога для зеркального отображения; вы можете оставить один из них (вместе с соответствующим cd команда) если вы уже в src или dest каталоги:
опять же, это не подходит для каждого раза, когда вы хотите скопировать символьные ссылки, но это очень полезно фрагмент знать.
Источник
Урок 7. Копирование файлов и каталогов, жесткие и символьные ссылки
Для выполнения данной операции используется команда cp (от англ. copy). Формат использования выглядит так:
cp файл_источник целевой_файл
Для примера создадим копию файла test.txt под названием test_copy.txt
Исходный файл сохранился, кроме того у нас имеется его копия.
А если в качестве целевого файла указать существующий файл?
Тогда этот файл будет перезаписан.
Чтобы этого не произошло удобно использовать опцию -i ( —interactive ). Работает также, как и с командой mv — запрашивает у пользователя подтверждение действия.
А можно копировать файл в каталог?
Да, для этого в качестве целевого файла укажи сам каталог.
Например, скопируем файл test.txt в каталог home/student/video/:
cp test.txt home/student/video или просто cp test.txt video/
А можно этой командой копировать каталоги со всем содержимым?
Да, но для этого используется специальная опция -R ( —recursive ):
cp -R каталог_источник целевой_каталог
Кстати, у скопированной копии права доступа и прочие атрибуты файла определяются в соответствии с атрибутами самого пользователя, скопировавшего файл. Чтобы сохранить первоначальные атрибуты необходимо использовать опцию -p ( —preserve ).
С командой ср можно использовать следующие опции:
Как они работают мы уже знаем.
Жесткие и символьные ссылки
Как ты уже знаешь в системе Linux существуют 2 типа ссылок: жесткие и символьные. Поговорим сначала о жестких ссылках.
Содержимое любого файла хранится на определенных секторах запоминающего устройства (жесткого диска, USB флэш, CD). Для обращения к этим областям памяти и используются жесткие ссылки, которые и называются именами файла.
То есть жесткая ссылка и имя файла это одно и то же?
Да, так и есть. Содержимое файла да и сам файл ничего не знают о присвоенных ему именах и ссылках, Поэтому можно создавать какие угодно имена/ссылки и в каком угодно количестве.
То есть можно создать 2 и более имени одного и того же файла?
Совершенно верно. Для этого существует команда ln (сокращенно от link — связывать):
ln файл жесткая_ссылка
Например, создадим ссылку для файла student.txt:
Как видно из рисунка student.txt и student_link.txt имеют одинаковые атрибуты, потому что ссылаются на один один и тот же физический файл.
Существует и другая форма записи команды ln , выглядит так:
С помощью нее создается жесткая ссылка в указанном существующем каталоге:
Как видно система создала ссылку с таким же именем.
Важно знать, что в Linux файлы не привязываются к своим именам. У каждого файла есть индексный дескриптор — описание файла, которое содержит всю информацию о файле:
- тип файла
- время создания и модификации
- владелец файла
- права доступа
- размер файла
- идентификатор файла, то есть знает в какой области памяти хранится файл
Чтобы обратиться к файлу необходимо указать его идентификатор — метку. Но запоминать все метки нереально, поэтому и используются жесткие ссылки или имена.
Имя файла привязывается к идентификатору определенного файла и таким образом позволяет обращаться к файлу только по имени.
А как узнать идентификатор файла?
С помощью команды ls -i либо ls —inod
Цифры перед каждым файлом указывают на индексный дескриптор.
Заметь, что ссылки, указывающие на один и тот же файл имеют одинаковые идентификатор и прочие атрибуты файла:
У жестких ссылок есть некоторые недостатки:
- нельзя создать ссылку на несуществующий файл
- нельзя создать ссылку на каталог
- нельзя создать ссылку на файл, который находится в другой файловой системе, например, на флэшке или в другом сетевом диске.
А как обойти все эти ограничения?
Легко. Для этого существуют символьные ссылки. Символьная ссылка это просто файл, который содержит путь к указанному файлу или каталогу. Создается она так:
ln -s файл название_ссылки либо ln —symbolic файл название_ссылки.
Ключевым здесь является опция -s. Создадим ссылку на файл test.txt:
Знак -> означает, что данный файл является символьной ссылкой. За знаком следует файл, на который ссылается ссылка.
Чтобы узнать полный путь ссылки воспользуемся командой realpath
А с каким идентификатором будет связана данная ссылка?
Как видно из рисунка индексный дескриптор и прочие атрибуты файлов у них разные. Таким образом, данный тип ссылок даже не связан с индексным дескриптором файла, на который он ссылается.
С командой ln используются следующие опции:
-f ( —force ) — принудительная перезапись ссылок без оповещения
-b ( —backup ) — создание резервных копий файла
Источник