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

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命令缺失的问题
    getentutil-linux包的一部分,大概率是这个包损坏导致命令丢失了。你可以先尝试强制重装:

    sudo apt-get install --reinstall util-linux
    

    如果这条命令因为dpkg的依赖问题跑不起来,那就手动解压包恢复:

    1. 下载对应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
      
    2. 创建临时目录并解压包:
      mkdir temp && dpkg-deb -x util-linux_2.34-0.1ubuntu9.4_amd64.deb temp
      
    3. getent复制到系统目录并添加执行权限:
      sudo cp temp/usr/bin/getent /usr/bin/
      sudo chmod +x /usr/bin/getent
      
  • 修复shadow组的ID问题
    错误提示说shadow组的标准ID是42,但你的系统里已经存在这个组但ID不对,得调整过来:

    1. 先查看当前shadow组的信息:
      cat /etc/group | grep shadow
      
    2. 如果输出里的ID不是42,先删除现有shadow组:
      sudo groupdel shadow
      
    3. 重新创建ID为42的shadow组:
      sudo groupadd -g 42 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

火山引擎 最新活动