由于 /var/run 不是符号链接,我的 /var 目录是否正常?

由于 /var/run 不是符号链接,我的 /var 目录是否正常?

我正在运行 Ubuntu 18.04。当我运行:

ls -la /var

我得到以下信息:

drwxr-xr-x 10 root root   4096 Jan  2 15:46 .
drwxr-xr-x 27 root root   4096 Jan 15 06:25 ..
drwxr-xr-x 10 root root   4096 Jan  6 06:15 cache
drwxrwxrwt  2 root root   4096 Jan 12 06:41 crash
drwxr-xr-x 25 root root   4096 Jan  4 11:06 Lib
lrwxrwxrwx  1 root root     11 Dec 27 07:22 lock -> ../run/lock
drwxrwxr-x  8 root syslog 4096 Jan 10 06:06 log
drwx------  6 root root   4096 Jan 15 06:03 run
drwxr-xr-x  4 root root   4096 Jan  3 14:54 snap
drwxr-xr-x  4 root root   4096 Dec 27 07:22 spool
drwxr-xr-x  6 root root   4096 Jan 15 06:03 tmp

据我所知/var/run应该是符号链接到/run。我的系统中存在一些问题,如下所述使用 SSH 时,“who”命令输出空白,那么是因为/var/run不是符号链接吗?我可以安全地将其删除并用符号链接替换吗?

答案1

你是对的,这/var/run通常是一个符号链接。

但是,如果/var/run不包含任何文件,则用符号链接替换应该是安全的。如果有文件,则应先将其移动到/run

当目录/var/run为空时,您可以用这样的符号链接替换:

$ rmdir /var/run
$ ln -s /run /var/run

参考你的上一个问题,我猜这可能是失败的原因,因为/run包含了套接字/run/dbus/system_bus_socket

答案2

你应该绝不/var/run取消链接或将其用于任何其他目的...存在的/run唯一目的/var/run很久以前/run用于保存自系统启动以来描述的系统信息数据...在现代系统中,此功能已移至...但是,/var/run仍然存在,以确保与仍使用旧规范的系统和软件的兼容性。

你的链接其他问题就是此类软件的一个活生生的例子……who命令仍然/var/run按照其手册中的说明使用:

如果未指定 FILE,则使用/var/运行/utmp

Ubuntu 22.04 上的确认strace

strace -e openat who
openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
openat(AT_FDCWD, "/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
openat(AT_FDCWD, "/var/run/utmp", O_RDONLY|O_CLOEXEC) = 3 # <-- This one
openat(AT_FDCWD, "/etc/localtime", O_RDONLY|O_CLOEXEC) = 3
ubuntu   :0           2023-01-12 19:48 (:0)
+++ exited with 0 +++

相关内容