rmコマンドによる再起的な削除（-rオプション）で消えるもの、残るもの

# 結論

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838636/4ed8d8e1-de91-d210-eee3-02b68dbe251b.png)
※ r は読取、x は実行、w は書込の権限を示す（-は権限なし）


- 実行ユーザーがrx（読取・実行）権限をもつディレクトリに対してはその配下への削除が試みられる

- ~~削除が試みられた対象がディレクトリの場合、上位ディレクトリと対象のディレクトリにw（書込）権限があると削除される~~ 
- 削除が試みられた対象がディレクトリの場合、
・対象のディレクトリが空なら上位ディレクトリにw権限があることで削除される
・対象のディレクトリが空でないなら上位ディレクトリにw権限があっても削除されない
　※空でないケース
　　- 対象のディレクトリにw権限がなく配下のディレクトリまたはファイルが削除できない
　　- 対象のディレクトリにr権限がなく配下の参照ができない

- 削除が試みられた対象がファイルの場合、上位ディレクトリにw（書込）権限があると（つまり所属ディレクトリへの書込権限があると）ファイルに対する権限の有無に依らず削除される

<font color="Red">⇒実行ユーザーの権限次第ではあまり消えない。</font>
<font color="Red">（とりあえずフルコントロールみたいなことを習慣的にやってしまっていると結構消える。）</font>
<font color="Red">⇒スーパーユーザーで誤ってルートから実行してしまうと全てが終わる。</font>

# 実験

前提環境：
　CentOS Linux release 7.8.2003 （Docker起動）

ディレクトリ構成：
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838636/23ac4810-9f7a-0d5e-e729-5ca8791f6351.png)

- - -
DockerコンテナでCentOSを起動する。

```console:rootユーザーで実行
~$ docker run -it --name=centos centos:7 bash -rm
```

- - -
CentOSのバージョンを確認する。

```console:rootユーザーで実行
# cat /etc/redhat-release 
CentOS Linux release 7.8.2003 (Core)
```

- - -
同じグループで`USER_A`と`USER_B`を作成する。

```console:rootユーザーで実行
# adduser USER_A
# adduser -g 1000 USER_B
# cat /etc/passwd | grep USER
USER_A:x:1000:1000::/home/USER_A:/bin/bash
USER_B:x:1001:1000::/home/USER_B:/bin/bash
```

- - -
上記のイメージ図と同じディレクトリを構成する。
あとで`USER_A`と同じグループ内にいる`USER_B`で`rm -rf`を実行するため、
注目すべき権限はディレクトリまたはファイルの所有者と同じグループ内にいるユーザーに対する権限の部分。（`ll`コマンド結果の各行先頭から5文字目のr、6文字目のx、7文字目のx）

```console:USER_Aで実行
$ ll -d $(find `pwd`) | grep Dir
drwxr----- 3 USER_A USER_A 4096 Nov  5 03:02 /home/USER_A/Dir1_r
drwxrwx--- 2 USER_A USER_A 4096 Nov  5 03:05 /home/USER_A/Dir1_r/Dir1_r_rwx
-rw-rw---- 1 USER_A USER_A    0 Nov  5 03:05 /home/USER_A/Dir1_r/Dir1_r_rwx/FIle1rw.dat
drwx--x--- 3 USER_A USER_A 4096 Nov  5 03:03 /home/USER_A/Dir2_x
drwxrwx--- 2 USER_A USER_A 4096 Nov  5 03:06 /home/USER_A/Dir2_x/Dir2_x_rwx
-rw-rw---- 1 USER_A USER_A    0 Nov  5 03:06 /home/USER_A/Dir2_x/Dir2_x_rwx/FIle2rw.dat
drwxr-x--- 3 USER_A USER_A 4096 Nov  5 03:03 /home/USER_A/Dir3_rx
drwxrwx--- 4 USER_A USER_A 4096 Nov  5 03:55 /home/USER_A/Dir3_rx/Dir3_rx_rwx
drwxr----- 2 USER_A USER_A 4096 Nov  5 03:07 /home/USER_A/Dir3_rx/Dir3_rx_rwx/Dir3_rx_rwx_r
-rw------- 1 USER_A USER_A    0 Nov  5 03:07 /home/USER_A/Dir3_rx/Dir3_rx_rwx/Dir3_rx_rwx_r/File3no.dat
-rw-r----- 1 USER_A USER_A    0 Nov  5 03:07 /home/USER_A/Dir3_rx/Dir3_rx_rwx/Dir3_rx_rwx_r/File3r.dat
-rw-rw---- 1 USER_A USER_A    0 Nov  5 03:07 /home/USER_A/Dir3_rx/Dir3_rx_rwx/Dir3_rx_rwx_r/File3rw.dat
drwxrwx--- 2 USER_A USER_A 4096 Nov  5 03:56 /home/USER_A/Dir3_rx/Dir3_rx_rwx/Dir3_rx_rwx_rwx
-rw------- 1 USER_A USER_A    0 Nov  5 03:56 /home/USER_A/Dir3_rx/Dir3_rx_rwx/Dir3_rx_rwx_rwx/File3no.dat
-rw------- 1 USER_A USER_A    0 Nov  5 03:52 /home/USER_A/Dir3_rx/Dir3_rx_rwx/File3no.dat
-rw-r----- 1 USER_A USER_A    0 Nov  5 03:52 /home/USER_A/Dir3_rx/Dir3_rx_rwx/File3r.dat
-rw-rw---- 1 USER_A USER_A    0 Nov  5 03:52 /home/USER_A/Dir3_rx/Dir3_rx_rwx/File3rw.dat
```

