给定ll
命令输出如下
#> ll
lrwxrwxrwx ...
如何确定软链接的目标是“lrwxrwxrwx”中的目录还是文件?
答案1
您可以使用-F
ls 的参数来获取:
-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