いますぐ実践! Linuxシステム管理

[バックナンバーのトップへ] [Linux システム管理のトップへ]


いますぐ実践! Linux システム管理 / Vol.079 / 読者数:927名

こんばんは、うすだです。

先週から今週にかけて、会社のゲートウェイマシンを新しくしました。
といっても、わたしを含めてユーザは3人だけですので、 比較的お気楽な部類のリプレースではないかと思います。

しかも、FreeBSD から OpenBSD への移行でしたので、特にはまることもなく、 入れ換えることができました。

…と思っていたのですが、今週になってから、トラブルが発生しました。
大きいファイル(約 1MB 以上)を添付してメールを送信しようとすると、 ものすごく時間がかかって、タイムアウトしてしまうのです。

流れているパケットを tcpdump で見てみると、ゲートウェイマシンが、 データを受信しきれていないようでした。 しかし、ゲートウェイマシンは受信に失敗していると思っていません。 (エラー数が 0 でしたので。)

というわけで、わたしなりに、ありえそうな原因を考えてみました。

  1. ネットワーク・ドライバの不具合。
  2. ネットワーク・インタフェースが壊れている。
  3. ネットワーク・ケーブルに問題がある。
  4. HUB のポートがおかしくなっている。
  5. HUB が壊れているか、相性が悪い。
  6. その他。

さて、正解はどれでしょうか。
すぐに知りたいという貴兄は、あとがきまでピューっと飛んでください。

というわけで、今週も、はりきってまいりましょう!

今週のお題 - コマンドの出力をファイルに記録する

作業内容を記録するということは、後日同じ設定を行ったり、 後輩や後任のひとと情報共有するために、とても大事なことではないかと思います。

わたしも、シス管でネタにするかどうかに関わらず、 作業内容はなるべく正確に記録するよう、いつも心がけています。

端末エミュレータから Linux などに侵入して作業している場合ですと、 端末エミュレータ自身のログの機能を使えば、作業内容を、 ごっそり記録することができますよね。

しかし、コンソールで直接作業している場合などでは、 端末エミュレータを介さないので、ログの機能を使えません。
また、いつもすべてのログをとるのは面倒だし、 その瞬間の実行結果だけを記録すればいいや、 ということもあるのではないかと思います。

というわけで、今週は、作業内容やコマンドの出力結果などを、 ファイルに記録する方法について、ご紹介したいと思います。


作業内容をごっそり記録するといえば、script コマンドですね。

引数なしで実行しますと、新たにシェルが起動し、 そのシェルを終了するまでの間の入出力を、 カレントディレクトリの typescript という名前のファイルに、 全部記録してくれます。

  % script
  スクリプトを開始しました、ファイルは typescript です
  ...何か作業...
  (シェルを終了する)
  スクリプトを終了しました、ファイルは typescript です

「...何か作業...」の部分が、typescript に記録されます。

何度も起動しますと、前回記録した typescript の内容が上書きされますので、 追加して記録したければ -a オプションを用います。
それ以前に、typescript というファイル名が気に入らない場合は、 引数にファイル名を指定してください。

  % script log-`date +%Y%m%d%H%M%S`
  スクリプトを開始しました、ファイルは log-20061028231011 です
  ...後略

上記の場合、log-年月日時分秒 というファイルに記録します。
シェルのエイリアスや、スクリプトにして使うと、便利かもしれません。


script コマンドは便利ですが、 エスケープシーケンスなどもそのまま記録されてしまうのが、難点といえば難点です。

コマンドの出力結果だけ記録すればいい、ということでしたら、 シェルのリダイレクトがお手軽です。
以下は、ls -1 の実行結果(標準出力)を、log-ls に保存しています。

  % ls -1 > log-ls
  % cat log-ls
  file1
  file2
  ...

標準エラー出力もあわせて記録したい場合は、以下のように実行します。

  sh系%  コマンド > ログファイル 2>&1
  csh系% コマンド >& ログファイル

標準エラー出力『だけ』を記録したい場合は、以下のように実行します。

  sh系%  コマンド 2> ログファイル
  csh系% (コマンド > /dev/null) >& ログファイル

csh系の場合は、あまりきれいじゃありませんが…。
(もっときれいな方法をご存知でしたら、是非ご教示ください。)


