Linux как изменить символическую ссылку

В этом руководстве мы рассмотрим, как использовать ln команду для создания символических ссылок. - BAKS.dev

Символическая ссылка, также известная как символическая ссылка или программная ссылка, представляет собой специальный тип файла, который указывает на другой файл или каталог.

Типы ссылок 

В системах Linux / UNIX есть два типа ссылок:

  • Hard links . Вы можете придумать жесткую ссылку как дополнительное имя для существующего файла. Жесткие ссылки связывают два или более имен файлов с одним и тем же индексом . Вы можете создать одну или несколько жестких ссылок для одного файла. Жесткие ссылки не могут быть созданы для каталогов и файлов в другой файловой системе или разделе.
  • Soft links. Это что-то вроде ярлыка в Windows. Это косвенный указатель на файл или каталог. В отличие от жесткой ссылки, символическая ссылка может указывать на файл или каталог в другой файловой системе или разделе.

Как использовать lnкоманду

ln утилита командной строки для создания ссылок между файлами По умолчанию lnкоманда создает жесткие ссылки. Чтобы создать символическую ссылку, используйте параметр -s( --symbolic).

lnСинтаксис команды для создания символических ссылок выглядит следующим образом :

ln -s [OPTIONS] FILE LINK

  • Если оба FILE и LINK приведены, ln создаст ссылку из файла , указанного в качестве первого аргумента ( FILE) в файл , указанный в качестве второго аргумента ( LINK).
  • Если в качестве аргумента указан только один файл или второй аргумент является точкой ( .), ln будет создана ссылка на этот файл в текущем рабочем каталоге . Имя символической ссылки будет таким же, как и имя файла, на который она указывает.

По умолчанию в случае успеха lnне выводит никаких данных и возвращает ноль.

Создание символической ссылки на файл

Чтобы создать символическую ссылку на данный файл, откройте свой терминал и введите:

ln -s source_file symbolic_link

Замените source_fileна имя существующего файла, для которого вы хотите создать символическую ссылку, и symbolic_link на имя символической ссылки.

symbolic_link Параметр является необязательным. Если вы не укажете символическую ссылку, ln команда создаст новую ссылку в вашем текущем каталоге:

В следующем примере мы создаем символическую ссылку с именем my_link.txt файла  my_file.txt:

ln -s my_file.txt my_link.txt

Чтобы убедиться, что символическая ссылка была успешно создана, используйте ls команду:

ls -l my_link.txt

Вывод будет выглядеть примерно так:

lrwxrwxrwx 1 baksdev users  4 Nov  2 23:03  my_link.txt -> my_file.txt


Символ lпредставляет собой флаг типа файла, который представляет символическую ссылку. В -> символ показан файл символическая ссылка указывает.

Создание символических ссылок на каталог

Команда для создания символической ссылки на каталог такая же, как и при создании символической ссылки на файл. Укажите имя каталога в качестве первого параметра и символическую ссылку в качестве второго параметра.

Например, если вы хотите создать символическую ссылку из /mnt/my_drive/movies каталога в ~/my_movies каталог, вы должны выполнить:

ln -s /mnt/my_drive/movies ~/my_movies

Перезапись символических ссылок 

Если вы попытаетесь создать символическую ссылку, которая уже существует , ln команда выведет сообщение об ошибке.

ln -s my_file.txt my_link.txt
ln: failed to create symbolic link 'my_link.txt': File exists

Чтобы перезаписать путь назначения символической ссылки, используйте параметр -f( --force).

ln -sf my_file.txt my_link.txt

Удаление символических ссылок

Чтобы  удалить символические ссылки, используйте команду unlink или rm.

Удаление символической ссылки с помощью rm команды аналогично удалению файла:

Независимо от того, какую команду вы используете, при удалении символической ссылки не добавляйте /косую черту в конце ее имени.

Если вы удалите или переместите исходный файл в другое место, символический файл останется висящим (сломанным) и должен быть удален.

Вывод

Для создания символической ссылки в Linux используйте lnкоманду с -s опцией.

Для получения дополнительной информации о ln команде посетите страницу руководства ln или введите man ln свой терминал.

Symlink Tutorial in Linux – How to Create and Remove a Symbolic Link

A symlink (also called a symbolic link) is a type of file in Linux that points to another file or a folder on your computer. Symlinks are similar to shortcuts in Windows.

