举例来说,我有一个这样的目录结构:
$ \ls -F
dir/ lnk@
$ \ls -F dir
FILE
$ \ls -l lnk
lrwxrwxrwx 1 user group d Mon hh:mm lnk -> dir
我的ls
命令有别名。我用来\ls
获得标准行为(我认为)。
问题是
使用-F
选项 with时ls
,为什么在符号链接名称后附加斜杠会影响 的行为ls
?
$ \ls -F lnk
lnk@
\ls -F lnk/
FILE
如果没有/
,符号链接本身会与@
指示符/标志/分类器一起列出;使用/
,符号链接引用的目录中的文件用指示符列出(FILE
是常规文件)。
我不确定是否将没有选项的行为称为一致或不一致:
$ \ls lnk
FILE
\ls lnk/
FILE
我在 中没有找到对此的解释man ls
。
类似的帖子
参考
IEEE 和开放组 (2004)“路径名解析”第 4.11 款在The Open Group 基本规范第 6 期
IEEE 和开放组 (2018a)“路径名解析”第 4.13 款在The Open Group 基本规范第 7 期
IEEE 和开放组 (2018b)“LS”
答案1
简而言之,因为lnk
和lnk/
引用不同的文件。
长答案
在回顾了 IEEE 和 The Open Group (2018a) 后,我的问题似乎误解了路径名解析。特别是: 1)lnk/
相当于lnk/.
因此lnk
并lnk/
命名不同的文件。
如果在路径名解析期间遇到符号链接,则行为应取决于路径名组件是否位于路径名末尾以及正在执行的功能。
\ls -F lnk
尽管我没有在手册页中找到或指定的行为\ls lnk
,但我确实在 IEEE 和开放组 (2018b) 中找到了它:
如果指定了一个或多个 -d、-F 或 -l 选项,并且未指定 -H 和 -L 选项,则对于命名目录符号链接类型文件的每个操作数,ls 应写入文件的名称以及任何请求的相关信息。如果未指定 -d、-F 或 -l 选项,或者指定了 -H 或 -L 选项,则对于命名目录符号链接类型文件的每个操作数,ls 应写入文件名包含在目录中以及任何请求的相关信息。
答案2
不知道官方的答案,但是:
- 该目录中有一个名称“lnk”。我不知道那是什么。
ls -F lnk
- 显示该名称的类型ls -F lnk/
- 这里是一个路径,显示指定路径下的所有文件,带有类型标记ls lnk/
- 这里是一个路径,显示指定路径下的所有文件ls lnk
- 我允许操作系统确定该文件是什么,并要求显示最符合逻辑的信息
请注意:在这种情况下我不在乎它是否是链接。我只考虑“名称”和“路径”。