LPIC101チートシート

# 概要
LPIC101に合格するためのチートシート

https://www.lpi.org/ja/our-certifications/lpic-1-overview/

試験概要
- バージョン：5.0
- 試験時間：90分
- 問題数：60問
- 合格点：500点（200~800点満点）

出題分野（数字は重要度を示す）
- 101 システムアーキテクチャ（8）
    - 101.1 ハードウェア設定の決定と設定（2）
    - 101.2 システムの起動（3）
    - 101.3 ランレベル/ブートターゲットを変更し、システムをシャットダウンまたは再起動する（3）
- 102 Linuxのインストールとパッケージ管理（12）
    - 102.1 ハードディスクレイアウトを設計する（2）
    - 102.2 ブートマネージャをインストールする（2）
    - 102.3 共有ライブラリを管理する（1）
    - 102.4 Debianパッケージ管理を利用する（3）
    - 102.5 RPMとYUMパッケージ管理を使用する（3）
    - 102.6 仮想化のゲストOSとしてのLinux（1）
- 103 GNUとUnixコマンド（26）
    - 103.1 コマンドラインでの作業（4）
    - 103.2 フィルターを使用してテキストストリームを処理する（2）
    - 103.3 基本的なファイル管理を実行する（4）
    - 103.4 ストリーム、パイプ、リダイレクトを使用する（4）
    - 103.5 プロセスの作成、監視、終了（4）
    - 103.6 プロセス実行の優先順位を変更する（2）
    - 103.7 正規表現を使ってテキストファイルを検索する（3）
    - 103.8 ファイルの基本的な編集（3）
- 104 デバイス，Linuxファイルシステム，ファイルシステム階層標準（14）
    - 104.1 パーティションとファイルシステムを作成する（2）
    - 104.2 ファイルシステムの整合性を維持する（2）
    - 104.3 ファイルシステムのマウントとアンマウント（3）
    - 104.5 ファイルのパーミッションと所有権を管理する（3）
    - 104.6 ハードリンクとシンボリックリンクの作成と変更（2）
    - 104.7 システムファイルを検索し、ファイルを正しい場所に配置する（2）
    
# 101 システムアーキテクチャ
## 101.1ハードウェア設定の決定と設定

コマンド
- `lspci`：PCIバスに接続されたデバイス情報を表示
- `lsusb`：USBに接続されているデバイス情報を表示
- `lsmod`：現在ロードされているモジュールを表示
- `modprobe`： コマンドは、システムの実行中にカーネルモジュールをロードおよびアンロードするだけでなく、カーネルのロード時にモジュールのパラメータを変更する
- `modinfo` ：モジュール名のみを引数として与えると、指定されたモジュールの説明、ファイル、作成者、ライセンス、ID、依存関係、および使用可能なパラメータを表示する

```sh
$ lspci
00:00.0 Host bridge: Intel Corporation 440FX - 82441FX PMC [Natoma] (rev 02)
　　　　 ＜クラス名＞: ＜ベンダー名＞           - ＜デバイス名＞        ＜リビジョン＞ 
```

 /proc 内の重要なファイル
- /proc/cpuinfo：CPUに関する情報
- /proc/interrupts：IQRに関する情報
- /proc/ioports：現在登録されている入出力ポート領域のリスト
- /proc/dma：使用中の登録済みDMA（ダイレクトメモリアクセス）チャネルのリスト
- /proc/bus/usb/devices：USBデバイスに関する情報
- /scsi/scsi：SCSIデバイスに関する情報
 
## 101.2 システムの起動
コマンド
- `systemctl`：systemdを管理する
    - `disable`：サービスの自動起動を無効にする
    - `status`：サービスの状態を表示する
    - `reboot`：システムを再起動する
    - `restart`：サービスを再起動する
- `dmesg`：カーネルが出力したメッセージを表示する
    - `--clear`：マシンを再起動せずにカーネルのリングバッファの内容をクリアする
- `journalctl`：systemdが管理するジャーナル（システムログ）を参照する

システム起動の流れ
```
ファームウェア(BIOS/UEFI) -> ブートローダ -> カーネル -> プロセス制御の初期化(init/systemd)
```

