sudo echo 명령어 사용시 Permission denied 문제 해결하기
개요
sudo 명령어와 echo 를 사용할 경우 echo 의 redirection 을 file 로 하면 의도한대로 동작하지 않고 아래처럼 퍼미션" 에러가 발생합니다.
sudo echo
sudo echo 'validate_password.policy=LOW' >> /etc/my.cnf -bash: /etc/my.cnf: Permission denied
이는 shell 이 리다이렉션을 수행할 때 sudo 로 전환된 root 아닌 명령을 실행한 사용자로 실행해서 발생하는 일입니다.
해결하려면 다음과 같은 여러 방법이 있습니다
tee 명령어 사용
표준 입력(standard input)에서 읽어서 표준 출력(standard output)이나 파일에 기록하는 tee 명령을 사용하면 됩니다.
주의할 점은 기존 파일에 추가하는 >> 연산자는 --append 또는 -a 옵션을 사용해야 합니다.
echo 'validate_password.policy=LOW' | sudo tee -a /etc/my.cnf validate_password.policy=LOW
tee 는 표준 출력에서 받은 문자열을 표준 출력에도 쓰므로 위와 같이 echo 로 출력한 문자열이 터미널에도 표시됩니다.
이게 싫으면 tee의 출력을 /dev/null 로 보내면 됩니다.
echo 'validate_password.policy=LOW' | sudo tee -a /etc/my.cnf > /dev/null
별도 shell 에서 실행
echo 구문 전체를 command string 으로 만들고 이를 별도 쉘을 통해 실행하는 방법도 있습니다.
이 방법은 복잡하고 실행할 구문을 문자열 만들어야 해서 실수할 여지도 있으므로 tee 를 쓰는 게 더 낫습니다.
sudo sh -c "echo 'validate_password.policy=LOW' >> /etc/my.cnf"