我正在运行一个自定义构建的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/sbin
echo $PATH
sudo echo $PATH
sudo
aptitude
apt
apt-get
dpkg
sudo -i
答案1
你被咬了一个讨厌的错误dash
这导致/bin/sh
被删除。此问题已得到修复,这就是为什么另一个问题apt update
并apt 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
解决了问题。