나는 이해
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
것보다 OS에서 실패하는 것이 더 많습니다 sudo echo
.
sudo cd /directory
이는 아마도 root
여기에서 특정 사용자가 cd
일부 디렉토리에 액세스할 수 있는지 확인하는 매우 합법적인 방법입니다. 이것이 모든 Posix 호환 OS가하다의 실행 가능한 버전을 제공합니다 cd
.
따라서 귀하의 질문에 대한 대답은 쉘 별칭과 실행 가능한 명령 모두에 의해 제공되기 sudo echo yo
때문에 의도적으로 작동 하지만 Gnu/Linux 기반 OS가 중단되었기 때문에 작동하지 않습니다.echo
sudo cd /directory
포식스 표준이 특별한 경우에는.
시스템에 대한 간단한 해결 방법은 다음을 실행하는 것입니다.sudo sh -c "cd /directory"