Bash

損壞了我的 Debian 安裝:在 PATH 中找不到“sh”

  • January 30, 2018

我正在執行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/.bashrcand/root/.profile/etc/profile. 在大多數情況下,使用者能夠通過簡單地正確定義他們的路徑來解決他們的問題(通常缺少/sbinor目錄)。/usr/sbin如上所述,我的 PATH 似乎包含所有相關目錄,無論我是echo $PATH正常執行還是以 root 或sudo echo $PATH. 一些使用者也有權限問題或sudo自身問題。我還嘗試以 root 身份執行各種aptitude aptandapt-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 updatesudo apt-get install --reinstall dash然後sudo apt-get full-upgrade解決問題。

你被一個討厭的蟲子dash咬了,導致/bin/sh被移除。這已經被修復了,這就是為什麼另一個apt updateapt full-upgrade修復它(在恢復/bin/shbash大概指向之後,你的評論並不清楚)。

引用自:https://unix.stackexchange.com/questions/419971