さて、これで出力をファイルに記録できますが、途中経過がわからないのが、 難点といえば難点です。
例えば、make コマンドの実行結果をログにとりたいけど、 処理がどこまで進んでいるのか確認したい、ということもあるのではないかと思います。

途中経過を知りたい場合は、バックグラウンドで実行して、 tail コマンドでログファイルを参照します。

  % コマンド > ログファイル &
  [1] PID
  % tail -f ログファイル
  ...

出力の最後のほうしかわかりませんが、常に最新の出力を確認することができます。

 

ただし、リダイレクトを用いると、 実際にコマンドから出力されたものがファイルに記録されるまでの間に、 少しタイムラグが生じます。

もう少し厳密に、今の出力の最新を知りたい場合は、tee コマンドを使用しましょう。

  % コマンド | tee ログファイル名
  ...

tee コマンドは、標準入力からのデータを、標準出力に出力しつつ、 指定したファイルにも記録してくれます。


あと、特殊な用途として、ある端末で作業した内容を、別の端末上で処理したい、 なんていうことがあるかもしれません。
script コマンドと、FIFO を用いれば、そんなこともできます。

まず、mkfifo コマンドで、FIFO を作成します。

  % mkfifo ~/fifo

次に、ある端末上で、script コマンドを実行します。

  % script -f ~/fifo

そして、別の端末上で、FIFO に対してなにか処理を行います。

  % cat ~/fifo | tee log-`date +%Y%m%d%H%M%S`

上記の例ですと、作業内容を別の端末上で確認しながら、 ログへの記録も行っています。 誰かに作業内容を確認してもらうときに、使えますね。

ちなみに、誰かが FIFO を open するまで、script コマンドは待たされます。 (返ってこないなーと、悩まないようにしてくださいませ。)


以上、出力結果などをファイルに記録する方法について、いくつかご紹介しました。

わりと一般的な内容ばっかりだったかもしれませんが、 記録を残すことが大事なことに変わりはありません。
面倒くさがらず、きちんと行うよう、常に心がけましょう。

宿題の答え

先週の宿題は、

  allow-query で指定されていない場合と、blackhole で指定された場合
  の動作の違いを、確認しましょう。

でした。

allow-query に入れてもらっていない場合は、答えは教えてもらえませんが、 教えてあげないよという返事はもらえます。

  % dig www.vinelinux.org

  ; <<>> DiG 9.2.4 <<>> www.vinelinux.org
  ;; global options:  printcmd
  ;; Got answer:
  ;; ->>HEADER<<- opcode: QUERY, status: REFUSED, id: 11386
  ;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0
  ...後略

上記のように、status が REFUSED という返事がもらえます。
かたや、blackhole に指定されますと、返事すらもらえません。

  % dig www.vinelinux.org

  ; <<>> DiG 9.2.4 <<>> www.vinelinux.org
  ;; global options:  printcmd
  ;; connection timed out; no servers could be reached

…さ、さみしいです。

ちなみに、両方とも当てはまる場合、blackhole のほうが優先されます。
…当たり前といえば当たり前のようですが、いちおう書いておきます。
(明示的に記述された設定のほうが、強いってことですね。)

今週の宿題

今週の宿題は、

  あるコマンドを実行し、標準出力と標準エラー出力に出力されたデータ
  を、それぞれ別のコマンドに渡してください。

です。

標準出力に出力されたデータは、 パイプを使って別のコマンドに渡すことができますよね。

  % ls -1 /etc | cat -n

標準エラー出力に出力したデータも、ちょっとひねれば、 同様にパイプで渡すことができます。sh 系の場合の例を、以下に示します。

  % ls -1 /etc 2>&1 > /dev/null | Mail -s Error root

この2つを、別々に実行するのではなく、同時にしたいということです。

通常の処理は引続き処理させますが、エラーが発生したときにはその旨をメールする、 みたいな使い方ができるのではないかと思います。

あとがき

今週は、Fedora Core 6 や Ubuntu 6.10 や Firefox 2.0 など、 リリースが目白押しでしたね。