## 101.3 ランレベル/ブートターゲットを変更し、システムをシャットダウンまたは再起動する
ランレベル：OSの動作モードを表す数値またはアルファベット
| ランレベル | 説明                      |
|------------|--------------------------|
| 0          | システム停止              |
| 1/S/s      | シングルユーザーモード     |
| 2/3/4      | マルチユーザーモード(CUI)  |
| 5          | マルチユーザーモード(GUI)  |
| 6          | システム再起動            |

ランレベルに関するコマンド
- `runlevel`：ランレベルを表示する
- `init` | `telinit`：ランレベルを変更する

シャットダウンコマンド
- `shutdown hh:mm`：指定した時間にシャットダウン
- `shutdown +m`：m分後にシャットダウン
- `shutdown now`：今すぐシャットダウン
    - `-h`：システム停止
    - `-r`：システム再起動
    - `-k`：シャットダウンはせずメッセージを送る
    - `-c`：実行中のシャットダウンをキャンセル


# 102 Linuxのインストールとパッケージ管理
## 102.1 ハードディスクレイアウトを設計する
ディレクトリ
- `/home`：一般ユーザのホームディレクトリ
- `/usr`：起動には不要なプログラムなどを格納
- `/var`：ログファイルやメールなどの可変ファイル群を格納
- `/opt`：追加でインストールしたパッケージを格納
- `/boot`：Linuxカーネルなど起動に必須のファイルを格納
- `/tmp`：一時ファイルを格納
- `/bin`：一般ユーザ用のコマンドを格納
- `/sbin`：管理者用のコマンドを格納
- `/etc`：システムの設定ファイルを格納
- `/lib`：共有ライブラリを格納
- `/dev`：デバイスファイルを格納

用語
- スワップ領域：物理メモリ（実メモリ、RAM）に収まらなかった情報を一時的に格納する為の、通常ハードディスク上に作成する領域

## 102.2 ブートマネージャをインストールする
コマンド
- `grub-install`：GRUB2のインストール
- `update-grub`：GRUB2の設定を更新する

ファイル
- `/boot/grub/grub.cfg`：GRUB2のデフォルトの設定ファイル
- `/boot/grub/grub.conf`, `/boot/grub/menu.lst`：GRUBレガシーの設定とメニューファイル

## 102.3 共有ライブラリを管理する
コマンド
- `ls`：ディレクトリの内容を一覧表示する
- `cat`：ファイルを連結し、標準出力に表示する
- `sudo`：スーパーユーザーの権限でコマンドを実行する
- `ldconfig`：共有ライブラリに必要なリンクを作成する
- `echo`：環境変数の値を表示する
- `export`：子プロセスに引き渡す環境変数を指定する
- `unset`：環境変数を削除する
- `ldd`：プログラムが依存する共有ライブラリを表示する
- `readelf`：ELF（executable and linkable format）ファイルに関する情報を表示する
- `objdump`：オブジェクトファイルに関する情報を表示する

## 102.4 Debianパッケージ管理を利用する
dpkgコマンド：Debianパッケージ管理ツール．
- オプション
    - `-E`：同じバージョンがインストールされていればインストールしない
    - `-G`：新バージョンが既にインストールされていればインストールしない
    - `-R`：ディレクトリを再帰的に処理
- アクション
    - `-i (--install)`：1つないし複数のパッケージファイルをインストールする
    - `-r (--remove)`：設定ファイルを残してパッケージをアンインストール
    - `-P (--purge)`：設定ファイルも含め完全にパッケージをアンインストール
    - `-l (--list)`：インストール済みパッケージを検索して表示
    - `-L (--listfiles)`：指定されたパッケージからインストールされたファイル一覧表示
    - `-s (--status)`：パッケージの詳細情報表示
    - `-S (--search)`：指定したファイルがどのパッケージからインストールされたかを表示
    - `-C(--audit)`：インストールが完了していないパッケージの表示
- `dpkg--get-selections`：システムにインストール済みのパッケージを一覧表示する
- `dpkg-query`：ファイル名を指定し、そのファイルをインストールしたパッケージ名を出力する
- `dpkg-reconfigure`：パッケージの post-install スクリプトを再実行して、インストール時の初期設定を再実行する

