쓰기 권한이 없는 파일로 표준 출력을 리디렉션합니다.

쓰기 권한이 없는 파일로 표준 출력을 리디렉션합니다.

쓰기 권한 없이 파일을 수정하려고 하면 다음 오류 메시지가 나타납니다.

> touch /tmp/foo && sudo chown root /tmp/foo
> echo test > /tmp/foo
zsh: permission denied: /tmp/foo

Sudoing은 명령을 루트로 실행하기 때문에 도움이 되지 않지만 쉘은 stdout 리디렉션과 파일 열기를 사용자가 수행한 방식으로 처리합니다.

> sudo echo test > /tmp/foo
zsh: permission denied: /tmp/foo

루트로 쉘을 열고 그런 식으로 파일을 조작하는 것 외에 쓰기 권한이 없는 파일로 stdout을 리디렉션하는 쉬운 방법이 있습니까?

> sudo su
# echo test > /tmp/foo

답변1

예, 사용 하십시오 tee.echo test > /tmp/foo

echo test | sudo tee /tmp/foo

>>( )를 추가할 수도 있습니다.

echo test | sudo tee -a /tmp/foo

답변2

파일 내용을 쉘 리디렉션 연산자의 출력 echo으로 바꿉니다.>

echo test | sudo dd of=/tmp/foo

잘림 없이 파일에 쓰려면(처음에는 seek출력에 다른 오프셋을 사용할 수 있지만) ( 1<>Bourne 쉘 연산자와 유사):

echo test | sudo dd of=/tmp/foo conv=notrunc

GNU를 사용하여 파일에 추가하려면(예 >>: ) dd:

echo test | sudo dd of=/tmp/foo oflag=append conv=notrunc

기존 파일이 손상되는 것을 방지 dd하려면 ( POSIX 셸에서와 같이) GNU를 참조하고 그 반대(기존 파일만 업데이트하는 경우) 도 참조하세요 .conv=exclset -o noclobberconv=nocreat

답변3

tee아마도 최선의 선택일 것입니다. 하지만 상황에 따라 다음과 같이 해도 충분할 수 있습니다.

sudo sh -c 'echo test > /tmp/foo'

답변4

spongemoreutils 패키지에서 사용됩니다. 표준 출력에 쓰지 않는다는 장점이 있습니다.

echo test | sudo sponge /tmp/foo

-a파일을 덮어쓰는 대신 파일에 추가하려면 이 옵션을 사용하십시오 .

관련 정보