Gre*_*reg 84 linux unix bash symbolic-link rm
我有一个这样的目录:
$ 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
Run Code Online (Sandbox Code Playgroud)
我想使用rm -r.
但是我害怕rm -r会遵循符号链接并删除该目录中的所有内容(这非常糟糕)。
我在手册页中找不到任何关于此的内容。rm -rf从上面的目录运行的确切行为是什么?
Sus*_*Pal 68
示例 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$
Run Code Online (Sandbox Code Playgroud)
所以,我们看到软链接的目标仍然存在。
示例 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$
Run Code Online (Sandbox Code Playgroud)
只是,软链接被删除。软链接的目标存活。
示例 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
Run Code Online (Sandbox Code Playgroud)
符号链接目标中的文件不存在。
上述实验是在 Debian GNU/Linux 9.0 (stretch) 系统上完成的。
小智 21
如果您 rm -rf 运行 ls 的目录,您的 /home/me/msg 目录将是安全的。只会删除符号链接本身,而不是它指向的目录。
我唯一要小心的是,如果你调用类似“rm -rf msg/”(带有斜杠)之类的东西。不要这样做,因为它会删除 msg 指向的目录,而不是 msg 符号链接本身。
| 归档时间: |
|
| 查看次数: |
54746 次 |
| 最近记录: |