树莓派安装/更新软件包时root权限被拒绝的原因及修复方案
嘿,碰到root权限还报Operation not permitted的情况确实挺头疼的,我之前帮几个树莓派用户解决过类似问题,大概率不是普通权限配置的锅,咱们一步步来排查修复:
一、先排查文件系统是否被只读挂载
树莓派的SD卡如果出现异常,系统会自动把文件系统挂载为只读模式保护数据,这时候就算root也没法修改文件。先验证一下:
mount | grep /
如果输出里包含ro字样,说明根目录是只读挂载。先重新挂载为读写模式:
sudo mount -o remount,rw /
之后再重新执行sudo apt-get -f install试试,很多时候这一步就能解决问题。
二、检查目标文件/目录的特殊权限
错误里提到无法创建/usr/share/locale/xh/LC_MESSAGES/gdk-pixbuf.mo.dpkg-new,有可能这个文件或者父目录被设置了**immutable(不可修改)**属性——就算root也没法修改带这个属性的文件/目录。
先检查属性:
lsattr /usr/share/locale/xh/LC_MESSAGES/ # 如果原文件存在,也检查一下 lsattr /usr/share/locale/xh/LC_MESSAGES/gdk-pixbuf.mo 2>/dev/null
如果输出里有i标记,就去掉这个属性:
# 去掉文件的immutable属性(如果存在) sudo chattr -i /usr/share/locale/xh/LC_MESSAGES/gdk-pixbuf.mo 2>/dev/null # 去掉目录的immutable属性 sudo chattr -i /usr/share/locale/xh/LC_MESSAGES/
完成后再重新运行修复命令。
三、删除损坏的缓存包,重新下载
有时候是下载的deb包本身损坏,导致解压时出错。直接删掉出错的缓存包:
sudo rm /var/cache/apt/archives/libgdk-pixbuf2.0-common_2.31.1-2+deb8u7_all.deb
然后更新apt缓存并重新执行修复:
sudo apt-get update sudo apt-get -f install
四、排查安全模块限制(小众情况)
Debian 8(Jessie)默认启用了AppArmor,个别情况下它的规则会拦截apt的操作。可以先临时禁用它试试:
sudo systemctl stop apparmor sudo systemctl disable apparmor
如果修复成功了,之后可以再重新启用AppArmor,或者调整对应的规则文件。
五、文件系统损坏的极端情况
如果上面的方法都不行,可能是SD卡的文件系统有损坏。这时候建议先备份重要数据,然后重启树莓派,让系统自动执行fsck修复;或者进入单用户模式手动修复:
sudo fsck -y /dev/mmcblk0p2
注意:执行fsck前要确保目标分区没有挂载,单用户模式下操作更安全。
内容的提问来源于stack exchange,提问作者cresse




