Ответ 1
readlink -f <linkname>
Смотри man 1 readlink
Мне нужно обработать несколько каталогов, определить, какие файлы в них являются символическими ссылками, и на что они ссылаются. Это звучит просто, но я не контролирую присутствие элементов управления или других символов в именах файлов, и мне нужно надежное решение.
Итак, учитывая файл произвольного имени, как я могу безопасно определить, на что он ссылается, когда пункт назначения ссылки может также иметь произвольное содержимое?
readlink -f <linkname>
Смотри man 1 readlink
stat <linkname>
Пример:
stat /usr/local/cuda
Первые 2 строки дадут:
File: '/usr/local/cuda' -> 'cuda-8.0'
Size: 8 Blocks: 0 IO Block: 4096 symbolic link
...
Скрипт Python 2, который отслеживает/следует за символическими ссылками, представленными в качестве аргументов.
listSymLink.py
import os.path as OSPath
import os
import sys
for arg in sys.argv[1:]:
if OSPath.exists(arg):
pathTrail = [OSPath.abspath(arg)]
while OSPath.islink(pathTrail[-1]):
linkTarget = os.readlink(pathTrail[-1])
if not OSPath.isabs(linkTarget):
linkTarget = OSPath.join(os.path.dirname(pathTrail[-1]), linkTarget)
pathTrail.append(linkTarget)
print " -> ".join(map(lambda x: "\"" + x + "\"", pathTrail))
else:
print "\"" + arg + "\" path doesn't exist"
пример
python listSymLink.py /usr/bin/c++
печать
"/usr/bin/c++" -> "/etc/alternatives/c++" -> "/usr/bin/g++" -> "/usr/bin/g++-8" -> "/usr/bin/x86_64-linux-gnu-g++-8"