Emacsで読み取り専用で開いてしまったファイルを無理矢理書き込む方法

Emacsで読み取り専用で開いてしまったファイルを無理矢理書き込む方法。

こんにちは。岡田洋一です。春分の日も過ぎだんだんと春の訪れを感じるようになりました。皆さんはいかがお過ごしでしょうか。

さて私岡田洋一は、高城梢さんと拙いながらサーバ勉強会なるものを開催しております。最近はその中でEmacsについて取り扱いました。エディタは様々なものがありますが、サーバ管理者にとってのエディタはプログラマのそれと様相が違います。その違いとは何よりCUIで動くこと、ですね。ですのでvi系やemacs、BSD系での伝統的な(?)eeや最近ではnanoが用いられますね。

そんなemacsですがサーバ勉強会で偉そうにも教える側として、実はこっそりEmacsについて勉強してみました。
今回はその中で知った事についてメモしたいと思います。

Emacsでは読み込み専用ファイルを開くと、ミニバッファ上部のステータス表示部分が変化します。Screen Shot 2013-03-22 at 20.03.44

ファイルの変更を表す部分、通常は—と表されておりファイルの内容に変更があると**-となる部分ですね、ここが%%-となります。これは読み込み専用モードでファイルを開いている事を意味します。

Emacsで現在開いているバッファの読み込み専用モードか、書き込み可能なモードかを切り替えるには “C-w C-q” を使います。既に書き込みモードで開いている場合には読み込み専用モードに切り替えます。また読み込み専用モードであれば書き込み可能モードになります。

さて、通常Emacsでファイルを開いたときには書き込み可能モードで開きます。でも読み込み専用モードで開いてしまうことがあるるんですね。それはパーミッションが無い場合です。

  1. 対象のファイルを所有しているけれどuserのwが無い場合 ( 400 r–r–r– など)
  2. 対象のファイルのグループに属しているけれどwが無い ( 644 rw-r–r– など)
  3. 人のファイル全般 ( 600 rw—– など)

こういった場合にはEmacsは読み込み専用モードで開いてしまいます。
こういった場合、今まで自分が取ってきた手段というのは

shell> chmod u+w hoge; emacs hoge; chmod u-w;

というワンライナーでファイルを編集することでした。最後に再度パーミッションを落としているのは、そういうことが要求されるファイルがある、ということです。例えばsudoersファイルは440でなければならない、といった具合です。(とはいえsudoersであれば環境変数のEDITORをemacsにしてvisudoを用いる、というのが正攻法だったりします)
これは結構面倒だったので、今後は C-x C-q をする事で書き込み可能にすることができます。とても便利ですね。

ちなみにrootのファイルを一般ユーザで開いてしまった場合にはどうにもできません。こちらはこちらでプロセスの所有者を変える、ということができれば対処できそうですね。それについても分かる日が来れば良いですね。

コメントを残す