sudo [duplicate]를 사용하여 파일에 텍스트를 추가하려고 하면 "권한이 거부되었습니다"

sudo [duplicate]를 사용하여 파일에 텍스트를 추가하려고 하면 "권한이 거부되었습니다"

저는 아마존 리눅스를 사용하고 있습니다. 파일에 텍스트를 추가하려고 합니다. 이 파일은 루트가 소유합니다. "sudo"를 사용하면 필요한 텍스트를 추가할 수 있다고 생각했지만 "권한이 거부되었습니다"라는 메시지가 표시됩니다. 아래를 참조하세요.

[myuser@mymachine ~]$ ls -al /etc/yum.repos.d/google-chrome.repo
-rw-r--r-- 1 root root 186 Jul 31 15:50 /etc/yum.repos.d/google-chrome.repo
[myuser@mymachine ~]$ sudo echo -e "[google-chrome]\nname=google-chrome\nbaseurl=http://dl.google.com/linux/chrome/rpm/stable/\$basearch\nenabled=1\ngpgcheck=1\ngpgkey=https://dl-ssl.google.com/linux/linux_signing_key.pub" >> /etc/yum.repos.d/google-chrome.repo
-bash: /etc/yum.repos.d/google-chrome.repo: Permission denied

필요한 텍스트가 파일에 추가되도록 명세서를 어떻게 조정합니까?

답변1

tee특정 권한이 필요한 파일에 스트림을 리디렉션하거나 추가하려면 유틸리티를 사용해야 합니다 . 예를 들면 다음과 같습니다.

echo something | sudo tee /etc/file

또는 추가하기 위해

echo something | sudo tee -a /etc/file

기본적으로 쉘은 자신의 사용자 권한 및 리디렉션으로 실행되거나 >사용자 >>와 동일한 권한으로 수행되므로 실제로는 허가 없이 실행되고 echo리디렉션 sudo됩니다 root.

대안으로 루트 셸을 가져와 정상적으로 리디렉션을 시도해 볼 수도 있습니다.

sudo -i
echo something >> /etc/pat/to/file
exit

또는 sudo -s비로그인 쉘의 경우.

루트 액세스로 비대화형 셸을 실행할 수도 있습니다.

sudo bash -c 'echo something >> /etc/somewhere/file'

답변2

이전 답변에서 제공한 설명은 기본적으로 정확합니다. 리디렉션 전 명령은 높은 권한으로 실행되지만 리디렉션 자체는 실행되지 않습니다.

귀하의 요구 사항을 충족시킬 또 다른 방법이 있습니다. 여기나 답변에는 언급되지 않았습니다.문제는 이게 중복이라는거. 완전성을 위해 여기에 넣겠습니다.

sudo su -c 'echo -e "some\ntext" >> /other/file'

관련 정보