このマシンに何か悪いことが起こったような気がします。
faheem@bulldog:/usr/local/src/mercurial$ sudo dpkg -i
mercurial_3.0-1_amd64.deb mercurial-common_3.0-1_all.deb
dpkg: warning: 'ldconfig' not found in PATH or not executable
dpkg: warning: 'start-stop-daemon' not found in PATH or not executable
dpkg: error: 2 expected programs not found in PATH or not executable
Note: root's PATH should usually contain /usr/local/sbin, /usr/sbin
and /sbin
これは維持されていない古い機械であり、しばらく使用しました。いつか死ぬとしましょう。今日はまさにその日になりそうです。少し早くエラーが発生し始め、誰かがちょうど再起動したようです。
アップデート:実行後
sudo -s
パス値を確認しました。
echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/games
sbin
たとえば、とのような内容がここにありません/usr/sbin
。
アップデート2:
1人以上の未知の人が次の行を削除したことがわかりました/etc/sudoers
。
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
説明してくれたAnthonyに感謝します。
答え1
出力の下部にある「注意:」でsudo dpkg -i
わかるように、これは通常$PATH
誤った設定が原因で発生します。これが発生する可能性のある1つの方法は、dpkg -i
ルートなしで実行する場合ですが、ここではそうではありません。
パスを確認する簡単な方法はrunを実行することですsudo -s
。これはsudoに他のプログラムの代わりにシェルを実行するように指示します。したがって、ルートシェルプロンプトに入ります。これにより、見つかったり失われたりするecho "$PATH"
ことがあります。/sbin
/usr/sbin
sudoのデフォルトの動作は、ユーザー$PATH
変数をそのままにすることです。このデフォルト値は通常、/etc/sudoers
以下を含むDebianのdefaultによって変更されます。
Defaults env_reset
⋮
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
この行を見逃した場合、secure_path
問題が説明されます。
2つのオプションは、行を再追加するか(たとえば、追加の要素が含まれているため、ユーザーのパスを維持するために誰かがそれを削除した可能性がある)、ユーザーに追加する/opt
ことです。/sbin:/usr/sbin
$PATH