Emacsでサーバ作業を行う際の注意点

Emacs使いの人はサーバ作業の際もEmacsを使うことが多いかと思います。ところが、Emacs使いはvi使いの人より少しだけ気をつけることがあるんです。今回はそんな内容をまとめてみました。

バックアップファイルに注意

Emacsは標準設定だと元のファイル名に「~」を付加した名前でバックアップファイルを作ります。普段は便利な機能なんですが、サーバ上の作業だと困ることもあります。

例えばWebサーバで公開中のPHPファイルを直接編集する場合、index.phpを編集したらバックアップとしてindex.php~ファイルが作成されてしまいます。標準的なWebサーバの設定ではindex.php~はtext/htmlとして出力されてしまいますので、一つ前のバージョンのPHPソースコードが全世界に公開されてしまいます。

また、特定ディレクトリ以下の全ファイルを処理対象にする処理があった場合、バックアップファイルも処理対象になる可能性があります。万一Linuxで/etc/rc.d/rc3.d/S55sshd~なんてファイルを作ってしまうと、トラブルの元になりかねません。

そこで、バックアップファイルを作らないような設定を紹介します。~root/.emacsに次のように書いておけば、rootで起動したEmacsはバックアップファイルを作らなくなります。これでひと安心ですね。念のため、自動保存ファイルも別ディレクトリに作るようにします。

;; バックアップファイル(ファイル名~)の設定
(setq backup-enable-predicate
      (lambda (name) nil))
;; 自動保存ファイル(#ファイル名#)の設定
(setq auto-save-file-name-transforms
      `((".*" ,temporary-file-directory t)))

設定ファイルなどの編集の際に明示的にrootにならず、一般ユーザーのEmacsからtrampで編集する、というポリシーも考えられます。その場合、trampでsudo:したときにバックアップファイルを作らない設定は以下のようになります。使い方に応じて正規表現は変更してください。

;; バックアップファイル(ファイル名~)の設定
(setq backup-enable-predicate
      (lambda (name)
        (cond
         ((string-match "^/sudo:[^/]*:/" name) nil)
         ((string-match "^/multi:[^/]*:sudo:[^/]*:/" name) nil)
         (t (normal-backup-enable-predicate name)))))
;; 自動保存ファイル(#ファイル名#)の設定
(setq auto-save-file-name-transforms
      `(("^/sudo:[^/]*" ,temporary-file-directory t)
        ("^/multi:[^/]*:sudo:.*" ,temporary-file-directory t)))

補足

そもそもWebサーバで公開中のファイルを直接編集するなんて有り得ない、という意見もあるとは思います。私もそう思うんですが、どうしても直接編集したい場合が現実にはあるようです。そんなときのウッカリを無くすためにも、「(1)原則として直接編集禁止」「(2)どうしてもEmacsで編集する場合はこの設定で」という二段構えで考えておいて損は無いと思います。

ディノ社内では上記の変形として「(1)原則として直接編集禁止」「(2)どうしても直接編集する場合はviで」「(3)どうしてもEmacsで編集する場合はこの設定で」の三段構えにしました。慣れないviを操作させる方が余程不安な人にまでviを強要しても仕方がないという判断ですが、(1)(2)だけで十分な組織も多そうですね。

とはいえ、Emacsだと標準でVC(「VC (Version Control)を使おう」などを参照のこと)が利用できるので、RCSのコマンドに詳しくなくても設定ファイルをRCSでバージョン管理できるというメリットもあります。硬派なサーバ管理者ならRCSのコマンドもバッチリ把握してるんでしょうけど、知らなくて済むなら知らずに済ませてもいいと思うんですよね。

コメント / トラックバックはありません

コメントする