Some people call symlinks «soft links» – a type of link in Linux/UNIX systems – as opposed to «hard links.»

Difference Between a Soft Link and a Hard Link

Soft links are similar to shortcuts, and can point to another file or directory in any file system.

Hard links are also shortcuts for files and folders, but a hard link cannot be created for a folder or file in a different file system.

Let’s look at the steps involved in creating and removing a symlink. We’ll also see what broken links are, and how to delete them.

The syntax for creating a symlink is:

ln -s <path to the file/folder to be linked> <the path of the link to be created>

ln is the link command. The -s flag specifies that the link should be soft. -s can also be entered as -symbolic.

By default, ln command creates hard links. The next argument is path to the file (or folder) that you want to link. (That is, the file or folder you want to create a shortcut for.)

And the last argument is the path to link itself (the shortcut).

How to Create a Symlink for a File – Example Command

ln -s /home/james/transactions.txt trans.txt

After running this command, you will be able to access the /home/james/transactions.txt with trans.txt. Any modification to trans.txt will also be reflected in the original file.

Note that this command above would create the link file trans.txt in your current directory. You can as well create a linked file in a folder link this:

ln -s /home/james/transactions.txt my-stuffs/trans.txt

There must be a directory already called «my-stuffs» in your current directory – if not the command will throw an error.

How to Create a Symlink for a Folder – Example Command

Similar to above, we’d use:

ln -s /home/james james

This would create a symlinked folder called ‘james’ which would contain the contents of /home/james. Any changes to this linked folder will also affect the original folder.

How to remove a symlink

Before you’d want to remove a symlink, you may want to confirm that a file or folder is a symlink, so that you do not tamper with your files.

One way to do this is:

ls -l <path-to-assumed-symlink>

Running this command on your terminal will display the properties of the file. In the result, if the first character is a small letter L (‘l’), it means the file/folder is a symlink.

You’d also see an arrow (->) at the end indicating the file/folder the simlink is pointing to.

There are two methods to remove a symlink:

How to Use Unlink to Remove a Symlink

The syntax is:

unlink <path-to-symlink>

This deletes the symlink if the process is successful.

Even if the symlink is in the form of a folder, do not append ‘/’, because Linux will assume it’s a directory and unlink can’t delete directories.

How to use rm to Remove a Symlink

As we’ve seen, a symlink is just another file or folder pointing to an original file or folder. To remove that relationship, you can remove the linked file.

Hence, the syntax is:

rm <path-to-symlink>

For example:

rm trans.txt
rm james

Note that trying to do rm james/ would result an error, because Linux will assume ‘james/’ is a directory, which would require other options like r and f. But that’s not what we want. A symlink may be a folder, but we are only concerned with the name.

The main benefit of rm over unlink is that you can remove multiple symlinks at once, like you can with files.

How to Find and Delete Broken Links

Broken links occur when the file or folder that a symlink points to changes path or is deleted.

For example, if ‘transactions.txt’ moves from /home/james to /home/james/personal, the ‘trans.txt’ link becomes broken. Every attempt to access to the file will result in a ‘No such file or directory’ error. This is because the link has no contents of its own.

When you discover broken links, you can easily delete the file. An easy way to find broken symlinks is:

find /home/james -xtype l

This will list all broken symlinks in the james directory – from files to directories to sub-directories.

Passing the -delete option will delete them like so:

find /home/james -xtype l -delete

Wrapping up

Symbolic link are an interesting feature of Linux and UNIX systems.

You can create easily accessible symlinks to refer to a file or folder that would otherwise not be convenient to access. With some practice, you will understand how these work on an intuitive level, and they will make you much more efficient at managing file systems.



Learn to code for free. freeCodeCamp’s open source curriculum has helped more than 40,000 people get jobs as developers. Get started

Символические ссылки: основы работы

29 ноября, 2021 11:42 дп
3 877 views
| Комментариев нет

Centos, Debian, FreeBSD, Linux, RHEL, Ubuntu

