美文网首页
Linux命令日日说(九)-- ln知识扩展

Linux命令日日说(九)-- ln知识扩展

作者: spt_genius | 来源:发表于2020-03-19 01:39 被阅读0次

ln


描述

Linux命令之 ln一文仅对命令做了参数的介绍。其中还有相关知识点和一些技巧在这里补充。


为何要使用链接文件?

比如在init.d/目录下有许多用于启动、停止系统服务的脚本,像httpdcron,syslog等。这些脚本可接受一个自变量,start(代表启动服务)或者stop(代表停止服务)。但是另外Linux系统设计了一个额外的目录机制,就是我们看到的rc0.d到rc6.d等7个目录,每个目录相应于一个运行级。对于某个级别的启动的系统服务,就要在对应的rcX.d目录下设置相应的链接,指向init.d/目录下的启动脚本。链接所占用的磁盘空间更小,也更容易管理,每次变更只需要修改init.d目录下的本尊就好。


知识扩展

  • Linux提供了两种类型的链接方式:软链接和硬链接
    • 软链接(soft link 或者被称为 symbolic link, 有时看到symlink也是它)。这种链接的方式其实只是一个文件名的指针而已,更具体的说,软链接本生也是文件,其内容是另一个文件的名称!当Linux开启软链接时,他会循着指针找出含有实际数据的目标文件。它可以指向另一个文件系统(本机或者远程都可以),也可以指向目录。在ls -l查看时,列表中第一个字段标识“l”字样的就是软链接。软链本身的权限没有任何保护措施,所有权都是开放的,但是目标文件的权限仍不变。

      zzw:temp zzw$ file file1_link1
      file1_link1: ASCII text
      zzw:temp zzw$ ls -l file1_link1
      lrwxr-xr-x  1 zzw  staff  5  3 15 23:20 file1_link1 -> file1
      ^
      |
      这个“l”就是软链接的标识符
      
    • 硬链接(hard link)。硬链接其实根本不是“链接”,只是现有文件存于另一个目录下的“入口”而已,也就是说,硬链接与源文件只是以不同名称分居于不同目录下的目录项而已,它们指向同一个innode,具有相同的文件内容、拥有权、访问权限、属性,准确的说是磁盘上的同一块数据罢了。当硬链接被删除时,原文件依然存在;反之亦然,原文件被删除后,硬链接依然存在。对于你而言,除了文件名与目录路径可能不一样之外,根本无法区别硬链接和原文件之间的差异。

      zzw:temp zzw$ stat -x file1*
        File: "file1"
        Size: 10           FileType: Regular File
        Mode: (0644/-rw-r--r--)         Uid: (  501/     zzw)  Gid: (   20/   staff)
      Device: 1,5   Inode: 69581342    Links: 2
      Access: Thu Mar 19 01:08:30 2020
      Modify: Wed Mar 18 01:50:05 2020
      Change: Thu Mar 19 01:08:28 2020
        File: "file1_hard_link"
        Size: 10           FileType: Regular File
        Mode: (0644/-rw-r--r--)         Uid: (  501/     zzw)  Gid: (   20/   staff)
      Device: 1,5   Inode: 69581342    Links: 2
      Access: Thu Mar 19 01:08:30 2020
      Modify: Wed Mar 18 01:50:05 2020
      Change: Thu Mar 19 01:08:28 2020
      
      file1 和 file1_hard_link的inode值相同,说明指向同一个磁盘数据。
      
      zzw:temp zzw$ stat -x file1*
        File: "file1_hard_link"
        Size: 10           FileType: Regular File
        Mode: (0644/-rw-r--r--)         Uid: (  501/     zzw)  Gid: (   20/   staff)
      Device: 1,5   Inode: 69581342    Links: 1
      Access: Thu Mar 19 01:08:30 2020
      Modify: Wed Mar 18 01:50:05 2020
      Change: Thu Mar 19 01:10:50 2020
      
      当删除file1文件时,这个硬链接还存在,并且Links的值变为了1,表示没有链接的文件了。
      

