WSL Ubuntu执行apt命令持续报错Sub-process /usr/bin/dpkg returned an error code (1)求助
WSL Ubuntu执行apt命令持续报错Sub-process /usr/bin/dpkg returned an error code (1)求助
老哥我之前也踩过WSL里dpkg报错的坑,看你给出的错误信息,核心是两个问题:一是getent命令找不到,二是shadow组的ID不符合Debian/Ubuntu的标准要求。给你几个亲测有效的解决步骤,你可以一步步来试:
先修复
getent命令缺失的问题getent是util-linux包的一部分,大概率是这个包损坏导致命令丢失了。你可以先尝试强制重装:sudo apt-get install --reinstall util-linux如果这条命令因为dpkg的依赖问题跑不起来,那就手动解压包恢复:
- 下载对应Ubuntu 20.04版本的util-linux deb包:
wget http://archive.ubuntu.com/ubuntu/pool/main/u/util-linux/util-linux_2.34-0.1ubuntu9.4_amd64.deb - 创建临时目录并解压包:
mkdir temp && dpkg-deb -x util-linux_2.34-0.1ubuntu9.4_amd64.deb temp - 把
getent复制到系统目录并添加执行权限:sudo cp temp/usr/bin/getent /usr/bin/ sudo chmod +x /usr/bin/getent
- 下载对应Ubuntu 20.04版本的util-linux deb包:
修复shadow组的ID问题
错误提示说shadow组的标准ID是42,但你的系统里已经存在这个组但ID不对,得调整过来:- 先查看当前shadow组的信息:
cat /etc/group | grep shadow - 如果输出里的ID不是42,先删除现有shadow组:
sudo groupdel shadow - 重新创建ID为42的shadow组:
sudo groupadd -g 42 shadow
- 先查看当前shadow组的信息:
重新配置passwd包并修复依赖
完成上面两步后,让dpkg重新完成passwd包的配置:sudo dpkg --configure passwd之后再运行命令修复所有依赖问题:
sudo apt-get -f install最后试试正常的更新升级:
sudo apt update && sudo apt upgrade
如果上面的步骤都没解决问题,那可能是WSL的系统文件损坏比较严重,你可以先备份好自己的重要数据,然后执行wsl --unregister Ubuntu重置WSL实例,之后重新安装Ubuntu子系统,这算是最后的兜底方案了。
备注:内容来源于stack exchange,提问作者Martin




