Linux 链接命令ln的小tips

        Linux ln(英文全拼:link files)命令是一个非常重要命令,它的功能是为某一个文件在另外一个位置建立一个同步的链接。

当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录,放上该文件,然后在 其它的目录下用ln命令链接它就可以,不必重复的占用磁盘空间。

语法:ln -param src des

命令功能 :
        Linux文件系统中,有所谓的链接(link),我们可以将其视为文件的别名,而链接又可分为两种 : 硬链接(hard link)与软链接(symbolic link),硬链接的意思是一个档案可以有多个名称,而软链接的方式则是产生一个特殊的档案,该档案的内容是指向另一个档案的位置。硬链接是存在同一个文件系统中,而软链接却可以跨越不同的文件系统。不论是硬链接或软链接都不会将原本的档案复制一份,只会占用非常少量的磁碟空间。

软链接

  • 1.软链接,以路径的形式存在。类似于Windows操作系统中的快捷方式
  • 2.软链接可以 跨文件系统 ,硬链接不可以
  • 3.软链接可以对一个不存在的文件名进行链接
  • 4.软链接可以对目录进行链接

硬链接

  • 1.硬链接,以文件副本的形式存在。但不占用实际空间。
  • 2.不允许给目录创建硬链接
  • 3.硬链接只有在同一个文件系统中才能创建

必要参数

  • -b 删除,覆盖以前建立的链接
  • -d 允许超级用户制作目录的硬链接
  • -f 强制执行
  • -i 交互模式,文件存在则提示用户是否覆盖
  • -n 把符号链接视为一般目录
  • -s 软链接(符号链接)
  • -v 显示详细的处理过程

选择参数

  • -S "-S<字尾备份字符串> "或 "--suffix=<字尾备份字符串>"
  • -V "-V<备份方式>"或"--version-control=<备份方式>"
  • --help 显示帮助信息
  • --version 显示版本信息

例:

pwd
/mnt/c/Users/joker.ren/link/link1  ##本段操作皆在此目录下
ln -s /mnt/c/Users/joker.ren/link/link2/d2 sd1
ls -al
total 0
drwxrwxrwx 1 joker joker 512 Jul  7  2021 .
drwxrwxrwx 1 joker joker 512 Jul  7  2021 ..
-rwxrwxrwx 1 joker joker   0 Jul  7  2021 d1
lrwxrwxrwx 1 joker joker  36 Jul  7  2021 sd1 -> /mnt/c/Users/joker.ren/link/link2/d2

ln /mnt/c/Users/joker.ren/link/link2/d2 hd1
ls -al
total 0
drwxrwxrwx 1 joker joker 512 Jul  7  2021 .
drwxrwxrwx 1 joker joker 512 Jul  7  2021 ..
-rwxrwxrwx 1 joker joker   0 Jul  7  2021 d1
-rwxrwxrwx 2 joker joker   0 Jul  7  2021 hd1
lrwxrwxrwx 1 joker joker  36 Jul  7  2021 sd1 -> /mnt/c/Users/joker.ren/link/link2/d2

echo "stay hungry,stay foolish" > /mnt/c/Users/joker.ren/link/link2/d2
ls /mnt/c/Users/joker.ren/link/link2/d2 -al
-rwxrwxrwx 2 joker joker 27 Jul  7  2021 /mnt/c/Users/joker.ren/link/link2/d2
ls -al
total 0
drwxrwxrwx 1 joker joker 512 Jul  7  2021 .
drwxrwxrwx 1 joker joker 512 Jul  7  2021 ..
-rwxrwxrwx 1 joker joker   0 Jul  7  2021 d1
-rwxrwxrwx 2 joker joker  27 Jul  7  2021 hd1
lrwxrwxrwx 1 joker joker  36 Jul  7  2021 sd1 -> /mnt/c/Users/joker.ren/link/link2/d2

如上创建软硬链接的src使用的是绝对路径,des使用的是相对路线(因为在当前目录创建链接故链接关系不会出错,下文举例)。另软硬链接的文件系统的区别后文引入Linux的inode说明会更清晰。

如果操作ln命令时生成的des在不在当前目录下,为了防止出错建议使用绝对路径。否则····

 创建的链接为无形链接(红色)。因为链接关系不存在。

使用绝对路线:

由此可见所谓的src只是一个描述与des路径关系的string value。故

所以在使用相对路径时。src是描述相对于des路线关系的string value,des是描述相对于使用ln命令当前目录路径关系的string value。

补充:

inode角度下的软硬链接:

硬链接

        硬链接中,文件名和inode号码是"一一对应"关系,每个inode号码对应一个文件名。但是,Unix/Linux系统允许,多个文件名指向同一个inode号码。这意味着,可以用不同的文件名访问同样的内容;对文件内容进行修改,会影响到所有文件名;但是,删除一个文件名,不影响另一个文件名的访问。使用硬链接,源文件与目标文件的inode号码相同,都指向同一个inode。inode信息中有一项叫做"链接数",记录指向该inode的文件名总数,这时就会增加1。反过来,删除一个文件名,就会使得inode节点中的"链接数"减1。当这个值减到0,表明没有文件名指向这个inode,系统就会回收这个inode号码,以及其所对应block区域。这里顺便说一下目录文件的"链接数"。创建目录时,默认会生成两个目录项:"."和".."。前者的inode号码就是当前目录的inode号码,等同于当前目录的"硬链接";后者的inode号码就是当前目录的父目录的inode号码,等同于父目录的"硬链接"。所以,任何一个目录的"硬链接"总数,总是等于2加上它的子目录总数(含隐藏目录),这里的2是父目录对其的“硬链接”和当前目录下的".硬链接“。

软链接

        软链接中,文件A和文件B的inode号码虽然不一样,但是文件A的内容是文件B的路径。读取文件A时,系统会自动将访问者导向文件B。因此,无论打开哪一个文件,最终读取的都是文件B。这意味着,文件A依赖于文件B而存在,如果删除了文件B,打开文件A就会报错:"No such file or directory"。这是软链接与硬链接最大的不同:文件A指向文件B的文件名,而不是文件B的inode号码,文件B的inode"链接数"不会因此发生变化。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值