nano로 파일을 편집하는 많은 시간을 저장하고 sudo로 실행하는 것을 잊었 기 때문에 권한 오류가 발생했습니다. 파일을 다시 열고 다시 편집하지 않고도 sudo가 될 수있는 빠른 방법이 있습니까?
답변
아니요, 시작시 가지고 있지 않은 실행중인 프로그램 권한을 부여 할 수 없습니다. ‘privilege escalation’¹이라는 보안 허점입니다.
당신이 할 수있는 두 가지 :
- / tmp 또는 어디에서나 임시 파일에 저장하고 편집기를 닫은 다음 임시 파일의 내용을 편집중인 파일에 덤프하십시오.
sudo cp $TMPFILE $FILE
.mv
파일 소유권 및 권한이 변경되어 파일 플레이스 홀더 자체가 아닌 파일 컨텐츠 만 바꾸고 싶으 므로이 용도로 사용 하지 않는 것이 좋습니다. - Ctrl+를 사용 하여 편집기의 배경을 지정하고 z파일 소유권 또는 권한을 변경하여 쓸 수 있도록 한 다음
fg
편집기로 돌아가서 저장하십시오. 권한을 수정하는 것을 잊지 마십시오!
¹ 일부 편집자는 실제로 다른 권한으로 새 프로세스를 시작하고 저장을 위해 해당 프로세스로 데이터를 전달하여이 작업을 수행 할 수 있습니다. 예를 들어 파일 버퍼를 프로세스 파이프에 쓸 수있는 고급 편집기의 다른 솔루션에 대해서는 이 관련 질문 을 참조하십시오 . Nano는 새로운 프로세스를 시작하거나 다른 프로세스로 데이터를 전달할 수 없으므로이 파티에서 제외됩니다.
답변
방금 시도했지만 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"
view
Vi / Vim의 일부 라는 프로그램이 이미 있으므로 더 나은 이름을 제안하십시오.
(그러나 나는이 프로그램의 완전한 구현이 Vi의 view
중복을 만들 것이라고 생각합니다 .)
정식 버전