Мне нужно было выполнить несколько команд, чтобы следовать цепочке символических ссылок к конечной цели.
Есть ли команда, которая сделает это за один шаг?
which updatedb
/usr/bin/updatedb
ls -l /usr/bin/updatedb
lrwxrwxrwx 1 root root 26 2010-09-01 16:22 /usr/bin/updatedb -> /etc/alternatives/updatedb
ls -l /etc/alternatives/updatedb
lrwxrwxrwx 1 root root 25 2010-09-01 16:21 /etc/alternatives/updatedb -> /usr/bin/updatedb.mlocate
ls -l /usr/bin/updatedb.mlocate
-rwxr-xr-x 1 root root 34492 2010-03-24 21:16 /usr/bin/updatedb.mlocate
Используйте readlink -e <linkfile>
. Для получения дополнительной информации об аргументах см. Справочную страницу readlink
Вы можете использовать readlink -e
, как указано в @htorque, который устанавливается по умолчанию. Однако, если вы сделали что-то вроде ln -s a a
, то readlink -e a
не будет выводить вообще, что аналогично тому, как вы делаете readlink b
, когда b
является нормальным файлом.
Если вы установите пакет chase
(sudo apt-get install chase
, названный «преследование символических ссылок»), вы получите гораздо более информативный вывод.
$ chase a
chase: /tmp/a: symlink loop detected, giving up...
$ chase b
/tmp/b
, и вы можете запустить его подробно:
$ chase --verbose /opt/python/3
/opt/python/3
-> 3.6
-> 3.6.2
/opt/python/3.6.2
, который показывает промежуточные звенья