- - -
`USER_B`で`rm -rf`を実行する。

```console:USER_Bで実行
$ rm -rf /home/USER_A/*
rm: cannot remove '/home/USER_A/Dir1_r/Dir1_r_rwx': Permission denied
rm: cannot remove '/home/USER_A/Dir2_x': Permission denied
rm: cannot remove '/home/USER_A/Dir3_rx/Dir3_rx_rwx/Dir3_rx_rwx_r/File3r.dat': Permission denied
rm: cannot remove '/home/USER_A/Dir3_rx/Dir3_rx_rwx/Dir3_rx_rwx_r/File3no.dat': Permission denied
rm: cannot remove '/home/USER_A/Dir3_rx/Dir3_rx_rwx/Dir3_rx_rwx_r/File3rw.dat': Permission denied
```

- - -
`USER_B`によるで`rm -rf`実行後に｀USER_A`でディレクトリ構成を確認する。

```console:USER_Aで実行
$ ll -d $(find `pwd`) | grep Dir
drwxr----- 3 USER_A USER_A 4096 Nov  5 03:02 /home/USER_A/Dir1_r
drwxrwx--- 2 USER_A USER_A 4096 Nov  5 03:05 /home/USER_A/Dir1_r/Dir1_r_rwx
-rw-rw---- 1 USER_A USER_A    0 Nov  5 03:05 /home/USER_A/Dir1_r/Dir1_r_rwx/FIle1rw.dat
drwx--x--- 3 USER_A USER_A 4096 Nov  5 03:03 /home/USER_A/Dir2_x
drwxrwx--- 2 USER_A USER_A 4096 Nov  5 03:06 /home/USER_A/Dir2_x/Dir2_x_rwx
-rw-rw---- 1 USER_A USER_A    0 Nov  5 03:06 /home/USER_A/Dir2_x/Dir2_x_rwx/FIle2rw.dat
drwxr-x--- 3 USER_A USER_A 4096 Nov  5 03:03 /home/USER_A/Dir3_rx
drwxrwx--- 3 USER_A USER_A 4096 Nov  5 03:59 /home/USER_A/Dir3_rx/Dir3_rx_rwx
drwxr----- 2 USER_A USER_A 4096 Nov  5 03:07 /home/USER_A/Dir3_rx/Dir3_rx_rwx/Dir3_rx_rwx_r
-rw------- 1 USER_A USER_A    0 Nov  5 03:07 /home/USER_A/Dir3_rx/Dir3_rx_rwx/Dir3_rx_rwx_r/File3no.dat
-rw-r----- 1 USER_A USER_A    0 Nov  5 03:07 /home/USER_A/Dir3_rx/Dir3_rx_rwx/Dir3_rx_rwx_r/File3r.dat
-rw-rw---- 1 USER_A USER_A    0 Nov  5 03:07 /home/USER_A/Dir3_rx/Dir3_rx_rwx/Dir3_rx_rwx_r/File3rw.dat
```

消えたのは、
`/home/USER_A/Dir3_rx/Dir3_rx_rwx/Dir3_rx_rwx_r/File3no.dat`
`/home/USER_A/Dir3_rx/Dir3_rx_rwx/Dir3_rx_rwx_r/File3r.dat`
`/home/USER_A/Dir3_rx/Dir3_rx_rwx/Dir3_rx_rwx_r/File3rw.dat`
`/home/USER_A/Dir3_rx/Dir3_rx_rwx/Dir3_rx_rwx_rwx`
`/home/USER_A/Dir3_rx/Dir3_rx_rwx/Dir3_rx_rwx_rwx/File3no.dat`