假设您有file
一个给定的文件mtime
。如果我创建一个指向sym
通过file
符号ln -s
链接本身的符号链接,则会获得一个mtime
与创建时间相对应的 -stamp,它与ofsymlink
不同。mtime
file
那么有没有办法创建一个符号链接,使其mtime
与它指向的文件相同?
这个问题的背景是这脚本,其中创建云镜像的 n 个最新文件的链接目录。现在,如果我ls -lt
在这个目录中这样做current
,它不会显示实际文件的创建日期,而是显示符号链接的创建日期。但我想查看文件的创建日期。
编辑 在我原来的帖子中,我错误地要求了 ctime (我在上面更改了它),但是问题应该是关于 mtime 的。感谢@ilkkachu 指出这一点。
答案1
你指的是ctime还是mtime? Ctime 是文件元数据(inode 内容)最近一次更改的时间或者文件内容。它会在写入时更新,但也会在权限发生更改时更新。 mtime是最近一次写入文件数据的时间,可以用 更改touch
,而ctime通常不能更改。
因为它可以为副本重置,所以 mtime 通常是更有用的。它也是ls -lt
显示的(您需要添加-c
以显示 ctime)。
您可以用来touch -h
更改符号链接的运行时间:
$ ls -lt
total 4
lrwxrwxrwx 1 ilkkachu ilkkachu 9 Sep 4 15:10 link.txt -> hello.txt
-rw-r--r-- 1 ilkkachu ilkkachu 6 Dec 31 1999 hello.txt
$ touch -h -r hello.txt link.txt
$ ls -lt
total 4
-rw-r--r-- 1 ilkkachu ilkkachu 6 Dec 31 1999 hello.txt
lrwxrwxrwx 1 ilkkachu ilkkachu 9 Dec 31 1999 link.txt -> hello.txt
但这仍然需要手动完成,如果目标文件发生更改,它不会自动更新。但您可以让它ls -L
打印目标文件的详细信息,而不是链接本身:
$ touch hello.txt
$ ls -L -lt
total 8
-rw-r--r-- 1 ilkkachu ilkkachu 6 Sep 4 15:12 hello.txt
-rw-r--r-- 1 ilkkachu ilkkachu 6 Sep 4 15:12 link.txt
当然,它也隐藏了一个事实:它本来就是一个链接。
如果您需要混合输出,并显示链接名称和目标以及指向文件的日期和所有权,您可能需要使用 Perl 之类的工具来创建该列表。
答案2
ln
或touch
系统调用都utimensat
不能ctime
更改,只有mtime
& atime
。
如果这是你的事真的需要做的,那么你唯一的选择就是推出你自己的系统调用/内核模块/用户空间 exe。
答案3
不,符号链接本身并没有任何有用的元数据(时间戳、所有者、权限)。
但是,您可以使用-H
withls
来取消引用(即跟随)符号链接。或者-L
与stat
.
或者您可以readlink -e
在我对链接问题的回答中使用 as 来获取它们符号链接所指向的内容的完整规范路径名。