You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

树莓派安装/更新软件包时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

火山引擎 最新活动