답변:
이 경우 파일을로 작성합니다 :w /tmp/tmpfile
. 그런 다음 나가서 /tmp/tmpfile
sudo 권한을 가진 이전 파일로 이동 합니다.
vi
/tmp
디렉토리를 모니터링하는 다른 사용자에게 노출시킵니다 . (2) 시스템에 악의적 인 사용자가있는 경우 사용자는 사용자 /tmp/tmpfile
를 작성할 때 (부터 vi
)와 사용자가 편집중인 시스템 구성 파일을 통해 복사 할 때 사용자를 대신 할 수 있습니다. 액세스 권한이있는 디렉토리에 임시 파일을 저장하는 것이 더 안전합니다.
에서 SO :
:w !sudo tee %
실제로이 방법을 사용하여 더 자주 수행합니다.
:%!sudo tee %
내가 아는 것처럼 조금 더 직관적이라고 생각 :%!
하지만에 대한 내장 적 이해가 없습니다 :w !
. 또한, 사이의 매우 중요한 공간 그리워 쉽게 w
와를 !
.
vi
명령은 여러 글자 일 수 있으므로 이론적으로“ wfoo
”명령 이있을 수 있으므로“ ”파일에 쓰려면“ foo
”라고 말해야합니다 :w foo
. 즉, " :w
" 뒤에 공백이 필요합니다 . " :w !
"에 관한 한 – " :!
"가 무엇인지 아십니까 ? " :!date
"는 " date
"명령을 실행합니다. 따라서 " :w !xyz
"는 버퍼가 아니라 파일이 아닌 명령에 씁니다 .
%
?
%
더 어려울 수 있습니다.) (3) 좋아, 조금 도와 줄께. tee
여러 장소에 정보를 쓸 수있는 프로그램입니다. 예를 들어, date | tee cody
현재 날짜와 시간을 cody
… (계속)
date | tee cody > bugstein
현재 날짜와 시간을 파일 cody
과에 파일에 씁니다 bugstein
. — 이해 sudo
하십니까? 다른 사용자 (일반적으로 root)의 권한으로 명령을 실행할 수 있습니다. 예를 들어에 ls /root
액세스 할 수 없으므로 일반적으로 실패합니다 /root
. 그러나 sudo ls /root
작동합니다. — 유닉스가 작동하는 방식의 불행한 부작용 sudo ls /root > /root/cody
은에 액세스 /root
할 수 없어서 글을 쓸 수 없기 때문에 실패 한다는 것 /root/cody
입니다. … (계속)