Вопрос: Выясните символическую ссылку с помощью командной строки


Скажем, что я устанавливаю символическую ссылку:

ln -s /root/Public/mytextfile.txt /root/Public/myothertextfile.txt

есть ли способ увидеть, что цель myothertextfile.txt использует командную строку?


105
2017-10-19 18:36


Источник




Ответы:


Использовать -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

141
2017-10-19 18:42



Как было предложено в Другой вопрос, вы можете использовать readlink -f, - Denilson Sá Maia
Чтобы это работало в Mac OS X, brew install coreutils, Это устанавливает основные версии gnu команд с префиксом буквы g, т.е. greadlink -f somefile - Mike D
с ключом -f, команда ничего не возвращает в моем случае .. - sotn


readlink - это команда, которую вы хотите. Вы должны посмотреть на страницу руководства для команды. Поскольку, если вы хотите следовать цепочке символических ссылок на фактический файл, вам нужен ключ -e или -f:

$ ln -s foooooo zipzip   # fooooo doesn't actually exist
$ ln -s zipzip zapzap

$ # Follows it, but doesn't let you know the file doesn't actually exist
$ readlink -f zapzap
/home/kbrandt/scrap/foooooo

$ # Follows it, but file not there
$ readlink -e zapzap

$ # Follows it, but just to the next symlink
$ readlink zapzap
zipzip

17
2017-10-19 19:03



Ничего плохого в первом ответе, но эта более полная и полезная. - Mike S


Это также будет работать:

ls -l /root/Public/myothertextfile.txt

но readlink было бы предпочтительнее использовать в сценарии, а не для синтаксического анализа ls,


4
2017-10-19 19:02





Если вы хотите показать источник и пункт назначения ссылки, попробуйте stat -c%N files*, Например.

$ stat -c%N /dev/fd/*
‘/dev/fd/0’ -> ‘/dev/pts/4’
‘/dev/fd/1’ -> ‘/dev/pts/4’

Это не хорошо для синтаксического анализа (используйте readlink для этого), но он показывает название ссылки и пункт назначения, без беспорядка ls -l

-c может быть написано --format а также %N означает «указанное имя файла с разыменованием, если символическая ссылка».


2
2017-09-29 17:44





readlink это хорошая вещь, но GNU-специфическая и неперекрестная платформа. Раньше я писал скрипты с кросс-платформой для /bin/sh, поэтому я бы использовал что-то вроде:

 ls -l /root/Public/myothertextfile.txt | awk '{print $NF}'

или:

 ls -l /root/Public/myothertextfile.txt | awk -F"-> " '{print $2}'

но их необходимо протестировать на разных платформах. Я думаю, они будут работать, но не на 100% уверены в ls Выходной формат.


2
2018-04-17 21:35





Если вы не можете использовать readlink, затем разобрав результат ls -l можно сделать так.

Нормальным результатом будет:

ls -l /root/Public/myothertextfile.txt
lrwxrwxrwx 1 root root 30 Jan  1 12:00 /root/Public/myothertextfile.txt -> /root/Public/mytextfile.txt

Поэтому мы хотим заменить все до «->» и включили стрелку. Мы могли бы использовать sed для этого:

ls -l /root/Public/myothertextfile.txt | sed 's/^.* -> //'
/root/Public/mytextfile.txt

1
2017-09-02 08:25





ll или ls -l должны перечислять элементы каталога, включая вашу символическую ссылку и ее цель

cd -P /root/Public/myothertextfile.txt (в вашем случае) должен указывать на исходный путь


0
2018-05-02 13:48