长话短说,我销毁了/var
它并从备份中恢复它 - 但备份没有设置正确的权限,现在所有内容/var
都归root所有。这似乎让一些程序不高兴。
我已经/var/cache/man
按照建议修复了 apt 失败 fopen 的问题这里以及 apache2 无法启动(通过授予/var/lib/apache2
to的所有权www-data
)。然而,现在解决所有问题的唯一方法似乎是在出现问题时手动修改权限 - 这似乎非常困难,因为我必须等待程序开始出现问题,确定问题与权限有关一些文件/var
然后我自己把它们设置好。
有没有简单的方法来纠正这个问题?我已经尝试重新安装(普通aptitude reinstall x
) 中列出的每个软件包dpkg -S /var
,但这不起作用。
答案1
实际上apt-get --reinstall install package
应该可以工作,至少有文件:
➜ ~ ls -l /usr/share/lintian/checks/version-substvars.desc
-rw-r--r-- 1 root root 2441 Jun 22 14:19 /usr/share/lintian/checks/version-substvars.desc
➜ ~ sudo chmod +x /usr/share/lintian/checks/version-substvars.desc
➜ ~ ls -l /usr/share/lintian/checks/version-substvars.desc
-rwxr-xr-x 1 root root 2441 Jun 22 14:19 /usr/share/lintian/checks/version-substvars.desc
➜ ~ sudo apt-get --reinstall install lintian
(Reading database ... 291736 files and directories currently installed.)
Preparing to unpack .../lintian_2.5.27_all.deb ...
Unpacking lintian (2.5.27) over (2.5.27) ...
Processing triggers for man-db (2.6.7.1-1) ...
Setting up lintian (2.5.27) ...
➜ ~ ls -l /usr/share/lintian/checks/version-substvars.desc
-rw-r--r-- 1 root root 2441 Jun 22 14:19 /usr/share/lintian/checks/version-substvars.desc
现在,您可能没有获得/var
目录中包含文件的所有软件包,因此最好找到他们全部:
➜ ~ find /var -exec dpkg -S {} + 2> /dev/null | grep -v "no path found" | wc -l
460
就我而言,它占了 460 个包含包的路径,如果您考虑到同一个包可以有多个路径,则实际上会更少,通过一些后处理,我们可以发现大约有 122 个路径:
➜ ~ find /var -exec dpkg -S {} + 2> /dev/null | grep -v "no path found" | cut -d : -f 1 | sort | uniq | wc -l
122
这当然计算了具有相同路径的几个包,例如wamerican, aspell-en, ispanish, wspanish, aspell-es, myspell-es
.这很容易修复:
➜ ~ find /var -exec dpkg -S {} + 2> /dev/null | grep -v "no path found" | cut -d : -f 1 | sed 's/, /\n/g' | sort | uniq | wc -l
107
所以,我有 107 个包,其中包含任何类型的文件/var
或子目录。您可以使用以下方法重新安装它们:
sudo apt-get --reinstall install $(find /var -exec dpkg -S {} + 2> /dev/null | grep -v "no path found" | cut -d : -f 1 | sed 's/, /\n/g')
这应该修复权限。
现在,还有另一个选择,找到一个好的安装并复制安装的文件权限:
chmod --recursive --reference good/var bad/var
答案2
我刚刚看到这个问题在这个博客上得到了很好的处理:
https://matoski.com/article/debian-restore-var-ownership-permissions/(Archive.org)
概括:
方法一:虚拟机
方法 2:从 debian 软件包
方法3:使用 aptitude 重新安装