Как определить, является ли цель софт-ссылки каталогом или файлом?

Принимая команды ll команды следующим образом

 #> ll lrwxrwxrwx ... 

Как определить, является ли цель софт-ссылки каталогом или файлом из «lrwxrwxrwx»?

3 Solutions collect form web for “Как определить, является ли цель софт-ссылки каталогом или файлом?”

Вы можете использовать параметр -F для ls для получения:

  -F, --classify append indicator (one of */=>@|) to entries 

то есть:

 # ln -s videos Videos # ls -l lrwxrwxrwx. 1 guido guido 6 Jan 23 14:11 videos -> Videos # ls -lF lrwxrwxrwx. 1 guido guido 6 Jan 23 14:11 videos -> Videos/ 

В любом случае, я предлагаю вам создавать символические ссылки на такие каталоги:

 # ln -s Videos/ videos 

в этом случае вы получаете конечную косую черту даже без опции классификации.

Вывод ll , который я предполагаю, является псевдонимом оболочки для ls -l , не содержит этой информации в режиме / разрешениях символической ссылки. В Linux ( символическая ссылка (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. 

В дополнение к ls предложенным в другом месте, существуют некоторые методы, которые являются менее подробными и поддаются написанию сценариев.

file поддерживает -L что заставляет его следовать (разыменовывать) символические ссылки:

 $ 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 

Опция -L – это не POSIX, но должна работать над любыми современными Linux и * BSD. Он будет следовать за несколькими символическими ссылками (которых нет ls ). Для более надежного использования он также поддерживает различные выходные форматы, например file -L -b --mime-type /var/adm , и -0 для имен с нулевым разграничением.

GNU stat еще проще:

 $ stat -c %F /var/adm symbolic link $ stat -L -c %F /var/adm directory 

Параметр -L работает так же, как и для file , параметр -c %F указывает, что stat выводит только тип файла, более подробную информацию см. В man-странице stat (1) . * BSD stat не совсем то же самое, что и GNU stat , строки формата разные, вместо этого используйте -f %HT .

Я думаю, что вы хотите:

 ls -l filename 

man – ваш друг:

 man ls 
  • Получение относительных связей между двумя путями
  • ls -l vs ls -lL
  • Почему я не могу копировать символические ссылки?
  • Symlink для очистки домашнего каталога
  • ссылка на исполняемый файл и удаление некоторых параметров
  • Расширенный атрибут по символической ссылке
  • Заменяет ли загрузчик Linux (ld.so) символические ссылки?
  • Символическая ссылка, начинающаяся с. #
  • Git отслеживания dotfiles, которые символически связаны
  • Что делает $ 0 при вызове через символическую ссылку?
  • Как перенаправить вывод файла в другой каталог?
  • Linux и Unix - лучшая ОС в мире.