sudo echo"something">>/etc/privilegedFile 작동하지 않는
-
01-07-2019 - |
문제
이것은 아주 간단한 질문에 적어도 같은 것,그것이 있어야에 대한 sudo 권한에서 리눅스.
많은 시간을 추가 뭔가 /etc/hosts
또는 이와 유사한 파일이 있지만 끝까지 할 수 없기 때문에 모두 >
고 >>
은 허용되지 않습도 루트입니다.
가 어떻게든지 이 작업을 확인하지 않고 su
나 sudo su
로 root 아래 있는가?
해결책
사 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
다른 팁
문제는 포탄은 출력을 리디렉션하지 않 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
}
사용할 수도 있습니다 sponge
서 moreutils
패키지하고 필요가 없을 리디렉션의 출력을(즉, 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
이 같은 것은 당신을 위해 작동 합니까?