aptコマンド
- `apt-get`：ネットワーク経由でパッケージを取得，インストール，アンインストールするコマンド
    - `install`：指定パッケージのインストールまたはアップグレード
    - `remove`：指定されたパッケージをシステムからアンインストールする
    - `upgrade`：既存パッケージの削除やパッケージの追加をせずに更新
    - `dist-upgrade`：システム全体のアップグレード
    - `update`：パッケージのデータベースを最新版に更新
    - `clean`：過去に取得したパッケージファイルを削除
- `apt-cache`：APTツールにおいてパッケージ情報の検索・参照などを行うコマンド
    - `search`：キーワードを含むパッケージを検索
    - `show`：指定したパッケージの情報表示
    - `showpkg`：パッケージの被依存関係を含めた情報の表示
    - `depends`：パッケージが依存しているパッケージの一覧表示
- `apt-file`：パッケージの内容を表示したり、あるファイルを含むパッケージを検索するコマンド

## 102.5 RPMとYUMパッケージ管理を使用する
コマンド
- `rpm`：Red Hatベースシステムでソフトウェアパッケージを管理するコマンド
    - 照会，検査
        - `-q (--query)`：パッケージの照会
            - `p (--package)`：パッケージファイルを対象とする
        - `-V (--verify)`：パッケージの検査
            - `-a (--all)`：全パッケージを対象
            - `--nomd5`：MD5によるファイル改ざんを検査しない
    - インストール，アンインストール
    - `-i (--install)`：パッケージのインストール
    - `-U (--upgrade)`：パッケージのアップグレード．なければインストール
    - `-F (--freshen)`：パッケージのアップグレード．なければなにもしない
    - `-e (--erase)`：パッケージのアンインストール
        - `-v`：詳細情報の表示
        - `-h (--hash)`：進行状況を#で表示
- `yum`：パッケージ管理ツール（設定ファイルは`/etc/yum.conf`，リポジトリ設定ファイル`/etc/yum.repos.d`）
    - `install`：パッケージのインストール
    - `info`：パッケージの詳細情報の表示
    - `check-update`：アップデート可能なパッケージの表示
    - `grouplist`：パッケージグループの一覧表示
- `dnf`：yum から分岐した改良版
    - `install`：パッケージのインストール
    - `list --installed`：インストール済みのパッケージのリストを取得
- `zypper`：SUSE Enteprise LinuxやopenSUSEで使用されるパッケージ管理ツール
    - `install (in)`：パッケージのインストール
    - `search (se)`：パッケージの検索
    - `list-updates (lu)`：アップデート可能なパッケージの表示
    - `repos (lr)`：リポジトリの一覧表示
    - `refresh`：リポジトリの更新

## 102.6 仮想化のゲストOSとしてのLinux
ハイパーバイザー型ソフトウェア
- Xen
- KVM
- VirtualBox

コンテナ型ソフトウェア
- LXC
- OenVZ
- Docker

コマンド
- `dbus-uuidgen`：DBusマシンIDを確認する
- `ssh-keygen`：リモートシステムにアクセスするときに使う、sshの公開鍵と秘密鍵のペアを生成する
- `ssh-copy-id`：リモート認証のために、SSHの公開鍵をリモートシステムにコピーする
- `cloud-init`：仮想マシンとコンテナを構成し、クラウド環境への配備を支援する


# 103 GNUとUnixコマンド
## 103.1 コマンドラインでの作業
コマンド
- `pwd`：現在の作業ディレクトリのパスを出力する
- `uname`：システムの情報を表示する
- `man`：コマンドの使用法を文書化したヘルプファイルにアクセスする
    - `-k`：キーワードに一部一致するコマンドやファイルを検索（`apropos`と同じ）
    - `-f`：キーワードに完全一致するコマンドやファイルを検索（`whatis`と同じ）
    - `1`：ユーザーコマンドのマニュアルを参照する
    - `5`：ファイルをマニュアルを参照する
- `type`：コマンドのファイルシステム上の位置や種類を出力する
- `which`：コマンドのファイルシステム上の位置を出力する
- `history`：以前に実行したコマンドを表示または操作する
- `echo`：入力した文字列や変数を出力する
- `env`：環境変数を調べたり、（一時的に）変更したりする
- `export`：シェル変数を環境変数に変換する
- `unset`：シェル変数や関数を削除する

