それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

sudo -e ( sudoedit ) でvimで保存しても反映されない

sudo -e (名前=sudoedit ) コマンドは一時ファイルで編集する

sudo -e とは環境変数EDITORを使って、/tmp フォルダにファイルを作ってそれを開いてくれる。 エディタのプロセスを終了したら、元のファイルに上書きされる

:w だけでは反映されない

vim で開いているときは、 :w だと反映さません。時々ハマります、 :w を押しても更新が結果に出ない。 sudo -e を使っていると、なんでなんで、とパニックになることがあります。

sudoedit / sudo -e はそういうものです。

man sudo を見てみると sudoedit のポイントは次の通り。

長いので抜粋

シンボリックリンクの編集は許可しない

セキュリティポリシーによって指定されたエディタを起動して、 テンポラリファイルを編集する。

編集対象のファイルのコピーをテンポラリファイルとして作成する。 
編集作業がすむと、テンポラリファイルをオリジナルのファイルにコピーして、 テンポラリファイルを消去する。 


sudoers ポリシーでは、環境変数 SUDO_EDITOR,VISUAL, EDITOR を (この順番で) 使用する。
-e でエディタが実行されるときは、sudo を起動したユーザの環境が、 変更を受けずに使われる。

:w で保存できないのはそういうものです

sudo -e は不意な変更や途中でいったん保存したときに影響が出来ないよう

環境変数の維持が目的なら

vim の設定をそのまま引き継ぎたいなら、次のような代替手段がある。

sudo -E vim 
sudo -E $EDITOR

個人的な感想ですが

sudo vim するよりも、記述途中でファイルをいったん保存できるので、sudo -e のほうが好きです。

でも、終了しないと反映しないのをわすれてよくトラブります、その点については諦める。

参考資料

man sudoedit

-e, --edit 何らかのコマンドを実行するのではなく、1 個以上のファイルを編集する。 セキュ リティポリシーの参照では、コマンドのパス名の代わりに "sudoedit" という文字列 が使用される。 セキュリティポリシーによってユーザに権限があることが認められ ると、 次のことが順番に行われる。

             1.   編集対象のファイルのコピーをテンポラリファイルとして作成する。 テン
                  ポラリファイルのオーナーは sudo を起動したユーザである。

             2.   セキュリティポリシーによって指定されたエディタを起動して、 テンポラ
                  リファイルを編集する。sudoers ポリシーでは、環境変数 SUDO_EDITOR,
                  VISUAL, EDITOR を (この順番で) 使用する。 SUDO_EDITOR, VISUAL,
                  EDITOR のどれも設定されていない場合は、 sudoers(5) の editor オプ
                  ションにリストされたプログラムのうち、 最初のものが使われる。

             3.   編集作業がすむと、テンポラリファイルをオリジナルのファイルにコピー
                  して、 テンポラリファイルを消去する。

         編集する権限のないファイルを編集できないようにするため、 セキュリティポリ
         シーによって明示的に許可されていないかぎり、 以下の制限が行われる。

                         ·   シンボリックリンクの編集は許可しない (バージョン 1.8.15
                             以上)。

                         ·   sudo を実行するのが root であるときを除いて、 編集する
                             ファイルのパス中にシンボリックリンクがある場合、 そのリ
                             ンクの親ディレクトリが sudo を実行するユーザにとって書き
                             込み可能ならば、 リンクをたどらない (バージョン 1.8.16
                             以上)。

                         ·   sudo を実行するのが root であるときを除いて、 ファイルが
                             sudo を実行するユーザにとって書き込み可能なディレクトリ
                             にある場合、 そのファイルの編集を許可しない (バージョン
                             1.8.16 以上)。

         ユーザがデバイス・スペシャルファイルの編集を許可されることは絶対にない。

         指定されたファイルが存在しない場合は作成する。ここで注意すべきは、 sudo に
         よって実行されるコマンドの大部分と違って、 -e でエディタが実行されるとき
         は、sudo を起動したユーザの環境が、 変更を受けずに使われるということだ。 何
         らかの理由で sudo が編集した内容でファイルを更新できないときは、 ユーザに警
         告を発し、編集した内容をテンポラリファイルに保存することになる。