1. システムアーキテクチャ
1.1 ハードウェアの基礎知識と設定
1.1.1 基本的なシステムハードウェア
- CPU
Intel系 x86等, 組み込み系 ARM等
- メモリ
多ければ多いほど、多くのアプリケーションが動作
- ハードディスク
HDDからより高速な読み書き可能なSSD
- 入力装置
- 拡張カード
NIC、サウンドカード, SCSIカード等。コールドフラグ
- USB機器
ホットフラグ
1.1.2 BIOS/UEFI
BIOS(Basic Input Output System)の役割
- OSが気動するためのプログラムをディスクから読み込んで実行する
- デバイスの動作を確認する
- 基本的な入出力を制御する
UEFI(Unified Extensible Firmware Interface) <- BIOSの後継
BIOSセッティング画面を表示するには一般的には
F1やF2、Deleteキーなどを起動画面で押す
セットアップで設定可能な項目
- 日付や時刻(ハードウェアクロック)
- ディスクドライブや各種デバイスのパラメータ
- キーボードの使用/不使用
- 電源管理
- 起動ドライブの順序
- デバイスへのIRQ(Interrput Request: 割り込み要求)の割り当て
- 各種デバイスの使用/不使用
1.1.3 デバイス情報の確認
デバイスファイル確認
$ ls /dev
デバイスに関する情報
- CPU情報
$ cat /proc/cpuinfo
- IRQ情報
$ cat /proc/interrupts
- I/Oアドレス情報
$ cat /proc/ioports
- メモリ情報
$ cat /proc/meminfo
- USBデバイス情報
$ cat /proc/bus/usb/*
$ lsusb -v
- PCIデバイス情報
$ cat /proc/bus/pci/*
$ lspci -vv
1.1.4 USBデバイス
- 最大127台までのUSBデバイスを接続可能
- さまざまなUSBデバイスを同一のコネクタで接続可能
- 電源を入れたままでの接続・取り外しに対応(ホットプラグ)
- プラグ&プレイをサポート
- USBポートからUSBデバイスに電源を供給可能
USBのバージョン
| バージョン | 最大データ転送速度 |
|---|---|
| USB 1.0 | 12Mビット/秒 |
| USB 1.1 | 12Mビット/秒 |
| USB 2.0 | 480Mビット/秒 |
| USB 3.0 | 5Gビット/秒 |
| USB 3.1 | 10Gビット/秒 |
1.1.5 udev(Userspace DEVice management)
デバイスが接続されると、カーネルがそれを検知し、/sysディレクトリ以下にデバイス情報を作成する。
udevデーモンは、そのデバイス情報を参照して、/devディレクトリ以下にデバイスファイルを作成する。その際に/etc/udev/rules.dディレクトリ以下の設定ファイルが読み込まれる。
1.1.6 デバイスドライバのロード
デバイスを利用するために必要な制御プログラムを_デバイスドライバ_という。
- カーネルモジュールの確認
$ lsmod
- 手動でデバイスドライバをロードする
# modprobe e1000
1.2 Linuxの起動とシャットダウン
1.2.1 システムが気動するまでの流れ
* コンピューターのアーキテクチャによって異なる
- BIOS/UEFI
- ブートローダー
- カーネル
- init/systemd
1.2.2 起動時のイベント確認
$ dmesg
ログ
以下のログでも確認できる
- /var/log/messages
- /var/log/dmesg
- /var/log/booot.log
1.2.3 システムのシャットダウンと再起動
shutdownコマンド
| オプション | 説明 |
|---|---|
| -h | 時間を指定してシャットダウン |
| -r | 再起動 |
| -f | 次回起動時にfsckをスキップする |
| -F | 次回起動時にfsckを必ず実行 |
| -k | 実際にシャットダウンをせず、警告メッセージを通知 |
| -c | 現在実行中のシャットダウンをキャンセルする |
すぐにシャットダウン/再起動する
# shutdown -h now
# shutdown -r now
他のシャットダウンコマンド
# halt
# poweroff
他の再起動コマンド
# reboot
1.3 SysVinit(System Five Init)
現在ではsystemdが主流
1.3.1 SysVinitによる起動
- initが
/etc/inittabファイルを読み込む - initが
/etc/rc.sysinitスクリプトを読み込む - initが
/etc/rcスクリプトを実行する - /etc/rcスクリプトが
/ect/rc<ランレベル>.dディレクトリ以下のスクリプトを実行する
1.3.2 ランレベル
Red Hat, CentOS, Fedoraのランレベル
| ランレベル | 説明 |
|---|---|
| 0 | 停止 |
| 1 | シングルユーザモード |
| 2 | マルチユーザモード(テキストログイン、NFSサーバは停止) |
| 3 | マルチユーザモード(テキストログイン) |
| 4 | 未使用 |
| 5 | マルチユーザモード(グラフィカルログイン) |
| 6 | 再起動 |
| Sまたはs | シングルユーザモード |
Ubuntu, Debian, GNU/Linuxのランレベル
| ランレベル | 説明 |
|---|---|
| 0 | 停止 |
| 1 | シングルユーザモード |
| 2 | マルチユーザモード |
| 3 | マルチユーザモード |
| 4 | マルチユーザモード |
| 5 | マルチユーザモード |
| 6 | 再起動 |
| Sまたはs | シングルユーザモード |
シングルユーザモードはrootだけが利用できる
1.3.3 ランレベルの確認、変更
- 現在のランレベルを表示
# runlevel
- ランレベルを変更
# init 1
# tellinit 1
- ユーザの端末にメッセージを送る
$ wall "message"
1.3.4 起動スクリプトによるサービスの管理
例) httpdサービスの開始と終了
# /etc/init.d/httpd start
Starting httpd:
# /etc/init.d/httpd stop
Stopping httpd:
1.3.5 デフォルトのランレベルの設定
デフォルトのランレベルは/etc/inittabに記述されている
例) デフォルトのランレベルを5に変更する
id:5initdefault:
1.4 systemd
1.4.1 systemdの概要
systemd関連の主なデーモンプロセス
| プロセス | 説明 |
|---|---|
| systemd | systemdのメインプロセス |
| systemd-journald | ジャーナル(ログ)管理プロセス |
| systemd-logind | ログイン処理プロセス |
| systemd-udevd | デバイス動作検知プロセス |
systemdでは、システムの起動処理は多数のUnitと呼ばれる処理単位に分かれている。拡張子で区別できる。
Unitの主な種類
| 拡張子 | 説明 |
|---|---|
| service | 各種サービスを気動する |
| device | 各種デバイスを表す |
| mount | ファイルシステムをマウントする |
| swap | スワップ領域を有効にする |
| target | 複数のUnitをグループ化する |
1.4.2 systemdの起動手順
ランレベルとターゲットの対応
| ランレベル | ターゲット |
|---|---|
| 0 | poweroff.target |
| 1 | rescue.target |
| 2,3,4 | multi-user.target |
| 5 | graphical.target |
| 6 | reboot.target |
1.4.3 systemctlによるサービスの管理
# systemctl <サブコマンド> [Unit名] [-t 種類]
systemctlコマンドの主なサブコマンド
| サブコマンド | 説明 |
|---|---|
| start | サービスを気動する |
| stop | サービスを終了する |
| restart | サービスを再起動する |
| reload | サービスの稼働状況を表示する |
| status | サービスの稼働状況を表示する |
| is-active | サービスが稼働しているかどうかを確認する |
| enable | システム起動時にサービスを自動起動する |
| disable | システム起動時にサービスを自動起動しない |
| list-unit-files | すべてのUnitを表示する |
| reboot | システムを再起動する |
| poweroff | システムをシャットダウンする |