環境変数
- `HISTFILE`：コマンド履歴保存ファイルのパス
- `HISTSIZE`：コマンド履歴の保存数
- `HISTFILESIZE`：コマンド履歴保存ファイルへの履歴保存数
- `HOSTNAME`：ホスト名
- `HOME`：ユーザーのホームディレクトリ
- `LANG`：ロケール
- `PATH`：コマンドやプログラムを検索するディレクトリのリスト
- `PWD`：カレントディレクトリのパス
- `USER`：ログインユーザー

クォート
```
シングルクォート：変数展開されない
$ echo '$HOME'
$HOME

ダブルクォート：変数展開される
$ echo "$HOME"
/home/qiita

シングルクォートとバッククォート
$ echo '今日の日付`date`'
今日の日付`date`

ダブルクォートとバッククォート：コマンドとして扱う
$ echo "今日の日付`date`"
今日の日付2024年 3月．．．
```

## 103.2 フィルターを使用してテキストストリームを処理する
コマンド
- `cat`：プレーンテキストファイルを読み取る、ないしは、結合する
    - `-n`：空行を含めたすべての行に行番号を付けて表示
    - `-b`：空行を除いた行に行番号を付けて表示
- `nl`：“number line” コマンドは、各行の先頭に行番号を付けてファイルを表示する
    - `-b a`：空行を含めたすべての行に行番号を付けて表示
     - `-b t`：空行を除いた行に行番号を付けて表示
- `bzcat`：bzip2形式を使用して圧縮されたファイルを読み取る
- `xzcat`：xz 形式を使用して圧縮されたファイルを読み取ります
- `zcat`：gzip 形式を使用して圧縮されたファイルを読み取る
- `less`：ファイルの内容をページングし、閲覧や検索を行う
- `head`：デフォルトではファイルの先頭10行を表示します。-n オプションを使用すると、表示する行数を増減できる
- `tail`：デフォルトではファイルの末尾10行を表示する
    - `-n`： 表示する行数を指定する
    - `-f`： 新しいデータが書き込まれた時にそれらをすぐに出力する
- `wc`：“word count” の略で、文字、単語、行をカウントします。オプションでカウント対象を指定できる
- `sort`：行ごとに、アルファベット順、アルファベットの逆順、ランダムな順序に、並べ替えて出力する
- `uniq`：同一の行を1行にまとめて、まとめた行数と共に表示します。ファイルはソートされている必要がある
- `od`：“octal dump” に由来するコマンドで、ファイルの内容を8進数、10進数、16進数などで表示する

- `sed`：ストリームエディターは、正規表現を使用して一致する文字列を検索したり、ファイルを編集する
- `tr`：“translate” に由来するコマンドで、文字を置き換えたり、文字の繰り返しを削除ないしまとめる
- `cut`：区切り文字に基づいて行をフィールドに区切り、テキストファイルのカラム（列）を出力する
- `paste`：それぞれのファイルをカラムとして、区切り文字で区切りながら結合する
- `split`：オプションで指定した条件で、大きなファイルを小さなファイルに分割する
- `md5sum`：ファイルのMD5ハッシュ値を計算します。また、既存のハッシュ値とファイルの同一性を検証することもできる
- `sha256sum`：ファイルのSHA256ハッシュ値を計算します。また、既存のハッシュ値とファイルの同一性を検証することもでる
- `sha512sum`：ファイルのSHA512ハッシュ値を計算します。また、既存のハッシュ値とファイルの同一性を検証することもできる

## 103.3 基本的なファイル管理を実行する
圧縮ファイル操作コマンド
- `gzip`：gzip形式（拡張子.gz）の圧縮ファイルを操作
    - `-d`：圧縮ファイルを展開＝`gunzip`
    - `-c`：元ファイルを残して標準出力に出力
    - `-r`：ディレクトリ内のすべてのファイルを再帰的に圧縮
- `bzip2`：bzip2形式（拡張子.bz2）の圧縮ファイルを操作
    - `-d`：圧縮ファイルを展開＝`bunzip2`
    - `-c`：元ファイルを残して標準出力に出力
    - `-r`：ディレクトリ内のすべてのファイルを再帰的に圧縮
