我正在运行 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 +++