設定ファイルを初期状態へ戻す方法
一番無難なのは
設定変更する前にファイルをバックアップしておくこと
しかし、バックアップしたファイルが削除されたり
バックアップがない可能性もあるため
復旧方法を学習しておく
今回の環境は、CentOSで
Apacheの設定ファイルである
httpd.conf
を間違えて削除した場合の対処
これをパッケージ中の設定ファイルをインストールして復旧
まず、httpd.confがどのパッケージに含まれるか調べる
もし、パッケージ名がわかれば
そのパッケージからhttpd.confを取り出せばいい
—
から送られてきた高速メモ帳
カテゴリー: 未分類
killコマンドの使い方
killコマンドの使い方
プログラムの不具合で終了できないプロセスは
killコマンドで終了させる
killコマンドは、実行中のプロセスに対して様々なシグナルを送信する
シグナルはLinuxカーネルに実装されている
プロセス間で連絡を取り合うための仕組みのこと
killコマンドを使うには
送るシグナル
プロセスID(PID)
がわからないと使えない
CPUやメモリを占有しているPIDは
topコマンドで
c
m
で調べることができる
これに対して
SIGTERMという
プロセス終了シグナルを送信すればいい
プログラムの実装にもよるけど
プロセスは
SIGTERMを受け取ると
プログラム内に実装されている終了処理を行う
これなら
オープンしているファイルを閉じたり
ログの出力してから終了というように
安全にプロセス終了できる
ただし、プロセスにシグナルをおくるには
そのプロセスのユーザー権限が必要
この権限は、topコマンドで
USERの項目に載っている
これがrootならroot権限が必要
もし、1980のプロセスを終わらせるなら
kill -SIGTERM 1980
とする
しかし、プロセス暴走だと
これでも終わらない
そんなときには
強制終了シグナル SIGKILL を使う
これは、強制終了なのでファイル破損リスクなどもあるから
ある意味最終手段
もし、1980のプロセスを強制終了するなら
kill -SIGKILL 1980
まず、SIGTERMで試して
どうしようもないなら SIGKILL を使う
ほかにも
killコマンドで使えるシグナルはたくさんあるので
kill -L
とか
man 7 signal
でマニュアル見るといい
よく使うのは
SIGUP
SIGUPは、
設定ファイルを編集後
変更が反映されるように、デーモン再起動するときなどに使うシグナル
あと、同じ名前のプロセスが、複数あるときには
killallコマンドを使えば
同じ名前のプロセスを一度で終了できる
プログラムの詳細の確認
プログラムの詳細の確認
topコマンドでどれご占有しているか調べたら
それを
locate コマンドで調べる
プログラムの場所がわかったら
dpkg
rpm
を使い、プログラムの詳細情報を取得
たとえば
topコマンドの結果
backupdプロセスが原因だったとして
locate backupd
で調べて
/usr/bin/backupd
にあるとわかったら
rpm -qf /usr/bin/backupd
でパッケージ名を表示し
rpm -qi backupd-tool
で
backupd-toolの詳細を表示し
バックアップツールのデーモンであることを確認
rpm -ql backupd-tool
で、backupd-toolパッケージのファイル一覧を表示し
initスクリプトが存在することを確認
という流れになる
initスクリプトは
システム起動時に自動で呼び出され
初期化、ソフトの起動をするスクリプト
ここまでで、原因の推測かできるので
ログを見て検証
まず、いつからシステムが重くなったか知るため
sarコマンドで過去のシステムの状態を確認
sar の実行結果の中から
%user という、ユーザープロセスのCPU利用率が急増しているところと
%idleという、CPUアイドル時間の割合が減少しているところを探す
この時間帯が判明したら
システムログの
/var/log/syslog
や
/var/log/messages
を確認する
これを確認すると
CROND というデーモンが処理をしているのが確認てきる
一番右側に、実行している処理で
/etc/cron.hourly
/etc/cron.daily
となっているので
ls /etc/cron.daily
で確認する
これにより、この時間帯にバックアップツールが動作しているのが
原因だったと検証できる
これらから、プロセス状況の把握をまとめてみると
free -m
てメモリ使用率の確認
topコマンドで
c
m
で、占有率の高いプロセスを把握
locateコマンドなどでファイルシステムのどこにあるか把握
パッケージコマンドのrpm dpkgで詳細情報の取得
sar コマンドで
CPU利用率
sar -m て
メモリ使用率
から
状態異常の起きている時間を把握
/var/log/syslog
/var/log/messages
から、その時間帯に行われているシステムのログをみて
推測と結果の検証をする
LinuxのCPU、メモリの状況把握
LinuxのCPU、メモリの状況把握
PCが遅くなる原因は主に
CPUの使用率が高い
メモリーの大量消費
の2つがある
LinuxOSは、メモリー不足になると
メモリー上のデータを
HDDのswap領域に待避してメモリーに空きを作る
これがスワップアウト
逆に
HDDへ待避したデータをメモリーへ戻すのが
スワップイン
メモリーに比べてHDDはアクセスが遅いため
スワップイン、スワップアウトか発生すると
遅くなる
端末こらfreeコマンドを使えば
メモリの現状をみることができる
ただ、今のマシンはメモリが大きいから
-mオプションをつけて MB単位で表示したほうが見やすい
このときに
Mem:の行がメモリの情報
Swap ごスワップの情報
となる
これて、もし used のところに大量のメモリを使っていると
表示されるなら
プロセスごとのメモリ占有率を調べる
これには、topコマンドを使うことで
プロセスごとのCPU、メモリの使用率を表示することで
調べることができる
topコマンドは、5秒間隔でプロセス状況を表示する
topコマンド実行中に
c を押せば、CPU使用率が高い順に並べられる
m を押せば、メモリ使用率が高い順に並べられる
こうすれば、
CPUやメモリを占有しているプロセスを見つけることができる
LinuxのCIFSでファイル共有
LinuxのCIFSでファイル共有
ファイルサーバーは
CIFS
Common Internet File System
で通信することがほとんど
これは、Windowsのファイル形式の
SMB
Server Message Block
と互換性があるから
WindowsからCIFS形式のファイル共有へ接続するには
パスに
\\ファイル形式共有のIPアドレス\
と入力する
Linuxの標準的ファイル共有は
NFS
Network File System
このため、Linuxの機能では
Windowsのファイル共有にアクセスできない
LinuxからCIFS形式のファイル共有を利用するには
samba-clientパッケージをインストールする
CentOSなら
yum install samba-client
でインストール
これで、LinuxからWindowsのファイル共有へアクセスするには
mount.cifs //IPアドレス/共有ディレクトリ /mnt -o user=ユーザー名
とする
例えば
mount.cifs //192.168.10.100/cifstest /mnt -o user=test
というように
する
mount.cifs
は、CIFS形式のファイル共有へアクセスするためのコマンド
-tオプションに
指定するファイルシステムの形式を変更することで
様々な形式の記憶領域を
Linuxから使えるようになる
/mnt
は、ファイル共有の領域を接続するディレクトリの指定
コマンドを実行すると
/mnt の下へ共有ディレクトリの中身が表示される
-o
は、接続時のオプションを指定
今回は、userを指定して
接続に利用するユーザー名を指定している
指定しないと
環境変数のUSERの値を使うことになる
他には
rw
ro
などがあり
rwは、接続先を読み書き可能にして
roなら、読みとり専用になる
これで、ファイル共有がLinuxからでもできるけど
OSを再起動したら、またコマンドで接続
というのは面倒なので
OS起動時に自動接続されるように
/etc/fstab
を編集する
ただし、設定を失敗するとOSが起動しなくなるため
最初は仮想マシンで練習したほうが無難
書き方は
//IPアドレス/共有ディレクトリ名 /mnt cifs username=ユーザー名 0 0
あと、LinuxからNFS領域を利用するなら
mount -t nfs NFSサーバーのIP:/NFSで公開しているディレクトリ /mnt
となる
例えば
mount -t nfs 192.168.10.100:/nfs /mnt
なら
/mntに
192.168.10.100の
/nfsディレクトリが
自ホストの/mntへ接続される
接続の解除は、umountコマンドで行う
umount /mnt
ただし、ファイル共有ディレクトリを利用中のユーザーがいると
接続の解除ができない
もし、他に使っているユーザーがいるなら
device is busy
と表示される
この場合
fuserコマンドを使うことで、利用中のユーザーを確認できる
fuser -m ファイル共有ディレクトリ名
このfuserコマンドを使うことで
どういう操作をしているかも把握できる
—
から送られてきた高速メモ帳
pingの許可設定
pingの許可設定
pingの許可設定は
CentOSなら
-A INPUT -p icmp -j ACCEPT
で許可されている
-A
で、このルールを適用するチェインを指定
-p
は、プロトコルを指定するオプション
-p icmp
なら
ICMPプロトコルを許可
-pで指定可能なパラメーターは
tcp
udp
icmp
all
のどれか
TCPかUDPの場合なら
–dport を指定する
これは、該当するプロトコルで使うポート番号の指定
-jで
作成したルールに一致したパケットをどう扱うか設定をする
ACCEPTなら許可
REJECTなら拒否
DROPならパケットを無視
これらの指定を組み合わせて、
パケットフィルターのルールを作成する
例えば、SSHの22番ポートのルール
-A INPUT -m state –state NEW -m tcp -p tcp –dport 22 -j ACCEPT
この場合
-m state
が接続状態を指定するオプション
–state で指定できるのは
NEW
ESTABLISHED
RELATED
INVALID
NEWは、
新規に着信したパケットに対するルールを指定
ESTABLISHEDは、
接続確率のために必要な応答と
過去に接続が確立しているセッションに対するルールを指定
RELATEDは、
接続が確立されているパケットにより
生成された新たなパケットに対するルールを指定
初期状態では
-A INPUT -m state –state ESTABLISHEd,RELATED -j ACCEPT
により
別のルールで接続成功した通信を継続できるようになっている
—
から送られてきた高速メモ帳
パケットフィルターのポイント
パケットフィルターのポイント
INPUT
OUTPUT
FORWARD
これらは iptablesで使われるチェイン
ACCEPT
DROP
チェインに設定できるルールに一致しないパケットの処理
-A REJECT –reject-with icmp-host-prohibited
ルールに一致しないパケットを拒否するルール
-p tcp , udp
ルールが適用されるTCP UDPに対する制御
–dport
ルールが適用されるTCP UDPのポート番号の指定
-j ACCEPT , REJECT , DROP
ルールに一致するパケットの取り扱いの指定
—
から送られてきた高速メモ帳
パケットフィルターについて
パケットフィルターについて
パケットフィルターとは、ファイアウォールの一種
パケットフィルターは端末にきたパケットの制御をする
ネットワークからの通信は
まずパケットフィルターで処理する
すべての通信は
パケットフィルターで処理される
パケットフィルターの初期設定では
外部ネットワークからサービスを利用できないようになっている
多くのLinuxでは、
パケットフィルターにiptablesを使う
iptablesに設定されているルールは
iptables -L
で確認することができる
また、OS起動時は、設定ファイルの内容に基づいてiptablesが設定される
CentOSなら
/etc/sysconfig/iptables
が設定ファイルになる
/etc/sysconfig/iptables
へ設定する場合
すべての設定を iptablesコマンドで行うか
/etc/sysconfig/iptables
をvim などで編集する
ただし、iptablesコマンドの設定の場合
service iptables save
などで設定しないと
再起動すると無効になるので注意
楽なのは、設定ファイルの
/etc/sysconfig/iptables
の編集
パケットフィルターでは、
INPUT
OUTPUT
FORWARD
のチェインが使える
チェインとは
パケットの通信方向の指定のこと
INPUT
端末に入っているパケットに対するルール
OUTPUT
端末から出て行くパケットに対するルール
FORWARD
端末を経由するパケットに対するルール
そして、各チェインにはポリシーを設定する
ポリシーとは
チェインのルールにマッチしなかったパケットに対しての動作
これは
ACCEPT 受付
DROP 破棄
の設定ができる
チェインのポリシーに
ACCEPTが設定されているなら
ルールにマッチしなかったパケットは許可される
DROPが設定されているなら
ルールにマッチしなかったパケットは破棄される
INPUT
OUTPUT
FORWARD
の初期値では、
すべてのポリシーにACCEPTが設定されているが
外部からのパケットが許可されているのは一部のポートだけ
これは、設定ファイルが影響している
/etc/sysconfig/iptables
を確認すると
-A INPUT -j REJECT -reject-with icmp-host-prohibited
という設定があり
この設定文で評価されるまでのルールへマッチしなかった通信は、
すべて拒否を返す
つまり、この設定文のチェックが行われた時点で通信は拒否され
ポリシーが適用されない
なので、この
-A INPUT -j REJECT -reject-with icmp-host-prohibited
の文の前に許可するようにすることで
使えるポートの設定をする
また、ポリシーの記載を
DLOPというようにスペルミスすると
これはACCEPT扱いになる
ちなみに、ルールそのものが間違っていると
iptablesの再起動したときにエラーが起きる
routeコマンド
routeコマンド
routeコマンドで
PCに設定されているネットワークに対する接続の設定を表示できる
設定が適切でないと
外部ネットワークに対する出口を判別できず
ルータの内側から外部ネットワーク
へ接続できない
ゲートウェイの値は
routeコマンドで確認できる
routeコマンドの結果の
Destinationは、宛先アドレス
Gatewayは、ルータのアドレス
Genmaskは、ネットマスク
Flagsは、設定の追加情報になる
このFlagsの値がGなら
Gatewayへ指定されたアドレスの機器を経由して通信するということになる
Ifaceは、通信に利用するネットワーク機器で
LANケーブルの口が複数あるときに使う
Destinationが
0.0.0.0
となっているのがデフォルトゲートウェイ
これが適切なルータへ設定されてないとルータの外側への通信ができない
Gatewayが0.0.0.0となっている設定では
FlagsにGが表示されない
Gatewayが
0.0.0.0に設定された行は
ゲートウェイを使わずに通信するという意味で
ルータの外側に対して通信を行わない
端末のIPアドレスが正しく設定できていても、
ルーティング設定が間違っていると
外部ネットワークへ通信できない
このため
外部ネットワークへ繋がらないときには
routeコマンドで内容を確認することになる
—
から送られてきた高速メモ帳
pingについて
pingについて
ping はICMPプロトコルを使う
これは、宛先のIPへ
Echo Message
というメッセージを発信する
そして、相手機器から
Echo Reply Message
が返信されれば
自ホストと相手先のIPがつながっていることになる
次に、ifconfig
これは、ネットワークアダプターが
認識されているか、そして
現在のIPやネットマスク設定値を、確認できる
ifconfigを実行すると
inet addrへIPアドレス
MASKにネットマスクが表示される
また、DHCPを使っていて
IPが 169.254 の場合
DHCPからIPを取得できていない
この169.254は、
DHCPからIPを取得できていないときに利用されるIPで
DHCPでIPが取得できなかった時に端末同士で接続するのに使う
もし、ifconfig -a
ですべてのネットワークを表示しても
eth0
em1
に何も表示されないなら、ネットワークカードを認識していない可能性がある
—
から送られてきた高速メモ帳