如何列出符号链接的目标文件的属性(尤其是日期)?

如何列出符号链接的目标文件的属性(尤其是日期)?

键入时,ls -la我们会获取当前目录中的文件列表,其中符号链接还打印了其目标文件。

显示符号链接时,shell 会打印符号链接本身的属性(特别是日期)。

是否有打印目标属性的选项?

答案1

-dLl向 ls添加选项。

-L告诉ls做显示目标。-d告诉它不要进入目录(只有当文件是目录时才会有区别)。-l说要做一个很长的清单(详细)。

答案2

大多数系统调用和应用程序在给定符号链接路径时,都会在符号链接的目标上执行其操作。值得注意的例外是对目录条目而不是文件(例如unlink()/ rmlink()// 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

相关内容