A saída de ll
, que eu suponho ser um alias de shell para ls -l
, não contém essa informação no modo / permissões do symlink. No Linux ( symlink (2) ):
The permissions of a symbolic link are irrelevant; the ownership is
ignored when following the link, but is checked when removal or renam-
ing of the link is requested and the link is in a directory with the
sticky bit (S_ISVTX) set.
Além de ls
sugerido em outro lugar, há alguns métodos que são menos detalhados e se prestam a scripts.
file
suporta -L
, o que faz com que ele siga (desreference) links simbólicos:
$ file /usr/local/bin/xzcat
/usr/local/bin/xzcat: symbolic link to 'xz'
$ file -L /usr/local/bin/xzcat
/usr/local/bin/xzcat: ELF 32-bit LSB executable, [...]
$ file /var/adm
/var/adm: symbolic link to 'log'
$ file -L /var/adm
/var/adm: directory
A opção -L
não é POSIX mas deve funcionar em qualquer Linux e * contemporâneo BSD. Ele seguirá vários links simbólicos (que ls
não possui). Para um uso mais robusto, também suporta vários formatos de saída, e. file -L -b --mime-type /var/adm
e -0
para nomes de arquivos delimitados por zero.
O GNU stat
é ainda mais fácil:
$ stat -c %F /var/adm
symbolic link
$ stat -L -c %F /var/adm
directory
A opção -L
funciona da mesma forma que para file
, a opção -c %F
instrui stat
a produzir apenas o tipo do arquivo, consulte o stat (1) para mais. * BSD stat
não é o mesmo que o GNU stat
, as strings de formato são diferentes, use -f %HT
.