깜박잊고 일반유저 권한으로 파일을 열었다

vi편집기(Linux에서는 보통 vim)를 이용해서 편집하는 작업을 하다보면 가끔 겪는 일이있는데 root 권한으로 설정 된 파일을 실수로 일반유저 상태에서 열심히 수정하는 경우이다. 이럴 때면 :q! 명령으로 종료하고 다시 root권한으로 파일을 열어 수정작업을 하는 번거로움이 발생하는데 이를 만회하는 방법을 소개하고자 합니다.

vi 편집기의 명령모드 이용

일반유저 권한에서 vi편집기로 수정하고 아래 명령을 실행하면 sudo를 이용해서 root권한을 획득하여 변경사항을 반영시킬 수가 있다.

:w !sudo tee %

여기에서 %는 현재 파일명을 의미하며 tee 명령을 통해서 현재 수정된 내용을 stdin으로 전달하여 파일로 기록 할 수 있는 것이다. 위 명령을 수행하면 먼저 sudo를 통해 root유저 권한을 얻기위해 패스워드를 물어볼 것이고 패스워드를 입력하면 파일기록은 완료된다. 그 뒤에 파일이 변경되었다고 하며 변경사항을 반영해서 다시 열지 물어보는 프롬프트를 넘기고 :q! 로 종료하면 된다.

vi 명령으로 등록

매번 위와 같이 입력하기 귀찮을 때는 .vimrc 파일에 아래와 같이 등록한다

ca w!! w !sudo tee "%"

이제 이런경우에 :w!! 만 입력하면 sudo를 이용해서 저장하게 된다.

sudo 등록유저가 아닐경우

sudo 등록된 유저가 아닐경우에는 su 명령이 표준입력 처리를 제대로 해주지 않기 때문에 별도의 사본을 저장하는 방법을 사용하면 된다. (중요한건 열심히 수정했던 내용이기에)

:w !cat > /tmp/tfile

위와 같이 실행하면 /tmp/tfile에 현재 수정 된 내용을 저장하게 된다. 그리고 편집기를 빠져나와서 root 권한으로 원본을 덮어 씌우면 된다.