Linux символьная ссылка изменить

My basic understanding of a symlink is that it’s a special file, a file that contains a string path to another file. The kernel’s VFS abstracts a lot of that away but is there any reason why symlinks seem to be impossible to edit? In other words: Can I edit a symlink? If not, why not? I do understand that there are various ways of replacing symlinks (two alternatives are currently in the answers section) but it would be interesting to get an explanation on why replacement seems to be the only way to deal with symlinks. Why can’t you just change where they point?

Your understanding is a bit limited; the only reason it’s called a ‘file’ is because there’s no better word for it.

Unlike the embarrassing atrocity that is the windows variant, posix-style symbolic links operate on/in the filesystem layer itself. The only way to edit one would be to edit the filesystem directly — and it’s generally not worth it.

@Shadur .lnk files are not really symlinks to begin with (and NTFS has had proper symlinks since Vista); they’re more like shortcuts for executing commands, whether that is changing to a specific folder or starting a program with specific arguments and with a certain CWD.

7 Answers 7

ln -s /location/to/link linkname # . ln -s /location/to/link2 newlink mv -T newlink linkname 

linkname is accessible throughout the process.

That does get you the atomic replacement, though you still are doing a replace rather than edit ( new link has a new inode number ).

@psusi I completely agree, it’s just a technically slightly better option than the other answer in some scenarios.

If you’re redirecting the link to another destination then changing it’s inode number seems like a small change.

That assumes linkname is not a symlink to a directory. Use the -T option to mv if on GNU or -h if on FreeBSD to avoid that. Note that like ln -sf that does not preserve the permissions of the link (on systems where they are significant).

Читайте также:  Mine bitcoins on linux

Another solution for change symlink for directory is to use -n options e.g.: ln -sfn DESTINATION_DIRECTORY LINK_NAME . Read more on askubuntu.com/a/186227/69004

If by edit, you mean to change the file it points to, then yes you can:

$ ln -s .bashrc test $ ls -al test lrwxrwxrwx 1 pascal pascal 7 2009-09-23 17:12 test -> .bashrc $ ln -s .profile test ln: creating symbolic link `test': File exists $ ln -s -f .profile test $ ls -al test lrwxrwxrwx 1 pascal pascal 8 2009-09-23 17:12 test -> .profile 

The -f parameter ( —force ) when passed to ln it causes it to call the unlink() system call right before symlink()

I think it’s questionable if this can be regarded as «edit», since unlink();symlink(); is not atomic, so there is a tiny tiny amount of time during which the link does not exist.

@mauro.stettler Yes, you are right. But I guess that this depends on your perspective. If you take only the end result into account, then maybe you could consider it as edited, no other things considered.

The quoted section from the Unix Time Sharing System paper describes hard links. These are entirely different from the symbolic links (symlinks) the OP asked about.

Note that it assumes test ‘s target is not a directory. Otherwise ln -s -f .profile test would create a .profile symlink in that directory. GNU ln has a -T option to avoid that.

Symbolic links need to be modified atomically. If you’re halfway through writing them, they won’t work. The content of a symbolic link is pretty small (at most 4095 characters on Linux: the maximum length of a path to a file), so there would be little point in editing part of a symbolic link at the kernel level. Therefore the kernel does not offer any interface to edit a symbolic link, only an interface to create a new one, the symlink system call (plus the generic interface unlink to remove any file).

The symlink system call only creates a new symbolic link, it does not remove any existing file. This is annoying, but consistent with other system calls to create files such as open (which can create a new file or truncate an existing file, but not replace an existing file by a newly-created file) and mkdir .

In the shell, as you’ve discovered, while you can’t replace a symbolic link atomically with the ln command ( ln -sf unlinks the previous file then creates the symbolic link), you can do it by first creating a symbolic link under a temporary name and then moving it into place.

tmp=$(TMPDIR=$(dirname -- "$link") mktemp) ln -sf -- "$target" "$tmp" mv -f "$tmp" "$link" 

Источник

Читайте также:  Kali linux vmware and virtualbox images

Изменение символической ссылки

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

ln -f -s /new/target /your/existing/symlink

Жёсткие ссылки на симлинк — это жёстко! 🙂

-f, —force
remove existing destination files

Нужно без удаления файла. Нужно изменить цель существующей симлинки.

mc
F9
символическая ссылка
или
Ctrl+x+s

ёпрст. ты сначала сделай а потом пиши. inode симлинка после такой операции не изменяется, значит жёсткая ссылка на твой симлинк сохраняется. ты дядю слушай.

только что попробовал:
ln -s file s1
ln s1 s2
ln s1 s3

Есть три символические ссылки s1 s2 s3, которые являются одним файлом:
s1 -> file
s2 -> file
s3 -> file

Перезаписываем одну из них:
ln -s -f apple s1

Теперь:
s1 -> apple
s2 -> file
s3 -> file

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

Источник

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

img

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

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

Команда Ln

Команда Ln для создания символических ссылок

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

  • По умолчанию команда ln создает hard link (жесткая ссылка).
  • Используйте параметр -s , чтобы создать символическую ссылку, она же soft link.
  • Параметр -f заставит команду перезаписать уже существующий файл.
  • Source — это файл или каталог, на который делается ссылка.
  • Destination — это место для сохранения ссылки — если это поле не заполнено, символическая ссылка сохраняется в текущем рабочем каталоге.

Например, создайте символическую ссылку с помощью:

ln -s test_file.txt link_file.txt

Это создает символическую ссылку link file.text , которая указывает на testfile.txt .

Читайте также:  Manjaro linux install package

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

ls -l link_file.txt

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

Символическая ссылка может относиться к каталогу. Чтобы создать символическую ссылку на каталог в Linux:

ln -s /mnt/external_drive/stock_photos ~/stock_photos

В этом примере создается символическая ссылка с именем stock_photos в домашнем каталоге ~ / . Ссылка относится к каталогу stock_photos на внешнем диске external_drive .

ln -s /mnt/external_drive/stock_photos ~/stock_photos

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

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

Вы можете получить сообщение об ошибке, как показано на изображении ниже:

File exists

Сообщение об ошибке означает, что в месте назначения уже есть файл с именем link_file.txt . Используйте параметр -f , чтобы система перезаписывала целевую ссылку:

ln -sf test_file.txt link_file.txt

ln -sf test_file.txt link_file.txt

Удаление ссылок

Если исходный файл будет перемещен, удален или станет недоступным (например, сервер отключится), ссылку нельзя будет использовать. Чтобы удалить символическую ссылку, используйте команду rm (remove) или unlink :

rm link_file.txt unlink link_file.txt

No such file

Команду ln можно использовать для создания двух разных типов ссылок:

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

Вот несколько важных аспектов символической ссылки:

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

Когда файл хранится на жестком диске, происходит несколько вещей:

  • Данные физически записываются на диск.
  • Создается справочный файл, называемый индексом, который указывает на расположение данных.
  • Имя файла создается для ссылки на данные inode.

Жесткая ссылка работает путем создания другого имени файла, которое ссылается на данные inode исходного файла. На практике это похоже на создание копии файла.

Вот несколько важных аспектов жестких ссылок:

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

Источник

Оцените статью
Adblock
detector