Linuxの基本(その6)プロセス・ネットワーク

目次
  1. プロセス
    1. ブートプロセス
    2. プロセス管理
  2. ネットワーク
    1. IP(TCP/IP )
    2. IPアドレス
      1. IPv4アドレス
      2. IPv6アドレス
    3. 経路とルーティング
    4. 名前解決

プロセス

プロセスは、メモリで実行中のプログラムです

ブートプロセス

電源を入れた後、システムの初期化が行われ、OSが起動します

  1. 電源オン
  2. 「BIOS または UEFI」の起動とハードウェアの初期化
  3. ブートローダー(ブートローダーとして主にGRUBが採用されている)の起動
    起動中にカーネルを選択(カウントダウン終了するとデフォルトのカーネルが選択して起動します)
    ブートローダーは、OSをメインメモリーに読み込む役割があります
  4. カーネルの起動(Initramfsが起動され、最低限必要なファイルをマウントして、ファイルにアクセスできるようになります)
    *ファイルシステム上のファイルにアクセスするには、ファイルシステムをマウントする必要があります
    Initramfsはファイルシステムをマウントするために必要なカーネルモジュールやスクリプトが保存されているイメージファイルです
  5. プロセスの起動 (Initramfsの中のあるsystemdを読み出し、起動します)

systemdはシステム稼働に必要な子プロセスを順に生成します
設定ファイルに従ってシステムを初期化し起動をします、
設定ファイルはユニット(unit)と呼ばれ、用途ごとにまとめられ12ユニットあります
Serviceユニット:起動と停止
Targetユニット:ユニットをグループ化したもので、起動状態を制御
*ちなみに、起動時に最初に生成されるプロセスになりPIDは必ず1で、デーモンとしてメモリに常駐します

ユニットのファイル名はユニット名.ユニットタイプです(例:httpd.service)
ユニットファイルは/usr/lib/systemd/system/etc/systemd/systemに格納されています

systemdはdefault.targetの設定に従ってシステムを起動します
default.targetは一般的にはgraphical.target(GUI)またはmulti-user.target(CUI)へのシンボリックリンクになっています

ターゲット起動モード
poweroff.targetシステムの停止
rescue.targetシングルユーザーモード(レスキューモード)
いわゆるセーフモードでrootでしかログインできません
multi-user.targetマルチユーザモード
graphical.targetグラフィカルモード
reboot.targetシステム再起動

systemctlコマンドはsystemdを使ってサービスの起動・停止・設定・状態の確認などに使います

#activeユニット一覧
systemctl
#全てのユニット一覧
systemctl -a
#起動できるサービス一覧
systemctl list-unit-files -t service
#開始
start	
#停止
stop

#状態表示
#起動設定がenabledまたはstaticは自動で起動、disabledは自動で起動しません
status

#デフォルトのターゲット確認
systemctl get-default
#デフォルトのターゲット変更
systemctl get-default ターゲット

代表的なserviceユニット

  • httpd.service:Webサービス
  • sshed.service:SSHサービス
  • firewalld.serice:ファイアウォールサービス
  • crond.service:cron(ジョブスケジューリング)サービス

ランレベルについて
ランレベルは、systemd以前のinitで使われているinitプロセスの動作モードのことです
余談:CentOS 7 から、これまでのサービス管理である initか systemdへ移行されました

  • ランレベル0:システムの停止
  • ランレベル1:シングルユーザーモード
  • ランレベル2:マルチユーザーモード(NFSなし)
    NFS(ネットワークファイルシステム)はネットワーク上のコンピュータ同士がファイル共有するためのプロトコルです
  • ランレベル3:マルチユーザーモード
  • ランレベル5:グラフィカルモード(GUIモード)
  • ランレベル6:システムの再起動

* 4は未使用です

#現在どのランレベルで動作しているか
#1つ前のランレベルと現在のランレベルを表示 
#システム起動後にランレベルが一度も変更されていない場合に「N」
runlevel
#ランレベルを変更はinitまたはtelinit
init 1

