键入时,ls -la
我们会获取当前目录中的文件列表,其中符号链接还打印了其目标文件。
显示符号链接时,shell 会打印符号链接本身的属性(特别是日期)。
是否有打印目标属性的选项?
答案1
-dLl
向 ls添加选项。
-L
告诉ls
做显示目标。-d
告诉它不要进入目录(只有当文件是目录时才会有区别)。-l
说要做一个很长的清单(详细)。
答案2
大多数系统调用和应用程序在给定符号链接路径时,都会在符号链接的目标上执行其操作。值得注意的例外是对目录条目而不是文件(例如unlink()
/ rm
、link()
// symlink()
)进行操作的例外ln
。
当涉及到获取文件元数据信息时,有两个单独的系统调用:(lstat()
对符号链接本身进行操作)、stat()
(对符号链接的目标进行操作)。对于 Linux 上的较新版本statx()
,它带有一个AT_SYMLINK_NOFOLLOW
标志。另请参阅listxattr()
/ llistxattr()
、getxattr()
/lgetxattr()
了解扩展属性。
当涉及到包装这些的实用程序时,默认值取决于实用程序,并且更改操作模式的选项(如果有)也取决于实现。
ls
默认情况下,运行在目标作为参数给出的文件的,除非传递任何-d
、-l
、-F
、-g
、-o
、-n
选项,在这种情况下,它对符号链接本身进行操作(使用lstat()
而不是标志或与标志一起stat()
使用)。statx()
AT_SYMLINK_NOFOLLOW
如果您想使用这些选项之一但仍想遵循符号链接,则可以传递该-H
选项。
ls -ldH -- "$file"
将在符号链接解析后报告有关文件的信息。
ls
还有一个-L
选项告诉它解决全部符号链接,不仅仅是作为参数给出的文件的符号链接。例如, ls -Ll /symlink-to-dir
将解析/symlink-to-dir
它链接到的目录,并列出其内容,并且对于其中的每个符号链接,还将列出链接目标处的信息。它还会影响递归的完成方式-R
。
对于其他工具:
Command | default | change with
----------------------+-----------+--------------
IRIX stat | target | -L
zsh stat | target | -L
GNU stat | symlink | -L
BSD stat | symlink | -L
busybox stat | symlink | -L
AIX istat | target | none
GNU date -r | target | none
GNU find -printf | symlink | -follow/-L/-H
Linux attr | symlink | -L
Linux getfattr | target | -h
Linux getfacl | target | -P
具体修改时间的一些例子:
$ date -r link +%FT%T.%N%z # GNU date
2020-03-19T17:57:11.277584965+0000
$ zmodload zsh/stat
$ stat -F %FT%T.%N%z +mtime link
2020-03-19T17:57:11.277584965+0000
$ gstat -Lc %y link # GNU stat
2020-03-19 17:57:11.277584965 +0000
$ ls -lHd --full-time link # GNU ls
drwxr-xr-x 23 root root 29 2020-03-19 17:57:11.277584965 +0000 link/
$ find -H link -prune -printf '%TFT%TT%Tz\n' # GNU find
2020-03-19T17:57:11.2775849650+0000