如何安全删除主文件夹的硬链接?

如何安全删除主文件夹的硬链接?

在我的用户拥有的文件夹中,/sites/Website有一个名为 的目录~

当我cd进入此目录时,我会被重定向到~/我的主文件夹。

起初我以为这是一个符号链接,但实际操作后ls -al发现它很普通。我假设这是一个硬链接。我跑:

$ rm -r /sites/Website/~

这实际上开始删除我的主文件夹,并且丢失了很多数据。我停了rm下来Ctrlc。我怎样才能安全地删除这个链接?

答案1

~许多 shell将路径名开头的斜线之前的前导波形符 ( ) 扩展为 HOME 目录的绝对路径。您可以通过引用波浪号字符或确保波浪号不以路径名开头来防止此 shell 扩展:

$ echo "$HOME"
/home/idallen
$ echo ~
/home/idallen
$ echo "~"
~
$ echo \~
~
$ echo ./~
./~

对于 Unix 本身来说,波浪号字符没有什么特别之处,因此您可以创建一个名为 波浪号 的目录,前提是您使用上述任何方法隐藏波浪号以防止 shell 扩展:

$ mkdir "~"
$ ls -ld '~'
drwxr-xr-x 2 idallen idallen 40 Oct 22 08:45 ~
$ ls -ld \~
drwxr-xr-x 2 idallen idallen 40 Oct 22 08:45 ~
$ ls -ld ./~
drwxr-xr-x 2 idallen idallen 40 Oct 22 08:45 ~
$ ls -ld /tmp/idallen/~
drwxr-xr-x 2 idallen idallen 40 Oct 22 08:45 /tmp/idallen/~

如果您没有在 shell 中隐藏前导波浪号字符,则 shell 会将其扩展为您的 HOME 目录。在命令行前面添加echo命令可以显示 shell 在执行之前对命令行执行的操作:

$ echo cd ~
cd /home/idallen                 # would go to $HOME directory
$ echo cd ./~
cd ./~                           # would go into directory named ~

您已经发现需要引用波浪号,因为下面的命令会产生非常不同的效果,具体取决于您的 shell 扩展未加引号的前导波浪号:

$ echo rm -r ~       
rm -r /home/idallen              # would remove the $HOME directory
$ echo rm -r "~"
rm -r ~                          # would remove the directory named ~
$ echo rm -r ./~
rm -r ./~                        # would remove the directory named ~
$ echo rm -r /tmp/idallen/~
rm -r /tmp/idallen/~             # would remove the directory named ~

只有路径名开头不带引号的波形符才会扩展为您的主目录。

相关内容