chmod コマンド

# 簡易早見

```zsh
#形式
chmod 権限設定　ファイルパス
#chmod 744 test.txt
```
|0|1|2|3|4|5|6|7|
|:--:|:--:|:--:|:--:|:--:|:--:|:--:|:--:|
|---|--x|-w-|-wx|r--|r-x|rw-|rwx|

```zsh:これだけ覚えればおk
4 2 1
r w x
```

# 概要
`chmod`はファイル or ディレクトリに対する権限を設定するコマンド。
ユーザー区分ごとに権限を設定できる。

# 基礎知識
#### **権限の区分（設定する範囲）**

|所有者権限|グループ権限|その他のユーザーの権限|
|:--:|:--:|:--:|

#### **権限の基本種類**（他にもある）

| 読み込み権限 | 書き込み権限 |実行権限 |
|:--:|:--:|:--:|
| r | w | x | 

#### **権限の範囲**
数値`0~7`で各区分（ユーザーグループ）が所有する**権限の範囲**を設定。区分が3種なので3桁の数値で設定する。0 は権限が無く、7 は全ての権限を有する。

|数値|権限|内容|
|:--:|:--:|:--|
|0|	---|権限なし|
|1|	--x|実行できるよ|
|2|	-w-|書き込みできるよ|
|3|	-wx|書込・実行できるよ|
|4|	r--|読み込みできるよ|
|5|	r-x|読込・実行できるよ|
|6|	rw-|読込・書込みできるよ|
|7|	rwx|読込・書込・実行できるよ|


# 権限指定時の記法記号
**chmod実行時**に使用できる設定用記号文字

|記号|意味|
|:--:|:--|
|u|	所有者の権限|
|g|	グループの権限|
|o|	その他のユーザーの権限|
|a|	すべての権限|
|+|	後に記述した権限を付加する|
|-|	後に記述した権限を削除する|
|=|	後に記述した権限にする|
|r|	読み込み権限|
|w|	書き込み権限|
|x|	実行権限|
|s|	セットID|
|t|	スティッキ・ビット

# コマンドのオプション
|引数|内容|
|:--:|:--|
|-v|コマンド実行結果を表示|
|-c|変更があった場合のみ、実行結果を表示|
|-R|再帰的に変更|


# コマンド設定例

```zsh
#すべてのユーザーに実行権限を与える
chmod +x test
# -rwxr-xr-x      test

#グループに書き込み権限をその他のユーザーにはすべて禁止する
chmod g+w,o= test
# -rwxrwx---      test

#数字表記ですべてのユーザーを読み出し権限のみにする
chmod 444 test
# -r--r--r--      test

#所有者（管理者）に全権限付与、他ユーザーには 書込＋読込 の権限を付与
chmod 766 test
# -rwxrw-rw-      test


#ディレクトリとディレクトリ内のファイル全ての権限を（再帰的に）変更する
chmod -R 766 dir

# vオプションで、実行結果を表示させつつ実行
chmod -vR 755 dir

# cオプションがあるので、結果が変わらない場合は実行結果の表示なし
chmod -cR 755 dir

#その他

chmod 700 test
# -rwx------      test

chmod 600 test
# -rw-------      test

```

# スティッキ・ビットの例
スティッキビットの身近な例は`/tmp`とか

```zsh:
ls -ld /tmp
# drwxrwxrwt 1 root root 512 Dec 12 16:56 /tmp
#          ↑ ここ
```
> /tmp 以下は無法地帯になりそうですが, スティッキービットが付与されているため, 自分が作成したファイル・ディレクトリ以外は削除などできないようになって, 治安が保たれています。
[スティッキービットについて - 寒月記](https://www.kangetsu121.work/entry/2020/05/25/004606)

<details><summary>ここを押して例を表示</summary><div>

```zsh:スティッキビット付与例（t=1000）
chmod +t T_tuki
 # drwxrwxrwt 1 oba3 oba3  512 Dec 12 17:33 T_tuki/

chmod 1000 T_tuki
 # d--------T 1 oba3 oba3  512 Dec 12 17:33 T_tuki/

chmod 1775 T_tuki
 # drwxrwxr-T 1 oba3 oba3  512 Dec 12 17:33 T_tuki/

chmod 1777 T_tuki
 # drwxrwxrwt 1 oba3 oba3  512 Dec 12 17:33 T_tuki/
```

```zsh:スティッキビットありなし時のディレクトリ内ファイル削除の比較例
id
# uid=1791(oji3) ～
# 現在ユーザーは oji3

chmod +t T_tuki
# スティッキビットをディレクトリ権限に付与

ls -l
 # drwxrwxrwt 1 oba3 oba3  512 Dec 12 17:33 T_tuki/
 # drwxrwxrwx 1 oba3 oba3  512 Dec 12 17:33 t_nasi/

ls -l -R T_tuki t_nasi
 # T_tuki:
 # total 0
 # drwxrwxrwt 1 oba3 oba3 512 Dec 12 17:33 ./
 # drwxr-xr-x 1 oba3 oba3 512 Dec 12 17:28 ../
 # -rwxrwxrwx 1 oba3 oba3   0 Dec 12 17:31 kesenai*
 # 
 # t_nasi:
 # total 0
 # drwxrwxrwx 1 oba3 oba3 512 Dec 12 17:33 ./
 # drwxr-xr-x 1 oba3 oba3 512 Dec 12 17:28 ../
 # -rwx------ 1 oba3 oba3   0 Dec 12 17:31 keseru*

rm T_tuki/kesenai; ls -l T_tuki
 # rm: cannot remove 'T_tuki/kesenai': Operation not permitted
 # total 0
 # drwxrwxrwt 1 oba3 oba3 512 Dec 12 17:33 ./
 # drwxr-xr-x 1 oba3 oba3 512 Dec 12 17:28 ../
 # -rwxrwxrwx 1 oba3 oba3   0 Dec 12 17:31 kesenai*


rm t_nasi/keseru; ls -l t_nasi
 # total 0
 # drwxrwxrwx 1 oba3 oba3 512 Dec 12 17:33 ./
 # drwxr-xr-x 1 oba3 oba3 512 Dec 12 17:28 ../

# ----------------------------------------------------------------------

# T_tuki/kesenai はディレクトリ権限が 1777 で、スティッキビットがディレクトリに設定されているため、中のファイルが（ファイル所有者が oji3 でなければ）削除できない。

# t_nasi/keseru はディレクトリ権限が 777 のため、中のファイル所有者が oba3 で ファイル権限が 700 でもファイル削除できる。

```

> ファイルの削除はファイルのパーミッションに関わらず、ディレクトリのパーミッションが参照されます。
しかし、スティッキービットを指定したディレクトリに関しては、
ファイルの削除がファイルの所有者のみに制限されます。
[パーミッションについて - Qiita](https://qiita.com/tomoyuki_okawa/items/e4444e727946b956e1ee)

</div></details>

---

http://tech.nikkeibp.co.jp/it/article/COLUMN/20060227/230728/

https://eng-entrance.com/linux-command-chmod