ln
命令在 Linux 系统中用来建立文件之间的连接。在需要共用某些文件或目录的场合,通过创建这种文件连接可以方便管理。从某些方面来说,Linux 的文件连接有点类似于 Windows 系统下的快捷方式,但又不尽相同。
Linux 的连接分为两种类型:硬连接和软连接。
一个硬连接仅仅是一个文件名。一个文件可以有好几个文件名,只有将最后一个文件名从磁盘上删除,才能把这个文件删掉。所有的文件名都处于同一状态,也就没有「源名字」之说,有点类似于去中心化的分布式文件。乍一看,这和用来复制文件的 cp 命令有点像,但事实上存在本质区别。由 ln
命令创建的硬连接文件,修改任何一个文件内容,其他文件的内容都会随之改变。这种既能分身又能保持文件内容同步的能力 cp
命令是做不到的。
至于软连接(也称为符号连接),就又不一样了。它只是一个指向了目标文件的路径映射。删除一个软连接不会其指向的目标文件有任何影响,但如果删除了指向的目标文件,这个软连接也就没法访问了。
使用 ln
命令时,一定要先明确这两种连接类型的区别,然后根据情况来选择。大多数情况下,软连接就能满足需求。
ln 命令格式
ln [选项]... [-T] 目标 链接名
ln [选项]... 目标
ln [选项]... 目标... 目录
ln [选项]... -t 目录 目标...
如上所示,ln
有四种命令格式。在第一种格式中,创建具有指定「链接名」且指向指定「目标」的链接。在第二种格式中,在当前目录创建指向「目标」位置的链接。在第三和第四种格式中,在指定「目录」中创建指向指定「目标」的链接。
ln 命令示例
给 test.txt 文件建立一个名为 test-hard-link.txt 的硬连接文件:
ln test.txt test-hard-link.txt
建立一个软连接:
ln -s test.txt test-soft-link.txt
把指定目录建立为一个软连接:
ln -s test-folder test-folder-soft-link
更新已存在的软连接文件:
ln -sf new-test.txt test-soft-link.txt
ln 命令选项
缩写 | 完整名称 | 说明 |
---|---|---|
-backup [=CONTROL] |
为每个已存在的目标文件创建备份文件。 | |
-b |
类似--backup,但不接受任何参数。 | |
-d , -F |
--directory |
允许超级用户尝试创建指向目录的硬链接(注意:此操作可能因系统限制而失败)。 |
-f |
--force |
强行删除任何已存在的目标文件。 |
-i |
--interactive |
删除目标文件前进行确认。 |
-L |
--logical |
如目标为符号链接,本次创建链接时将其解引用。 |
-n |
--no-dereference |
如果给定链接名是一个链接至某目录的符号链接,将其作为普通文件处理。 |
-P |
--physical |
创建直接指向符号链接文件的硬链接。 |
-r |
--relative |
创建相对于链接位置的符号链接。 |
-s |
--symbolic |
创建符号链接而非硬链接。 |
-S |
--suffix= 后缀 |
自行指定备份文件的后缀。 |
-t |
--target-directory= 目录 |
在指定目录中创建链接。 |
-T |
--no-target-directory |
总是将给定的链接名当作普通文件。 |
-v |
--verbose |
列出每个链接的文件名称。 |
--help |
显示此帮助信息并退出。 | |
--version |
显示版本信息并退出。 |
在使用 ln
命令的备份选项 --backup
时,可以指定 CONTROL
版本控制参数。它有以下可用的参数:
参数名称 | 说明 |
---|---|
numbered , t |
备份文件加上数字进行排序。 |
existing , nil |
若有数字的备份文件已经存在则使用数字,否则使用普通方式备份。 |
simple , never |
使用普通方式备份。 |
none , off |
不进行备份。 |
默认的备份文件后缀为 ~
符号。如果想要自定义这个后缀,可以通过 --suffix
选项或是 SIMPLE_BACKUP_SUFFIX
环境变量来指定。