Скажите, что я установил символическую ссылку:
ln -s /root/Public/mytextfile.txt /root/Public/myothertextfile.txt
Есть ли способ увидеть, что цель myothertextfile.txt
использует командную строку?
Скажите, что я установил символическую ссылку:
ln -s /root/Public/mytextfile.txt /root/Public/myothertextfile.txt
Есть ли способ увидеть, что цель myothertextfile.txt
использует командную строку?
Используйте -f
флаг, чтобы напечатать канонизированную версию. Например:
readlink -f /root/Public/myothertextfile.txt
От man readlink
:
-f, --canonicalize
canonicalize by following every symlink in every component of the given name recursively; all but the last component must exist
readlink -f
.brew install coreutils
. При этом устанавливаются базовые версии команд GNU с префиксом буквыg
, т. Е.greadlink -f somefile
Ubuntu 18.04.1 LTS (Bionic Beaver)
страницах readlink есть примечание, гласящее: «Примечание realpath (1) - предпочтительная команда для использования для функций канонизации».readlink - это команда, которую вы хотите. Вы должны взглянуть на справочную страницу для команды. Потому что, если вы хотите следовать цепочке символических ссылок на фактический файл, вам нужен ключ -e или -f:
источник
Это также будет работать:
но
readlink
было бы предпочтительным для использования в сценарии, а не для анализаls
.источник
Если вы хотите показать источник и назначение ссылки, попробуйте
stat -c%N files*
. НапримерЭто не хорошо для анализа (используйте
readlink
для этого), но показывает имя ссылки и назначение, без беспорядкаls -l
-c
может быть написано--format
и%N
означает «цитируемое имя файла с разыменованием, если символическая ссылка».источник
Это
readlink
хорошая вещь, но специфичная для GNU и не кроссплатформенная. Я использовал для написания кроссплатформенных сценариев/bin/sh
, поэтому я бы использовал что-то вроде:или же:
но они должны быть проверены на разных платформах. Я думаю, что они будут работать, но не уверены на 100% в
ls
выходном формате.Результат
ls
также может быть проанализирован внутриbash
независимо от внешней команды, такой какawk
,sed
илиperl
.Эта
bash_realpath
функция разрешает конечный пункт назначения ссылки (ссылка → ссылка → ссылка → окончательная):источник
Если вы не можете использовать
readlink
, то разбор результатаls -l
может быть сделан следующим образом.Нормальный результат будет:
Поэтому мы хотим заменить все до "->" и стрелку в комплекте. Мы могли бы использовать
sed
для этого:источник
Вопрос недостаточно точен, чтобы дать простой ответ, как вопрос Брайана-Бразилии:
будет действительно разыменовывать каждую символическую ссылку, участвующую в конструкции пути, до конечной цели позади
some_path
.Но один уровень каскадных символических ссылок является просто частным случаем среди других в системе, общий случай - N уровней каскадных символических ссылок. Посмотрите на следующее в моей системе:
rwhich
моя рекурсивная реализация,which
которая печатает все промежуточные каскадные символические ссылки (на stderr) до конечной цели (на stdout).Тогда, если я хочу знать, что это:
цель symlink / usr / bin / emacs **, очевидный ответ для меня
/etc/alternatives/emacs
:окончательная цель за каскадными симлинка / USR / BIN / Emacs, ответ должен быть
/usr/bin/emacs24-x
как возвращена:источник
ll
илиls -l
должен перечислить элементы каталога, включая вашу символическую ссылку и ее цельcd -P /root/Public/myothertextfile.txt
(в вашем случае) должен указывать на исходный путьисточник
Если вы найдете цель всех ссылок в папке и ее подпапке, используйте
find . -type l -ls
команду с типом ссылки следующим образом:Если вы хотите цели одного, то
ls -l
должно работать:источник