LPIC・システムアーキテクチャ

個人的なメモです。

##ハードウェアの構成と管理

###☆ハードウェア情報を表示するコマンド

####lspciコマンド
システムのすべてのPCIバスと、接続されているデバイスに関する情報を表示する

| 主なオプション  | 説明 | 
|:-----------:|:------------:|
| -s | 特定のバス、デバイス、機能を指定 | 
| -v | 詳細情報を表示 |

####lsusbコマンド
USBバスと、接続されているデバイスに関する情報を表示する

| 主なオプション  | 説明 | 
|:-----------:|:------------:|
| -t | USBデバイスの物理的な階層構造を表示 | 
| -s | 「Bus番号:デバイス番号」により表示するデバイスを指定 |
| -v | 詳細情報を表示 |

####lsmodコマンド
現在システムにロードされているモジュールの状態を表示
**/proc/modulesファイル**の内容が読み込まれて表示される

####modprobeコマンド
指定されたモジュールの依存関係を確認し、必要なモジュールを自動的に追加、もしくは削除する
**insmodコマンド**もモジュールをロードするが、モジュールの依存関係を考慮しない

| 主なオプション  | 説明 | 
|:-----------:|:------------:|
| -r,--remove | モージュールを削除する | 
| --show-depends | モージュールの依存関係を列挙する |
| -c,--showconfig | 設定ファイルの内容を表示する |

###☆重要な/proc配下ファイル

| 主なオプション  | 説明 | 
|:-----------:|:------------:|
| /proc/cpuinfo | CPUの情報を格納したファイル | 
| /proc/interrupts | (※)**IPQ**などの(※)**インタラプト**の情報を格納したファイル |
| /proc/ioports | デバイスの制御とデータの受け渡しを行うI/Oポートのアドレスを格納したファイル |

※**IRQ(Interrupt ReQuest)**･･･割り込み要求．周辺デバイスがCPUを呼び出すための信号．この信号を使ってデバイスがCPUを呼び出すと，CPUは処理を中断して所定の割り込み処理ルーチンを実行する

※**インタラプト(interrupt)**･･･ただいま実行されている処理を、一時的に中断して、より優先される別の処理を行うこと。デバイスがシステムに処理を要求するときに割り込み要求IPQを発行することにより起こる

##システムのブートシーケンス
電源を入れてからログイン画面もしくはログインプロンプトが表示されるまでのOSが稼働するために必要なすべての設定の一連の流れのことを**ブートシーケンス**という

ブートシーケンスの構成内容は以下のようになっている

**①BIOS/UEFI**
**②ブートローダ**
**③カーネル**
**④systemd**

###☆①BIOS/UEFI
・PCの電源を入れると最初にBIOS/UEFIが起動する
・ハードウェアのチェックや初期化を行い、ディスクに書き込まれたブートローダを読み出した後、ブートローダに制御を移す

####BIOS
**MBR**(ディスクの先頭ブロック)に書き込まれたブートローダをメモリにロードする
基本的なハードウェアの制御を行っており、OSをインストールしなくても画面に入ることができる

**MBR**･･･基本パーティション4つ。パーティション情報はディスクの先頭セクタに格納

####UEFI(Unified Extensible Fireware Interface)
UEFIブートエントリで指定された**EFI**システムパーティション中のブートローダをメモリにロードする
BIOSと違いGUIでも操作できる

**EFI**･･･BIOSに代わるファームウェア規格で、機能が拡張されたもの。UEFIはEFIから名前が変わったもので、同じ意味を指す

| 各種類 | パーティション数 | パーティション情報 | 最大容量 | 
|:-----------:|:------------:|:------------:|:------------:|
| MBR(Master Boot Record) | 基本パーティションを4個 | ディスクの先頭セクタに格納 | 2TiB |
| GPT(GUID Partition Table) | パーティションを128個 | ディスク2番目のセクタのGPTヘッダと、3番目のセクタから始まる32個のセクタに格納 | 9.4TiB |

###☆②ブートローダ
・ハードティスク等からOSを起動するためのプログラム
・Linuxの主なブートローダとして**GRUB(GRand Unified Bootloder)**や、**GRUB2**がある

####GRUB
設定ファイルは、**/boot/grub/grub.conf**または、**/boot/grub/menu.lst**ファイル
ブート時にカーネルに渡された引数を確認できるファイルは**/proc/cmdline**ファイル

**grub-installコマンド**･･･GRUBをインストールするコマンド

####GRUB2
GRUB Legacyの後継として開発されたブートローダ

| 主なディレクトリと設定ファイル | 説明 | 
|:-----------:|:------------:|
| /boot/grub | 設定ファイルとモジュールの置かれたディレクトリ。ディストリビューションによっては、/boot/grub2 |
| /boot/grub/grub.cfg | 設定ファイル。ディストリビューションによっては、/boot/grub2/grub.cfg |
| /usr/lib/grub/i386-pc | モジュールの置かれたディレクトリ。この下のモジュールがGRUB2のインストール時に/boot/grubの下にコピーされて使用される |
| /etc/grub.d | 設定ファイルgrub.cfgの生成時に実行されるスクリプトが置かれたディレクトリ |

※ディストリビューション･･･Linuxの配布形態のこと。Linuxの主なディストリビューションとして、Turbolinux、Vine Linux、Red Hat Linux、Debian GNU/Linuxなど

**grub-mkconfigコマンド**･･･設定ファイルgrub.cfgを生成するコマンド

###☆③カーネル
・OSの中核であり、 システムのリソースを管理し、ハードウェアとソフトウェアコンポーネントのやりとりを管理する
・カーネルを起動したあと、ルートファイルシステムをマウントするために**initramfs**というイメージファイルを使用する

