Linux

Linuxのオープンソースの監視ツール

Linuxのシステム監視運用をしていく上で監視は
重要な作業なのだ。
監視で事前にトラブルを防ぐ事もシステムの癖?
みたいな物が見えてくる。
例えば、毎時同じ時間帯に異常なトラフィック量
が増え、調査の後、意味のあるトラフィック増と
分かれば、今後監視の上で除外できるし、トラブル
発生後に監視していたデータでトリガーを追求する
事が出来る事もあるし。
そんな訳で、この間のセミナーでいくつかのオープン
ソースの監視ツールを紹介されたのでメモ書き。

■Nagios(ナギオス)
世界的に良く知られているツールの1つらしい。
(私は使った事ないですけど・・・)
総合的な監視ツールらしく、ホスト数が多くても
対応出来、利用実績が豊富らしい。
まぁ、難点としては少し見にくいらしい。
http://www.nagios.org/

■Hinemos(ヒネモス)
NTTデータが中心になって開発した総合運用ツール
らしい。(ヒネモスを変換して初めて知ったけど、
ヒネモスって終日という意味があるらしい。調べた
ところ、「朝から晩まで続くさま」で、ヒネモスと
名づけたとの事。へぇー。)
エージェント型で専用クライアントツールを利用
するらしい。
JAVAで動作するのでメモリを食うのが難点らしい。
http://www.hinemos.info/

■ZABBIX(ザビックス)
最近注目の総合運用ツールで、シンプルだけど
必要な機能が揃っているツールらしい。
http://www.zabbix.com/

■zither(チーター)
ライブドアが提供する監視ツールらしい。
無料サービス「データホテルパトロール」が
なかなか優れ物らしいが、監視サーバがデータ
ホテル側にあるのでセキュリティポリシー的に
難しいかな。
http://patrol.datahotel.ne.jp/

まぁ、あとは言わずとしれてMRTGとか。

こんな感じかな〜。

| | コメント (11) | トラックバック (0)

Linuxシステム運用

今日はセミナーに行って来た。
そこで学んだ事をメモ書き。

システム運用にも多々あるが、サーバ監視として主に
使われるコマンドが、
死活監視のプロセス監視でpsコマンド、prtreeコマンド
ポートチェックとしてnetstatコマンド
リソース管理のCPU利用状況でtopコマンド、uptimeコマンド
メモリの利用状況は、freeコマンド
ディスクの利用状況は、dfコマンド、iostatコマンド
リソース全体を把握するのは、vmstatコマンドやsarコマンド

いろいろなコマンドがあるが、topコマンドの出力結果の中に
load averageという項目があるが、講師の人から明確にload average
を説明できるのか問われたが。。。明確に説明できない私。

なんとなくCPUの使用率という認識だったけど、正確には
処理を待っているプロセスの平均数。
まぁ、処理待ちのプロセスが少なければいつでもCPUが使用
できるのだから、CPUの使用率という認識で問題ないと思うけど。
処理を待っているプロセスの平均数が常に高い数値(5とか6)を
示している場合、処理待ちの状態が継続している状態で
システム的には宜しくない状態という事。

ちなみに、macで取得したtopコマンドの出力結果は・・・
↓こんな感じ。まぁ、問題ないなー。

Processes:  53 total, 2 running, 51 sleeping... 161 threads            23:15:48
Load Avg:  0.15, 0.17, 0.11     CPU usage:  2.3% user, 5.4% sys, 92.3% idle 
SharedLibs: num =  135, resident = 28.1M code, 4.01M data, 7.48M LinkEdit
MemRegions: num =  5031, resident =  149M + 14.2M private,  106M shared
PhysMem:   178M wired,  166M active,  347M inactive,  693M used,  330M free
VM: 7.41G + 81.5M   37612(0) pageins, 0(0) pageouts

  PID COMMAND      %CPU   TIME   #TH #PRTS #MREGS RPRVT  RSHRD  RSIZE  VSIZE
  313 top         10.1%  0:37.11   1    18    20   632K   840K  2.49M  27.0M
  307 csh          0.0%  0:00.02   1    15    19   408K  1.04M  1.46M  31.1M
  305 bash         0.0%  0:00.01   1    14    16   220K  1.21M  1.27M  27.1M
  304 login        0.0%  0:00.01   1    16    40   176K   920K  1.88M  26.9M
  302 Terminal     0.8%  0:02.23   4    95   185  3.09M  15.4M  17.9M+  358M
  301 nmbd         0.0%  0:00.13   1    14    23   260K  1.38M  3.38M  27.7M
  298 firefox-bi   0.2%  0:55.45   7   131   394  54.3M  40.6M  87.5M   482M
  297 Preview      0.0%  0:00.58   2    93   187  2.63M  11.1M  14.8M   355M
  291 System Eve   0.0%  0:00.26   1    60   105  1.34M  3.96M  8.89M   328M
  288 LAServer     0.0%  0:15.19   1    58   149  26.5M  11.0M  40.2M   396M
  287 usbmuxd      0.0%  0:00.01   2    20    21   176K   792K  1.79M  27.0M
  285 LCCDaemon    0.0%  0:00.40   3    98   157  2.32M  6.92M  12.5M   340M
  284 DevDetectL   0.0%  0:00.81   2    68   120  4.34M  9.32M  19.3M   400M
  283 UniversalA   0.2%  0:01.48   1    62   112  1.34M  4.04M  9.82M   333M
  282 iTunesHelp   0.0%  0:00.07   2    55   100   636K  3.09M  4.32M   324M
  280 Finder       0.0%  0:00.85   3   115   207  3.77M  20.9M  18.8M   375M
  278 SystemUISe   0.0%  0:02.79   2   207   228  4.19M  11.1M  16.9M   358M
  277 Dock         0.0%  0:00.34   2    96   144  1016K  13.3M  10.2M   337M
  276 mdimport     0.0%  0:00.32   3    60    50   988K  3.41M  9.05M  39.1M
  270 pbs          0.0%  0:00.31   2    53    44   764K  3.45M  5.79M  54.4M
  269 TabletDriv   0.0%  0:00.19   3    87    87   972K  3.73M  7.78M   325M
  268 mdimport     0.0%  0:00.18   3    60    43   836K  2.91M  6.75M  38.6M
  253 automount    0.0%  0:00.01   3    39    30   308K  1.30M  1.09M  28.7M