技巧

  • 创建多个文件链接到目录下

    zzw:temp zzw$ ls -al
    total 24
    drwxr-xr-x   6 zzw  staff  192  3 19 01:26 .
    drwxr-xr-x  31 zzw  staff  992  3 18 17:07 ..
    -rw-r--r--   1 zzw  staff    6  3 19 01:25 file1
    -rw-r--r--   1 zzw  staff    6  3 19 01:25 file2
    -rw-r--r--   1 zzw  staff    6  3 19 01:26 file3
    drwxr-xr-x   2 zzw  staff   64  3 19 01:26 src
    

    若要想在src目录下创建file1,file2,file3文件的链接文件,一般可能会这样ln -s file1 file2 file3 src/, 这样出现了下面的问题。

    zzw:temp zzw$ ln -s file1 file2 file3 src/
    zzw:temp zzw$ ls src
    file1 file2 file3
    zzw:temp zzw$ ls -al src
    total 0
    drwxr-xr-x  5 zzw  staff  160  3 19 01:29 .
    drwxr-xr-x  6 zzw  staff  192  3 19 01:26 ..
    lrwxr-xr-x  1 zzw  staff    5  3 19 01:29 file1 -> file1
    lrwxr-xr-x  1 zzw  staff    5  3 19 01:29 file2 -> file2
    lrwxr-xr-x  1 zzw  staff    5  3 19 01:29 file3 -> file3
    zzw:temp zzw$ cat src/file1
    cat: src/file1: Too many levels of symbolic links
    

    问题就在于当多个文件创建的时候需要使用绝对路径。

    zzw:temp zzw$ ln -s "$PWD"/file1 "$PWD"/file2 "$PWD"/file3 src/
    zzw:temp zzw$ ls -al src
    total 0
    drwxr-xr-x  5 zzw  staff  160  3 19 01:35 .
    drwxr-xr-x  6 zzw  staff  192  3 19 01:32 ..
    lrwxr-xr-x  1 zzw  staff   46  3 19 01:35 file1 -> /Users/zzw/Develop/workspace/github/temp/file1
    lrwxr-xr-x  1 zzw  staff   46  3 19 01:35 file2 -> /Users/zzw/Develop/workspace/github/temp/file2
    lrwxr-xr-x  1 zzw  staff   46  3 19 01:35 file3 -> /Users/zzw/Develop/workspace/github/temp/file3
    zzw:temp zzw$ cat src/file1
    file1
    zzw:temp zzw$
    
    

相关文章

  • Linux命令日日说(九)-- ln知识扩展

    ln 描述 Linux命令之 ln一文仅对命令做了参数的介绍。其中还有相关知识点和一些技巧在这里补充。 为何要使用...

  • Linux命令日日说(九)-- ln

    ln 语法 不同平台下的命令参数不一样,这里以Mac为例。具体参数参考具体平台。 参数 -F 如果目标文件已...

  • ln -s 软链接

    linux 创建连接命令 ln -s 软链接linux-ln -s(链接)、mount(挂载 软连接和硬连接 硬链...

  • Linux 中的 ln 命令

    Linux ln 命令 Intro Linux 中的文件分为 Hard Link 和 Symbolic Link ...

  • linux命令 - ln

    功能 make links

  • linux ln 命令

    ln: 功能:为某一个文件在另外一个位置建立一个链接,这个命令最常用的参数是-s,具体用法是:ln –s 源文件 ...

  • Linux ln 命令

    Linux 中的文件分为 Hard Link 和 Symbolic Link 两种。Hard Link 文件又被称...

  • Linux ln 命令

    Linux 中的文件分为 Hard Link 和 Symbolic Link 两种。Hard Link 文件又被称...

  • Linux ln命令

    ln命令: 在很多情况下都会用到 ln 命令,作用在于基于原来的文件,创建一个链接,无论是软链接还是硬链接。 1....

  • linux命令-ln

    ln 原单词 link(链接)ln 命令可以为某一个文件在另外一个位置建立一个同步的链接。不会重复的占用磁盘空间。...

网友评论

      本文标题:Linux命令日日说(九)-- ln知识扩展

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