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 とも呼ばれる
- ...ほか多数
- プロセスの親子関係
pstree $PID
で確認できる
- 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
- 一般ユーザー
- ID は 1000 以上
- su
- 別のユーザーに切り替えるコマンド
- 引数なしで実行すると root に切り替わる
--login
オプションをつけるとログインシェルとして利用できる。そのユーザーの環境変数などを完全に引き継ぎたい時に使う。
- sudo
- 別のユーザーとしてコマンドを実行するためのコマンド
sudo -u USERNAME
のように使う。-u
を省略すると root になる/etc/sudoers
ファイルに設定が書かれている。編集時にはvisudo
を使え。- 複数コマンドを実行したいときは
sudo sh -c "command1; command2"
のようにする。そうしないと2番目が一般ユーザーで実行されてしまう。
- runuser
- システム管理者が他のユーザーとしてコマンドを実行するために使用する
- 環境変数を維持する点で su コマンドに似ている
- su のようにパスワードや tty を要求することは ないため、主にスクリプト内での利用に重宝する
テクニカルライティング
読み手に合わせて文章を書こう
まずは読み手の前提知識がどの程度あるかを把握する。エキスパート向けなのか初心者向けなのかなど。
つぎに読み手の目的を把握すること。読み手が何を知りたいのか、どのくらい詳細に求めているのかなど。
そのうえで、以下のような工夫をすると良い。
- 用語を適切に選択する
- 専門用語を使うか使わないかなど
- 書くべき情報を絞ったり、ドキュメントを分解したりする
- 読み手の前提知識や目的に合わせて、必要な場所だけ読めるようにする
- 読み手の範囲を絞り込む
- 範囲を絞ればコスパは上がる
- 冒頭に「対象読者、説明すること、説明しないこと」を明記するとよい