1. 命令介绍
ln是linux中又一个非常重要命令,它的功能是为某一个文件在另外一个位置建立一个同步的链接.当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录,放上该文件,然后在 其它的目录下用ln命令链接(link)它就可以,不必重复的占用磁盘空间。
2. 命令格式
ln [参数] [源文件或目录] [目标文件或目录]
3. 命令功能
默认创建硬链接,当使用 -s
时创建符号链接。在 linux 文件系统中,所谓的链接(link),我们可以将其视为档案的别名,而链接有可以分为两种:硬链接和软链接
- 软链接
- 软链接以路径的形式存在,类似于Windows系统中的快捷方式。
- 软链接可以跨文件系统,而硬链接不可以。
- 软链接可以对一个不存在的文件名进行链接。
- 软链接可以对目录进行链接。
- 硬链接
- 硬链接以文本副本的形式存在,但不占用实际空间。
- 不允许给目录创建硬链接。
- 硬链接只有在同一个文件系统中才能创建。
注意:
第一,ln命令会保持每一处链接文件的同步性,也就是说,不论你改动了哪一处,其它的文件都会发生相同的变化;
第二,ln的链接又分软链接和硬链接两种,软链接就是ln –s 源文件 目标文件,它只会在你选定的位置上生成一个文件的镜像,不会占用磁盘空间,硬链接 ln 源文件 目标文件,没有参数-s, 它会在你选定的位置上生成一个和源文件大小相同的文件,无论是软链接还是硬链接,文件都保持同步变化。
ln指令用在链接文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则会把前面指定的所有文件或目录复制到该目录中。若同时指定多个文件或目录,且最后的目的地并非是一个已存在的目录,则会出现错误信息。
4. 常用选项
选项 | 含义 |
---|---|
-d | -F, --directory:创建指向目录的硬链接(只适用于超级用户) |
-f | 强行删除任何已存在的目标文件 |
-i | 删除文件前进行确认 |
-L | 将硬链接创建为符号链接引用 |
-n | 如果目的地是一个链接至某目录的符号链接,会将该符号链接当作普通文件处理,先将该已存在的链接备份或删除 |
-s | 创建符号链接而非硬链接 |
-S | --suffix=后缀:自行指定备份文件的后缀 |
-t | 在指定目录中创建链接 |
-T | 将链接名称当作普通文件 |
-v | 链接前先列出每个文件的名称 |
--help | 显示此帮助信息并退出 |
5. 常用实例
- 给文件创建软链接
[root@localhost ~]# touch log.txt
[root@localhost ~]# ll
total 4
-rw-------. 1 root root 1482 May 24 18:16 anaconda-ks.cfg
-rw-r--r-- 1 root root 0 Nov 20 16:31 log.txt
[root@localhost ~]# ln -s log.txt link_log.txt
[root@localhost ~]# ll
total 4
-rw-------. 1 root root 1482 May 24 18:16 anaconda-ks.cfg
lrwxrwxrwx 1 root root 7 Nov 20 16:32 link_log.txt -> log.txt
-rw-r--r-- 1 root root 0 Nov 20 16:31 log.txt
- 给文件创建硬链接
[root@localhost ~]# ll
total 4
-rw-------. 1 root root 1482 May 24 18:16 anaconda-ks.cfg
lrwxrwxrwx 1 root root 7 Nov 20 16:32 link_log.txt -> log.txt
-rw-r--r-- 1 root root 0 Nov 20 16:31 log.txt
[root@localhost ~]# ln log.txt ln_log.txt
[root@localhost ~]# ll
total 4
-rw-------. 1 root root 1482 May 24 18:16 anaconda-ks.cfg
lrwxrwxrwx 1 root root 7 Nov 20 16:32 link_log.txt -> log.txt
-rw-r--r-- 2 root root 0 Nov 20 16:31 ln_log.txt
-rw-r--r-- 2 root root 0 Nov 20 16:31 log.txt
- 接上面实例,创建链接后删除和重建链接源文件
[root@localhost ~]# rm -f log.txt
[root@localhost ~]# ll
total 4
-rw-------. 1 root root 1482 May 24 18:16 anaconda-ks.cfg
lrwxrwxrwx 1 root root 7 Nov 20 16:32 link_log.txt -> log.txt
-rw-r--r-- 1 root root 0 Nov 20 16:31 ln_log.txt
image
[root@localhost ~]# touch log.txt
[root@localhost ~]# ll
total 4
-rw-------. 1 root root 1482 May 24 18:16 anaconda-ks.cfg
lrwxrwxrwx 1 root root 7 Nov 20 16:32 link_log.txt -> log.txt
-rw-r--r-- 1 root root 0 Nov 20 16:31 ln_log.txt
-rw-r--r-- 1 root root 0 Nov 20 17:12 log.txt
[root@localhost ~]# echo 'log.txt' > log.txt
[root@localhost ~]# cat log.txt
log.txt
[root@localhost ~]# cat link_log.txt
log.txt
[root@localhost ~]# cat ln_log.txt
[root@localhost ~]#
说明:
- 源文件被删除后,并没有影响硬链接文件,软链接文件在CentOS系统下不断闪烁,提示源文件不存在。
- 重建源文件后,软链接不再闪烁提示,说明已经链接成功,找到了链接文件。而硬链接文件并没有受到影响,硬链接文件的内容还保留了删除前源文件的内容,说明硬链接失效。
- 将文件链接到另一个目录中,并且名称相同
[root@localhost ~]# ll /opt/
total 0
drwx------ 3 root root 34 Nov 16 22:41 test3
# 创建硬链接到另一个目录中
[root@localhost ~]# ln log.txt /opt/
[root@localhost ~]# ll /opt/
total 4
-rw-r--r-- 2 root root 8 Nov 20 17:13 log.txt
drwx------ 3 root root 34 Nov 16 22:41 test3
# 查看文件内容
[root@localhost ~]# cat log.txt
log.txt
[root@localhost ~]# cat /opt/log.txt
log.txt
# 修改文件内容
[root@localhost ~]# echo 'log.txt' >> /opt/log.txt
[root@localhost ~]# cat log.txt
log.txt
log.txt
[root@localhost ~]# cat /opt/log.txt
log.txt
log.txt
在 /opt/ 目录下创建 log.txt 文件的硬链接,修改 /opt/ 目录下的 log.txt 文件,同时也会修改源文件
- 给目录创建软链接
[root@localhost ~]# mkdir test1 test2
[root@localhost ~]# ll
total 8
-rw-------. 1 root root 1482 May 24 18:16 anaconda-ks.cfg
lrwxrwxrwx 1 root root 7 Nov 20 16:32 link_log.txt -> log.txt
-rw-r--r-- 1 root root 0 Nov 20 16:31 ln_log.txt
-rw-r--r-- 2 root root 16 Nov 20 17:20 log.txt
drwxr-xr-x 2 root root 6 Nov 20 17:25 test1
drwxr-xr-x 2 root root 6 Nov 20 17:25 test2
# 使用相对路径创建软链接
[root@localhost ~]# cd test2/
[root@localhost test2]# ln -sv ../test1/
‘./test1’ -> ‘../test1/’
[root@localhost test2]# ll
total 0
lrwxrwxrwx 1 root root 9 Nov 20 17:28 test1 -> ../test1/
# 删除目录软链接
[root@localhost test2]# rm -f test1
[root@localhost test2]# ll
total 0
# 使用绝对路径创建软链接
[root@localhost ~]# ln -s /root/test1/ /root/test2/
[root@localhost ~]# ll /root/test2/
total 0
lrwxrwxrwx 1 root root 12 Nov 20 17:35 test1 -> /root/test1/
说明:
- 目录只能创建软链接
- 在链接目录中创建和修改文件都会在源目录中同步变化
网友评论