损坏了我的 Debian 安装:在 PATH 中找不到“sh”

损坏了我的 Debian 安装:在 PATH 中找不到“sh”

我正在运行一个自定义构建的Debian buster/sid.我似乎因错误的运行而破坏了很多东西apt-get dist-upgrade(我认为这就是原因)。因此,桌面管理器\桌面环境根本不再加载,我只得到一个命令行 shell。

aptitude 和 apt-get 以及 dpkg 都已损坏。

apt update、aptitude update 和 apt-get update 失败并在尝试运行时给出很多错误,但是我的 /etc/apt/sources.list 看起来不错

deb http://ftp.ie.debian.org/debian unstable main contrib non-free
deb-src http://ftp.ie.debian.org/debian unstable main contrib non-free
deb http://ftp.ie.debian.org/debian experimental main contrib non-free
deb-src http:// ftp.ie.debian.org/debian experimental main contrib non free
deb https://dl.winehq.org/wine-builds/debian sid main
deb https://dl.winehq.org/wine-builds/ubuntu sid main

更新时出现这样的错误:

Err:2 http://ftp.ie.debian.org/debian unstable InRelease
Couldn't execute /usr/bin/apt-key to check /var/lib/apt/lists/partial/ftp.ie.debian.org_debian_dists_experimental_InRelease

E: Problem executing scripts APT::Update::Post-Invoke-Success '/usr/bin/test -e /usr/share/dbus-1/system-services/org.freedesktop.PackageKit.service && /usr/bin/test -S /var/run/dbus/system_bus_socket && /usr/bin/gdbus call --system --dest org.freedesktop.PackageKit --object-path /org/freedesktop/PackageKit --timeout 4 --method org.freedesktop.PackageKit.StateHasChanged cache-update > /dev/null; /bin/echo > /dev/null'

E: Sub-process returned an error code

aptitude Upgrade、apt Upgrade 或 apt-get Upgrade 似乎由于 dpkg 被破坏而被破坏

dpkg 给出这个错误:

dpkg: warning: 'sh' not found in PATH or not executable
dpkg: error: 1 expected

然而echo $PATH返回,这对我来说看起来不错

/home/ferg/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games

如果我尝试sh我会得到

The program 'sh' is currently not installed. To run 'sh' please ask your administrator to install the package 'dash'

如果我尝试sudo apt-get install dash

它告诉我dash is already the newest version (0.5.8-2.6)

如果我继续

E: Sub-process /usr/sbin/dpkg-preconfigure --apt || true returned an error code (100)
E: Failure running script /usr/sbin/dpkg/preconfigure --apt || true

如果我运行sudo nano /etc/apt/apt.conf.d/70debconf并注释掉该行DPkg::Pre-Install-Pkgs {"/usr/sbian/dpkg-preconfigure --apt || true";};

然后 aptitude 失败

dpkg: warning: 'sh' not found in PATH or not executable
dpkg: error: 1 expected

因此,我无法重新安装必要的软件包来恢复系统,因为 dpkg(以及 aptitude、apt-get、apt)已损坏,似乎是因为 sh 不在我的 PATH 中。然而,所有正确的目录都在我的路径中。我假设用 sh 解决这个问题将使 dpkg 和 aptitude 再次工作,但我想知道 sh 到底有什么问题?

预先感谢您的任何帮助。


更新:

ls -l /bin/bash

回报

-rwxr-xr-x 1 root root 1099016 May 15  2017 /bin/bash

ls -l /bin/sh回报

lrwxrwxrwx 1 root root 4 Jun 28  2017 /bin/sh -> dash

ls -l /bin/dash回报

ls: cannot access 'bin/dash': No such file or directory

所以 /bin/sh 似乎重定向到 /bin/dash ,它已被以某种方式删除?

sudo apt-get install --reinstall dash失败并显示:

1 not fully installed or removed.
After this operation, 0 B of additional disk space will be used.    
E: Internal Error, No file name for dash:amd64

运行sudo ln -sf bash /bin/sh然后sudo apt-get install --reinstall dash失败并出现与上面相同的错误。

在 Google 上搜索此问题及其变体时,我发现了许多与用户的 PATH 和权限相关的解决方案,我检查了与该问题相关的文件,包括/etc/sudoers /root/.bashrc和。在大多数情况下,用户只需正确定义路径即可解决问题(通常缺少或目录)。如上所述,我的 PATH 似乎包含所有相关目录,无论我正常运行还是作为 root 或.一些用户还遇到权限或自身问题。我还尝试以 root 身份执行各种and和命令,这表明我的问题是不同的。/root/.profile/etc/profile/sbin/usr/sbinecho $PATHsudo echo $PATHsudoaptitude aptapt-getdpkgsudo -i

答案1

你被咬了一个讨厌的错误dash这导致/bin/sh被删除。此问题已得到修复,这就是为什么另一个问题apt updateapt full-upgrade修复了它(在恢复到/bin/sh指向之后bash,您的评论对此并不清楚)。

答案2

正如@Stephen Kitt所说,我遇到过这个错误其中dash已经损坏sh(Bourne shell),就像我的特定发行版中/bin/sh的符号链接一样。/bin/dash/

运行sudo ln -sf bash /bin/sh以指向sh然后bash运行sudo apt-get update然后再sudo apt-get install --reinstall dash接着sudo apt-get full-upgrade解决了问题。

相关内容