- `xz`：xz形式（拡張子.xz）の圧縮ファイルを操作
    - `-d (--decompress)`：圧縮ファイルの展開 ＝ `unxz`
    - `-k (--keep)`：圧縮，展開処理後に元のファイルを削除しない
    - `-l (--list)`：圧縮ファイルの情報を表示する

アーカイブコマンド
- `cpio`：アーカイブファイルを処理する
    - `-o`：新しいアーカイブを作成．`find . -name "*.txt" | cpio -o > archive.cpio`
    - `-i`：アーカイブファイルを展開．`cpio -i < archive.cpio`
- `tar`：アーカイブファイルを処理する `tar cf archive.tar foo hoge`
    - `-c`：新しいアーカイブを作成
    - `-x`：アーカイブからファイルを展開
    - `-t`：内容表示
    - `-v`：処理の詳細情報の表示
    - `-f`：ファイル名指定
    - `-z`：gzipを通して圧縮，展開
    - `-j`：bzip2を通して圧縮，展開
    - `-J`：xzを通して圧縮，展開

コマンド
- `mkdir`：ディレクトリ作成
    - `-m`：アクセス権付与
    - `-p`：中間ディレクトリも作成

## 103.4 ストリーム、パイプ、リダイレクトを使用する
コマンド
- `tee`：標準入力を標準出力先とファイルの両方に出力する(ex: `dmesg | tee log.txt`)

## 103.5 プロセスの作成、監視、終了
コマンド
- `jobs`：アクティブなジョブとそのステータスを表示する
- `fg`：ジョブをフォアグラウンドに移動させる
- `bg`：ジョブをバックグラウンドに移動させる
- `nohup`：セッション/端末からジョブを切り離す
- `exit`：現在のシェルを終了する
- `watch`：コマンドを繰り返し実行する（デフォルトでは2秒ごと）
    - `-n` で秒数指定
- `uptime`：システムの稼働時間、現在のユーザー数、システムのロードアベレージを表示する
- `free`：メモリ使用量を表示する
- `top`：プロセス状態を動的に表示する
- `pgrep`：名前からプロセスIDを検索する
- `pidof`：名前からプロセスIDを検索する
- `ps`：現在のプロセス状態を取得して表示する
    - `a`：他のユーザのプロセスも表示
    - `f`：プロセスの親子関係をツリー上で表示
    - `u`：プロセスの実行ユーザ名も表示
    - `x`：制御端末の無いデーモンなどのプロセスも表示
    - `-e`：すべてのプロセスを表示　`ax`でもすべてのプロセス表示できる
    - `-f`：完全なフォーマットでプロセスを表示
    - `-p, p`：指定したプロセスIDのプロセス情報を表示
    - `-l, l`：親プロセスのPIDや実行優先度を決定．nice値なども併せて表示
- `pkill`：名前を指定してプロセスにシグナルを送信する
- `killall`：名前を指定してプロセスを強制終了させる
- `kill`：プロセスの終了や再起動を行う
    - `HUP (SIGHUP) (1)`：ハングアップ（端末の切断による終了）
    - `INT (SIGINT) (2)`：割り込みによる終了（Ctrl+Cと同じ）
    - `KILL (SIGKILL) (9)`：クリーンアップせずに終了（強制終了）
    - `TERM (SIGTERM) (15)`：クリーンアップして終了（デフォルト）
    - `CONT (SIGCONT) (18)`：一時停止のプロセスを再開
    - `STOP (SIGSTOP) (19)`：一時停止
    - `TSTP (SIGTSTP) (20)`：端末から入力された一時停止（Ctrl+Zと同じ）


## 103.6 プロセス実行の優先順位を変更する
コマンド
- `nice`：優先度を指定してコマンドを実行(プロセスを起動)する（ex: `nice -n 15 tar`）
    - nice値は-20（優先度高）から19（優先度低）まである．
- `renice`：すでに起動しているプロセスのnice値を変更する（ex: `renice -10 -p 2164`）
- `top`, `ps l`：ナイス値を表示する

## 103.7 正規表現を使ってテキストファイルを検索する
sedコマンド：ファイルや標準入力の内容を編集する：`sed -e s/pingt/hoge/g test.txt`
- オプション
    - `-e`：編集コマンドを指定（コマンドが1つの場合は省略可）
    - `-f`：編集コマンドを記述したファイルを指定
