방금 이 기계에 뭔가 나쁜 일이 일어난 것 같은 느낌이 듭니다.
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:
한 명 이상의 알려지지 않은 사람이 다음 줄을 삭제한 것으로 나타났습니다 /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
잘못된 설정으로 인해 발생합니다. 이런 일이 발생할 수 있는 한 가지 방법은 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
문제가 설명됩니다.
두 가지 옵션은 라인을 다시 추가하거나(예를 들어 추가 요소가 포함되어 있기 때문에 사용자 경로를 유지하기 위해 누군가가 이를 제거했을 수 있음 ) 사용자의 에 /opt
추가하는 것입니다 ./sbin:/usr/sbin
$PATH