多くの場合、nanoでファイルを編集し、sudoとして実行するのを忘れたため、保存してアクセス許可エラーを取得しようとします。ファイルを再度開いて再編集しなくてもsudoになれる簡単な方法はありますか?
nano
はありません。vim
nano
vim
多くの場合、nanoでファイルを編集し、sudoとして実行するのを忘れたため、保存してアクセス許可エラーを取得しようとします。ファイルを再度開いて再編集しなくてもsudoになれる簡単な方法はありますか?
nano
はありません。vim
nano
vim
回答:
いいえ、起動時に持っていない実行中のプログラムに許可を与えることはできません。これは「特権エスカレーション」¹と呼ばれるセキュリティホールになります。
あなたができる2つのこと:
sudo cp $TMPFILE $FILE
。mv
ファイルの所有権と許可が変更される可能性があるため、これに使用することはお勧めしません。ファイルプレースホルダー自体ではなく、ファイルのコンテンツを置き換えるだけです。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
冗長になると思います。)
フルバージョン
[ Read ... lines (Warning: No write permission) ]
ショートカットの2行のヘルプ(画面下部)のすぐ上に表示されます。Nanoバージョンは2.2.4です。
vim
。私はマージを検討しています...しかし、vim固有の命令が機能しないという事実も検討していnano
ます。