it-swarm-ko.tech

sudo를 사용하여 텍스트를 루트 소유 파일에 삽입하는 방법은 무엇입니까?

가능한 중복 :
stdout을 쓰기 권한이없는 파일로 리디렉션

Sudo echo 'text' >> /file.txt와 같은 명령을 실행하면 다음과 같이 실패합니다.

bash: /file.txt: Permission denied
48
tshepang

리디렉션이 적용되는 명령이 아닌 셸에 의해 리디렉션되기 때문에 작동하지 않습니다. 그러나 쉘이 루트로 실행되지 않고 echo 'text' 만 있습니다.

파일에 쓸 수 있지만 데이터를 생성하지 않는 루트 권한이 필요한 경우 일반적인 트릭은 tee를 사용하는 것입니다.

echo 'text' | Sudo tee -a /file.txt

tee도 텍스트를 표준 출력으로 인쇄합니다. 뮤팅하기 위해 쉘 추가 (>>)와 더 유사하게 동작하도록 stdout을 /dev/null로 라우팅합니다 :

echo 'text' | Sudo tee -a /file.txt > /dev/null

데이터를 생성하기 위해 루트 권한이 필요한 경우 두 개의 개별 Sudo 명령을 실행하거나 Sudo 내에서 셸을 실행하고 리디렉션을 수행 할 수 있습니다 (따옴표 사용).

Sudo echo 'text' | Sudo tee -a /file.txt
Sudo sh -c 'echo "text" >>/file.txt'

추가하지 않고 덮어 쓰는 경우 > 연산자 (set -o noclobber)를 사용하여 기존 파일을 자르기를 거부하는 셸에 익숙한 경우이 보호 기능이 적용되지 않습니다. Sudo sh -c 'echo >/etc/passwd'Sudo tee /etc/passwd/etc/passwd을 (를) 덮어 쓰므로 해당 noclobber 설정도 적용하려면 Sudo sh -o noclobber -c 'echo >/etc/passwd'이 (가) 필요합니다. sh에 의해 시작된 Sudo.

Bash에게 파일을 열고 Sudo echo 'text' 명령의 출력을 파일에 추가하도록 명령하고 있습니다. 물론 bash가 루트가 아닌 것으로 실행되므로 작동하지 않습니다. 대화식으로 보통이 문제를 해결하기 위해 Sudo -s를 실행합니다 (그 이후로 쉘은 루트로 실행되고 파일을 열 수 있기 때문에). 또는 Sudo sh -c "echo 'text' >> /file.txt"를 실행할 수도 있지만 복잡한식이있는 경우 방해 할 수있는 모든 보간/이스케이프가 약간 번거 롭습니다.

8
Thomas Themel