Символическая ссылка (симлинк, англ. symbolic link, symlink) позволяют связывать файлы и каталоги с другими файлами и каталогами. У таких ссылок есть много названий: их называют ссылками оболочки, программными или «мягкими» ссылками, ярлыками и псевдонимамами. С точки зрения пользователя символические ссылки очень похожи на обычные файлы и каталоги. Однако, взаимодействуя с ними, вы фактически взаимодействуете с целевым объектом на другом конце ссылки. Поэтому симлинк проще всего представить в виде червоточины в вашей файловой системе.

В этом руководстве мы поговорим о том, что такое символические ссылки и как их создавать с помощью командной строки Linux и команды ln.

Требования

Чтобы следовать этому руководству, вам потребуется доступ к компьютеру с операционной системой Linux. Подойдет и виртуальный сервер, к которому вы подключаетесь через SSH, и просто ваш локальный компьютер. Обратите внимание: мы проверили данный мануал на сервере Ubuntu 20.04, но приведенные в нем команды и примеры должны работать на компьютерах с любой версией любого дистрибутива Linux.

Если для выполнения инструкций вы планируете использовать свежий удаленный сервер, мы рекомендуем вам сначала подготовить сервер к работе с помощью этого материала. Вы узнаете, как настроить безопасную серверную среду, в том числе пользователя sudo и брандмауэр UFW.

Создание тестовой файловой системы

Системный вызов, необходимый для создания символических ссылок, обычно доступен в Unix-подобных и POSIX-совместимых операционных системах. Для создания ссылок мы будем использовать команду ln.

Чтобы попрактиковаться в создании символических ссылок, вы, конечно, можете использовать уже существующие в системе файлы. Однако мы рекомендуем создать специальную тестовую среду, в которой вы сможете попрактиковаться без ущерба для своей текущей файловой системы. В этом разделе вы найдете несколько команд, которые помогут вам подготовить такую среду.

Для начала давайте создадим в каталоге /tmp/ пару новых каталогов. Каталог /tmp/ предназначен для временных (temporary) файлов, то есть все хранящиеся здесь файлы и каталоги будут удалены при следующей загрузке сервера. Это очень удобно: вы можете создать столько каталогов, файлов и ссылок, сколько захотите, и не беспокоиться о том, что впоследствии они засорят систему.

Следующая команда mkdir создает сразу три каталога: сначала каталог symlinks/ внутри /tmp/, а затем – каталоги one/ и two/ внутри symlinks/.

mkdir -p /tmp/symlinks/{one,two}

Перейдите в новый каталог symlinks/:

cd /tmp/symlinks

Создайте здесь пару тестовых файлов, по одному в каждом из подкаталогов внутри symlinks/. Следующая команда создает в подкаталоге one/ файл one.txt, единственным содержимым которого является строка one:

echo "one" > ./one/one.txt

Аналогично, следующая команда создает в подкаталоге two/ файл two.txt, который содержит только строку two:

echo "two" > ./two/two.txt

Если на этом этапе запустить команду tree, чтобы отобразить содержимое каталога /tmp/symlinks и всех вложенных подкаталогов, мы получили бы такой вывод:

tree

.
├── one
│   └── one.txt
└── two
    └── two.txt

2 directories, 2 files

Примечание: Если команда tree не установлена на вашем компьютере по умолчанию, вы можете установить ее с помощью стандартного менеджера пакетов вашей системы. Например, в Ubuntu установить ее можно с помощью apt:

sudo apt install tree

Итак, мы подготовили среду и теперь можем попрактиковаться в создании символических ссылок.

Что такое жесткие ссылки?

Жесткая ссылка – это зеркальная копия исходного файла с точно таким же содержимым.

Допустим, у вас есть текстовый файл. Если вы отредактируете содержимое исходного файла, эти изменения отразятся в жесткой ссылке. Однако если вы удалите исходный файл, жесткая ссылка все равно будет работать, и вы сможете просматривать и редактировать ее, как обычную копию исходного файла. Создавая символическую ссылку на этот файл, вы по сути получаете только указатель на исходный файл. Если вы удалите исходный файл, символическая ссылка сломается, так как больше она никуда не ведет.

Жесткие ссылки широко применяются, но в некоторых случаях их следует избегать. Например, избегать их нужно внутри репозитория git, поскольку они могут создать путаницу.

По умолчанию команда ln создает жесткие ссылки. Чтобы с ее помощью создать симлинк, команде ln нужно передать параметр -s (или –symbolic).

