Сделайте символьную ссылку на относительный путь

На Linux, top на самом деле поддержки, фокусирующиеся на единственном процессе, хотя это естественно не имеет графика истории:

top -p PID

Это также доступно на Mac OS X с другим синтаксисом:

top -pid PID
65
31.03.2011, 15:10
6 ответов

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

Причина Ваш пример не работает, состоит в том, что это относительно родительского каталога символьной ссылки и не где ln выполняется.

Можно сделать:

$ pwd
/home/beau
$ ln -s foo/bar.txt bar.txt
$ readlink -f /home/beau/bar.txt
/home/beau/foo/bar.txt

Или для этого вопросы:

$ cd foo
$ ln -s foo/bar.txt ../bar.txt

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

66
27.01.2020, 19:32
  • 1
    Хорошо сказанный. Вы ответили на это, в то время как я вводил свой собственный ответ. :) –  Shadur 31.03.2011, 15:30
  • 2
    у меня просто был немного отличающийся вопрос - и это отвечает на это отлично. Я хотел знать, как сослаться на корневой каталог в символьной ссылке, таким образом, это будет работать, когда я передал его от одного пользователя другому. Я не был уверен если что-то как ~ работал бы. –  Joe 25.02.2017, 09:05

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

12
27.01.2020, 19:32

Вы могли попробовать:

ln -s `pwd`/bar.txt /home/beau/bar.txt

Но, это делает символьную ссылку на абсолютный путь. Ваш текстовый вопрос спрашивает относительный путь упоминаний...

Обычно, относительный путь - то, что Вы хотите, и что ln -s дает Вам. Я думаю, что Вы хотите:

cd /home/beau
ln -s foo/bar.txt bar.txt
3
27.01.2020, 19:32

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

Кроме того, -s средства параметра --symbolic. ln создает жесткие ссылки по умолчанию.

$ ln -s '../../relative_path' path
$ ls -al path

lrwxrwxrwx 1 empjustine empjustine 19 Aug  6 01:38 path -> ../../relative/path
1
27.01.2020, 19:32

Если вы используете более новые coreutils (я использую coreutils-8.22-11), то есть возможность:

ln --help | grep relative

может содержать произвольный текст; при последующем разрешении относительная ссылка - это -r, -относительная создавать символические ссылки относительно места расположения ссылки

Например:

$ mkdir /tmp/test
$ touch /tmp/test/to
$ ln -rs /tmp/test/to /tmp/test/from
$ ls -l /tmp/test/from
    lrwxrwxrwx 1 ptr ptr 4 aug   25 17.02 /tmp/test/to -> from
24
27.01.2020, 19:32

Есть удобная небольшая утилита, называемая символическими ссылками (первоначально от Марка Лордса, теперь поддерживаемая Дж. Брандтом Бакли), присутствующая во многих Linux раздачи.

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

symlinks -c /path/to/directory

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

mkdir ../tmp
mv link-to-relativize ../tmp
symlinks ../tmp
mv ../tmp/* .
rmdir ../tmp
7
27.01.2020, 19:32

Теги

Похожие вопросы