美文网首页linux常用命令
文件和目录操作命令-12-ln命令

文件和目录操作命令-12-ln命令

作者: 夏胖运维 | 来源:发表于2020-11-20 17:38 被阅读0次

    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. 在链接目录中创建和修改文件都会在源目录中同步变化

    相关文章

      网友评论

        本文标题:文件和目录操作命令-12-ln命令

        本文链接:https://www.haomeiwen.com/subject/coodiktx.html