3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Linux基礎

Last updated at Posted at 2019-09-09

#ハードウェアの基本知識と設定
##デバイス情報の確認
Linuxは、ハードウェアのアクセスを抽象化するデバイスファイルを持っている。全てのハードウェアはデバイスファイルとして表され、デバイスファイルの読み書きを通してハードウェアにアクセスできるように設計されている。デバイスファイルは「/dev」ディレクトリ配下にある。これらのデバイスファイルは、udev(Userspace DEVice management)という仕組みによって自動生成される。


$ ls /dev

Linuxカーネルが認識しているデバイスに関する情報は、「/proc」ディレクトリ配下のファイルで確認できる。

ファイル名 説明
/proc/cpuinfo CPU情報
/proc/interrupts IRQ情報
/proc/ioports I/Oアドレス情報
/proc/meminfo メモリ情報
/proc/bus/usb/* USBデバイス情報
/proc/bus/pci/* PCIデバイス情報

##udev
/devディレクトリ配下のデバイスファイルは、udevという仕組みによって自動的に作成される。
udevの仕組みでは、デバイス(ハードウェア)を接続されると、カーネルがそれを検知し、/sysディレクトリ以下にデバイス情報を参照して、/devディレクトリ配下にデバイスファイルを作成する。その際に、「/etc/udev/rules.d」ディレクトリ配下の設定ファイルが使われる。設定ファイルを編集することで、例えばあるUSBメモリを「/dev/usbmemory」とする、といったように、特定のハードウェアを任意の名前のデバイスファイルとして扱えるようにすることもできる。

##デバイスドライバのロード
デバイスを利用するために必要な制御プログラムをデバイスドライバという。Linuxでは、デバイスドライバはカーネルの一部(カーネルモジュール)として提供されている。必要なデバイスドライバをカーネルに取り込むことを「ロードする」という。


# ロードされているカーネルモジュールを確認するコマンドは以下。
$ lsmod

# 手動でデバイスドライバをロードする場合のコマンド ※必要なデバイスドライバは自動的にロードされる
$ modprobe e 1000

#Linuxの起動とシャットダウン

システムが起動するまでの流れ

  1. 電源ON
  2. BIOS/UEFI起動(ハードウェアのチェック・初期化)
  3. ブートローダ起動
  4. カーネル起動
  5. init/systemd起動

※上記のようなシステムが起動するまでの処理の流れを、ブートまたはブートストラップという。

ブートローダー|
起動デバイス上からカーネルをメモリ上へ読み込む役割を担う

カーネル|
メモリの初期化やシステムクロックの設定などを行い、仮のルートファイルシステム(initamfs:初期RAMディスク)をマウントする。初期RAMには、システムの起動に必要なデバイスドライバが組み込まれており、これを使ってハードディスク等のデバイスへアクセスできるようになる。ルートファイルシステムが使えるようになると、カーネルは最初のプロセスであるinit(またはsystemd)プロセスを実行する。initは必要なサービスを順次起動していき、最後にログインプロンプトを表示して起動処理を完了する。

##起動時のイベント確認
dmesgコマンドを使うと、システム起動時にカーネルがどのような処理を行ったか確認することができる。
dmesgコマンドは、カーネルが出力したメッセージを一時的に蓄えて奥バッファの内容を表示する。システムが起動した後もカーネルが出力するメッセージが蓄えられていくため、バッファに収まりきらなくなった古いメッセージは消えていく。

$ dmesg

##システムのシャットダウンと再起動
shotdownnコマンドの主なオプション

オプション 説明
-h シャットダウンする
-r シャットダウン後にシステムを再起動する
-f 次回起動時にfsckをスキップする(-hまたは-rと組み合わせて利用する)
-F 次回起動時にfsckを必ず実行する(-hまたは-rと組み合わせて利用する)
-k シャットダウンせず警告メッセージを通知する
-c 現在実行中のシャットダウンをキャンセルする

#Linux起動の仕組み
システムの電源を入れてからLinuxが起動する手順は、これまでUNIX系OS全般で広く使われてきたSysVinit(System Five Init)が主流だった。現在では、systemdという新しい起動の仕組みが主流になってきている。
##SysVinit
SysVinitでは、Linuxシステムで最初に実行されるプロセスであるinitが、/etc/inittabファイルの設定に従い、システムに必要なサービスを順次起動していく。

  1. initが「/etc/inittab」ファイルを読み込む
  2. initが「/etc/rc.sysinit」スクリプトを読み込む
  3. initが「/etc/rc」スクリプトを実行する
  4. 「/etc/rc」スクリプが「/etc/rc<ランレベル>.d」ディレクトリ配下のスクリプトを実行する

SysVinitでは、あらかじめ決められた順にサービスが起動していくため、あるサービスの起動に手間取ると、それ以後に起動するサービスが待たされてしまい、最終的な起動完了まで時間がかかってしまう。そのため、現在では多くのディストリビューションがsystemdやUpstartといった新しい仕組みに切り替えている。

##systemd
systemdを採用したシステムでは、initプロセスの代わりにsystemdプロセスが起動し、各種サービスを管理する。systemdでは、以下のような複数のデーモンプロセスが連携して動作する。

プロセス名 説明
systemd systemdのメインプロセス
systemd-journald ジャーナル(ログ)管理プロセス
systemd-logind ログイン処理プロセス
systemd-udevd デバイス動的検知プロセス

systemdでは、システムの起動処理は多数のUnitと呼ばれる処理単位に分かれている。Unitには、あるサービスを起動するUnitや、ファイルシステムをマウントするUnitなどがある。Unitは、いくつかの種類に分類でき、拡張子で種類を区別できる。

▼Unitの主な種類

拡張子 説明
service 各種サービスを起動する
device 各種デバイスを表示する
mount ファイルシステムをマウントする
swap スワップ領域を有効にする
target 複数のUnitをグループ化する

###systemdの起動手順
systemdは、サービスAを起動するには先にサービスBを起動する、といった各種サービスの依存関係や順序関係を処理できる。SysVinitでは、サービスは順次起動していくため、デフォルトで起動するよう設定されたサービスは、その時点では必要がなかったとしても起動される。また、起動途中でサービス起動処理が遅滞すると、次のサービス起動処理が待たされてしまう。結果として、システム全体の起動時間が長くなる。systemdでは、必要なサービスのみが起動する。また、サービスの起動は並列的に行われるので、システムの移動はSysViitに比べて短縮される。

###systemctlによるサービスの管理
systemdでサービスを管理にするには、systemctlコマンドを使う。

サブコマンド 説明
start サービスを起動する
stop サービスを終了する
restart サービスを再起動する
reload サービスの設定を再読み込みする
status サービスの稼働状況を表示する
is-active サービスが稼働しているかどうかを確認する
enable システム起動時にサービスを自動起動する
disable システム起動時にサービスを自動起動しない
list-unit-files 全てのUnitを表示する
reboot システムを再起動する
poweroff システムをシャットダウンする

Unitの設定ファイル
「/etc/systemd/system/multi-user.target.wants/」ディレクトリ配下にある

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?