Примечание: Поскольку символические ссылки используются чаще, чем жесткие, вы можете сразу создать псевдоним для команды ln -s:

alias ln="ln -s"

Конечно, это сэкономит вам всего несколько нажатий клавиш, но если вы создаете много символических ссылок, это может значительно упростить вам работу.

Работа с символическими ссылками

Как мы говорили ранее, создание символической ссылки – это по сути создание файла, содержащего имя целевого файла и путь к нему. Поскольку символическая ссылка – это просто ссылка на исходный файл, любые изменения, внесенные в исходный файл, будут немедленно доступны в симлинке.

Одним из возможных вариантов использования симлинков является создание в домашнем каталоге пользователя локальных каталогов, указывающих на файлы, синхронизируемые с внешним приложением, например Dropbox. Еще один вариант – создать символическую ссылку, указывающую на последнюю сборку проекта, которая находится в каталоге с динамическим именем.

На примере файлов и каталогов (мы создали их в первом разделе) попробуйте создать символическую ссылку по имени three, которая указывает на каталог one:

ln -s one three

Теперь у вас должно быть 3 каталога, один из которых указывает на другой. Чтобы получить более подробный обзор текущей структуры каталогов, вы можете использовать команду ls и вывести содержимое текущего рабочего каталога:

ls

Вы увидите:

one  three  two

Теперь в каталоге symlinks/ есть три каталога. В зависимости от вашей системы это может означать, что каталог three на самом деле является символической ссылкой. Иногда в выводе имя ссылки выделяется другим цветом или к нему добавляется символ @.

Для большей детализации вывода вы можете передать команде ls аргумент -l, чтобы определить, куда на самом деле указывает символическая ссылка:

ls -l

На экране появится:

total 8
drwxrwxr-x 2 8host 8host 4096 Oct 30 19:51 one
lrwxrwxrwx 1 8host 8host    3 Oct 30 19:55 three -> one
drwxrwxr-x 2 8host 8host 4096 Oct 30 19:51 two

Обратите внимание, ссылка three указывает на каталог one, как и ожидалось. Кроме того, в выводе его имя начинается с l, что указывает на то, что это ссылка. Два других элемента начинаются с d, что означает, что это обычные каталоги.

Символические ссылки также могут содержать символические ссылки. В качестве примера давайте попробуем связать файл one.txt из каталога three с каталогом two:

ln -s three/one.txt two/one.txt

Теперь у вас должен быть файл one.txt внутри каталога two. Вы можете проверить это с помощью следующей команды ls:

ls -l two/

total 4
lrwxrwxrwx 1 8host 8host 13 Oct 30 19:58 one.txt -> three/one.txt
-rw-rw-r-- 1 8host 8host  4 Oct 30 19:51 two.txt

В зависимости от конфигурации вашего терминала ссылка (выделенная выше) может отображаться в красном цвете, что указывает на то, что она не работает. Хотя ссылка и была создана, но для ее создания использовался относительный путь. Ссылка не работает, потому что каталог two не содержит каталога three с файлом one.txt в нем.

К счастью, вы можете исправить эту ситуацию при помощи команды ln. Она может создать симлинк относительно расположения ссылки с помощью аргумента -r (или –relative).

Однако даже с флагом -r вы не сможете исправить неработающую символическую ссылку. Причина ошибки в том, что символическая ссылка уже существует, и вы не сможете перезаписать ее, не добавив аргумент -f (или –force):

ln -srf three/one.txt two/one.txt

Теперь у вас есть файл two/one.txt, он связан с three/one.txt, который является ссылкой на one/one.txt.

Вложение символических ссылок может быстро превратиться в путаницу, но многие приложения умеют делать подобные структуры ссылок более понятными. Например, команда tree покажет, что отображаемая цель ссылки на самом деле соответствует расположению исходного файла, а не самой ссылке:

tree

.
├── one
│   └── one.txt
├── three -> one
└── two
    ├── one.txt -> ../one/one.txt
    └── two.txt

3 directories, 3 files

Теперь, когда все файлы связаны ссылками, мы можем взглянуть, как символические ссылки работают с файлами, если в содержимое файла меняется.

Чтобы понять, что содержат ваши файлы, выполните следующую команду cat.

cat {one,two,three}/one.txt

Она выведет на экран содержимое файла one.txt в каждом из трех каталогов, созданных вами в этом руководстве:

