多くの場合、nanoでファイルを編集し、それをSudoとして実行するのを忘れたため、保存して権限エラーを取得しようとします。ファイルを再度開いて編集せずにSudoになる簡単な方法はありますか?
いいえ、実行中のプログラムに、起動時に持っていないアクセス許可を与えることはできません。これは、「特権の昇格」と呼ばれるセキュリティホールになります。
あなたができる2つのこと:
Sudo cp $TMPFILE $FILE
。ファイルの所有権とアクセス許可が変更される可能性があるため、mv
を使用することはお勧めしません。ファイルのプレースホルダー自体ではなく、ファイルのコンテンツを置き換えるだけです。fg
を使用してエディターに戻り、保存します。権限を修正することを忘れないでください!¹ 一部の編集者は、実際にはこれを行うために、さまざまな権限で新しいプロセスを起動し、データをそのプロセスに渡して保存します。たとえば、ファイルバッファーをプロセスパイプに書き込むことができる高度なエディターの他のソリューションについては、 この関連する質問 を参照してください。 Nanoには、新しいプロセスを起動したり、データを他のプロセスに渡したりする機能がないため、このパーティーには参加しません。
私はnano
を試してみましたが、最も驚いたのは、ファイルの編集を開始したときにファイルが読み取り専用であることを警告するものではありませんでした。 (更新:どうやらnano 2.2は警告します; 2.0は警告しません。)
これを行う(基本的な)スクリプトを次に示します。
ファイルを編集できるかどうかをチェックし、編集できない場合は、代わりに「nano」をrootとして実行します。
/ 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"
Vi/Vimの一部であるview
と呼ばれるプログラムがすでにあるので、もっと良い名前を提案してください。
(しかし、このプログラムを完全に実装すると、Viのview
が冗長になると思います。)
フルバージョン