アメリエフの技術ブログ

Amelieff Staff Blog

書き込み権限の無いファイルをsudoで上書き保存する

こんにちは、根は真面目な、久保(kubor)です。
みなさん、Vim使ってますか?

vimでファイルを編集し終わって、よし、保存しようと思い、
:w
E45: 'readonly' オプションが設定されています (! を追加で上書き)

「ああああ、sudo vimしてない」てなことが結構有ります。

そんな時には、このコマンドを使って無理やり保存してしまいます。
:w !sudo tee % > /dev/null

Vimコマンドでは、! がシェルコマンドの呼び出し、
% が編集中のファイル名です。

すなわち、root権限でteeを実行し、編集中のファイルと同名のファイルに無理やり書き込んでいるのです。
このコマンドを実行後に、「編集中に上書きされました」と警告が出ますが、気にせずそのまま「q!」で終了しても問題ありません。
変更は書き込まれています。

あまりにも重宝するので、僕は、.vimrcに以下の設定を加えて「w!!」にエイリアスしています。

cmap w!! w !sudo tee % > /dev/null


現場からは以上です。