CUIモードでシステムの停止と再起動(指定して時刻に)
now :今すぐ
n:n分後
hh:mm:hh時mm分

#システムの停止
shutdown -h 時刻
#システムの再起動
shutdown -r 時刻
#システム停止・再起動の取り消し
shutdown -c

プロセス管理

実行中のプロセスの状況はpsコマンドで表示します
*psコマンドのオプションは-をつけないものがあり、そちらが主流

#psコマンドが実行された瞬間のプロセスの表示
ps
#全ユーザのプロセスを詳細情報(CPUやメモリの使用率など)を含めて表示
ps aux
#サービスの全てのプロセス表示
ps ax サービス名

ジョブとは、まとめて実行されるプロセスの集まりのことです
シェルで実行するときの1行、ジョブはジョブを実行するときのシェルで管理されます
例:ps aux | grep bash | less

*バックグラウンド(シェルの画面外)に切り替える時は、ジョブIDを指定します
バックグラウンドでコマンドを実行するときはコマンドの後にスペースで&( コマンド名 &
長い処理をバックグラウンドで実行することで、処理の終了を待つ必要がなくなります

ちなみにフォアグラウンドでは画面内で対話的に操作します

fg・bgコマンドでジョブの状態を変更します

  • フォアグラウンド→プログラムの停止:Ctrl+z
  • 停止→バックグラウンド:bgコマンド
  • 停止→フォアグラウンド:fgコマンド
    バックグラウンド→フォアグラウンド:fgコマンド
#現在のジョブの一覧を表示
jobs
#ジョブをフォアグラウンドで実行
fg %ジョブID
#ジョブをバックグラウンドで実行
bg %ジョブID

killコマンドは停止中やバックグラウンドで実行中のプロセスやジョブを終了します
*フォアグラウンドはCtrl+cで終了します

#ジョブの終了
kill %ジョブID
#プロセスの終了
kill プロセスID(PID)

# ジョブ強制終了
kill -SIGKILL %ジョブID
# プロセス強制終了
kill -SIGKILL プロセスID

ネットワーク

複数の機器をつなげるて情報をやりとりをするには、プロトコル(通信の規約)・IPアドレスやMACアドレス・ポート番号 (プログラムを識別するための番号)が必要です

IP(TCP/IP )

IPは目的の機器までパケットを届けるプロトコルです

pingコマンド:ネットワーク上の機器にパケットを送り、データの送信と返信ができているかを確認できます
*-cオプションで回数を指定しない場合、連続して実行するので「Ctrl+C」で停止します
IPv6ではping6コマンド

ping IPアドレスまたはホスト名

ip a:IPアドレスの確認

ip a
//mac は ifconfig

備考:ポート番号
0~1023までのポート番号は「well-knownポート」(HTTPの80番、FTPの20・21番、SMTPの25番、POP3の110番、DNSの53番など)
新しいプロトコルやサービスは1024~65535まで利用することが慣例となっています

/etc/servicesファイル

ポート番号とサービス(またはプロトコル名)を対応させるファイル

*インストールが必要
nmapコマンド :オープンしているポートの状況を表示

nmap ホスト名

IPアドレス

IPアドレスはネットワークインタフェースカード(NIC)に紐づけられます

ip l : MACアドレスやネットワークインターフェースの状態確認

ip l 
//lo :ループバックアドレス

IPv4アドレス

IPv4アドレスは、32ビットのアドレスで、8ビットごとに区切って10進数表記です

グローバル IPアドレス(他のネットワークと識別するため)と
プライベートIPアドレス(ネットワーク内の機器を識別するため)があります

ネットワーク部とホスト部

  • ネットワーク部は、「そのネットワーク」の外から「そのネットワーク」を識別するため
  • ホスト部は、同じネットワークのホスト(機器)を識別するため

ネットワーク部とホスト部の分け方(ホストの数に応じて)
*どこで区切るかという情報がサブネットマスクです
サブネットマスクは、ネットワーク部の範囲は「1」ホスト部の範囲を「0」

クラスで分ける
「クラスA(サブネットマスクは 255.0.0.0)」 「クラスB(255.255.0.0)」 「クラスC(255.255.255.0)」 など
*備考プライベートIPアドレスのクラスについて
クラスA :10.0.0.1 ~ 10.255.255.254 (ホスト16777214台)
クラスB :172.16.0.1 ~ 172.31.255.254 (ホスト65534台)
クラスC:192.168.0.1 ~ 192.168.255.2541 (ホスト254台)

CIDR
クラス分けを廃止して「198.51.100.0/28」のようにCIDR表記で/28でサブネットマスクの情報を表します
柔軟にネットワークを区切ることができます

特殊なIPアドレス

  • ネットワークアドレス:ホスト部が全て0のアドレスで、ネットワークそのものに付与されるアドレスです(接続された機器に付与できません)
  • ブロードキャストアドレス:ホスト部が全て1のアドレスで、同じネットワーク内のすべてのホストを指します(全ホストに通信するときのあて先になります)
  • ローカルループバックアドレス:127.0.0.1自分自身を指しているアドレスです(localhost

IPv6アドレス

IPv6アドレスは、128ビットのアドレスで、16bitごとにコロン( : )で区切り、16進数表記(0~9A~F)

省略表記

  • ブロックの先頭の連続する「0」は省略可能
  • 「0000」は「0」に省略可能
  • 連続した「0000」のブロックは1回に限り「::」に省略可能

グローバルユニキャストアドレス(インターネット上で一意のアドレス)
ユニークローカルユニキャストアドレス(LAN内でのみ一意のアドレス)
リンクローカルユニキャストアドレス(1つのルータを超えない範囲内でのみ一意のアドレス)があります

プレフィックスとインターフェースID

  • プレフィックスは、IPv4のネットワーク部でアドレスにより異なります
  • インターフェースIDは、IPv4のホスト部

*DHCPサーバ(コンピュータにIPアドレスを自動割り当てする仕組み)などを用意しなくてもIPアドレス自動設定機能があり、パケットのヘッダ形式も単純化されているそうです
ブロードキャストアドレスは存在しません

経路とルーティング

「LANとLAN」「 LANとWAN」は「ゲートウェイ」で接続されています
ゲートウェイでは、データを隣のネットワークへ転送し、目的地までいくつものゲートウェイを通ってデータが送受信されます

tracerouteコマンド:経路を調べる

traceroute ホスト
//例 traceroute google.com

ホストやルーターにはルーティングテーブル(ルーティングのための情報)が格納されています

ip r :ルーティングテーブルを表示

ip r
//default デフォルトゲートウェイ(宛先ネットワークがないとき)
//行頭は宛先ネットワーク
//via:次に経由するゲートウェイ
//dev:送信デバイス

名前解決

/etc/hostsファイル(*mac:/private/etc/hosts)

FQDNとIPアドレスの紐づけが格納されているファイル
1行目は127.0.0.1(ループバックアドレス)
*ホスト名(コンピュータの名前)とドメイン名をFQDNと呼びます(*FQDNのことをホスト名ということもあります)
*名前解決 :ホスト名からIPアドレス(正引き)IPアドレスからホスト名(逆引き)

名前解決には「hostsファイルを参照」する場合と「DNSサーバを参照」する場合があります

hostnameコマンド

//ホスト名を表示
hostname
//ホスト名を変更
hostname 変更するホスト名

/etc/resolv.confファイル

DNSサーバでの名前解決時にリゾルバ(名前解決のためのプログラム)が参照するファイル

hostコマンド:名前解決の確認

host IPアドレスまたはホスト名

hostコマンドのオプション

  • -t:検索タイプを指定
    • a : Aレコード → IPv4アドレス
    • ins : NSレコード(ネームサーバ )
    • mx : MXレコード(メールサーバ )
    • soa : SOAレコード(ゾーンの権威情報)
  • -C : SOAレコードを表示 検索タイプ
host -t a IPアドレスまたはホスト名
host -C IPアドレスまたはホスト名