sudo echo "something">> / etc / privilegedFile이 작동하지 않습니다.
이것은 Linux의 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"명령이 아니라 쉘에 의해 처리된다는 것입니다. 따라서 권한은 "sudoing"하는 사용자의 권한이 아니라 사용자의 권한입니다.
호기심이 많으시면 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에서는와 tee
함께 사용 하여 > /dev/null
stdout을 깨끗하게 유지할 수 있습니다 .
echo "# comment" | sudo tee -a /etc/hosts > /dev/null
Yoo의 대답을 사용하여 다음을 입력하십시오 ~/.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
사용하여 나오지 -i를 와 $ a , 마지막 줄 뒤에 변수와 특수 문자를 모두 포함하는 텍스트를 추가 할 수 있습니다.
예를 들어, $ NEW_IP와 함께 $ NEW_HOST를 / etc / hosts에 추가합니다.
sudo sed -i "\$ a $NEW_IP\t\t$NEW_HOST.domain.local\t$NEW_HOST" /etc/hosts
sed 옵션 설명 :
- -i-현재 위치
- $ ( 마지막 줄)
- APPEND에 대한
echo 'Hello World'| (sudo tee -a /etc/apt/sources.list)
How about:
echo text | sudo dd status=none of=privilegedfile
I want to change /proc/sys/net/ipv4/tcp_rmem.
I did:
sudo dd status=none of=/proc/sys/net/ipv4/tcp_rmem <<<"4096 131072 1024000"
eliminates the echo with a single line document
This worked for me: original command
echo "export CATALINA_HOME="/opt/tomcat9"" >> /etc/environment
Working command
echo "export CATALINA_HOME="/opt/tomcat9"" |sudo tee /etc/environment
Can you change the ownership of the file then change it back after using cat >>
to append?
sudo chown youruser /etc/hosts
sudo cat /downloaded/hostsadditions >> /etc/hosts
sudo chown root /etc/hosts
Something like this work for you?
참고URL : https://stackoverflow.com/questions/84882/sudo-echo-something-etc-privilegedfile-doesnt-work
'program tip' 카테고리의 다른 글
WOFF 글꼴의 MIME 유형? (0) | 2020.10.04 |
---|---|
"정적 const"vs "#define"vs "enum" (0) | 2020.10.04 |
프로그래밍 방식으로 Android API 버전 검색 (0) | 2020.10.04 |
SQL Server : 데이터베이스가 "복원 중"상태로 멈춤 (0) | 2020.10.04 |
dispatch_after-Swift의 GCD? (0) | 2020.10.04 |