web-dev-qa-db-ja.com

rm -rfはシンボリックリンクをたどりますか?

私はこのようなディレクトリを持っています:

$ ls -l
total 899166
drwxr-xr-x 12 me scicomp       324 Jan 24 13:47 data
-rw-r--r--  1 me scicomp     84188 Jan 24 13:47 lod-thin-1.000000-0.010000-0.030000.rda
drwxr-xr-x  2 me scicomp       808 Jan 24 13:47 log
lrwxrwxrwx  1 me scicomp        17 Jan 25 09:41 msg -> /home/me/msg

そして、rm -rを使用して削除したいと思います。

しかし、私はrm -rがシンボリックリンクをたどり、そのディレクトリ内のすべてを削除するのが怖いです(これは非常に悪いことです)。

これについては、manページでは何も見つかりません。このディレクトリより上のディレクトリからrm -rfを実行すると、正確な動作はどうなりますか?

74
Greg

例1:別のディレクトリへのソフトリンクを含むディレクトリの削除

susam@nifty:~/so$ mkdir foo bar
susam@nifty:~/so$ touch bar/a.txt
susam@nifty:~/so$ ln -s /home/susam/so/bar/ foo/baz
susam@nifty:~/so$ tree
.
├── bar
│   └── a.txt
└── foo
    └── baz -> /home/susam/so/bar/

3 directories, 1 file
susam@nifty:~/so$ rm -r foo
susam@nifty:~/so$ tree
.
└── bar
    └── a.txt

1 directory, 1 file
susam@nifty:~/so$

したがって、ソフトリンクのターゲットが存続していることがわかります。

例2:ディレクトリへのソフトリンクの削除

susam@nifty:~/so$ ln -s /home/susam/so/bar baz
susam@nifty:~/so$ tree
.
├── bar
│   └── a.txt
└── baz -> /home/susam/so/bar

2 directories, 1 file
susam@nifty:~/so$ rm -r baz
susam@nifty:~/so$ tree
.
└── bar
    └── a.txt

1 directory, 1 file
susam@nifty:~/so$

のみ、ソフトリンクが削除されます。ソフトリンクのターゲットは存続します。

例3:ソフトリンクのターゲットを削除しようとしています

susam@nifty:~/so$ ln -s /home/susam/so/bar baz
susam@nifty:~/so$ tree
.
├── bar
│   └── a.txt
└── baz -> /home/susam/so/bar

2 directories, 1 file
susam@nifty:~/so$ rm -r baz/
rm: cannot remove 'baz/': Not a directory
susam@nifty:~/so$ tree
.
├── bar
└── baz -> /home/susam/so/bar

2 directories, 0 files

シンボリックリンクのターゲットにあるファイルは存続しません。

上記の実験は、Debian GNU/Linux 9.0(ストレッチ)システムで行われました。

59
Susam Pal

/ home/me/msgディレクトリは、lsを実行したディレクトリをrm -rfすると安全です。削除されるのはシンボリックリンクのみで、それが指しているディレクトリは削除されません。

「rm -rf msg /」のように(末尾のスラッシュを付けて)呼び出す場合は、注意が必要です。これを行わないでください。これにより、msgシンボリックリンクではなく、msgが指すディレクトリが削除されます。自体。

19
Ken Simon

rmはファイルとディレクトリを削除する必要があります。ファイルがシンボリックリンクの場合、ターゲットではなくリンクが削除されます。シンボリックリンクは解釈されません。たとえば、「壊れたリンク」を削除するときの動作は何ですか-rmは0で終了し、失敗を示す非ゼロではありません

5
Jayan