2

Linux 系统中如何删除软连接

 1 year ago
source link: https://www.51cto.com/article/720930.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client
550752a263723172d0406061db3ee00380787f.jpg

我们可以使用 ln 命令来创建软连接,那么怎样删除呢?

Linux 中没有用于删除符号链接的特殊命令,不过可以使用 rm 命令,该命令主要用于删除文件和目录,如下:

rm symbolic_link_name

当然也可以使用 unlink 命令,但是不要直接使用软链接的名称,因为它不仅仅用于删除链接,还会删除文件。

unlink symbolic_link_name

下面我们来详细看一下。

使用 rm 命令删除符号链接

在 rm 命令后面提供链接路径的名称:

rm name_or_path_of_link

我们来看个具体例子,如下命令中列出当前路径中的文件:

$ ls -l
total 4708
-rw-rw-r-- 1 abhishek abhishek 4794657 Sep 27 20:36 export.json
-rw-rw-r-- 1 abhishek abhishek     311 Sep 22 12:19 line.txt
lrwxrwxrwx 1 abhishek abhishek      26 Oct 17 11:24 mylink -> ./Documents/sample-mark.md
-rw-rw-r-- 1 abhishek abhishek     106 Sep 27 20:39 redirects.json
-rw-r--r-- 1 abhishek abhishek   12817 Sep 22 12:28 sample.txt

上述列表中 mylink 为符号链接,大家可以看到其是以 l (表示链接)开头,名称显示它指向的文件。

我们使用 rm 删除它,并验证:

$ rm mylink  
$ ls -l
total 4708
-rw-rw-r-- 1 abhishek abhishek 4794657 Sep 27 20:36 export.json
-rw-rw-r-- 1 abhishek abhishek     311 Sep 22 12:19 line.txt
-rw-rw-r-- 1 abhishek abhishek     106 Sep 27 20:39 redirects.json
-rw-r--r-- 1 abhishek abhishek   12817 Sep 22 12:28 sample.txt

如下图所示,源文件仍然存在:

e63fb8674b8e16d0c14911af859b29c97b1a1d.jpg

删除多个链接

可以使用 rm 命令一次删除多个符号链接:

rm symlink1 symlink2 symlink3

使用 unlink 命令删除软链接

删除软链接的另一种方法是使用 unlink 命令。这个命令乍听起来好像只用于删除链接,但其实它也可以删除文件。使用方式如下:

unlink name_or_path_of_link

我们使用上面的例子,如下图所示:

d7bcecd15c14139e33598927be2eb42fa1ba03.jpg

unlink 不能一次删除多个链接。

删除指向目录的软链接

我们可以创建指向文件的软连接,也可以创建指向目录的软链接。删除目录需要使用 -r 选项,但是删除指向目录的链接却不需要使用 -r 选项。

使用方法与删除文件链接的方法相同:

rm name_or_path_to_link_to_dir

删除指向目录的软连接的时候,在目录的末尾不要添加斜杠,否则会报错:

$ rm link_to_dir/
rm: cannot remove 'link_to_dir/': Is a directory

下图是一个删除目录软链接的示例:

b9383ae7759062644be325d17d6de046a0c7f3.jpg

注意,尽量不要使用 -f 选项强制删除指向目录的链接,因为它会删除目录的内容。如下图所示:

c9ca73b6535f8ed84fa96701ad1c1636b483f6.jpg

删除硬链接

与软链接不同,硬链接与原始文件几乎无法区分,你只能通过 inode number 注意到它。

看下面的例子:

$ ls -li
total 4716
 544057 -rw-rw-r-- 1 abhishek abhishek 4794657 Sep 27 20:36 export.json
 544884 -rw-rw-r-- 2 abhishek abhishek     311 Sep 22 12:19 hard_link
 544884 -rw-rw-r-- 2 abhishek abhishek     311 Sep 22 12:19 line.txt
1181365 drwxrwxr-x 2 abhishek abhishek    4096 Oct 17 12:33 my_dir
 546419 -rw-rw-r-- 1 abhishek abhishek     106 Sep 27 20:39 redirects.json

删除硬链接与删除文件相同:

rm path_or_name_of_hard_link

删除链接文件会怎样呢?

实际上,几乎没有在删除软链接的同时,也要删除原始文件的场景和需求。当然,如果有的话,你可以通过符号链接找到原始文件,然后删除它。

rm "$(readlink '/path/to/link')" /path/to/link

注意,如果删除源文件,但是没有删除软链接,那么这个链接将会成为断开的或悬空的链接。

虽然存在 unlink 命令,但是我建议使用 rm 命令来删除符号链接。因为这个是我们都比较熟悉的命令,经常使用它来删除文件,当然也可以用来删除符号链接。

以上就是本次分享全部内容。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK