Получить путь ссылки, на которую она указывает?
Вопрос
Можно ли получить полный путь ссылки, на которую она указывает?Есть ли какая-нибудь простая системная команда?
Мне нужно для всех следующих OS HP-UX 11I, 1123U, 1123i AIX 5.2 и 5.3 SUSE Linux 10 Solaris 10
Решение
Вы не указали язык, поэтому я предполагаю, что вам нужна команда, которую можно запустить в любой используемой вами оболочке.А ls
команда имеет -l
(это ell), который распечатывает много информации о файле.Последний бит информации — это полный путь, поэтому вы должны иметь возможность сказать
ls -l file | awk '{print $NF}'
на любой машине, совместимой с SUS2 (это должны быть все коммерческие UNIX).Однако это будет проблемой, если в файле или в любом из каталогов, ведущих к файлу, есть пробелы.
Другие советы
Если вы ищете системный вызов, вам нужно readlink(2)
.Это стандартизировано и поэтому должно быть доступно во всех POSIX-совместимых системах.
Вот пример его использования, взятый из приведенной ранее ссылки:
#include <unistd.h>
char buf[1024];
ssizet_t len;
if ((len = readlink("/modules/pass1", buf, sizeof(buf)-1)) != -1)
buf[len] = '\0';
Если вы ищете утилиту командной строки, похоже, она не стандартизирована, но ГНУ (Линукс) и БСД как есть readlink(1)
.