![echo가 쉘 내장 함수임에도 불구하고 "$ sudo echo 'yo'"가 여전히 작동하는 이유는 무엇입니까? [복사]](https://linux55.com/image/57664/echo%EA%B0%80%20%EC%89%98%20%EB%82%B4%EC%9E%A5%20%ED%95%A8%EC%88%98%EC%9E%84%EC%97%90%EB%8F%84%20%EB%B6%88%EA%B5%AC%ED%95%98%EA%B3%A0%20%22%24%20sudo%20echo%20'yo'%22%EA%B0%80%20%EC%97%AC%EC%A0%84%ED%9E%88%20%EC%9E%91%EB%8F%99%ED%95%98%EB%8A%94%20%EC%9D%B4%EC%9C%A0%EB%8A%94%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F%20%5B%EB%B3%B5%EC%82%AC%5D.png)
나는 이해
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"