Linuxとは:カーネル、ディストリビューション、ファイルシステムをわかりやすく解説
Linuxはオープンソースのオペレーティングシステムのカーネルで、プロセッサ、メモリ、ディスク、ネットワークを管理します。カーネルにユーティリティ、パッケージマネージャ、初期化システムを加えたものがディストリビューションで、Ubuntu、Debian、Fedoraなどがあります。Linuxはほとんどのサーバー、コンテナ、クラウドで動作するため、Linuxを扱えることはDevOpsエンジニアや管理者の基本スキルです。
Linuxはオープンソースのオペレーティングシステムのカーネルで、これを土台にサーバー用、デスクトップ用、組み込み用の完全なシステムが作られています。「Linuxのサーバー」と言うとき、指しているのは1つのプログラムではなく、ディストリビューション、つまりカーネルとユーティリティ、ライブラリ、パッケージマネージャ、初期化システムを組み合わせたものです。ここでは、Linuxの実体と構成要素、そしてほぼすべてのDevOpsエンジニアにとって欠かせない理由を説明します。
Linuxはカーネルであり、システム全体ではない
厳密に言えば、Linuxはカーネル(kernel)のことです。カーネルは、ブートローダーの後に最初に起動し、コンピュータが動いている間ずっとメモリ上に常駐するプログラムです。プロセスへのCPU時間の割り当て、メモリの確保、ドライバを通じたディスクやネットワークカードの操作、アクセス権限のチェックを行います。
通常のプログラムがハードウェアを直接操作することはありません。たとえばエディタがファイルを保存するときは、システムコール(open、write、close)を発行します。そのデータをディスクのどのブロックに書くか、そしてそのプロセスにその権限があるかを決めるのはカーネルです。この分担によってシステムは安定します。1つのプログラムが異常終了しても、コンピュータ全体が落ちることはありません。
カーネルのバージョンは1つのコマンドで確認できます。
$ uname -r
6.8.0-45-generic
Linuxカーネルは1991年にLinus Torvaldsによって作られ、以来オープンに開発されています。ソースコードはGNU GPL version 2のもとで公開されており、誰でも読み、変更し、同じ条件で配布できます。
Linuxディストリビューションとは
カーネルだけでは不十分です。コマンドを入力するためのシェル、ファイルを扱うユーティリティ、ライブラリ、ソフトウェアのインストーラが必要です。基本的なユーティリティ(ls、cp、bash、grep)の多くはGNUプロジェクトが提供しているため、このシステムはGNU/Linuxと呼ばれることもあります。カーネルにこれらのツールを加え、一括でビルドしてテストしたものがディストリビューションです。
ディストリビューションの違いは主にパッケージマネージャ、アップデートの方針、想定する利用者にあります。
| 系統 | 例 | パッケージ | 主な用途 |
|---|---|---|---|
| Debian | Debian、Ubuntu、Linux Mint | .deb、apt | サーバー、クラウド、ワークステーション |
| Red Hat | RHEL、Fedora、Rocky Linux、AlmaLinux | .rpm、dnf | 企業向けサーバー |
| Alpine | Alpine Linux | apk | サイズの小さいDockerイメージ |
| Arch | Arch Linux、Manjaro | pacman | 上級者、新しいパッケージを求める人 |
どのディストリビューションを使っているかは /etc/os-release で確認できます。
$ cat /etc/os-release
PRETTY_NAME="Ubuntu 24.04.1 LTS"
NAME="Ubuntu"
VERSION_ID="24.04"
ID=ubuntu
ID_LIKE=debian
学習やサーバー運用には、Ubuntu LTSかDebianがよく選ばれます。ドキュメントが豊富で、ネット上の手順のコマンドがほぼそのまま使えるためです。
システムの構造:カーネル、シェル、ユーザー空間
Linuxは階層として考えると分かりやすくなります。一番下はハードウェア、その上にカーネル、さらに上にユーザー空間があり、システムサービス、ライブラリ(glibcなど)、アプリケーションが動きます。人間とシステムの間にあるのがシェルで、多くの場合は bash です。シェルがコマンドを受け取り、プログラムを起動します。
- カーネル:プロセス、メモリ、ファイルシステム、ネットワーク、ドライバ。
- 初期化システム:PID 1 のプロセスで、現代的なディストリビューションの多くでは
systemdです。他のサービスを起動します。 - サービス(デーモン):Webサーバー、SSHサーバー、cron、ログ。
- シェルとユーティリティ:ターミナルで直接操作する部分。
サーバーにはグラフィカルインターフェースがないことがほとんどです。管理者はSSHで接続し、コマンドラインで作業します。そのため、Linuxの学習はまずターミナルの学習でもあります。
Linuxのファイルシステム:すべてはルート / から始まる
Linuxには C: や D: のようなドライブ文字がありません。あるのは、ルート / から始まる1本のディレクトリツリーだけです。すべてのディスク、USBメモリ、ネットワーク共有は、このツリーのどこかのディレクトリにマウントされます。もう1つの原則は、Linuxではほぼすべてがファイルとして表されることです。通常のファイル、ディレクトリ、デバイスだけでなく、プロセスの情報もファイルとして見えます。
$ ls /
bin dev home lib64 mnt proc run srv tmp var
boot etc lib media opt root sbin sys usr
ディレクトリの配置はFHS(Filesystem Hierarchy Standard)で定められているため、どのディストリビューションでも設定ファイルはだいたい同じ場所にあります。
| ディレクトリ | 内容 |
|---|---|
/etc | システムとサービスの設定:/etc/passwd、/etc/ssh/sshd_config、/etc/fstab |
/home | ユーザーのホームディレクトリ:/home/alice |
/root | スーパーユーザー root のホームディレクトリ |
/var | 変化するデータ:/var/log のログ、パッケージのキャッシュ、データベース、メールのキュー |
/usr | インストール済みのプログラムとライブラリ:/usr/bin、/usr/lib |
/bin、/sbin | 基本コマンド。現代のディストリビューションでは /usr/bin と /usr/sbin へのリンク |
/boot | カーネル(vmlinuz-*)、initramfs、ブートローダーのファイル |
/dev | デバイスファイル:/dev/sda、/dev/null |
/proc、/sys | 仮想ファイルシステム:カーネルがプロセスや設定を公開する場所 |
/tmp | 一時ファイル。多くの場合、再起動時に消去される |
/opt | まるごと提供されるサードパーティ製プログラム |
/mnt、/media | ディスクやリムーバブルメディアのマウントポイント |
絶対パスと相対パス
絶対パスは / で始まり、現在位置に関係なく同じ場所を指します。例:/var/log/syslog。相対パスは現在のディレクトリを基準にします。例:../logs/app.log。ドット . は現在のディレクトリ、ドット2つ .. は親ディレクトリ、チルダ ~ は自分のホームディレクトリを表します。
$ pwd
/home/alice
$ cd /var/log
$ cd ..
$ pwd
/var
$ cd ~
$ pwd
/home/alice
/proc:システムをファイルの集まりとして見る
/proc はディスクに保存されているのではなく、カーネルがその場で生成します。たとえば cat /proc/cpuinfo はプロセッサの情報を、cat /proc/meminfo はメモリの情報を表示します。各プロセスには /proc/<PID> というディレクトリがあり、そこにコマンドラインや開いているファイルが記録されています。ps や top などのツールの多くは、これらのファイルを読んでいるだけです。
マウント
df -h を使うと、どのファイルシステムがどこにマウントされ、空き容量がどれだけあるかが分かります。
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 40G 12G 26G 32% /
/dev/sda1 1.1G 6.1M 1.1G 1% /boot/efi
tmpfs 393M 1.2M 392M 1% /run
永続的なマウントポイントは /etc/fstab に記述され、システムは起動時にこのファイルを読みます。
Linuxの起動:電源を入れてからログインプロンプトまで
起動の流れを理解しておくと、サーバーが再起動後に立ち上がらないときの原因調査に役立ちます。簡略化すると次のようになります。
- ファームウェア(UEFIまたはBIOS)がハードウェアを確認し、ブートローダーを探します。
- GRUBブートローダーがメニューを表示し、
/bootからカーネルとinitramfsをメモリに読み込みます。 - カーネルがハードウェアを初期化し、initramfsの助けを借りてルートファイルシステムを見つけてマウントします。
- systemdがPID 1として起動し、ネットワーク、ログ、SSH、cronなどのサービスを適切な順序で開始します。
- ログインプロンプトがコンソールに表示されるか、SSHで接続できるようになります。
起動時のカーネルメッセージは sudo dmesg または journalctl -k で、各段階の所要時間は systemd-analyze で確認できます。
ユーザーと権限:組み込みの保護
Linuxは最初から複数ユーザー向けのシステムです。すべてのファイルには所有者、グループ、読み取り・書き込み・実行の権限があります。一般ユーザーはシステムファイルを壊せません。管理作業は sudo を通じて行います。スーパーユーザー root はすべてを行えるため、常時rootで作業するのは推奨されません。
$ ls -l /etc/passwd
-rw-r--r-- 1 root root 2847 Oct 1 10:12 /etc/passwd
この行の意味は、通常のファイルで、所有者rootは読み書きでき、その他のユーザーは読み取りだけできる、ということです。
DevOpsエンジニアにとってのLinux
DevOpsエンジニアにとってLinuxは学習テーマの1つではなく、ほぼすべての作業が行われる環境です。毎日次のような場面で関わります。
- サーバー。Webサーバー、データベース、キューの大半はLinux上で動いています。
- コンテナ。DockerはLinuxカーネルの機能であるnamespacesとcgroupsを利用します。コンテナは隔離されたLinuxプロセスであり、イメージはDebianやAlpineなどのディストリビューションをベースにしています。
- クラウドとKubernetes。クラウドの仮想マシンやクラスタのノードもLinuxです。
- CI/CD。パイプラインのビルドはLinuxのランナーで実行され、ビルドスクリプトはbashで書かれることが多いです。
- 障害調査。サービスが停止したとき、
journalctl、top、ss、dfで原因を探します。これらのツールを知らなければ、インシデントの分析はできません。
最低限必要なスキルは、ファイルシステムを自在に移動すること、権限を理解すること、パッケージをインストールすること、systemctl でサービスを管理すること、ログを読むこと、プロセス、ネットワーク、SSHを扱うこと、そして簡単なbashスクリプトを書くことです。
Linuxの学び方
普段使いのOSをLinuxに入れ替える必要はありません。安全に試す方法はいくつかあります。
- 仮想マシン(VirtualBox、VMware)にUbuntu Serverを入れる。壊しても、スナップショットから復元できます。
- Windows上のWSL:Windowsのターミナルで完全なUbuntu環境が使えます。
wsl --installで導入できます。 - クラウドサーバー:実際の運用に最も近い方法です。SSHで接続します。
- Dockerコンテナ:
docker run -it --rm ubuntu bashで数秒でシェルが使えます。
まずはナビゲーション(pwd、ls、cd)から始め、次にファイルと権限、続いてパッケージ、プロセス、サービスへ進みましょう。組み込みのヘルプはいつでも使えます。man ls または ls --help です。
まとめ
Linuxはカーネルであり、ディストリビューションはカーネルにユーティリティ、ライブラリ、パッケージマネージャ、systemdを加えたものです。システム全体は、ルート / から始まる1本のディレクトリツリーで、設定は /etc、ログは /var/log、プログラムは /usr にあります。Linuxとは何か、どのように起動するかを理解すれば、サーバー、コンテナ、クラウドを扱う基礎が身につきます。ファイルシステム、起動、システム管理は、Linuxコースで実際に手を動かしながら解説しています。
よくある質問
Linuxはオペレーティングシステムですか、それともカーネルですか?
厳密にはLinuxはカーネルです。オペレーティングシステムはディストリビューションであり、カーネルにGNUのユーティリティ、ライブラリ、パッケージマネージャ、初期化システムを加えたものです。日常会話では「Linux」といえば通常システム全体を指します。
Linuxは無料ですか?
カーネルとほとんどのディストリビューション(Ubuntu、Debian、Fedoraなど)は、オープンソースライセンスのもとで無料で配布されています。有料なのは、Red Hat Enterprise Linuxのようなサポートの契約です。
初心者はどのLinuxディストリビューションを選ぶべきですか?
サーバー管理の学習には、Ubuntu LTSかDebianが向いています。安定したバージョンがあり、ドキュメントも豊富です。知識はディストリビューション間で移せ、主な違いはパッケージマネージャです。
Dockerを使うにはLinuxの知識が必要ですか?
はい、少なくとも基礎は必要です。コンテナはLinuxカーネルの機能の上に作られており、イメージの中身はディストリビューションで、デバッグにはシェルのコマンドを使います。
LinuxとUnixの違いは何ですか?
Unixは1970年代に登場したシステムのファミリーです。一方Linuxは独立して書かれたカーネルで、Unixの考え方とインターフェース(POSIX標準)を受け継いでいます。そのため、コマンドや動作原理はよく似ています。
このテーマはコース「Linux: с нуля до уверенного администрирования」で実践とともに詳しく解説しています。
- Linux: с нуля до уверенного администрирования
- Как устроена файловая система Linux: от корня до загрузки ядра