Vim 내부에서 루트가 됨


72

때로는 /etcVim 을 사용하여 구성 파일 편집 sudo을 시작 하지만 Vim을 시작하는 데 사용하는 것을 잊어 버립니다 . 필연적으로 결과는 편집을 마친 후에 파일을 저장할 수있는 권한이 없다는 무서운 통지를 보게됩니다.

대부분의 편집은 Vim을 종료하고 루트로 모든 작업을 다시 수행 할 수있을 정도로 작습니다. 나는 물론 내가 쓸 수있는 위치에 저장하고 루트로 복사 할 수는 있지만 다소 성가신 일입니다.

그러나 sudo변경 사항을 버릴 필요없이 Vim 내부에서 루트 또는 루트가되는 더 쉬운 방법이 있다고 확신 합니다. 방법이 sudo사용자를 위해 설정되는 것에 의존하지 않는다면 훨씬 좋습니다.


1
모든 관리자 편집 sudoedit대신에 사용하는 습관을 들었습니다 vim. 더 이상이 문제에 빠지지 않는 한 가지 방법입니다. :). +1 질 '대답 .
jw013

SO의 이러한 고문적인 Q & A는 다음과 같이 링크되어 유용합니다. vi 내부의 파일에 대한 루트 권한 얻기? & vim "sudo로 쓰기"트릭은 어떻게 작동합니까? .
slm

답변:


46

sudo는 기존 프로세스의 유효 사용자를 변경할 수 없으며 항상 상승 된 권한을 가진 새 프로세스를 작성하며 원래 쉘은 영향을받지 않습니다. 이것은 UNIX 디자인의 기본입니다. 가장 자주 해결 방법으로 파일을 / tmp에 저장합니다. 실제로 직접 저장하려면 파일을 다른 프로세스로 파이프 할 수있는 Vim 기능을 사용해보십시오. 이 명령으로 저장하십시오 :

:w !sudo dd of=%

테스트하고 작동합니다. 그런 다음 Vim은 파일을 다시로드하라는 메시지를 표시하지만 필요하지 않습니다. o다시로드하여 실행 취소 기록을 잃지 않도록하려면 누르 십시오. 이것을 Vim 명령 / 함수에 저장하거나 쉽게 액세스 할 수 있도록 키에 바인딩 할 수도 있지만 독자에게 연습으로 남겨 두겠습니다.


2
흥미로운 해결책이지만 경로를로 바꿀 수 %있습니다. vim에서는 현재 편집중인 파일의 경로가됩니다.
Reid

당신은 포장한다 %파일 이름에 공백이 포함 된 경우 따옴표로.
직관

또한 : 'modified'설정 이 재설정되지 않습니다 . 당신은 수동으로 할 수 있습니다 set nomodified.
intuited

2
실제로, 정말로주의를 기울이고 싶다면 exec 'w !sudo dd of=' . shellescape(expand('%'))파일 이름에 따옴표, 백 슬래시, 달러 기호 등이 포함 된 경우에 대비 해야합니다 .
intuited

그것은 plaes에 의한 Commandlinefu 명령과 어떻게 다릅니 까?

36

파일을 루트로 저장 :

: w! 스도 티 %


13

sudoedit파일을 루트로 편집하려면 호출하십시오 .

vim잠재적으로 위험한 일을하는 데 너무 부담 스럽다는 경고로 직접 전화 할 때 불편을 생각해보십시오 .



3

이것은 또한 잘 작동합니다 :

:w !sudo sh -c "cat > %"

이것은이 답변 에서 @Nathan Long의 의견에서 영감을 얻었습니다 .

공지 사항 :

"쉘로 전달하기 전에 확장 '되기를 원 %하기 때문에 대신 사용해야합니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.