我有一个这样的目录:
$ 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
从此目录的上级目录运行的具体行为是什么?
答案1
示例 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)系统上进行的。
答案2
如果您 rm -rf 运行 ls 的目录,您的 /home/me/msg 目录将是安全的。只有符号链接本身会被删除,而不会删除它指向的目录。
我唯一要谨慎的事情是,如果你调用类似“rm -rf msg/”(带有尾部斜杠)的命令。不要这样做,因为它将删除 msg 指向的目录,而不是 msg 符号链接本身。
答案3
rm
应删除文件和目录。如果文件是符号链接,则删除的是链接,而不是目标。它不会解释符号链接。例如,删除“断开的链接”时的行为应该是什么 - rm 以 0 退出,而不是以非零退出以表示失败