損壞了我的 Debian 安裝:在 PATH 中找不到“sh”
我正在執行
Debian buster/sid
. 我似乎通過錯誤地執行而破壞了很多東西apt-get dist-upgrade
(我認為這就是它的原因)。所以桌面管理器\桌面環境根本不再載入,我只得到一個命令行外殼。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";};
然後能力失敗
dpkg: warning: 'sh' not found in PATH or not executable dpkg: error: 1 expected
因此,我無法重新安裝必要的軟體包來恢復系統,因為 dpkg(以及因此 aptitude、apt-get、apt)已損壞,似乎是因為 sh 不在我的 PATH 中。但是,所有正確的目錄都在我的 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
and/root/.profile
和/etc/profile
. 在大多數情況下,使用者能夠通過簡單地正確定義他們的路徑來解決他們的問題(通常缺少/sbin
or目錄)。/usr/sbin
如上所述,我的 PATH 似乎包含所有相關目錄,無論我是echo $PATH
正常執行還是以 root 或sudo echo $PATH
. 一些使用者也有權限問題或sudo
自身問題。我還嘗試以 root 身份執行各種aptitude
apt
andapt-get
和命令,這表明我的問題有所不同。dpkg``sudo -i
正如@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
解決問題。
你被一個討厭的蟲子
dash
咬了,導致/bin/sh
被移除。這已經被修復了,這就是為什麼另一個apt update
並apt full-upgrade
修復它(在恢復/bin/sh
到bash
大概指向之後,你的評論並不清楚)。