linux命令__ln

ln

ln是linux中又一个非常重要命令,请大家一定要熟悉。它的功能是为某一个文件在另外一个位置建立一个同步的链接,这个命令最常用的参数是-s,具体用法是:ln –s 源文件 目标文件。 当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录,放上该文件,然后在其它的目录下用ln命令链接(link)它就可以,不必重复的占用磁盘空间。例如:ln –s /bin/less /usr/local/bin/less -s 是符号链接(symbolic)的意思。

软链接和硬链接

Linux文件系统中,有所谓的链接(link),我们可以将其视为档案的别名,而链接又可分为两种 : 硬链接(hard link)与软链接(symbolic link),硬链接的意思是一个档案可以有多个名称,而软链接的方式则是产生一个特殊的档案,该档案的内容是指向另一个档案的位置。硬链接是存在同一个文件系统中,而软链接却可以跨越不同的文件系统。

软链接

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

硬链接

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

注意:

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

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

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

4.通过ll可以查看,列表属性第1位是l,尾部会有位置指向的是软连接。

参数

-b或--backup   删除,覆盖目标文件之前的备份。 
-d或-F或--directory   建立目录的硬连接。 
-f或--force  强行建立文件或目录的连接,不论文件或目录是否存在。 
-i或--interactive  覆盖既有文件之前先询问用户。 
-n或--no-dereference  把符号连接的目的目录视为一般文件。 
-s或--symbolic  对源文件建立软链接(符号连接),而非硬连接。 
-S<字尾备份字符串>或--suffix=<字尾备份字符串>  用"-b"参数备份目标文件后,备份文件的字尾会被加上一个备份字符串,预设的字尾备份字符串是符号"~",可通过"-S"参数来改变它。 
-v或--verbose  显示指令执行过程。 
-V<备份方式>或--version-control=<备份方式>  用"-b"参数备份目标文件后,备份文件的字尾会被加上一个备份字符串,这个字符串不仅可用"-S"参数变更,当使用"-V"参数<备份方式>指定不同备份方式时,也会产生不同字尾的备份字符串。 

示例

给文件创建软链接

image-20220602164211128

此时的两个文件内容完全一样,现在向a.txt中添加一些内容

[root@honey-master lntest] cat >> a.txt <<EOF
> 哇哈哈哈哈哈哈
> ln软链接
> EOF
[root@honey-master lntest] cat a.txt 
ivanlee
717

哇哈哈哈哈哈哈
ln软链接

此时再查看a_s文件

image-20220602164502576

发现文件内容跟着改了,如果对a_s文件进行修改,那么源文件也依然会被修改

image-20220602164744906

将被链接文件删除后,源文件不受影响

[root@honey-master lntest] rm -f a_s.ttx 
[root@honey-master lntest] ll
total 4
-rw-r--r--. 1 root root 68 Jun  2 16:45 a.txt

相反的是,如果源文件被删除

image-20220602164931374

image-20220602164946413

链接出会一直闪烁

对于很多可执行文件也一样,比如说python3.6

image-20220602165310135

这么多文件都具有软链接,我们一般启动python的时候,在有添加环境变量的时候,可以直接输入python3进行操作,同时我们也可以根据被链接的命令进行启动

image-20220602165503996

给文件创建硬链接

image-20220602165827523

创建硬链接之后,读取目录完全没有任何的链接显示

分别向两个文件中添加内容

image-20220602170355897

同样也可以互相影响对方。

如果删掉源文件的话

image-20220602170443104

硬链接文件完全不受影响。

给目录添加软链接

目录只能创建软链接。
  目录创建链接必须用绝对路径,相对路径创建会不成功,会提示"符号连接的层数过多"这样的错误。
  在链接目标目录中修改文件都会在源文件目录中同步变化。

image-20220602171502019

访问lntest2目录和访问lntest目录是一样的,尽管ll命令的输出不一样

image-20220602171615232

如果将原目录删掉,则与文件软链接一样会闪烁

image-20220602171811317

软链接和硬链接的区别

软连接和硬连接可以这样理解:

  • 硬连接就像一个文件有多个文件名,

  • 软连接就是产生一个新文件(这个文件内容,实际上就是记当要链接原文件路径的信息),这个文件指向另一个文件的位置,

  • 硬连接必须在同一文件系统中,而软连接可以跨文件系统

  • 硬连接 :源文件名和链接文件名都指向相同的物理地址,目录不能够有硬连接,文件在磁盘中只有一个复制,可以节省硬盘空间,由于删除文件要在同一个索引节点属于唯一的连接时才能成功,因此可以防止不必要的误删除软连接(符号连接)用ln -s命令创建文件的符号连接,符号连接是linux特殊文件的一种,作为一个文件,它的资料是它所连接的文件的路径名,类似于硬件方式,可以删除原始文件 而连接文件仍然存在

  • 硬连接指通过索引节点来进行的连接。在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Number)。

    在Linux中,多个文件名指向同一索引节点是存在的。一般这种连接就是硬连接。*******硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能。其原因如上所述,因为对应该目录的索引节点有一个以上的连接。只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。也就是说,文件才会被真正删除。

    软链接文件有点类似于Windows的快捷方式。它实际上是特殊文件的一种。在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。

posted @ 2022-06-02 17:26  ivanlee717  阅读(148)  评论(0编辑  收藏  举报