one
one
one

Затем обновите содержимое исходного файла one.txt в каталоге one/:

echo "1. One" > one/one.txt

Снова проверьте содержимое каждого файла:

cat {one,two,three}/one.txt

Вы получите такой результат:

1. One
1. One
1. One

Эти данные подтверждают, что любые изменения, внесенные в исходный файл, будут немедленно отражены в симлинках.

Теперь попробуем сделать обратное – изменить содержимое одной из символических ссылок. Выполните следующую команду, чтобы изменить содержимое файла one.txt в каталоге three/:

echo "One and done" > three/one.txt

Затем еще раз проверьте содержимое каждого файла:

cat {one,two,three}/one.txt

На экране появится:

One and done
One and done
One and done

Поскольку измененная вами символическая ссылка является указателем на другой файл, любое изменение, внесенное в симлинк, будет немедленно отражено в исходном файле, а также в любых других его симлинках.

Заключение

Символические ссылки невероятно полезны, но у них есть определенные ограничения. Имейте в виду: если вы переместите или удалите исходный файл или каталог, все существующие симлинки, указывающие на него, будут повреждены. Этот сценарий не предлагает автоматического обновления или исправления. Однако если вы будете работать осторожно, вы найдете символическим ссылкам множество применений.

Tags: Linux, Ubuntu 20.04

Затем есть три способа изменить символическую ссылку:

  1. Используйте ln с -f force и даже для каталогов -n (inode можно использовать повторно): ln -sfn / some / new / path имя ссылки.
  2. Удалите символическую ссылку и создайте новую (даже для каталогов): rm linkname; ln -s / some / new / path имя ссылки.

Можете ли вы отредактировать файл символьной ссылки?

Нет. Системный вызов символической ссылки вернет EEXIST, если новый путь уже существует. Вы можете ссылаться только с нового узла в файловой системе.

Можно ли переименовать символьную ссылку?

Что произойдет с символической ссылкой, если мы переименуем файл? После перемещения файла, на который указывает символическая ссылка, символическая ссылка сломано ака висящая символическая ссылка. Вы должны удалить его и создать новый, если хотите указать на новое имя файла.

Как изменить символическую ссылку?

Поскольку символические ссылки не имеют режимов chmod не влияет на символические ссылки. Если файл обозначает каталог, chmod изменяет режим каждого файла во всем поддереве, подключенном в этот момент. Не переходите по символическим ссылкам. Поскольку у символьных ссылок нет режимов, chmod не влияет на символьные ссылки.

Как удалить символическую ссылку в Linux?

Чтобы удалить символическую ссылку, используйте либо команда rm или unlink, за которой следует имя символической ссылки в качестве аргумента. При удалении символической ссылки, указывающей на каталог, не добавляйте косую черту в конце имени символической ссылки.

Почему нет жестких ссылок на каталоги?

Причина жесткой привязки каталогов не допускается немного технический. По сути, они нарушают структуру файловой системы. В любом случае вам не следует использовать жесткие ссылки. Символические ссылки позволяют использовать большинство тех же функций, не вызывая проблем (например, ln -s target link).

Как создать символическую ссылку?

Чтобы создать символическую ссылку, используйте параметр -s (–символический). Если заданы и FILE, и LINK, ln создаст ссылку из файла, указанного в качестве первого аргумента (FILE), на файл, указанный в качестве второго аргумента (LINK).

Что будет, если вы удалите символическую ссылку?

Если символическая ссылка удалена, его цель остается незатронутой. Если символическая ссылка указывает на цель, и когда-то позже эта цель перемещается, переименовывается или удаляется, символическая ссылка не обновляется или удаляется автоматически, но продолжает существовать и по-прежнему указывает на старую цель, теперь несуществующее местоположение или файл.

Как найти символьную ссылку?

Чтобы просмотреть символические ссылки в каталоге:

  1. Откройте терминал и перейдите в этот каталог.
  2. Введите команду: ls -la. Это будет длинный список всех файлов в каталоге, даже если они скрыты.
  3. Файлы, начинающиеся с l, являются вашими файлами символических ссылок.

Изучение символических команд Linux — отличный способ улучшить свой потенциал в терминале Linux. В этом руководстве мы рассмотрим несколько команд для быстрого и простого изучения символических ссылок. Прежде чем мы начнем, давайте рассмотрим, что такое символические ссылки.