Ubuntu は、今回初めて体験しました。 以前も、VMware Player 上で動作させようとしたことがあったのですが、 どうしてもインストーラが起動しなくて、諦めていました。
今回、メモリを 256MB に設定して、やっとインストールできました。
インストール時はスワップがないので、 それなりに実メモリが必要ということでしょうか。 インストール完了後は、128MB でも動いています。
起動時にメッセージがほとんど出てこないし、 インストール時に記入する項目がほとんどないので、 Linux 初心者なひとでもとっつきやすそうではありました。 逆に、問題が発生したときの手がかりが、少ないような気がしますが…。

まだ入れただけ状態ですので、ぼちぼちいじくり回そうと思います。

 

さて、冒頭で述べたトラブルの原因ですが、わかりましたでしょうか。
正解は、5番の、「HUB が壊れているか、相性が悪い」でした。

まず、ネットワーク・インタフェースを、実績のあるものに変えました。
でも、相変わらず現象が出ますので、1 と 2 ではなさそうでした。
ネットワークケーブルやポートも変えてみましたが、それでも再現しますので、 3 と 4 も違うようです。
OS とか PC そのものの問題だったらいやだなあと思いつつ、 だめもとで別の HUB に変えてみたら…おお、問題が発生しなくなりました。

わたくし的には、まさか HUB が原因とは思いませんでしたので、 ちょい衝撃を受けました。(そうでもないですか?)
でも、何か問題が発生したとき、原因が意外なところにある、 ということのほうが多いような気がします。 今回も、それなりに勉強になりました。
みなさんも、何かトラブルに巻き込まれたら、なるべく先入観を持たず、 ピュアな心で(?)原因を究明してくださいませ。

 

今週も、ここまで読んでいただき、ありがとうございました。
それでは、また来週に、お会いしましょう!

 

「いますぐ実践! Linux システム管理」の解除は、以下からできます。
http://www.usupi.org/sysad/ (まぐまぐ ID:149633)

バックナンバーは、こちらにほぼ全部そろっています。
http://www.usupi.org/sysad/backno.html

「栗日記」 http://www.usupi.org/kuri/ (まぐまぐ ID:126454)
http://usupi.seesaa.net/ (栗日記ブログ)
http://www.fumido.co.jp/kuriniki/ (栗日記ぎゃらりー)


[バックナンバーのトップへ] [Linux システム管理のトップへ]

トップ

バックナンバー
    [日付順] [目的別]

プロフィール

▼ リンク

独学Linux
Linuxデスクトップ環境に関する情報が満載です。 メルマガもありますよ。
Server World
CentOS 6をサーバとしたときの設定例が、これでもかというくらいたくさん載っています。 CentOS以外のディストリビューション(Fedora, Ubuntu)も充実しています。
LINUXで自宅サーバーを構築・導入(Fedora9)
Fedora9のインストールの仕方から管理方法まで、詳しく載っています。 SearchManには情報がもりだくさんです。
マロンくん.NET
〜サーバ管理者への道〜
Linuxをサーバとして使用するための、いろいろな設定方法が載っています。 マロンくんもかわいいです。 なんといっても、マロンくんという名前がいいですね!!
日経Linux
今や数少なくなってしまったLinuxの雑誌。ニュースやガイドもあります。
Linux Square − @IT
@ITが提供する、Linux の情報が満載。 載っていない設定方法はないんじゃないでしょうか。
gihyo.jp…技術評論社
Linuxに限らず様々な技術情報が満載のサイト。 SoftwareDesign誌も、 ソフトウェア技術者は必見です。
SourceForge.JP Magazine
Linux に限らず、オープンソース関連の記事が網羅されています。
ITmediaエンタープライズ:Linux Tips 一覧
Tips というより FAQ 集でしょうか。わからないことがあれば覗きましょう。
IBM developerWorks : Linux
開発者向けですが、勉強になりますよ。
Yahoo!ニュース - Linux
Yahoo!のLinuxに関するニュース一覧です。
栗日記
システム管理とかと全然関係ありませんが、毎日栗の絵を描いています。
システム管理につかれちゃったとき、癒されたいときに、ご覧ください。:-)
WEB RANKING - PC関連
ランキングに参加してみました。押してやってください。

▼ 作ってみました

Add to Google

▼ せんでん




▼ 最近読んだ本

▼ 気に入ってる本