基礎

Linuxとは:カーネル、ディストリビューション、ファイルシステムをわかりやすく解説

更新日: · Skillaria.Top

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と呼ばれることもあります。カーネルにこれらのツールを加え、一括でビルドしてテストしたものがディストリビューションです。

ディストリビューションの違いは主にパッケージマネージャ、アップデートの方針、想定する利用者にあります。

系統例パッケージ主な用途
DebianDebian、Ubuntu、Linux Mint.deb、aptサーバー、クラウド、ワークステーション
Red HatRHEL、Fedora、Rocky Linux、AlmaLinux.rpm、dnf企業向けサーバー
AlpineAlpine Linuxapkサイズの小さいDockerイメージ
ArchArch Linux、Manjaropacman上級者、新しいパッケージを求める人

どのディストリビューションを使っているかは /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の起動:電源を入れてからログインプロンプトまで

起動の流れを理解しておくと、サーバーが再起動後に立ち上がらないときの原因調査に役立ちます。簡略化すると次のようになります。

  1. ファームウェア(UEFIまたはBIOS)がハードウェアを確認し、ブートローダーを探します。
  2. GRUBブートローダーがメニューを表示し、/boot からカーネルとinitramfsをメモリに読み込みます。
  3. カーネルがハードウェアを初期化し、initramfsの助けを借りてルートファイルシステムを見つけてマウントします。
  4. systemdがPID 1として起動し、ネットワーク、ログ、SSH、cronなどのサービスを適切な順序で開始します。
  5. ログインプロンプトがコンソールに表示されるか、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: с нуля до уверенного администрирования」で実践とともに詳しく解説しています。

コースへ