跳转至

文件系统中的“分身术”ln命令

在日常的Linux系统操作中,ln命令是我们经常用到的一个工具,它允许我们为文件或目录创建链接。

在文件系统中,ln命令的作用就像是为文件或目录施展了“分身术”,让我们能够在多个位置访问同一个文件或目录,而无需复制其内容。

一、ln命令的用法

1. 基本语法

ln [OPTION]... TARGET [LINK_NAME]
ln [OPTION]... TARGET... DIRECTORY
ln [OPTION]... -t DIRECTORY TARGET...

常用的选项有:

  • -t:指定要在其中创建链接的目录。
  • -s:创建符号链接(也称为软链接)。
  • -P:创建硬链接。
  • -f:如果目标文件已存在,则强制覆盖它。

2. 使用示例

为文件创建硬链接:

··· ln -P /app/app1/bin/start.sh /app/app2/bin/start.sh ···

这会在/app/app2/bin/目录下创建一个名为start.sh的硬链接,它指向/app/app1/bin/start.sh。硬链接和原文件指向同一个inode(索引节点),删除其中一个不会影响另一个。

使用命令ls -l查看start.sh的详细信息,第二列链接计数(即:指向该inode的硬链接数量)显示为2,表示有两个文件名指向start.sh文件,普通文件该值为1:

~$ ls -l /app/app*/bin/start.sh
-rwxr-xr-x 2 root root 3862 Dec 20 9:42 /app/app1/bin/start.sh
-rwxr-xr-x 2 root root 3862 Dec 20 9:42 /app/app2/bin/start.sh

为目录创建符号链接:

ln -s redis-7.2.4 redis

这会在当前目录下创建一个名为redis的符号链接,它指向目录redis-7.2.4。

二、硬链接与符号链接的区别

1. 硬链接

硬链接是指向文件数据块(inode)的链接,它和原文件有相同的inode和文件数据块。

删除一个硬链接不会影响到文件数据,只有当所有的硬链接都被删除后,文件数据才会被释放

适用场景:希望多个路径指向同一个文件,并且希望其中一个路径发生变化时,其他路径仍然有效,就可以使用硬链接

如示例1中,app1和app2将使用同一个启动脚本start.sh,如果修改启动脚本,则该修改对app1和app2同时生效。

2. 符号链接

符号链接是一个特殊类型的文件,它包含了对另一个文件或目录的文本引用。删除符号链接只会删除这个引用,而不会影响到被引用的文件或目录。

适用场景:软链接通常用于链接到不同文件系统或不同分区的文件。可以创建一个软链接,指向另一位置的某个文件或目录,这样就可以像操作当前目录的文件/目录一样,来访问这些文件/目录。

如示例2中,为目录redis-7.2.4创建名为redis的符号链接,当访问redis时,将访问redis-7.2.4目录,达到简化目录名、方便进行应用版本控制的目的。

三、注意事项

在使用ln命令时,需要注意以下几点:

不能对目录创建硬链接,只能对文件创建硬链接。

符号链接可以跨文件系统,而硬链接只能在同一个文件系统内创建。

创建链接时要确保目标位置没有同名文件或链接,否则可能会覆盖原有文件或链接。