sudo로 리디렉션을 사용하는 방법 [중복]

sudo로 리디렉션을 사용하는 방법 [중복]

중복 가능성:
쓰기 권한이 없는 파일로 표준 출력을 리디렉션합니다.

예, 루트로 업그레이드할 수 있습니다(그리고 아마도 그렇게 할 것입니다). 하지만 이것이 작동하지 않는 이유가 무엇인지 궁금합니다.

sudo cat .mplayer/config >> /home/griff/.mplayer/config
zsh: permission denied: /home/griff/.mplayer/config

sudo모든 명령을 실행할 수 있도록 구성되었으므로 제한을 두지 않았습니다.

답변1

답변자로서쓰레기 처리 앞으로, 이런 일이 발생하는 이유는>> 실제 명령이 실행되기 전에 발생합니다.sudo높은 권한 으로 실행되지 않습니다 .

또 다른 접근 방식은 전체 명령을 다른 bash 명령 셸에 래핑하는 것입니다.

sudo bash -c "cat .mplayer/config >> /home/griff/.mplayer/config"

그러면 권한이 있는 새 bash 쉘이 시작되고 sudo명령을 실행한 후 닫힙니다.

답변2

명령이 무엇이든 관계없이 >>명령이 실행되기 전에 리디렉션이 항상 완료되기 때문에 이는 실패합니다.

이 경우 쉘은 루트가 아닌 사용자로 실행되며 .../config현재 권한(루트 권한 대신)을 사용하여 파일에 연결하려고 시도하지만 sudo가 실행되기 전에 실패합니다.

명령 실행에 대한 일반적인 비유는 다음과 같습니다.

sudo tee --append /home/griff/.mplayer/config < .mplayer/config

(읽기 권한이 있다고 가정 .mplayer/config). sudo의 루트 컨텍스트에서 /home/griff/...열렸 으므로 파일에 쓸 수 있는 루트 권한이 있습니다.tee

나는 이 접근 방식의 팬이 아닙니다. 내용을 .mplayer/configstdout에 복사하고 이를 그리프 파일에 추가하기 때문입니다. 하지만 작동합니다.

답변3

통과

sudo는 어떤 명령이라도 실행할 수 있습니다

개념적으로 sudo가 모든 명령을 실행하도록 구성될 수 있다는 의미입니까, 아니면 대략적으로 해당 시스템에서 sudo를 구성했다는 의미입니까 <user> <host(s)>=<opt(s)> ALL?

시도해 보셨나요 sudo -u 0 cat ...? 이렇게 하면 사용자 ID가 허용된 경우 sudo가 루트로 명령을 실행하게 됩니다.

무엇을 인쇄할까요 sudo -l?

관련 정보