sudo vi를 사용하여 루트가 소유한 파일을 업데이트할 수 있지만 sudo echo "Thing" >> file을 사용하여 해당 파일에 줄을 추가할 수 없는 이유는 무엇입니까?

sudo vi를 사용하여 루트가 소유한 파일을 업데이트할 수 있지만 sudo echo "Thing" >> file을 사용하여 해당 파일에 줄을 추가할 수 없는 이유는 무엇입니까?

/etc/httpd/conf.d/vhosts.conf 파일에 포함을 추가할 수 있도록 다른 웹 사이트의 자동 마이그레이션을 수행하는 스크립트를 갖고 싶습니다.

그러나 echo를 사용하여 파일 끝에 문자열을 추가하려고 하면 다음과 같은 결과가 나타납니다.

$ sudo echo "Include thing" >> /etc/httpd/conf.d/vhosts.conf
-bash: /etc/httpd/conf.d/vhosts.conf: Permission denied

하지만 아직 /etc/httpd/conf.d/vhosts.conf를 실행하고 행을 추가하고 파일을 :wq하여 저장하고 닫을 수 있습니다.

내가 무엇을 놓치고 있나요?

답변1

Sudo는 호출하는 프로세스를 승격하지만 리디렉션, 글로빙 등과 같은 현재 셸의 처리를 승격시키지 않습니다.

파일 리디렉션을 >> /etc/httpd/conf.d/vhosts.conf처리하는 중입니다.현재의현재 권한으로 계속 실행 중인 쉘입니다.

이런 식으로 시도해 볼 수 있습니다.

sudo bash -c 'echo "Include thing" >> /etc/httpd/conf.d/vhosts.conf'

또는

echo "Include thing" | sudo tee -a /etc/httpd/conf.d/vhosts.conf

관련 정보