我刚刚/etc/resolv.conf
使用命令查看了文件cat
(或使用 mcedit 打开了文件)。现在当我使用ls -ul
“访问时间”列出文件详细信息时,它不会更改/更新 - 具有相同的旧值。这很奇怪,因为对于任何其他文件,“访问时间”在 cat 之后都会更新。
答案1
调用df /etc/resolv.conf
并注意它存在于哪个挂载点下。来自我的 Kubuntu 的示例:
$ df /etc/resolv.conf
Filesystem 1K-blocks Used Available Use% Mounted on
tmpfs 806600 9660 796940 2% /run
令人惊讶的是,我的resolv.conf
低于/run
。真实情况是:
$ ls -l /etc/resolv.conf
lrwxrwxrwx 1 root root 29 Nov 24 2016 /etc/resolv.conf -> ../run/resolvconf/resolv.conf
然后我们需要知道它的挂载选项:
$ mount | grep " /run "
tmpfs on /run type tmpfs (rw,nosuid,noexec,relatime,size=806600k,mode=755)
注意与atime
相关的选项。在我的例子中,这是relatime
。man 8 mount
解释:
relatime
更新相对于修改或更改时间的 inode 访问时间。仅当上次访问时间早于当前修改或更改时间时,才会更新访问时间。(类似于noatime
,但不会破坏mutt
或其他需要知道文件自上次修改以来是否已被读取的应用程序。)
(检查其余*atime
选项以获得完整的图片。)
relatime
如今非常常见。它节省了频繁写入的时间,但仍为atime
需要它的程序提供服务。在我的 Kubuntu 中,只有这些挂载不使用relatime
:
$ mount | grep -v relatime
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,mode=755)
可能您relatime
也广泛使用。
这很奇怪,因为对于任何其他文件,“访问时间”都会在之后更新
cat
。
也许“之前的访问时间早于当前修改或更改时间”,因此已atime
更新。或者“其他文件”位于不同的挂载点(例如带有strictatime
选项)。请注意,我的resolv.conf
位于与整体不同的文件系统上/etc/
(/etc/resolv.conf
是指向其他地方的符号链接),因此一般来说,您甚至不应该假设同一目录中的“文件”位于同一文件系统上,位于同一挂载点下,具有相同的选项。
无论您的设置是什么,现在您都知道如何调查该问题。