Debian
修復 /var(或任何其他系統目錄)上的損壞權限
長話短說,我
/var
從備份中銷毀並恢復了它 - 但備份沒有設置正確的權限,現在所有/var
內容都歸根使用者所有。這似乎讓一些程序不高興。我已經按照此處
/var/cache/man
的建議修復了 apt 失敗 fopen以及 apache2 無法啟動(通過授予to的所有權)。但是,現在解決所有問題的唯一方法似乎是在出現問題時手動處理權限 - 這似乎非常困難,因為我必須等待程序開始給出問題,確定問題與權限有關一些文件,然後自己設置它們。/var/lib/apache2``www-data``/var
有沒有簡單的方法來糾正這個問題?我已經嘗試重新安裝 (plain
aptitude reinstall x
) 中列出的每個包dpkg -S /var
,但這不起作用。
實際上
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