Что такое символические ссылки Linux

Символические ссылки полезны не только для создания ярлыков и управления файлами в таких операционных системах, как Linux. Они также служат способом создания различных местоположений для основных пользовательских папок, например, документов, изображений, загрузок и многого другого!
Символические ссылки действуют как строка, создающая пути к различным файлам, папкам и каталогам в компьютерной системе. Они способны создавать и хранить несколько файлов в разных местах, относящихся к одному файлу. Таким образом, повышается эффективность за счет размещения всех конкретных документов в одной команде.
Эти ссылки хранятся в мэйнфрейме, поэтому даже если исходный файл будет удален, у вас будет резервная копия для большинства важных файлов. Символические ссылки помогают создавать неверные пути ссылок для хранения фрагментов информации в соответствии с требованиями пользователя.
Из-за удобных функций в Linux даже Microsoft использует его для создания символических ссылок. Символические ссылки, также известные как мягкие ссылки или символические ссылки, не являются уникальными для Linux, но они похожи на параметр поиска в Windows, где можно искать определенный файл или каталог на диске, выполняя различные команды.

Как создать символические ссылки в Linux?

Давайте посмотрим, как вы можете создавать ссылки на файлы и папки в Linux:

Создание ссылки Symbolik в Linux для файлов

Обычно для создания ссылок мы используем команду ln и параметр -s, чтобы указать символические ссылки. Это самый простой способ обеспечить гибкий подход, позволяющий максимально экспериментировать с языком. В создании символических ссылок в Linux нет ничего сложного — вам просто нужно выполнить один простой шаг.

ln -s [target file] [Symbolic filename]

Команда ln в Linux создает связи между исходными файлами и каталогами.

  • -s — команда для символьных ссылок.
  • [целевой файл] — имя существующего файла, для которого вы создаете ссылку
  • [Symbolic filename] — имя символьной ссылки.

Созданные ссылки могут быть проверены листингом каталогов с помощью команды подробного списка:

ls -l

Однако, если вы не укажете [Символическое имя файла], команда автоматически создаст новую ссылку в существующем каталоге.

Создать символическую ссылку в Linux для папок

Создание символических ссылок для папок также не представляет труда. Для создания символической ссылки на папку используется следующая команда:

ln -s [Specific file/directory] [symlink name]

Например, чтобы связать каталог / user / local / downloads / logo с папкой / devisers , используйте следующую команду:

ln -s /user/local/downloads/logo /devisers

После того как символическая ссылка будет создана и прикреплена к папке / devisers , она приведет к / user / local / downloads / logo . Когда пользователь меняет каталог — cd — на / devisers , система автоматически переходит к конкретному файлу и записывает его в каталог команд.
Параметры символьной ссылки называются переключателями командной строки. Вот самые распространенные и их описания:

Командный переключатель Описание
–Backup [= CONTROL] резервное копирование каждого существующего файла назначения
-d, -F, –directory суперпользователю разрешено пытаться установить жесткую ссылку
-f, –force существующий файл назначения удаляется
-I, –интерактивный запросить перед удалением файлов назначения
-L, –логический цели почтения, которые являются символическими ссылками
-n, –non-dereference символические ссылки на каталог рассматриваются как файлы
-P, –физический делать жесткие ссылки непосредственно на символические ссылки
-r, –relative создавать символические ссылки относительно местоположения ссылки
-s, –символ делать символьные ссылки вместо жестких
-S, –suffix = СУФФИКС заменить обычный суффикс резервной копии
-v, –verbose напечатать имя каждого связанного файла

Как изменить или удалить символическую ссылку в Linux?

Вы можете удалить существующие ссылки, прикрепленные к файлам или каталогам, с помощью команды unlink или rm. Вот как это можно сделать с помощью команды unlink:

unlink [symlink to remove]

Удаление символической ссылки с помощью команды rm аналогично команде unlink, которая выглядит следующим образом:

rm [symlink name]

Например:

rm simpleText

Понравилась статья? Поделить с друзьями:
  • Linux как изменить размер разделов
  • Linux как изменить размер home
  • Linux как изменить приоритет процесса
  • Loyalty error ржд что это
  • Loyalty error приложение ржд