linux – rm -rf はシンボリックリンクに従いますか?

bash linux rm symbolic-link unix

こんな感じのディレクトリを持っています

$ 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がシンボリックリンクを辿って、そのディレクトリ内のすべてを削除してしまうのが怖いです(これは非常に悪いことです)

このことについては、マニュアルページには何も書いてありません。この上のディレクトリからrm -rfを実行した場合の正確な動作は?

  79  Greg  2012-01-25


ベストアンサー

例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 (stretch) システムで行いました

63  Susam Pal  2012-01-25


あなたの /home/me/msg ディレクトリは、ls を実行したディレクトリを rm -rf することで安全になります。シンボリックリンク自体だけが削除され、それが指すディレクトリは削除されません

唯一注意したいのは、”rm -rf msg/”のように(最後にスラッシュを付けて)呼び出すことです

20  Ken Simon  2012-01-25


rmはファイルとディレクトリを削除する必要があります。ファイルがシンボリックリンクの場合は、対象ではなくリンクが削除されます。シンボリックリンクは解釈されません。例えば、’broken links’を削除するときの動作はどうあるべきか – rmは失敗を示すために0以外の0ではなく0で終了します

5  Jayan  2012-01-26


タイトルとURLをコピーしました