개요

sudo 명령어와 echo 를 사용할 경우 echo 의 redirection 을 file 로 하면 의도한대로 동작하지 않고 아래처럼 퍼미션" 에러가 발생합니다.

sudo echo

sudo echo 'validate_password.policy=LOW' >> /etc/my.cnf

-bash: /etc/my.cnf: Permission denied
BASH


이는 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
CODE


tee 는 표준 출력에서 받은 문자열을 표준 출력에도 쓰므로 위와 같이 echo 로 출력한 문자열이 터미널에도 표시됩니다.

이게 싫으면 tee의 출력을 /dev/null 로 보내면 됩니다.

echo 'validate_password.policy=LOW' | sudo tee -a /etc/my.cnf > /dev/null
CODE


별도 shell 에서 실행

echo 구문 전체를 command string 으로 만들고 이를 별도 쉘을 통해 실행하는 방법도 있습니다.

이 방법은 복잡하고 실행할 구문을 문자열 만들어야 해서 실수할 여지도 있으므로 tee 를 쓰는 게 더 낫습니다.

sudo sh -c "echo 'validate_password.policy=LOW' >> /etc/my.cnf"
CODE


같이 보기

Ref