Linux の基礎知識
『Linux』は、カーネルとユーザースペースを明確に分離した設計を持つオペレーティングシステムです。カーネルはハードウェアを直接制御し、プロセス管理・メモリ管理・ファイルシステム・デバイスドライバを担当します。ユーザースペースで動作するプログラムは、システムコールを通じてのみカーネルに処理を依頼します。プロセスにはフォアグラウンドで動作するものとバックグラウンドで常時稼働するデーモンがあり、それぞれ異なる役割と起動方法を持ちます。
構文
# ----------------------------------------------- # カーネルとシェルの関係 # ----------------------------------------------- # ユーザーはシェル(bash / zsh 等)を通じてカーネルに命令を渡します # シェルはコマンドを解釈し、システムコール経由でカーネルへ処理を依頼します # ユーザー # ↓ コマンド入力 # シェル(/bin/bash など) # ↓ システムコール(fork / exec / read / write 等) # カーネル # ↓ ハードウェアへのアクセス # CPU / メモリ / ディスク / ネットワーク # ----------------------------------------------- # プロセスの概念 # ----------------------------------------------- # プログラムを実行するとプロセスが生成されます # 各プロセスには一意の PID(プロセスID)が割り当てられます # ps コマンドでプロセス一覧を確認します ps aux # 出力例: # USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND # root 1 0.0 0.1 22560 4096 ? Ss 10:00 0:01 /sbin/init # ginoza 1042 0.2 0.5 55320 20480 pts/0 Ss 10:01 0:00 -bash # kogami 1123 0.0 0.1 9216 3584 pts/0 R+ 10:05 0:00 ps aux # ----------------------------------------------- # デーモンとフォアグラウンドプロセスの違い # ----------------------------------------------- # フォアグラウンドプロセス: # - ターミナルに紐づいて動作します # - ターミナルを閉じると終了します # - 標準入出力がターミナルに接続されています # デーモン: # - バックグラウンドで常時稼働します # - ターミナルから切り離されています(制御端末なし) # - プロセス名の末尾に d が付くものが多いです(sshd / httpd / crond 等) # - systemd によって管理・監視されます # ----------------------------------------------- # シェルの種類と確認方法 # ----------------------------------------------- # 現在使用しているシェルを確認します echo $SHELL # インストール済みのシェル一覧を確認します cat /etc/shells # 出力例: # /bin/sh # /bin/bash # /bin/zsh # /usr/bin/fish
構文一覧
| 概念 | キーワード | 説明 |
|---|---|---|
| カーネル | kernel | ハードウェアを直接制御するOSの中核部分です。プロセス管理・メモリ管理・デバイスドライバ・ファイルシステムを担当します。 |
| ユーザースペース | user space | カーネルとは隔離された領域で、一般のプログラムが実行される空間です。システムコールを通じてのみカーネルと通信します。 |
| システムコール | syscall | ユーザースペースのプログラムがカーネルへ処理を依頼するための仕組みです。fork / exec / read / write 等があります。 |
| シェル | shell | ユーザーが入力したコマンドを解釈してカーネルに渡すインタフェースです。bash / zsh / fish 等の種類があります。 |
| プロセス | process | 実行中のプログラムの実体です。固有の PID・メモリ空間・ファイルディスクリプタを持ちます。 |
| PID | PID | Process ID の略称です。システム起動時に最初に生成される init(または systemd)は PID 1 を持ちます。 |
| デーモン | daemon | バックグラウンドで常時稼働するプロセスです。制御端末を持たず、systemd によって管理されます。 |
| フォアグラウンドプロセス | foreground process | ターミナルに紐づいて動作するプロセスです。ユーザーの入力を受け取り、終了するまでシェルは次のコマンドを受け付けません。 |
| バックグラウンドプロセス | background process | コマンド末尾に & を付けて起動するプロセスです。シェルはコマンドの終了を待たずに次の入力を受け付けます。 |
| init / systemd | PID 1 | カーネルが最初に起動するプロセスです。すべてのプロセスはこの PID 1 の子孫として生成されます。現代的な Linux では systemd が担当します。 |
| シグナル | signal | プロセスへの非同期通知です。SIGTERM(正常終了要求)・SIGKILL(強制終了)・SIGHUP(設定再読み込み)等があります。 |
| ゾンビプロセス | zombie process | 処理が終了したにもかかわらず、親プロセスが終了ステータスを回収していないプロセスです。ps で Z 状態として表示されます。 |
使用例
プロセスの状態を確認してシグナルを送信する
# ----------------------------------------------- # プロセスの確認と操作(PSYCHO-PASSのキャラで例示します) # ----------------------------------------------- # 現在実行中のプロセスを確認します ps aux # 出力例: # USER PID %CPU %MEM COMMAND # ginoza 1234 1.5 0.8 python3 inspector_report.py # kogami 1235 0.0 0.1 sleep 3600 # makishima 1236 99.9 5.2 ./anomaly_process # 特定のプロセス名で絞り込みます ps aux | grep inspector_report # PID を指定してプロセスを終了します(SIGTERM: 正常終了を要求します) kill 1234 # 強制終了します(SIGKILL: プロセスに終了を強制します) kill -9 1236 # プロセス名で終了します pkill -f inspector_report.py
$ ps aux | grep inspector_report ginoza 1234 1.5 0.8 55320 32768 pts/0 S 10:10 0:03 python3 inspector_report.py $ kill 1234 $ ps aux | grep inspector_report (プロセスが終了したため出力されません)
デーモンの起動状態を確認して制御する
# ----------------------------------------------- # systemd によるデーモン管理の基本操作 # ----------------------------------------------- # SSH デーモン(sshd)の状態を確認します systemctl status sshd # デーモンを起動します sudo systemctl start sshd # デーモンを停止します sudo systemctl stop sshd # サーバー起動時に自動起動するよう設定します(enable) sudo systemctl enable sshd # 自動起動を無効化します sudo systemctl disable sshd # ----------------------------------------------- # デーモンの一覧を確認します # ----------------------------------------------- # 稼働中のサービスを一覧表示します systemctl list-units --type=service --state=running # 出力例(抜粋): # UNIT LOAD ACTIVE SUB DESCRIPTION # cron.service loaded active running Regular background program processing daemon # nginx.service loaded active running A high performance web server and a reverse proxy server # sshd.service loaded active running OpenBSD Secure Shell server # systemd-journald.service loaded active running Journal Service
$ systemctl status sshd
● ssh.service - OpenBSD Secure Shell server
Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2026-03-25 10:00:00 JST; 1h 5min ago
Docs: man:sshd(8)
man:sshd_config(5)
Main PID: 512 (sshd)
Tasks: 1 (limit: 4915)
Memory: 2.1M
CPU: 85ms
CGroup: /system.slice/ssh.service
└─512 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups
カーネルバージョンとシステム情報を確認する
# ----------------------------------------------- # カーネルとシステム情報の確認コマンド # ----------------------------------------------- # 現在のカーネルバージョンを確認します uname -r # システム全体の情報を確認します uname -a # OS のディストリビューション情報を確認します(Debian / Ubuntu 系) cat /etc/os-release # 稼働時間とロードアベレージを確認します uptime # ----------------------------------------------- # /proc ファイルシステムからカーネル情報を参照します # ----------------------------------------------- # CPU 情報を確認します cat /proc/cpuinfo | grep "model name" | head -3 # メモリ情報を確認します cat /proc/meminfo | grep -E "MemTotal|MemFree|MemAvailable" # 現在実行中のプロセス数を確認します ls /proc | grep -E '^[0-9]+$' | wc -l
$ uname -r 6.1.0-28-amd64 $ uname -a Linux sybilsystem 6.1.0-28-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.119-1 (2024-11-22) x86_64 GNU/Linux $ uptime 11:05:43 up 1:05, 2 users, load average: 0.12, 0.08, 0.05 $ cat /proc/meminfo | grep -E "MemTotal|MemFree|MemAvailable" MemTotal: 8192000 kB MemFree: 4096512 kB MemAvailable: 6291456 kB
フォアグラウンドとバックグラウンドのプロセスを切り替える
# ----------------------------------------------- # ジョブ制御(job control)の基本操作 # ----------------------------------------------- # バックグラウンドでプログラムを起動します(末尾に & を付けます) python3 dominator_simulation.py & # 出力例: # [1] 2048 # ([ジョブ番号] PID が表示されます) # 現在のジョブ一覧を確認します jobs # 出力例: # [1]+ Running python3 dominator_simulation.py & # バックグラウンドジョブをフォアグラウンドに戻します fg %1 # フォアグラウンドで実行中のプロセスを一時停止します(Ctrl+Z) # その後バックグラウンドで再開します bg %1 # ----------------------------------------------- # nohup でターミナルを閉じてもプロセスを継続します # ----------------------------------------------- # nohup を使うとターミナル終了後もプロセスが継続します # 出力は nohup.out に保存されます nohup python3 dominator_simulation.py > /var/log/dominator.log 2>&1 &
$ python3 dominator_simulation.py & [1] 2048 $ jobs [1]+ Running python3 dominator_simulation.py & $ fg %1 python3 dominator_simulation.py ^Z [1]+ Stopped python3 dominator_simulation.py $ bg %1 [1]+ python3 dominator_simulation.py &
概要
『Linux』のカーネルとユーザースペースの分離は、システムの安定性とセキュリティの根幹をなす設計です。ユーザースペースのプログラムがハードウェアに直接アクセスできない仕組みにより、一つのプロセスの誤動作がシステム全体に影響を及ぼすリスクを低減しています。シェルはこの境界の窓口として機能し、ユーザーのコマンドをシステムコールに変換してカーネルへ渡します。プロセスはフォアグラウンドとバックグラウンドに大別でき、バックグラウンドで常時稼働するデーモンは systemd(PID 1)によって管理・監視されます。デーモンの名前には sshd / nginx / crond のように末尾に d が付くものが多く、制御端末を持たない点がフォアグラウンドプロセスとの本質的な違いです。サービスの管理には systemctl(サービスの管理) を、起動時のログ確認には journalctl(ログの確認) を合わせて参照してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。