Linux

Linuxとは

Linuxは、オープンソースのOS(カーネル)です。世界中のサーバー・スマートフォン(Android)・組み込み機器で動いており、WebサービスのインフラはほぼLinuxの上に成り立っています。

初学者向けポイント

  • カーネル(核)+ ディストリビューション(Ubuntu、Debian、Alpine など)という構成
  • 操作は [[シェルとコマンドライン]] が基本。GUIなしで管理するのが普通
  • 「すべてはファイル」という思想。デバイスも設定もファイルとして扱う

ディストリビューションの選び方

「Linuxをインストールする」とき、実際に選んでいるのはディストリビューションです。カーネルは共通で、付属するツール群・パッケージの管理方式・サポート期間が違います。系統は大きく3つに分けて覚えれば足ります。

系統代表特徴
Debian 系Ubuntu、Debian日本語の情報量が多く入門向け。Ubuntu の LTS 版はサポートが長い
Red Hat 系RHEL、Rocky Linux企業システムで採用が多く、商用サポートを買える
軽量系Alpineイメージが数MB程度と極端に小さく、コンテナのベース向き

迷ったら Ubuntu の LTS 版を選べば大きく外しません。LTS(Long Term Support)は長期サポート版で、数年間セキュリティ更新が提供されます。逆にサポート期限(EOL)を過ぎたバージョンは脆弱性の修正が届かなくなるため、「いつまで使えるバージョンか」は最初に確認すべき情報です。

系統が違えばコマンドも変わります。ソフトの導入が aptdnf かはその代表例で、詳しくは [[Linuxパッケージ管理]] が扱います。なお Linux カーネルはコピーレフト型のライセンスで公開されており、改変・再配布の条件は [[OSSとライセンス]] が扱います。

「すべてはファイル」を体感する

Linux では、設定もログもデバイスも、ほとんどがファイルとして見えます。この一貫性のおかげで、catgrep という同じ道具だけで何でも調べられます。

cat /etc/os-release   # 動いているディストリとバージョン
cat /proc/cpuinfo     # CPU の情報
ls /dev               # 接続されているデバイス

/proc の中身はディスク上に実在するファイルではなく、カーネルがその場で作って見せている情報です。専用のAPIを覚えなくてもファイルを読むだけで状態が分かる — この割り切りが Linux の設計思想です。ディレクトリごとの役割分担と権限の与え方は [[ファイルシステムとパーミッション]] が扱います。

押さえておきたい概念

概念説明
パーミッションファイルごとに 所有者/グループ/その他 の読み書き実行権限を持つ
プロセス実行中のプログラム。pstop で確認
パッケージ管理apt dnf apk などでソフトを導入
systemdサービス(常駐プロセス)の起動・管理

不調なサーバーで最初に見る3つ

「アプリが落ちた」「重い」と言われたとき、Linux 側から切り分ける入口は決まっています。

1. ディスクの空きdf -h で使用率を見ます。ログが増え続けて /var が 100% になると、書き込みが失敗してアプリもデータベースも一斉に止まります。初学者が最も遭遇しやすい障害で、備えはログの自動ローテーション(古いログの圧縮・削除)です([[ログ設計]])。

2. メモリと OOM Killerfree -h で空きを見ます。Linux はメモリが枯渇すると OOM Killer という仕組みが働き、メモリを多く使っているプロセスを強制終了します。「アプリのログには何も残っていないのに突然プロセスが消えた」ときはこれを疑い、dmesg などでカーネル側のメッセージを確認します。

3. 負荷(ロードアベレージ)uptime が表示する3つの数値は、直近1分・5分・15分の「実行中+順番待ちの処理数」の平均です(Linux ではディスク待ちも数に含まれます)。CPU のコア数と比べて読むのがコツで、4コアなら 4.0 前後が使い切りの目安、8.0 なら待ち行列ができている状態です。単発の値より3つの並びの傾向を見ます。