####initramfs
現在Linuxでもっとも使われている(※)**ミニルート**の(※)ファイルフォーマットの1つ
(※)ファイルシステムをcpio形式でアーカイブしたうえで、gzipで圧縮したファイル

※**ミニルート**･･･メモリ上に展開可能な、小さなサイズの(※)ルートファイルシステム。ミニルートには、ルートファイルシステムをマウントするために必要な(※)カーネルモジュールや(※)スクリプトが保存されており、ブートローダーはカーネルと一緒にこのミニルートをメモリ上に展開し、カーネルにそのアドレスを伝える。カーネルはそのアドレスを元にミニルートをマウントし、その中にあるスクリプトを実行することで本来のルートファイルシステムをマウントする

※ファイルフォーマット･･･コンピュータ上のデータをどのように扱うかを定めた規約のこと

※カーネルモジュール･･･カーネルで動的に追加されるプログラム部品（モジュール）。通常、カーネルを形成しているプログラムに機能を追加しようとする場合には、カーネルを再構築する必要がある。その点、カーネルモジュールを用いると、必要に応じて動的に機能を追加することができるようになる

※スクリプト･･･プログラムの種類の一つで、人間が読み書きしやすいプログラミング言語で書かれたプログラム（ソースコード）を即座に実行できるようなもの

※ルートファイルシステム･･･(※)ファイルシステムの最上位に位置し、/(ルート)ディレクトリを格納する。耐障害性、保守性を高めるため通常は複数のパーティションを用意して、各パーティションに/home、/varなどのディレクトリを割り当てる

※ファイルシステム･･･OSが提供する機能の一つで、記憶装置に保存されたデータを管理し、操作するために必要な機能

####dmesgコマンド
カーネルが起動時に出力したメッセージを表示するコマンド
RedHat系では**/var/log/dmesg**ファイルにこれらのメッセージが格納される

###☆④systemd
・**SysV init**に代わる起動処理やシステム管理を行う仕組み
・**ユニット(unit)**によってシステムを管理する

####ユニット(unit)
systemdの管理対象となる処理の単位
**systemctlコマンド**によって設定や表示などほとんどすべての管理ができる

**systemctlコマンド**･･･systemdを操作するコマンドで、サービスの起動や停止、状態確認などを行う

| 主なサブコマンド | 説明 | 
|:-----------:|:------------:|
| start | ユニットを開始する |
| restart | ユニットをリスタートする |
| stop | ユニットを停止する |
| status | ユニットの状態を表示する |
| enable | システム起動時にユニットは自動的に開始しない |
| disable | システム起動時にユニットは自動的に開始しない |
| list-units | アクティブなユニットをすべて表示する |
| list-unit-files | インストールされているすべてのユニットを表示する |

**ターゲット**･･･複数のユニットをグループ化したユニットであり、SysV initのランレベルに相当

| 主なターゲット | 説明 | SysV ランレベル | 
|:-----------:|:------------:|:------------:|
| default.target | システム起動時のデフォルトのターゲット | - |
| sysinit.target | システム起動時の食段階のセットアップを行うターゲット | - |
| rescue.target | 障害発生時やメンテナンス時に管理者が利用するターゲット | 1 |
| multi-user.target | テキストベースでのマルチユーザのセットアップを行うターゲット | 3 |
| graphical.target | グラフィカルログインをセットアップするターゲット | 5 |

####SysV init
**/etc/inittab**ファイルに記述された**ランレベル**をもとに、initプロセスがサービスを起動する

**ランレベル**･･･システムの動作モードのこと

| 主なランレベル | サービス | 説明 | 
|:-----------:|:------------:|:------------:|
| 0 | 停止 | システムの停止 |
| 1 | シングルユーザ | rootだけログイン可能。システムのメンテナンスで使用される |
| 3 | マルチユーザ | rootだけでなく一般ユーザもログイン可能。コンソールに表示されたログインプロンプトからログインする |
| 5 | マルチユーザ+GUI画面 | ディスプレイマネージャのログイン画面からX Windows Systemにログインする |
| 6 | 再起動 | システムの再起動 |

#####システム稼働状態の変更コマンド
**initコマンド**･･･プロセス制御・ランレベルを変更するコマンド

**telinitコマンド**･･･initに指示を与えてランレベルを変更するコマンド

**shutdownコマンド**･･･ログインしているすべてのユーザに対し、システム状態の変更通知が行われ、さらに変更までの猶予時間の設定が可能

| 主なオプション | 説明 | 
|:-----------:|:------------:|
| -r | システムを再起動(ランレベル6)する |
| -h | システムを停止(ランレベル0)する |

####その他コマンド

**unameコマンド**･･･カーネルバージョンうやマシンアーキテクチャなどのシステム情報を表示するコマンド

| 主なオプション | 説明 | 
|:-----------:|:------------:|
| -m | マシン(ハードウェア)のタイプを表示する |
| -n | マシンのネットワークホスト名を表示する |
| -r | OSのリリースを表示する |
| -s | OSの名称を表示する |
| -v | OSのバージョンを表示する |
| -a | 情報すべてを表示する |

※オプションを指定しない場合は、-sオプションと同様の項目を表示

**wallコマンド**･･･全員の端末にメッセージを送ることができるコマンド

**uptime,w,topコマンド**･･･システム(OS)の稼働時間を表示するコマンド

| コマンド | 説明 | 
|:-----------:|:------------:|
| uptime | 現在時刻、システム起動からの時間、システム上にいるユーザ数、システムの平均負荷が順に表示される |
| w | ログインしている人とその人がしていることを表示する。ヘッダにはuptimeと同じ内容が表示される |
| top | プロセスの情報を周期的にリアルタイムに表示する。1行目にはuptimeと同じ内容が表示される |