문제

이것은 아주 간단한 질문에 적어도 같은 것,그것이 있어야에 대한 sudo 권한에서 리눅스.

많은 시간을 추가 뭔가 /etc/hosts 또는 이와 유사한 파일이 있지만 끝까지 할 수 없기 때문에 모두 >>> 은 허용되지 않습도 루트입니다.

가 어떻게든지 이 작업을 확인하지 않고 susudo su 로 root 아래 있는가?

도움이 되었습니까?

해결책

tee --appendtee -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

다른 팁

문제는 포탄은 출력을 리디렉션하지 않 sudo 또는 반향을 가지고,그래서 이것은 당신의 일반 사용자.

다음 코드:

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"그 명령하는 권한 있는 당신의 사람의 사용자가"sudoing"니다.

나는 것입니다,호기심할 수있는,또한 인용하는 히어닥(대형 블록):

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 tee 와 조합 > /dev/null 유 stdout 깨끗합니다.

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

유 응답, 이에서 당신의 ~/.bashrc:

sudoe() {
    [[ "$#" -ne 2 ]] && echo "Usage: sudoe <text> <file>" && return 1
    echo "$1" | sudo tee --append "$2" > /dev/null
}

지금 실행할 수 있습니다 sudoe 'deb blah # blah' /etc/apt/sources.list


편집:

더 완전한 버전할 수 있는 파이프에서 입력하거나 리디렉션은 파일에서 포함 -a 스위치를 끄는 추가하여(이에 기본적으로):

sudoe() {
  if ([[ "$1" == "-a" ]] || [[ "$1" == "--no-append" ]]); then
    shift &>/dev/null || local failed=1
  else
    local append="--append"
  fi

  while [[ $failed -ne 1 ]]; do
    if [[ -t 0 ]]; then
      text="$1"; shift &>/dev/null || break
    else
      text="$(cat <&0)"
    fi

    [[ -z "$1" ]] && break
    echo "$text" | sudo tee $append "$1" >/dev/null; return $?
  done

  echo "Usage: $0 [-a|--no-append] [text] <file>"; return 1
}

사용할 수도 있습니다 spongemoreutils 패키지하고 필요가 없을 리디렉션의 출력을(즉, tee 소음 숨기기):

echo 'Add this line' | sudo sponge -a privfile

echo'Hello World'|(sudo 티 a/etc/apt/sources.목록)

이것은 나를 위해 일했:원래의 명령

echo "export CATALINA_HOME="/opt/tomcat9"" >> /etc/environment

작업 명령

echo "export CATALINA_HOME="/opt/tomcat9"" |sudo tee /etc/environment

를 사용하여 sed-i $a 할 수 있습 텍스트 추가,모두 포함하는 변수와 특별한 문자,후에 마지막 라인입니다.

예를 들어 추가,$NEW_HOST 과$NEW_IP/etc/hosts:

sudo sed -i "\$ a $NEW_IP\t\t$NEW_HOST.domain.local\t$NEW_HOST" /etc/hosts

sed 옵션 설명:

  • -i 위치
  • $ 을 위한 마지막 라인
  • a 에 대한 추가

를 변경할 수 있습니 파일의 소유권이 다음 그것을 변경 후 다시 사용하여 cat >> 추가?

sudo chown youruser /etc/hosts  
sudo cat /downloaded/hostsadditions >> /etc/hosts  
sudo chown root /etc/hosts  

이 같은 것은 당신을 위해 작동 합니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top