| | コメント (0) | トラックバック (0)

Linuxにtelnet接続ができない

今日仕事の合間に職場の上司からLinuxをインストール
したけど、リモートからtelnetができないけど、原因
が分からないんだよねーと相談を受けた。
(内心、相談されたと言うよりは私に対する力量調査か、
私に教育をしてくれているのかもしれない。なんて、
思いながら調べてみる。)

1.
まず、確かにリモート(Windows)からLinuxにtelnet
ができないのかを確認。→できない。

2.
Linuxにターミナルで接続してローカルからtelnet
でログインできる事を確認。→できる。

3.
Linuxからデフォルトゲートウエイ、Windows側のIP
アドレスにpingしてみる。→応答が返る。

4.
wrapperの設定では?と思い、/etc/hosts.allowを確認。
→ALL:ALLで許可されている。

5.
念のため、telnetのport(TCP23)がnetstatでリッスン
状態なのか確認。→リッスン状態になっている。

6.
「/etc/xinetd.d/telnet」のdisableは始めから
「no」に設定されている。
→/etc/inetd.confは存在しない。

7.
hosts.allowを念の為に、
in.telnet *.*.*. で接続を許可してみる。
→状況変わらず。

8.
nameserverが設定されていないので、設定して
みる。→状況変わらず。

9.
psコマンドでxinetdが起動しているのか、確認。
→起動している。
念のため、xinetdを再起動してみて、状況を
確認してみる。→状況変わらず。

10.
Linuxのファイヤーウォール(iptables)が原因なのか、
サービスを停止してみる。(service iptables stop )
→リモートホストからLinuxへのtelnet接続成功。

原因:Linuxのファイヤーウォールが通信をブロック
していた事が判明。

→上司に接続できるようになった事を報告。
上司も接続できたとの事。。。
もう少し早く解決できても良かったと思う。。。

参考URL
http://www.redhat.com/docs/manuals/enterprise/RHEL-4-Manual/ja/ref-guide/

| | コメント (0) | トラックバック (0)

LPI コマンド履歴

1度使ったコマンドをもう1度使ったり、一部だけ変更して
使いたい場合は、bashの履歴機能を利用。

プロンプトが出ている状態で↑キー、(又はCtrl + Pキー)
を押すと実行したコマンドが最近実行したものから表示
される。

historyコマンドを使うと、コマンド履歴が順に表示される。
古いものから順に番号が付く。

$ history
    1    ls
    2    cat .profile
    3    vi .profile

履歴番号が3のコマンドを実行するには、履歴番号の前に
[ ! ]を付けて、実行する。

$ !3

コマンド履歴は、ユーザのホームディレクトリにある
.bash_historyファイルに保存される。
このファイルは、環境変数HISTFILEによって変更可能。
履歴を残す数は、環境変数HISTSIZEで設定される。
デフォルトは、500となっている。


| | コメント (0) | トラックバック (0)

LPI 引用府

