如何判断软链接的目标是目录还是文件?

如何判断软链接的目标是目录还是文件?

给定ll命令输出如下

#> ll
lrwxrwxrwx ...

如何确定软链接的目标是“lrwxrwxrwx”中的目录还是文件?

答案1

您可以使用-Fls 的参数来获取:

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

IE:

# 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

在这种情况下,即使没有分类选项,您也会得到尾部斜杠。

答案2

的输出ll(我假设是 的 shell 别名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零分隔文件名。

GNUstat更简单:

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

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

-L选项的作用与 for 相同file,该-c %F选项指示stat仅输出文件的类型,请参阅统计数据(1)手册页了解更多信息。 *BSDstat与 GNU 不太一样stat,格式字符串不同,请改用-f %HT

答案3

我想你想要的是:

ls -l filename

man是你的朋友:

man ls

相关内容