[bash] sudo echo“무언가”>> / etc / privilegedFile이 작동하지 않습니다

이것은 리눅스에서 sudo 권한에 관한 것 같은 최소한 간단한 질문입니다.

난 그냥 뭔가 추가 할 때가 많이 있습니다 /etc/hosts또는 유사한 파일을하지만 모두 때문에 할 수없는 끝 >>>심지어 루트로 허용되지 않습니다.

필요없이이 일을하기 위해 거기에 어떻게든지인가 su또는 sudo su루트로는?



답변

tee --append또는을 사용하십시오 tee -a.

echo 'deb blah ... blah' | sudo tee -a /etc/apt/sources.list

따옴표 안에 따옴표를 사용하지 마십시오.

콘솔로 데이터를 다시 인쇄하지 않으려면 출력을 / dev / null로 리디렉션하십시오.

echo 'deb blah ... blah' | sudo tee -a /etc/apt/sources.list > /dev/null

( -a/ --append) 플래그를 기억하십시오 ! 그냥 tee작동 >하고 파일을 덮어 씁니다. 파일의 끝에서 tee -a작동 >>하고 작성합니다.


답변

문제는 쉘이 sudo 또는 echo가 아닌 출력 경로 재 지정을 수행하므로 일반 사용자로 수행된다는 것입니다.

다음 코드 스 니펫을 사용해보십시오.

sudo sh -c "echo 'something' >> /etc/privilegedfile"


답변

문제는 리디렉션을 처리하는 것이 쉘이라는 것입니다. sudo에서 실행중인 프로세스 권한이 아닌 권한으로 파일을 열려고합니다 .

아마도 다음과 같은 것을 사용하십시오 :

sudo sh -c "echo 'something' >> /etc/privilegedFile"


답변

sudo sh -c "echo 127.0.0.1 localhost >> /etc/hosts"


답변

하기

sudo sh -c "echo >> somefile"

작동해야합니다. 문제는>와 >>가 “sudoed”명령이 아닌 셸에 의해 처리되므로 권한은 “sudoed”하려는 사용자의 권한이 아니라 사용자의 권한입니다.


답변

궁금한 점은 heredoc (큰 블록의 경우)을 인용 할 수도 있습니다.

sudo bash -c "cat <<EOIPFW >> /etc/ipfw.conf
<?xml version=\"1.0\" encoding=\"UTF-8\"?>

<plist version=\"1.0\">
  <dict>
    <key>Label</key>
    <string>com.company.ipfw</string>
    <key>Program</key>
    <string>/sbin/ipfw</string>
    <key>ProgramArguments</key>
    <array>
      <string>/sbin/ipfw</string>
      <string>-q</string>
      <string>/etc/ipfw.conf</string>
    </array>
    <key>RunAtLoad</key>
    <true></true>
  </dict>
</plist>
EOIPFW"


답변

bash에서는 stdout을 깨끗하게 유지하기 위해 tee와 함께 사용할 수 있습니다 > /dev/null.

 echo "# comment" |  sudo tee -a /etc/hosts > /dev/null