Software Design 202404
Linux 基礎
ディレクトリ構成とファイルシステム
- Windows と Linux のディレクトリーツリーの違い
- Windows: ストレージ内のパーティションがドライブ(C:、D:)となり、それぞれが独立したディレクトリーツリーを持つ
- Linux: システム全体で単一のディレクトーツリーを持つ。言い換えると、ルートディレクトリ(/)以下に他のドライブを含めた全てのディレクトリが配置される。
- ハードリンク
- inode 番号を使って紐付ける
ln -i
で inode 番号を確認できる
ln file1 file2
でハードリンクを作成できる
- シンボリックリンク
- 異なるファイルシステム間でもリンクが可能
- パス名を使って紐付ける
ln -l
でシンボリックリンクを確認できる
ln -s file1 file2
でシンボリックリンクを作成できる
- リンク先のファイル名を変更するとリンクが切れる
プロセス管理
- プロセスとは
- 実行中のプログラムに関する情報を OS が管理するための構造体
- プロセス ID
ps
で確認できる
$$
で現在のシェルのプロセス ID を取得できる
- プロセスの状態
- R (Running または Runnable): CPU を使っているまたは使いたい状態
- S (Interruptible Sleep): 中断できるスリープ
- D (Uninterruptible Sleep): 中断できないスリープ。ディスク I/O 待ちなど。
- T (Stopped): シグナルによって停止された状態
- Z (Zombie): 親プロセスに終了ステータスを通知できずに悪霊になった状態 / defunct とも呼ばれる
- ...ほか多数
- プロセスの親子関係
- init プロセス
- 全てのプロセスの祖先
- init プロセスが他のプロセスを起動することで、Web サーバが動いたり ssh で接続できるようになったりする
- プロセスが終了するとどうなるか
- プロセスが終了すると、親プロセスに終了ステータスが返される
- 親プロセスは終了ステータスを
$?
変数に入れる
- 親プロセスが先に死ぬとどうなるか
- 子プロセスの親プロセスが init プロセスに付け替えられる
- ゾンビプロセス
- プロセスが終了したが、親プロセスが終了ステータスを取得していない状態
- プロセスの情報取得
- 歴史的経緯により混沌としているので都度調べるで OK
ps aux
ps o pid,ppid,comm,stat
ユーザー権限とアクセス権
- ユーザー ID / ユーザー名
- ユーザー名は人間が扱いやすいが、システムはユーザー ID を扱う
ls -n
とすると所有ユーザー ID を確認できる
- root
- システムを管理するための特権ユーザー
- ユーザー ID は 0
- 最近は root ユーザーでの作業は推奨されず、代わりに
sudo
が使われる
- システムユーザー
- 特定のサービスを実行するためのユーザー
- 例えば SMTP サーバや HTTP サーバなどのプロセスは、システムユーザーで実行される
- ユーザー ID が 1 から 999
- 一般ユーザー
- su