sudo로 실행하는 것을 잊은 후에 nano에서 sudo로 저장할 수 있습니까?


49

nano로 파일을 편집하는 많은 시간을 저장하고 sudo로 실행하는 것을 잊었 기 때문에 권한 오류가 발생했습니다. 파일을 다시 열고 다시 편집하지 않고도 sudo가 될 수있는 빠른 방법이 있습니까?


이 질문 과의 병합 이 제안되었습니다. 기본적으로 같은 문제이지만 vim. 나는 병합을 고려하고 있습니다 ...하지만 vim 특정 지침이 작동하지 않는다는 사실도 고려하고 nano있습니다.
xenoterracide

1
@ xenaterracide-vim 질문은이 질문의 특별한 경우라고 생각합니다. 왜냐하면 그 질문에는 실제로 해결책이 있으며 일반적인 경우에는없는 것 같습니다. 그래도 잘 모르겠습니다. :)
Kit Sunde

.vimrc에서 sudo tee 함수를 쉽게 호출하도록 맵핑 할 수 있습니다. <pre> <code> "루트 권한이있는 파일에 쓸 수 있습니다 cmap w !! w! sudo tee %> / dev / null </ pre> < / code>
jasonwryan

@xenoterracide : Nano에 대한 Caleb의 대답은 유용하므로 Nano에 대해서만이 내용을 유지해야한다고 생각합니다.
Mikel

1
@ mikel 나는 병합이 유효하지 않다고 결정했습니다. nano하지 vim... 그리고 더 nano유사하다 솔루션 vim'은의 자신을 소개 없다.
xenoterracide

답변:


37

아니요, 시작시 가지고 있지 않은 실행중인 프로그램 권한을 부여 할 수 없습니다. 'privilege escalation'¹이라는 보안 허점입니다.

당신이 할 수있는 두 가지 :

  1. / tmp 또는 어디에서나 임시 파일에 저장하고 편집기를 닫은 다음 임시 파일의 내용을 편집중인 파일에 덤프하십시오. sudo cp $TMPFILE $FILE. mv파일 소유권 및 권한이 변경되어 파일 플레이스 홀더 자체가 아닌 파일 컨텐츠 만 바꾸고 싶으 므로이 용도로 사용 하지 않는 것이 좋습니다.
  2. Ctrl+를 사용 하여 편집기의 배경을 지정하고 z파일 소유권 또는 권한을 변경하여 쓸 수 있도록 한 다음 fg편집기로 돌아가서 저장하십시오. 권한을 수정하는 것을 잊지 마십시오!

¹ 일부 편집자는 실제로 다른 권한으로 새 프로세스를 시작하고 저장을 위해 해당 프로세스로 데이터를 전달하여이 작업을 수행 할 수 있습니다. 예를 들어 파일 버퍼를 프로세스 파이프에 쓸 수있는 고급 편집기의 다른 솔루션에 대해서는 이 관련 질문 을 참조하십시오 . Nano는 새로운 프로세스를 시작하거나 다른 프로세스로 데이터를 전달할 수 없으므로이 파티에서 제외됩니다.


우수한. 고마워 칼렙. 약 30 분 전에이 문제가 발생했습니다. :)
boehj

2
@Caleb vim에서 tee 명령을 사용하여 설명하는 것을 수행 할 수 있습니다.:w !sudo tee

@hellojesus 화려한 트릭. 당신이 대답으로 그것을 쓰려고한다면 나는 그것을 내에서 제거 할 수 있습니다. 나는 나노 사용자 이외의 사람들이이 상황에 빠지고 여기에서 자신을 찾을 수 있다고 생각합니다.
Caleb

4
이 질문은 나노에 관한 것입니다. 여기에 Vim에 대한 답변을 포함 시키면이 질문의 요점은 무엇입니까? 우리는 이미 Vim의 Vim에서 루트가되었습니다 .
Mikel

2
/ tmp 디렉토리에 임시 파일에 저장 - 어떻게 내 나노 동안 임시 파일에 저장하려면?
Anand Rockzz

7

방금 시도했지만 nano가장 놀라운 점은 파일 편집을 시작할 때 파일이 읽기 전용이라는 경고조차하지 않습니다. ( 업데이트 : 분명히 nano 2.2는 경고하지만 2.0은 그렇지 않습니다. )

이를 수행하는 기본 스크립트는 다음과 같습니다.

파일을 편집 할 수 있는지 확인하고, 파일을 편집 할 수 없으면 루트로 "nano"를 실행합니다.

/ usr / local / bin / edit (또는 ~ / bin / edit )

sudo=                       # empty is false, non-empty is true
editor=nano                 # XXX check $EDITOR and $VISUAL

if test -e "$1" && test ! -w "$1"; then
    if test -t 0 && test -t 2; then
        printf "%s is not writable.  Edit with sudo? [y/n] " "$1" 1>&2
        read -n 1
        case $REPLY in
        y|Y)
            sudo=true
            ;;
        n|N)
            sudo=
            ;;
        *)
            printf "\nExpected y or n.  Exiting.\n" 1>&2
            exit 1
            ;;
        esac
    else
        printf "%s is not writable.  Fix the permissions or run \"view\" instead." "$1" 1>&2
        exit 1
    fi
fi

${sudo:+sudo} "$editor" "$1"

그리고 내가 view변경하지 않을 것이라는 것을 알면 프롬프트를 피할 수 있도록 내가 전화 한 명령 .

/ usr / local / bin / view (또는 ~ / bin / view )

editor=nano
readonlyflag=-v

"$editor" $readonlyflag "$1"

viewVi / Vim의 일부 라는 프로그램이 이미 있으므로 더 나은 이름을 제안하십시오.
(그러나 나는이 프로그램의 완전한 구현이 Vi의 view중복을 만들 것이라고 생각합니다 .)


정식 버전


1
실제로 경고합니다. 그러면 사용중인 버전이 문제가됩니다. 또한 데비안 기반 시스템에서 대체 시스템이 제안하는 것에 더 적합합니다.
0xC0000022L

2
참고로 : [ Read ... lines (Warning: No write permission) ]바로 가기 (화면 하단)에 대한 두 줄의 도움말 바로 위에 표시됩니다. 나노 버전은 2.2.4입니다.
0xC0000022L

아, 그것은 나노 2.0에서 경고하지 않습니다. 이것은 제가 테스트 한 것입니다.
Mikel

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