나는 이해
sudo cd /directory
다음을 반환합니다:
sudo: cd: command not found
cd는 바이너리 파일이 아닌 쉘 내장 명령이기 때문입니다. 그런데 왜
sudo echo 'this is a test'
잘 지내?
여기서 무슨 일이 일어나고 있는 걸까요? 쉘이 아닌 경우 sudo
명령을 어떻게 찾을 수 있습니까?echo
답변1
이유는 간단합니다. cd
이는 쉘 내장 함수(일부 쉘에서는 쉘 함수)이고 echo
바이너리 파일이자 쉘 내장 함수입니다.
$ type -a cd
cd is a shell builtin
$ type -a echo
echo is a shell builtin
echo is /bin/echo
sudo
쉘 내장은 처리할 수 없지만 처리할 수는 있습니다 . 를 $PATH
사용하면 에서 발견되므로 이를 사용하고, 에서 발견되지 않으므로 실패합니다.sudo echo
/bin/echo
$PATH
sudo cd
cd
$PATH
답변2
달리기
which echo
주어진
/bin/echo
echo
정상적인 프로그램이며 sudo
"찾을" 수 있습니다.
참고로 몇 가지 옵션이 있어야 합니다.sudoers(5)
답변3
문제는 sudo cd
운영 체제에서의 성공보다는 실패 에 관한 것입니다 sudo echo
.
sudo cd /directory
root
이는 특정 사용자(아마 여기)가 cd
특정 디렉토리에 액세스 할 수 있는지 확인하는 매우 합법적인 방법입니다 . 그렇기 때문에 모든 Posix 호환 운영 체제는하다실행 가능한 버전이 제공됩니다 cd
.
따라서 귀하의 질문에 대한 답변은 쉘 별명 및 실행 가능 명령에 의해 제공되기 sudo echo yo
때문에 설계된 대로 작동 하지만 운영 체제(아마도 Gnu/Linux 기반)가 중단되었기 때문이 아닙니다.echo
sudo cd /directory
Posix 표준이 특별한 경우에는.
시스템의 간단한 해결 방법은 다음을 실행하는 것입니다.sudo sh -c "cd /directory"