- 編集コマンド
    - `s/文字列1/文字列2/`：各行の最初の文字列1を文字列2に置換
    - `s/文字列1/文字列2/g`：すべての文字列1を文字列2に置換
    - `y/文字1文字2/文字3文字4`：文字1を文字3に，文字2を文字4に置換

文字クラス
- `[:alnum:]`：アルファベットと数字
- `[:alpha:]`：アルファベット
- `[:ascii:]`：ASCII文字
- `[:blank:]`：スペースとタブ
- `[:cntrl:]`：制御文字
- `[:digit:]`：数字（0から9）
- `[:xdigit:]`：16進数の数字（0からF）
- `[:graph:]`：スペースを除く印刷可能文字
- `[:lower:]`：小文字
- `[:upper:]`：大文字
- `[:print:]`：スペースを含む印刷可能文字
- `[:punct:]`：句読記号（!"#$%&'()*+,-./:;<⇒?@[\]^_`{|}~）
- `[:space:]`：スペース、フォームフィード（\f）、改行（\n）、キャリッジリターン（\r）、水平タブ（\t）、垂直タブ（\v）

## 103.8 ファイルの基本的な編集
テキストエディタ
- Emacs：開発環境として便利な機能を備えた高機能エディタ
- nano：GUIをサポートしていない軽量の端末エディタ
- Vim：viから派生した高機能なテキストエディタ

ファイル編集viコマンド
- `yy (Y)`：行をコピー
- `yw`：単語をコピー
- `dd`：行を削除しコピー
- `dw`：単語を削除しコピー
- `x`：文字を削除しコピー
- `X`：カーソル位置の左の文字を削除しコピー
- `p`：単語はカーソルの右，行は下にペースト
- `P`：単語はカーソルの左，行は上にペースト
- `u`：元に戻す

# 104 デバイス，Linuxファイルシステム，ファイルシステム階層標準
## 104.1 パーティションとファイルシステムを作成する
コマンド
- `gdisk`：GPT形式のハードディスクのパーティションを操作
- `fdisk`：MBR形式のハードディスクのパーティションを操作
    - `-m`：サブコマンドメニューの表示
    - `-l`：パーティションタイプの一覧表示
    - `-n`：パーティションの作成
- `parted`：MBR形式、GPT形式のパーティションテーブルをサポートするパーティション操作コマンド
- `mkfs`：デフォルトではext2ファイルシステムが作成される（ex: `mkfs /dev/hda1`）
    - `-t`：ファイルシステムの種類を指定
    - `-c`：不良ブロックを検査
- `mke2fs`：デフォルトではext2ファイルシステムが作成される（ex: `mke2fs /dev/hda1`）
    - `-j`：ext3ファイルシステムを作成
    - `-t`：ファイルシステムの種類を指定

ファイルシステム
- ext2：以前のLinuxで標準的に使用されていた規格
- ext3：ジャーナリングファイルシステム
- ext4：ジャーナリングファイルシステム
- XFS：ジャーナリングファイルシステム，動的inode
- JFS：ジャーナリングファイルシステム，動的inode

## 104.2 ファイルシステムの整合性を維持する
コマンド
- `du`：指定したディレクトリ以下のディスク使用量を確認する
- `df`：ファイルシステムの空き容量を確認する
- `fsck`：ファイルシステムをチェックして修復する
- `e2fsck`：ext2/3/4ファイルシステムをチェックする
- `tune2fs`：ext2/3/4ファイルシステムのパラメータを調整する
- `xfs_repair`：XFSファイルシステムをチェックして修復する

## 104.3 ファイルシステムのマウントとアンマウント
コマンド
- `mount`：デバイスをマウントする
    - 引数なしはマウントされているすべてのファイルシステムを一覧表示する
    - `-a`：/etc/fstabファイルに記載されているファイルシステムをすべてマウントする
    - `-o`：マウントオプションを指定
    - `-t`：ファイルシステムの種類を指定
    - `--bind`：ディレクトリをディレクトリにマウント
- `umount`：デバイスをアンマウントする
- `lsof`：ファイルシステムやファイルないしディレクトリにアクセスしているプロセスを一覧表示する
- `lsblk`：ファイルシステムのタイプとUUIDなどを一覧表示する
- `blkid`：ブロックデバイスの情報を表示する

