ソフトウェアデザイン2011年5月号

Software Design (ソフトウェア デザイン) 2011年 05月号 [雑誌]

Software Design (ソフトウェア デザイン) 2011年 05月号 [雑誌]


表紙にでかでかと「Vim&Emacs ちゃんと使えてますか?」とあったので、ちょうどちゃんとVim(かEmacsか)を使えるようになりたいと思って購入。

が、特集では個々のエディタの紹介に入る前に

  • 第1章 エディタの基礎
  • 第2章 テキストファイルの扱い方
  • 第3章 サーバ管理で役立つエディタ実践

と、予想に反していた。
のだが、新人さん必読とコピーがあるけど、新人でなくてもWinな環境ばかりの人がサーバ側での作業をするときにも役立つ情報が満載でとてもよかった。

情報の探し方

調べて答えを見つけられる確率は、概念そのものを知っているか知らないか、あるいは、やろうと思えばできるかどうかを知っているかで変わります。探せば見つかると確信している検索とそうでない検索では当たる可能性に大きな差があるからです。

コマンド名はわかっていても使い方がうろ覚えの場合

  1. -hオプションまたは--helpオプション
  2. manコマンド
  3. infoコマンド(GNU系ツール)

で調べる。

コマンド履歴

historyコマンド

過去に実行したコマンドを参照できる。
コマンド履歴ファイルに残ってしまうのでシェルでパスワードを入力しない。

コマンド履歴ファイル
~/.bash_history

確認のために grep パスワード ~/.bash_history などしない!

ファイルフォーマット判定

fileコマンド

対象ファイルがテキストファイルかどうかを確認

ディレクトリ構造

ディレクトリ名 読み方 説明
/etc えとせ 各種設定ファイルがある
/var ゔぁー /var/logにログファイルがある
/proc ぷろっく プロセス情報を確認できる
/sbin えすびん 緊急時に使うコマンドがある(/usr/sbinも要確認)
/root るーと rootユーザの設定ファイルがある(/homeや/home/rootのシステムもあるので/etc/passwdを確認)

ファイル検索

findコマンド
対象 オプション例
ファイル名 -name
ファイルパス名 -path
ファイルの日付 -mtime
ファイル所有者 -uid
ファイルサイズ -size
ファイルタイプ -type
ファイルの権限 -perm
inode番号 -inum
ハードリンク数 -links

procファイルシステム

プロセスの情報を取得できる

$ ls -l /proc/${pid}/fd
$ ls -l /proc/${pid}/cwd
$ cat /proc/${pid}/maps
$ cat /proc/${pid}/cmdline

サーバ管理

なるべく最悪の事態を想定しておくほうがさまざまな場面に対応できます。

サーバ管理者にできることは、適切なリスク管理をしておくことと、非常事態にも落ち着いて作業できる心構えと武器を持っておくことです。サーバ管理者にとっての武器は知識と経験です。

設定ファイル

前提となる最初の心構えは一度に複数の問題を相手にしないことです。

確認方法
  • netstatコマンドでlisten中のポート番号を確認
  • telnetコマンドで接続
    • Web系サービスならブラウザからでも
    • ホスト名にlocalhostを使う場合は127.0.0.1になっていることを確認

ファイル検索

psコマンドで確認して、動いているプロセスから設定ファイルを探す

/proc/${pid}/cmdlineファイル
起動時のコマンドラインオプションがわかる
/proc/${pid}/mapsファイル
実行ファイルの確実なパスがわかる
/proc/${pid}/cwdファイル
リンク先のファイルを ls -l で確認すると実行ファイルのワーキングディレクトリがわかる
/proc/${pid}/environ
環境変数がわかる
/proc/${pid}/fdディレクトリ以下のファイル
プロセスがオープン中のファイル。リンク先を ls -l で確認するとファイルパスがわかる

シンボリックリンク

ln リンク元ファイル リンク先ファイル

元ファイルの指定には絶対パスを使おう

バックアップファイル

設定ファイルを書き換えるときの鉄則の1つは、動いているときの設定ファイルを残しておくことです。

ログファイル

該当のプロセスかsyslogdの/proc/${pid}/fd を確認。UNIX系OSのサーバログは/var/log ディレクトリ以下にだいたいある。

最近更新されたファイル名が最後に来る
$ ls -lrt
ある作業でファイルに更新がかかるはずだがどのファイルに起きるか確信がないときの確認
$ touch /tmp/dummy
$ cd 作業ディレクトリ
…何かしらの作業(で何かしらのファイルのタイムスタンプが更新される。はず)
$ find . -newer /tmp/dummy
ログファイルを確認
$ tail -f ログファイル
[control]+s
スクロール停止
[control]+q
スクロール停止を解除

作業の記録

teeコマンド

コマンドの出力結果を画面で確認しながら、かつ同時にファイルに残しておく

$ コマンド | tee 出力ファイル
$ コマンド | tee -a 出力ファイル(追記)
scriptコマンド

作業記録を完全に残す

$ script 出力ファイル名
ここからexitで抜けるまでscriptセクション

$ コマンド
出力
$ コマンド
出力

$ exit

個々のエディタの使い方以前に、こういうサーバ管理(までではないけれど)する上で最低限必要な情報の紹介などはよかった。