sudo echo "something" >> /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"하는 사용자의 권한이 아니라 사용자의 권한이라는 것입니다.
흥미롭게도, 저는 당신이 (큰 블록의 경우) 유전자를 인용할 수 있다는 것에 주목할 것입니다.
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
스타드아웃을 깨끗하게 유지하기 위해.
echo "# comment" | sudo tee -a /etc/hosts > /dev/null
일부 사용자는 여러 줄을 사용할 때 솔루션을 알지 못합니다.
sudo tee -a /path/file/to/create_with_text > /dev/null <<EOT
line 1
line 2
line 3
EOT
유씨의 대답을 이용해서 이것을 당신의 것에 넣으시오.~/.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
sed -i를 $a와 함께 사용하면 변수와 특수 문자를 모두 포함하는 텍스트를 마지막 줄 뒤에 추가할 수 있습니다.
예를 들어 $NEW_HOST를 $NEW_와 함께 추가합니다./etc/hosts에 대한 IP:
sudo sed -i "\$ a $NEW_IP\t\t$NEW_HOST.domain.local\t$NEW_HOST" /etc/hosts
sed 옵션 설명:
- -in-place의 경우 i
- 최후의 수단으로
- 맹장
echo 'Hello World' | (sude -a /etc/apt/sources.list)
text | status = text | sudd status = =▁echo▁|삭제▁|=ech▁sud파privile일있none▁su▁text▁ofo권▁textgeddofile
proc/sys/net/ipv4/tcp_rmem을 변경하고 .
제가 했습니다.
= =/ dlld status= =/dll/dll/net/dll4/dll_rmem <"4096131072000"
줄 합니다.
이것은 나에게 효과가 있었습니다: 원래 명령.
echo "export CATALINA_HOME="/opt/tomcat9"" >> /etc/environment
작업 명령
echo "export CATALINA_HOME="/opt/tomcat9"" |sudo tee /etc/environment
할 수 있습니까?cat >>
추가하시겠습니까?
sudo chown youruser /etc/hosts
sudo cat /downloaded/hostsadditions >> /etc/hosts
sudo chown root /etc/hosts
당신에게 이런 일이 있나요?
언급URL : https://stackoverflow.com/questions/84882/sudo-echo-something-etc-privilegedfile-doesnt-work
'programing' 카테고리의 다른 글
UIView의 하위 뷰 중심화 방법 (0) | 2023.05.14 |
---|---|
시스템에 대한 쿼리 문자열을 빌드합니다.Net.HttpClient 가져오기 (0) | 2023.05.14 |
IIf()와 If 간의 성능 차이 (0) | 2023.05.14 |
"사용" 문은 C#에서 VB로 어떻게 변환됩니까? (0) | 2023.05.14 |
코코파드:GitHub에 연결하여 코코아 포드/사양 보고서를 업데이트하지 못했습니다. (0) | 2023.05.14 |