【运维常用命令】文件和目录操作命令-12-ln命令

文章目录

    • 1. 命令介绍
    • 2. 命令格式
    • 3. 命令功能
    • 4. 常用选项
    • 5. 常用实例

1. 命令介绍

ln是linux中又一个非常重要命令,它的功能是为某一个文件在另外一个位置建立一个同步的链接.当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录,放上该文件,然后在 其它的目录下用ln命令链接(link)它就可以,不必重复的占用磁盘空间。

2. 命令格式

ln [参数] [源文件或目录] [目标文件或目录]

3. 命令功能

默认创建硬链接,当使用 -s 时创建符号链接。在 linux 文件系统中,所谓的链接(link),我们可以将其视为档案的别名,而链接有可以分为两种:硬链接软链接

  • 软链接
    1. 软链接以路径的形式存在,类似于Windows系统中的快捷方式。
    2. 软链接可以跨文件系统,而硬链接不可以。
    3. 软链接可以对一个不存在的文件名进行链接。
    4. 软链接可以对目录进行链接。
  • 硬链接
    1. 硬链接以文本副本的形式存在,但不占用实际空间。
    2. 不允许给目录创建硬链接。
    3. 硬链接只有在同一个文件系统中才能创建。

注意:

第一,ln命令会保持每一处链接文件的同步性,也就是说,不论你改动了哪一处,其它的文件都会发生相同的变化;

第二,ln的链接又分软链接和硬链接两种,软链接就是ln –s 源文件 目标文件,它只会在你选定的位置上生成一个文件的镜像,不会占用磁盘空间,硬链接 ln 源文件 目标文件,没有参数-s, 它会在你选定的位置上生成一个和源文件大小相同的文件,无论是软链接还是硬链接,文件都保持同步变化。

ln指令用在链接文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则会把前面指定的所有文件或目录复制到该目录中。若同时指定多个文件或目录,且最后的目的地并非是一个已存在的目录,则会出现错误信息。

4. 常用选项

选项 含义
-d -F, --directory:创建指向目录的硬链接(只适用于超级用户)
-f 强行删除任何已存在的目标文件
-i 删除文件前进行确认
-L 将硬链接创建为符号链接引用
-n 如果目的地是一个链接至某目录的符号链接,会将该符号链接当作普通文件处理,先将该已存在的链接备份或删除
-s 创建符号链接而非硬链接
-S –suffix=后缀:自行指定备份文件的后缀
-t 在指定目录中创建链接
-T 将链接名称当作普通文件
-v 链接前先列出每个文件的名称
–help 显示此帮助信息并退出

5. 常用实例

  1. 给文件创建软链接
[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
  1. 给文件创建硬链接
[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
  1. 接上面实例,创建链接后删除和重建链接源文件
[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 ~]# 

说明:

  1. 源文件被删除后,并没有影响硬链接文件,软链接文件在CentOS系统下不断闪烁,提示源文件不存在。
  2. 重建源文件后,软链接不再闪烁提示,说明已经链接成功,找到了链接文件。而硬链接文件并没有受到影响,硬链接文件的内容还保留了删除前源文件的内容,说明硬链接失效。
  1. 将文件链接到另一个目录中,并且名称相同
[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 文件,同时也会修改源文件

  1. 给目录创建软链接
[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/

说明:

  1. 目录只能创建软链接
  2. 在链接目录中创建和修改文件都会在源目录中同步变化

你可能感兴趣的:(Linux基础,运维,centos,其他)