なぜ学ぶ価値があるか

  • [[Docker]] コンテナの中身はLinuxそのもの。コンテナのデバッグ=Linuxの操作
  • [[クラウドコンピューティング]] の仮想マシンもほとんどがLinux
  • 障害調査(ログ確認、リソース逼迫の特定)はLinuxの知識が直結する

次に読む順路

Linux は周辺の話題が多く、どこから手を付けるか迷いがちです。目的別に5つの群へ整理します。いま困っていることに近い群から入って構いません。

仕組みから理解する

OS が何をしているかを先に押さえると、以降の話がつながります。[[OSの基礎]] でカーネルとシステムコールの役割を、[[プロセスとスレッド]] で「実行中のプログラム」という単位をつかみます。そのうえで [[仮想マシンとハイパーバイザ]] を読むと、クラウドで借りるサーバーの正体が見えてきます。

手を動かして操作する

実務で最初に必要になる3点セットです。[[シェルとコマンドライン]] でコマンドの打ち方を覚え、[[ファイルシステムとパーミッション]] で「動かない原因の多くは権限」を体で覚え、[[Linuxパッケージ管理]] でソフトの入れ方を身につけます。

サーバーとして動かし続ける

一度動けば終わりではなく、動き続けさせる仕組みが要ります。常駐サービスの起動と自動復旧は [[systemdとサービス管理]]、定時処理は [[ジョブスケジューリング(cron)]]、複数台のログを時系列で突き合わせる前提になる時計合わせは [[NTPと時刻同期]]、記録の残し方は [[ログ設計]] です。

遠隔から安全に触る

サーバー室へ行って操作するわけではないので、接続経路そのものが守りの対象になります。接続の標準は [[SSH]]、その入口を1か所に絞る定番構成が [[踏み台サーバー]] です。

台数が増えたら任せる

手作業が追いつかなくなる規模から先の話です。Linux の上に何を載せるかの整理が [[ミドルウェア]]、同じ設定を何十台にも配るのが [[Ansibleと構成管理]]、コンテナを多数のサーバーへ自動で配置し直すのが [[Kubernetes]] です。1〜2台のうちは手作業でも回るので、必要になってからで構いません。

関連技術とのつながり

  • [[シェルとコマンドライン]] — Linuxを操作するインターフェース
  • [[Docker]] — Linuxカーネルの機能で実現されるコンテナ技術
  • [[クラウドコンピューティング]] — 借りるサーバーのOSは大抵Linux
Q: アプリ側のログに何も残っていないのにプロセスが突然消えたとき、Linuxでまず疑う仕組みはどれ?
- [x] メモリ枯渇時に働く OOM Killer
- [ ] cron の多重起動
- [ ] ディストリビューションのサポート期限切れ
解説: メモリが枯渇すると OOM Killer が使用量の多いプロセスを強制終了します。アプリのログには残らないため、dmesg などでカーネル側のメッセージを確認します。

Q: uptime が表示するロードアベレージの読み方として、本文の説明に合うのはどれ?
- [ ] 数値が1.0を超えたらどのサーバーでも異常と判断できる
- [x] CPUのコア数と比べて読み、4コアなら4.0前後が使い切りの目安になる
- [ ] メモリの空き容量をパーセントで示している
解説: ロードアベレージは実行中+順番待ちの処理数の平均で、コア数と比較して評価します。3つの数値の増減傾向も合わせて見ます。

Q: 初学者が最初に選ぶディストリビューションとして本文が勧めているのはどれ?
- [ ] コンテナのベース向けに極端に軽量な Alpine
- [x] サポート期間の長い Ubuntu の LTS 版
- [ ] サポート期限(EOL)を過ぎたバージョン
解説: 情報量が多くセキュリティ更新が長く提供される Ubuntu の LTS 版が入門に向きます。EOL を過ぎたものは脆弱性の修正が届きません。