■ [ ' ] 単一引用府(シングルクォーテーション)
単一引用府の中は、全て文字列であると解釈される。

■ [ " ]二重引用府(ダブルクォーテーション)
二重引用府内に変数があれば、その変数の内容が
展開される。
また、二重引用府内にバッククォーテーション[ ' ]
が使われていると、その中も展開される。

[例]

$ echo $DATE
8月31日 ←環境変数DATEの内容が表示される。
$ echo '$DATE'
$DATE ←文字列$DATEが出力される
$ echo "今日の日付は$DATEです。"
今日の日付は8月31日です。 
↑二重引用府内の環境変数DATEの内容も表示される。

展開させたくない場合、例えば$記号をそのまま使いたい
場合は、バックスラッシュ[\]を使う。
バックスラッシュ直後の文字は、全て文字であると判断
される。
これを「エスケープシーケンス」と言う。

[例]

$ echo "変数\$DATEの内容は「$DATE」です。"
変数$DATEの内容は「8月31日」です。
↑バックスラッシュの後ろに$DATEがある為、環境変数と
みなされず、文字列として出力される。


(注)ここでは全角のバックスラッシュを使っているが、
半角のバックスラッシュを利用する。


■[ ` ]バッククォーテーション
引用府内にコマンドがあれば、そのコマンド実行した結果
が展開される。
また変数の場合は、変数に格納されているコマンドを実行
した結果が展開される。

[例]

$ echo "カレントディレクトリは、`pwd` です。"
カレントディレクトリは、/home/hogehogeです。
↑バッククォーテーション内のコマンドの結果が出力される。

| | コメント (0) | トラックバック (0)

テープデバイスの状況確認とテープ書き込みの流れ

■デバイスの認識
Linuxシステムが正常にデバイスを認識しているかどうかを
確認するには、/proc以下を確認する。
例えば、SCSI接続のデバイスであれば、/proc/scsi/scsiを
確認すると該当するテープデバイスが表示されるはず。

# cat /proc/scsi/scsi
Attached devices:
Host: scsi0 Channel: 00 Id: 06 Lun: 00
  Vendor: ARCHIVE  Model: Python 06408-XXX Rev: 8071
  Type:   Sequential-Access                ANSI SCSI revision: 03

例えばIDE接続のテープデバイスをプライマリのスレーブ
(/dev/hdb)に接続している場合は、/proc/ide/hdbディレクトリ
以下のファイルを確認する。
mediaファイルには「tape」、modelファイルには「製品名」
が表示される。

# cat /proc/ide/hdb/media
tape
# cat /proc/ide/hdb/model
Seagate STT20000A

■テープデバイスの認識

Linuxでテープを操作するには、mtコマンドを利用する。

挿入されているテープのステータスを確認
#mt -f /dev/st0 status
テープの現在のブロック位置を示す
#mt -f /dev/st0 tell
テープを先頭まで巻き戻す
#mt -f /dev/st0 rewind

詳細なコマンド操作方法は、こちらへ。

■テープに書き込み

挿入されているテープのステータスを確認
#mt -f /dev/st0 status
テープの中身を確認
#tar tvf /dev/st0
巻き戻しする
#mt -f /dev/st0 rewind
ホームディレクトリのtestデータの書き込み
#tar cvf /dev/st0 /home/heigi/test
中身を確認して、巻き戻し
#tar tvf /dev/st0
#mt -f /dev/st0 rewind
テープの排出
#mt -f /dev/nst0 offline

※Linuxではデバイスが/dev/st0
※Solarisではデバイスが/dev/rmt/0n

| | コメント (0) | トラックバック (0)

LPI コマンドの実行

コマンドは、次のような要素から成り立つ。

コマンド オプション 引数

■複数のコマンドの実行制御

コマンド         説明
----------------------------------------------------------
コマンド1;コマンド2   コマンド1に続いてコマンド2を実行
[例] pwd ; ls
----------------------------------------------------------
コマンド1&&コマンド2   コマンド1が正常終了した時のみ
[例] pwd && ls        コマンド2を実行
----------------------------------------------------------
コマンド1 || コマンド2   コマンド1が正常終了しなかった場合
                                のみコマンド2を実行
[例] grep LPIC file.log || echo "LPIC not found in file.log"
----------------------------------------------------------
(コマンド1;コマンド2)  一纏まりのコマンドグループとして実行
[例] (date; pwd; ls) > kekka.log
----------------------------------------------------------
{コマンド1;コマンド2}  現在のシェル内でコマンドを実行
----------------------------------------------------------

| | コメント (0) | トラックバック (0)

LPI 環境変数PATH

コマンドには内部コマンド(シェル自体に組み込まれているもの)
外部コマンド(独立したプログラムとして存在するもの)の
2種類存在する。

パスの通っていない場所に置かれているコマンドやプログラム
を実行する場合、絶対パス(フルパス)を指定する必要がある。
絶対パスは、最上位のディレクトリ( / )から表記する方法。
相対パスは、カレントディレクトリ( . )を基点とした相対位置で
表記する方法。

一般ユーザの環境変数PATHにパスを追加するには、.bash_profile
などの環境設定ファイルのPATH設定を修正するか、以下方法で
環境変数PATHを追加する。

■環境PATHの追加書式

$ PATH=$PATH:追加するディレクトリ名

(例) /mydir ディレクトリを環境変数PATHの最後に追加

$ PATH=$PATH:/mydir

※シェルは、環境変数PATHの先頭からディレクトリを検索する。
もし同名のプログラムがあった場合は、環境変数PATHの先頭に
近いほうのディレクトリに置かれているプログラムを実行する。

$ PATH=/mydir

上記のようにすると、パスが通っているディレクトリは/mydir
だけになってしまい、外部コマンドが使えなくなる。(フルパス
で指定すれば使える。)

※通常、セキュリティの理由から環境変数PATHにはカレント
ディレクトリを含みません。その為、カレントディレクトリに
あるプログラムを実行する時には、カレントディレクトリを
意味する[ . ] をつけた形式でコマンドを実行する。

(例) カレントディレクトリにあるmycommandを実行した場合

$ ./mycommand

| | コメント (0) | トラックバック (0)

LPI シェル変数と環境変数

bashシェルの基本的なユーザ設定は、ユーザのホームにある
.profileファイル、.bash_profileファイル、.bashrcファイル
行う。
.profileファイル、.bash_profileファイルは、ログイン時に1回
だけ読み込まれるのに対して、.bashrcファイルは起動する
たびに読み込まれる。

環境変数とは、その変数を定義したシェル上及びそのシェル
で実行されるプログラムからも参照する事のできる変数です。

■変数を定義する書式

変数名=値

指定する際の[=]の前後にスペースが入らないように注意する。
定義された変数はechoコマンドを使って参照ができる。
変数を指定する場合は、変数名の先頭に[$]をつける。

■echoコマンドの書式

echo [文字列又は$変数名]

例えば、echoコマンドに変数lpiを指定すると

$ lpi='Linux Professional Institute'
$ echo $lpi
Linux Professional Institute

変数を削除する場合は、unsetコマンドを使う。

■unsetコマンドの書式

unset 変数名

先ほどセットした変数lpiを削除する場合

$ unset lpi

削除する場合は、変数名の先頭に[$]はつけない。
定義されている環境変数の一覧表示にはenvコマンド
環境変数とシェル変数を両方表示するにはsetコマンド
を使う。
シェル変数は新たに起動したbashからは参照できないが、
exportコマンドでエクスポートする事で参照できるようになる。

■exportコマンドの書式

export 変数名


削除する時と同様、変数名の先頭に[$]はつけない。

以下は、シェル変数と環境変数の違いを確認している。

$ VAR=lpic        ←VAR変数を定義
$ echo $VAR    ←VAR変数をecho
lpic                        ←[lpic]が出力される
$ bash                  ←bashを新たに起動
$ echo $VAR    ←VAR変数をecho

                            ←定義されていない為、何も出力されない
$ exit                   ←新たに起動したbashを終了
$ export VAR    ←VAR変数をエクスポート
$ bash                  ←bashを新たに起動
echo $VAR    ←VAR変数をecho
lpic                        ←新たに起動したbashでも[lpic]が出力される

エクスポートと変数定義を1行で書く事も可能。

$ export VAR=lpic

| | コメント (0) | トラックバック (0)

LPI bashシェルの基本的キー操作

■bashシェルの基本操作
-------------------------------------------------------
操作                        説明
-------------------------------------------------------
Tabキー                        コマンドやディレクトリ名を補完
-------------------------------------------------------
Ctrl+Aキー                  行の先頭へカーソルを移動
-------------------------------------------------------
Ctrl+Eキー                    行の最後へカーソルを移動
-------------------------------------------------------
Ctrl+Dキー                    カーソル部分を1文字削除
-------------------------------------------------------
Ctrl+Hキー                    カーソルの左1文字削除
-------------------------------------------------------
Ctrl+Lキー                    画面をクリアしてカレント行を再表示
-------------------------------------------------------
Ctrl+Cキー                    処理を中断
-------------------------------------------------------
Ctrl+Sキー                    画面への出力を停止
-------------------------------------------------------
Ctrl+Qキー                    画面への出力を再開
-------------------------------------------------------
Ctrl+Zキー                    処理を一時停止(サスペンド)
-------------------------------------------------------

| | コメント (0) | トラックバック (0)

LPI Red Hatのパッケージ管理

Red Hatのパッケージ管理は、rpmコマンドを用いて管理する。

■rpmコマンドの書式

# rpm [オプション]

オプション                                    説明
------------------------------------------------------------
【インストール/アップグレードモード】
------------------------------------------------------------
-i [パッケージファイル名]                   パッケージをインストール
( --install )                         
------------------------------------------------------------
-U [パッケージファイル名]                パッケージをアップグレード
( --upgrade )                                         (無ければインストールする)
------------------------------------------------------------
-F [パッケージファイル名]           パッケージがインストールされて
( --freshen )                                   いればアップグレードする
------------------------------------------------------------
    上記と併用するオプション
    ----------------------------------------------------------
    -v                                                                詳細な情報を表示する
    ----------------------------------------------------------
    -h  ( --hash )                                          進行状況を[#]で表示する
    ----------------------------------------------------------
    --nodeps                                    依存関係を無視してインストール
    ----------------------------------------------------------
    --force                                          既存のファイルを新しいものに
                                                          置き換える
    ----------------------------------------------------------
    --test                                              実際にはインストールせずに
                                                            テストを実施する
    ----------------------------------------------------------
【アンインストールモード】
------------------------------------------------------------
-e [パッケージ名]                             パッケージをアンインストール
( --erase )
------------------------------------------------------------
    上記と併用するオプション
    ----------------------------------------------------------
    --nodeps                             依存関係を無視してアンインストール
    ----------------------------------------------------------
【照会モード】
------------------------------------------------------------
-q [パッケージ名]                    指定したパッケージがインストール
                                                                されているか照会する
------------------------------------------------------------
    上記と併用するオプション
    ---------------------------------------------------------
    -a                                               インストール済の全てのパッケージを
    ( --all )                                     表示する
    ---------------------------------------------------------
    -f [ファイル名]                    指定したファイルを含むパッケージを
                                                        表示する
    ---------------------------------------------------------
    -p [パッケージファイル名]    対象としてパッケージファイルを
                                                                指定する
    ---------------------------------------------------------
    -c                                                指定ファイルのみを表示する
    ( --configfiles )
    ---------------------------------------------------------
    -d                                                ドキュメントのみを表示する
    ( --docfiles )
    ---------------------------------------------------------
    -i                                         インストール済のパッケージ情報を表示
    ---------------------------------------------------------
    -R                                        指定したパッケージが依存している
                                                 パッケージを表示する
    ---------------------------------------------------------

【rpmコマンド実行例】

詳細な情報進行状況を表示してパッケージをインストール
# rpm -ivh rpmpackage-2.1.3.i386.rpm

■パッケージ間の依存関係を無視してパッケージをインストール
# rpm -ivh --nodeps rpmpackage-2.1.3.i386.rpm

■カレントディレクトリ上のRPMパッケージのうち、既に
 インストールされているパッケージのみアップグレード

# rpm -Fvh *.rpm

■rpmpackageパッケージをアンインストール
# rpm -e rpmpackage

注:)この時、rpmpackageパッケージに依存しているパッケージが
  存在する場合、削除は出来ない。


■rpmpackageパッケージと依存関係にあるパッケージを表示
# rpm -qRp rpmpackage

依存関係を無視してアンインストール
# rpm -e --nodeps rpmpackage

■インストールされている全てのパッケージでパッケージ名が
 XFree86をが含まれているものを表示
# rpm -qa | grep XFree86

■各パッケージの情報を表示
# rpm -qi perl

■インストール前のパッケージ情報を表示
# rpm -qip perl

■指定したファイルが何というパッケージからインストール
 されたのか表示
# rpm -qf /bin/bash

■インストール前のパッケージからどのようなファイルが
 インストールされるのかを表示
# rpm -qlp apache-1.3.26-1.i386.rpm

| | コメント (0) | トラックバック (0)

LPI apt-getコマンド

APT:Advanced Packages Management
apt-getコマンドは、依存関係を調整しながらパッケージの
インストール、アップグレード、アンインストールを行う。

■apt-getコマンドの書式

# apt-get [オプション] [コマンド] パッケージ名

オプション                      |説明
--------------------------------------------------------------
-d                                          | ファイルをダウンロードする
                                    | (インストールはしない)
--------------------------------------------------------------
-s                                          | システムを変更せずにシミュレートする
--------------------------------------------------------------
dist-upgrade                       | Debianのシステムを最新にアップグレード
--------------------------------------------------------------
install                                  |パッケージのインストール、アップグレード
--------------------------------------------------------------
remove       | パッケージをアンインストール
--------------------------------------------------------------
update                                |パッケージ情報ファイルを更新する
--------------------------------------------------------------
upgrade         | システムの全パッケージを安全に
                                    | アップグレード
--------------------------------------------------------------

apt-getコマンドでパッケージ管理を始めるには、まず/etc/apt/sources.list
にパッケージを管理しているサイトのURLを記述する事!!

/etc/apt/sources.listファイルの内容
--------------------------------------------------------------
deb ftp://ftp.jp.debian.org/debian    woddy    main contrib non-free
--------------------------------------------------------------

# apt-get update  ##最新のパッケージ情報ファイルを取得する
# apt-get install aptsample  ##aptsampleパッケージをインストールする
# apt-get remove aptsample  ##aptsampleパッケージを完全に削除する
# apt-get dist-upgrade  ##システムを一括して最新状態にアップグレード
# apt-get upgrade  ##システムの全パッケージを安全にアップグレード

| | コメント (0) | トラックバック (0)

LPI Debianパッケージ管理

Linuxのパッケージ管理は大きく分けて、deb形式とRPM形式
の2種類がある。
deb形式は、Debian系のディストリビューションで利用さされる。

deb形式のパッケージを扱うには、dpkgコマンドを使う。

■dpkgコマンドの書式

# dpkg [オプション]  アクション

(例)dpkgコマンドを使って、debpackageパッケージをインストール。

# dpkg -i debpackage          
# dpkg --install debpackage
(どちらも同じ動作をするコマンドとなる)

オプション         | 説明
----------------------------------------------------------------
-E                       | 既に同じバージョンがインストールされていれば
                      | インストールしない
----------------------------------------------------------------
-G                       | 既に新バージョンがインストールされていれば
                           | インストールしない
----------------------------------------------------------------
-R                       | ディレクトリ内を再起的に処理する
( --recursive )      |
----------------------------------------------------------------

アクション                  | 説明
----------------------------------------------------------------
-i [パッケージファイル名] | パッケージをインストールする
( --install )         |
----------------------------------------------------------------
-r [パッケージ名]     | 設定ファイルを残してパッケージを削除
( --remove )         |
----------------------------------------------------------------
-P[パッケージ名]     | 設定ファイルを含め完全にパッケージを
( --purge )         | 削除
----------------------------------------------------------------
-l [検索パターン]     | インストール済のパッケージを検索して
( --list )          | 表示
----------------------------------------------------------------
-S[ファイル名検索パターン]| 指定されたファイルがどのパッケージから
( --search )          | インストールされたか表示
----------------------------------------------------------------
-L[パッケージ名]     | 指定パッケージからインストールされた
( --listfile )                              | ファイルを一覧表示
----------------------------------------------------------------
-s [パッケージ名]                 | パッケージの情報を表示
( --status )                            |
----------------------------------------------------------------
--configure [パッケージ名] | 展開されたパッケージを構成
----------------------------------------------------------------
--unpack [パッケージ名]      | パッケージを展開(インストールはしない)
----------------------------------------------------------------

# dpkg -l                ## システムにインストール済の全パッケージ表示させる

| | コメント (0) | トラックバック (0)

LPI 共有ライブラリ

■ライブラリには、静的ライブラリと共有ライブラリがある。

■プログラム本体からライブラリの機能(関数)を呼び出す事を
 リンクとよぶ。

■リンクには、スタティックリンク(静的リンク)とダイナミック
 リンク(動的リンク)がある。

スタティックリンクとは
コンパイルする時点で、コンパイラがライブラリから機能を
取り出し、実行ファイルに埋め込む。

ダイナミックリンクとは、
スタティックリンクだと、良く使われるライブラリの機能が重複
して入ってしまう事になるので、実行ファイルえライブラリの
機能を埋め込む事はせず、実行時にライブラリの機能を呼び出す
方法。

ダイナミックリンクによって呼び出されるライブラリを
共有ライブラリ
とよぶ。

共有ライブラリは、

[lib〜.so〜]というファイル名となる。例えば、libreadline.so.3です。
共有ライブラリは、通常 /lib , /usr/lib に置かれる。

■実行ファイルが必要としている共有ライブラリの調査方法

(例)lsコマンドが必要とする共有ライブラリの調査方法

# ldd 'which ls'

プログラム実行時には、ld.soリンカ及びローダーが実行時にリンク
する共有ライブラリを検索して必要なライブラリをロードする。
/lib, /usr/libディレクトリ以外のライブラリを検索する場合は、
/etc/ld.so.conf ファイルに記述する。
しかし、プログラム実行毎にディレクトリを検索するのは非効率的
なので、実際にはバイナリのキャッシュファイルである/etc/ld.so.cache
が参照される。

共有ライブラリを変更したい場合は、ldconfigコマンドを実行して
キャッシュを更新する必要がある。
(/etc/ld.so.confに基づいて、/etc/ld.so.cacheを再構築する)

| | コメント (0) | トラックバック (0)

LPI ブートローダのインストール

システム起動時に、BIOSは起動ドライブの最初のセクター
(MBR:マスターブートレコード、ブートセクター)から
起動プログラムを読み込む。
このプログラムがブートローダー(第一段階のブートローダー)です。
第一段階のブートローダーは、第二段階のブートローダーを呼び出し、
これがカーネルをメモリに読み込む。
このようにブートローダーは二段構成となっている。

Linuxの標準的なブートローダーはLILO ( LInux LOader )

LILOは複数のプログラムと様々なファイルから構成されている。

■ブートローダー

■マップインストーラー
(ブートセクターを更新し、マップファイルを作成するプログラム。
通常は、/sbin/lilo [liloコマンド]となる。)

■マップファイル

■LILO設定ファイル
(LILOの設定は、通常 /etc/lilo.conf となる。)

/etc/lilo.conf の設定を反映させるには、/sbin/lilo を実行しないと反映
はされない!!


■liloコマンド書式

# lilo [オプション]

オプション                    |   説明
-----------------------------------------------------------------------
-C <設定ファイル>      |設定ファイルを指定する(デフォルトは/etc/lilo.conf)
-----------------------------------------------------------------------
-q                                         |現在のマップファイルを表示する
-----------------------------------------------------------------------
-t                                         |テストのみ実行する
-----------------------------------------------------------------------
-u                                         |LILOを削除する
-----------------------------------------------------------------------

# lilo /etc/lilo.conf (設定を反映させる際に実行するコマンド)

GRUB:GRand Unifird Bootloader は、GNUが公開している多機能なブートローダー。

ブートローダーとしてGRUBをインストールするには、grub-installを使う。
以下は、/dev/hdaのMBR領域にGRUBをインストールする場合です。

# grub-install /dev/hda

GRUBの設定ファイルは、/boot/grub/grub.conf となる。

LILOの場合と異なり、設定ファイルの変更に伴うマップファイルの更新は不要!

■インストールとコンパイル

1.インストールするアーカイブを手に入れる。(ここでは、software.tar.gz)

2.アーカイブを展開する。
# tar zxvf software.tar.gz (解凍、展開)
もしくは、
# gunzip software.tar.gz ; tar zvf software.tar (圧縮ファイルを解凍、後に展開)
# gzip-dc software.tar.gz | tar xv (圧縮ファイルを解凍、後に展開)

3.環境を確認し、makefileを作成する為のconfigureを実行する。
# cd software
# ./configure

4.ソースから実行可能ファイルを生成する。(コンパイル)
# make

5.インストールを実行する。
# make install

| | コメント (0) | トラックバック (0)

LPI Linuxパーティションの分割

Linuxインストールに必要なパーティションは、最低でも

■ルートパーティション( / )
■スワップ領域(/swap)

が必要となる。

スワップ領域は、Linuxの仮想メモリとして利用される為、
物理メモリが不足した場合に、ディスクの一部を一時的に
メモリの延長として使う事ができるようにする機能となる。
その為、物理メモリ128MB搭載している場合はスワップ領域
として128〜256MB(物理メモリの同程度から2倍を目安)確保する。

# 以前、職場で検証機のOSインストールを頼まれて、
 パーティションを1スライスと言われ、まんまスワップ領域
 なしのルートパーティションのみで作成したなぁ・・・。
 検証機だったから、良かったけど・・・。
 本当は、スワップとルートで切らないと駄目だったなぁ。

| | コメント (0) | トラックバック (0)

LPI シリアルポート、USBポート、

シリアルポートを表すデバイスファイル名は、
_______________________________________________________________________
1番目のシリアルポート | /dev/ttyS0
-----------------------------------------
2番目のシリアルポート | /dev/ttyS1
-----------------------------------------

シリアルポートへのリソース割り当てが適切に行われなかった時は、
IRQ、I/Oアドレスを設定する必要があります。
どのI/Oアドレスが、どのシリアルデバイスに対応するのかは、
setserialコマンドで確認が出来る。

# setserial /dev/ttyS0
/dev/ttyS0, UART: 16550A, Port: 0x03f8, IRQ: 4

上記結果は、/dev/ttyS0I/Oアドレスが0x03f8IRQが4という結果
だと分かる。

USB(Universal Serial Bus)の特徴
■最大127台のUSBデバイスを接続可能
■様々なUSBデバイスを同一のコネクタで接続可能
■電源を入れたまま接続、取り外しに対応(ホットプラグ)
■プラグ&プレイをサポート
(自動的に協調し、機器の組み込みと設定を自動的に行う仕組み)
■何台接続してもIRQの消費は1個のみ
■USBポートからUSBデバイスに電源を供給可能

LinuxでUSB機能を利用する為のカーネルモジュール(USBドライバ)には、
usb-uhci.o と usb-ohci.o がある。

___________________________________________________________________________________________________________________
usb-uchi.o |Intel社、VIA社などのUHCIコントローラに対応 
------------------------------------------------------------------
usb-ohci.o |Compaq社、SIS社、Ali社などのOHCIコントローラに対応 
------------------------------------------------------------------
※システムで、どちらのUSBコントローラを搭載しているのかはdmesgコマンド
または、lspciコマンドで確認が出来る。

# dmesg | grep usb-?hci

# lspci

USBモジュールを手動でロードする場合は、modprobeコマンドを使う。

# modprobe usb-uhci

| | コメント (0) | トラックバック (0)

LPI IRA、I/Oアドレス、DMA、SCSI、PCIの設定

LPIを取得しようかと・・・それで勉強のメモ書きを。

IRQ(Interrupt ReQuest):割り込み要求のこと。各種デバイスがCPUとデータをやり取り
際に発生し、CPUがどのデバイスからの要求なのか識別するために用いられる。

通常、IRQは自動的に割り当てられますが、手動で割り当てる時には重複しないよう
注意する。IRQが重複すると、デバイスが動作しなかったり、動作しても不安定になる
要素なる。

IRQの割り当ては、# cat /proc/interrupts で確認が出来る。

I/Oアドレスは、CPUのメモリマップ上のアドレスで入出力を行うデバイスの為に
割り当てられる。
I/Oアドレスの割り当ては # cat /proc/ioports で確認が出来る。

DMA(Direct Memory Access):CPUを使わずに、デバイスとメインメモリとの間で高速な
データ転送を行うために使う。

CPUが他の処理を実行中でも、ハードディスクなどのデバイスとメモリとのデータを
DMAコントローラが制御する為、CPUの負荷軽減となり、処理速度が向上する。
DMAチャネルの割り当ては、# cat /proc/dma で確認が出来る。

IRQ I/Oアドレス DMA の値は競合しないようにする

# lsdev コマンドにより、デバイスごとのDMA、IRQ、I/Oアドレス一覧を確認できる。

SCSI(Small Computers System Interface):コンピュータと周辺機器を接続する為の
インターフェイスの国際標準規格。

SCSIは、SCSI IDで識別されることと、SCSI IDは重複しない事が重要。
/proc/scsi ディレクトリ以下に情報がある。

SCSI接続されたハードディスクやCD-ROMドライブのデバイスファイル名は、
________________________________________________________________
1番目のデバイス | /dev/sda
------------------------------------
2番目のデバイス | /dev/sdb
------------------------------------
    :       |  :
------------------------------------
 
SCSI接続されたテープドライブのデバイスファイル名は、
________________________________________________________________
1番目のテープドライブ | /dev/st0
------------------------------------
2番目のテープドライブ | /dev/st1
------------------------------------

その他、PCIデバイス情報は # cat /proc/pci もしくは、# lspci にて確認ができる。

| | コメント (0) | トラックバック (0)

障害切り分けコマンド

運用中のLinuxサーバが重いなぁーと感じたら、以下確認する。

1. CPU使用率
2. メモリ使用量
3. ディスクI/O
4. TCPコネクション数

■「top」,「w」,「free」コマンドで
  CPU、メモリ使用率を確認する。

# top
151 processes: 150 sleeping, 1 running, 0 zombie, 0 stopped
CPU0 states:  0.4% user,  0.5% system,  0.0% nice, 98.1% idle
Mem:   513596K av,  442136K used,   71460K free,       0K shrd,   77992K
buff
Swap: 1044184K av,   14120K used, 1030064K free                  208420K
cached

idle値が98%以上(2%未満)なのでCPUは正常。

# w
12:08pm  up 171 days,  1:20,  1 user, 
load average: 1.22, 1.02, 1.97
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU  WHAT
hoge     pts/0    192.168.5.1      11:09am  0.00s  0.33s  0.01s  w

load averageは処理待ちの平均プロセス数。
3以上の場合はかなり重たい状態となる。
その他の情報は、
「FROM」は接続元ホスト名(IPアドレス)である。
「LOGIN@」はログインした時刻である。
「JCPU」は使用した総CPU時間である。
「PCPU」現在のプロセスが使用したCPU時間である。
「WHAT」フィールドはユーザが実行しているコマンドである。

Linuxでは空きメモリがあると、それをすべてCacheにまわすらしい。
それがtopに出てくる数字。Cacheに回された分を差し引く必要があるので
freeコマンドを実行。

# free
             total       used       free     shared    buffers     cached
Mem:        513596     443556      70040          0      78340     209196
-/+ buffers/cache:    
156020     357576
Swap:      1044184      14120    1030064

この場合は実際使用している
メモリが156MBで余裕がある状態です。

次にディスクI/O。

$ vmstat 2
procs -----------memory---------- ---swap-- -----io---- --system--
----cpu----
r  b   swpd   free   buff  cache   si   so    bi    bo   in    cs us sy id
wa
1  0   4268  21500 161164 546304    0    0     3     2    3     3 32  3 65
0
6  0   4268  22204 161164 546304    0    0    2   108    0   624 80  6 14
0

見る箇所はbi/bo。
アプリ側で過大なメモリを要求した結果、仮想メモリを使用して
処理を捌こうとします。
つられるようにswapも上昇し最終的にサーバが応答しなくなります。

最後にTCPコネクション数。
netstatコマンドで確認します。

-------------------------
# netstat -an | wc -l
3050
-------------------------

ポートは65535個しかないので数万個のTCPコネクションが
あった場合はサーバを分散化する等の対応が必要になります。

| | コメント (0) | トラックバック (0)

MovableType インストール事前準備 MySQL編

職場で社内情報共有ツールとして使えるものを選出
してくれ。との要望が。。。
それも、出来ればお金をかけない方向性でとの事。
思いつくものは、MovableType、XOOPS、WordPress。
とりあえず、要望として第一に挙がったのが
MovableTypeだったので、インストールを試みた。
MovableTypeを使うには事前準備として、以下が必要だ。

■Webサーバー(Apacheなど)が利用可能な事
■MySQLなどのデータベースが利用可能な事
■プログラム実行環境(PerlやPHPなど)が必要(#whereis perlで確認しておく)

「インストール環境」
■OS:CentOS4
■DB:MySQL
■MT:MovableType4.13

今回は、CentOSをインストールする事から始めた。
CDからのインストールだったので楽々インストール完了。
(ただ、MySQLのチェックボックスをONにしてインストール
したが、MySQLが起動しない。
しかも、何故かMYSQLSERVERがインストールされていない。)
再度、CDからソフトウエアのインストールを試す。
詳細インストールを覗くと、
MYSQLSERVERがデフォルトでは
チェックが入っていないのでインストールされない。という
情けないお粗末な結果が判明。

MYSQLSERVERにチェックを入れ、無事インストールが完了。

# /etc/init.d/mysqld start #MySQLの起動コマンド
# /etc/init.d/mysqld stop #MySQLの停止コマンド

無事、MySQLの起動コマンドで起動した〜。

次は、データベースの作成と自動実行の登録。
サーバ再起動する度に起動コマンド実行するのは大変
ですからねー。

その後のMySQLの設定は、ここを参考にした。

# mysql -u root
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4 to server version: 3.23.58

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

インストール直後のデータベース表示
mysql> show databases;
+-----------+
| Databases |
+-----------+
| mysql     |
| test      |
+-----------+
データベースが「mysql」と「test」の2つが存在している。


「mysql」データベースのテーブル名表示
mysql> show tables from mysql;
+-----------------+
| Tables_in_mysql |
+-----------------+
| columns_priv    |
| db              |
| func            |
| host            |
| tables_priv     |
| user            |
+-----------------+
6 rows in set (0.00 sec)
columns_priv    :フィールドについてのアクセス制限
db              :各データベースについてのアクセス制限
func            :システムテーブル(ユーザ定義関数)
host            :ホストによる制限
tables_priv     :テーブルについてのアクセス制限
user            :ユーザによりアクセスを制限


MySQLアカウントのrootが自動的に作成されているがパスワードが
設定されていないので設定する。

rootにパスワードを設定する(パスワードを"se-heigi"とする場合)
mysql> SET PASSWORD FOR root@localhost=PASSWORD('se-heigi');
Query OK, 0 rows affected (0.00 sec)

MySQL monitorの終了
mysql> exit
Bye


MySQL monitorにrootで接続する
(この時、"-p"オプションを指定しパスワード入力をする)

# mysql -u root -p
上記で設定したパスワード"se-heigi"を入力
Enter password:se-heigi(通常は表示されません)
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 5 to server version: 3.23.58

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

「use」コマンドで「mysql」データベースに切り替える。
mysql> use mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

データベースが変更された
Database changed

MySQLに接続できるユーザの表示
mysql> select host,user,password from user;
+------------------------+------+------------------+
| host                   | user | password         |
+------------------------+------+------------------+
| localhost              | root | 451b483e5c7325d5 |
| se-memo.nifty.com     | root |                  |
| se-memo.nifty.com   |      |                  |
| localhost              |      |                  |
+------------------------+------+------------------+
4 rows in set (0.00 sec)

パスワード無しのユーザ(匿名ユーザ)の削除(セキュリティの為)
mysql> delete from user where user="";
Query OK, 2 rows affected (0.00 sec)

MySQLに接続できるユーザの表示
mysql> select host,user,password from user;
+------------------------+------+------------------+
| host                   | user | password         |
+------------------------+------+------------------+
| localhost              | root | 451b483e5c7325d5 |
| se-memo.nifty.com    | root |                  |
+------------------------+------+------------------+
2 rows in set (0.00 sec)


パスワード無しのユーザが削除されたホスト「se-memo.nifty.com
にもパスワードを設定する

mysql> SET PASSWORD FOR root@se-memo.nifty.com=PASSWORD('se-heigi');
Query OK, 0 rows affected (0.00 sec)

MySQLに接続できるユーザの表示
mysql> select host,user,password from user;
+------------------------+------+------------------+
| host                   | user | password         |
+------------------------+------+------------------+
| localhost              | root | 451b483e5c7325d5 |
| se-memo.nifty.com   | root | 451b483e5c7325d5 |
+------------------------+------+------------------+
2 rows in set (0.00 sec) 


MySQL monitorの終了
mysql> exit
Bye

 

基礎からのMySQL [基礎からのシリーズ] (プログラマの種シリーズ)

      
基礎からのMySQL [基礎からのシリーズ] (プログラマの種シリーズ)

著者:西沢 夢路

基礎からのMySQL [基礎からのシリーズ] (プログラマの種シリーズ)

 

| | コメント (0) | トラックバック (0)