ファイル
`/etc/mtab`：マウントされているファイルシステム情報を格納
`/etc/fstab`：ファイルシステムのマウント設定を記載するファイル

マウントオプション
defaults：デフォルトは（async, auto, dev,exec, nouser, rw, suid）

## 104.5 ファイルのパーミッションと所有権を管理する
コマンド
- `chmod`：ファイルやディレクトリのパーミッションを変更する（ex: `chmod 660 text.txt`）
- `chown`：ファイルやディレクトリの所有者と所有グループを変更する（ex: `chown user text.txt`）
    - `chown ユーザー:グループ ファイル`でグループも変更可能
    - `chown ユーザー.グループ ファイル`でグループも変更可能
- `chgrp`：ファイルやディレクトリの所有グループを変更する
- `umask`：ファイルやディレクトリのデフォルトのパーミッションを確認、設定する

特殊なパーミッション
- スティッキービット：そのファイルの所有者かそのスティッキービットが設定されたディレクトリの所有者しか削除できない設定
    - `chmod o+t work`
    - `chmod 1775 work`
- SGID：ファイルの所有グループの権限で実行する設定
    - `chmod g+s work`
    - `chmod 2775 work`
- SUID：ファイルの所有者の権限で実行する設定
    - `chmod u+s work`
    - `chmod 4775 work`


## 104.6 ハードリンクとシンボリックリンクの作成と変更
シンボリックリンク
- `ln -s`：シンボリックリンクを作成する
- inode番号が違う

ハードリンク
- `ln`：ハードリンクを作成する
- ファイルシステムが異なると作成できない
- ディレクトリのハードリンクは作成できない
- 片方のリンクを削除してももう片方は残る

## 104.7 システムファイルを検索し、ファイルを正しい場所に配置する
ファイル検索関連のコマンド
- `find`：ファイルやディレクトリを検索するコマンド
    - `-name`：ファイル名で検索
    - `-type`：ファイルの種類で検索（f: ファイル，d: ディレクトリ, l: シンボリックリンク）
    - `-exec`：検索結果に対してコマンドを実行する
- `which`：環境変数PATHで設定しているディレクトリから実行可能ファイルのフルパスを示す
- `type`：環境変数PATHで設定しているディレクトリから実行可能ファイルのフルパスと種類を表示する
- `whereis`：実行可能ファイルだけではなく、マニュアルページやソースファイル（存在する場合）も検索する
- `locate`：検索用データベースからファイルやディレクトリを検索する
- `updatedb`：検索用データベースを更新する

ファイルシステム階層標準
- `/`：階層の頂点をなすルートディレクトリ
- `/bin`：システム起動時に必要となる最も重要なコマンドを格納
- `/boot`：初期RAMディスク（initrd）やLinuxカーネルなど、カーネルの起動に必要なファイルを格納する
- `/dev`：デバイスファイルを格納
- `/etc`：ホスト固有の設定ファイルを格納
- `/home`：各ユーザーの個人用ファイルを置くホームディレクトリをこの中に作成
- `/lib`：システム起動時に必要となる最も重要なコマンド（/bin ないし /sbin に置かれる）を実行するために必要な共有ライブラリを格納する
- `/media`：フラッシュドライブ、メモリーカードなどをディレクトリ以下に自動的にマウントする
- `/mnt`：ファイルシステムを一時的にマウントする際に、このディレクトリをマウントポイントにする
- `/opt`：システムに標準ではないオプションのソフトウェアを格納
- `/root`：rootユーザーのホームディレクトリ
- `/run`：アプリケーションが実行時に使用するデータ（主にはPIDを記録したファイル）を格納
- `/sbin`：システム起動時ないしメンテナンス時にシステム管理者が使用するコマンドの実行可能ファイルを格納
- `/srv`：システムサービスが利用するデータを格納
- `/tmp`：一時ファイルを格納
- `/usr`：システム起動時やメンテナンス時に必要とされない、大部分のプログラムや読み取り専用のデータを格納大部分のプログラムやデータは、このディレクトリの下に置かれる
- `/proc`：実行中のプロセス情報を保持する仮想ファイルを格納
- `/var`：印刷キュー、ログ、メールボックス、一時ファイル、ブラウザのキャッシュなど、システムが動いている間は頻繁に書き換えられる可変データを格納