Linux 硬链接与软链接

1.Linux链接概念

Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link)。默认情况下,ln命令产生硬链接。

【硬连接】

硬连接指通过索引节点来进行连接。在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。在Linux中,多个文件名指向同一索引节点是存在的。一般这种连接就是硬连接。硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能。其原因如上所述,因为对应该目录的索引节点有一个以上的连接。只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。也就是说,文件真正删除的条件是与之相关的所有硬连接文件均被删除。

【软连接】

另外一种连接称之为符号连接(Symbolic Link),也叫软连接。软链接文件有类似于Windows的快捷方式。它实际上是一个特殊的文件。在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。

2.通过实验加深理解

[oracle@Linux]$ touch f1          #创建一个测试文件f1
[oracle@Linux]$ ln f1 f2          #创建f1的一个硬连接文件f2
[oracle@Linux]$ ln -s f1 f3       #创建f1的一个符号连接文件f3
[oracle@Linux]$ ls -li            # -i参数显示文件的inode节点信息
total 0
9797648 -rw-r--r--  2 oracle oinstall 0 Apr 21 08:11 f1
9797648 -rw-r--r--  2 oracle oinstall 0 Apr 21 08:11 f2
9797649 lrwxrwxrwx  1 oracle oinstall 2 Apr 21 08:11 f3 -> f1

从上面的结果中可以看出,硬连接文件f2与原文件f1的inode节点相同,均为9797648,然而符号连接文件的inode节点不同。

[oracle@Linux]$ echo "I am f1 file" >>f1
[oracle@Linux]$ cat f1
I am f1 file
[oracle@Linux]$ cat f2
I am f1 file
[oracle@Linux]$ cat f3
I am f1 file
[oracle@Linux]$ rm -f f1
[oracle@Linux]$ cat f2
I am f1 file
[oracle@Linux]$ cat f3
cat: f3: No such file or directory

通过上面的测试可以看出:当删除原始文件f1后,硬连接f2不受影响,但是符号连接f1文件无效

3.总结

依此您可以做一些相关的测试,可以得到以下全部结论:
1).删除符号连接f3,对f1,f2无影响;
2).删除硬连接f2,对f1,f3也无影响;
3).删除原文件f1,对硬连接f2没有影响,导致符号连接f3失效;
4).同时删除原文件f1,硬连接f2,整个文件会真正的被删除。

 

出处:https://www.runoob.com/note/29134

=======================================================================================

Linux软连接和硬链接

创建链接

命令:ln
原义:link
语法: ln 【-s】 【源文件】 【目标文件】
若加上 - s选项则是创建软链接,不加是创建硬链接

/* 创建软连接 */
ln -s ./pip3.6 ./pip
/* 创建硬链接 */ ln ./pip3.6 ./pip

查看文件有没有链接

  • whereis pip :查看文件所在位置
  • 进入所在目录
  • ls -l |grep pip :查看文件有没有链接
    -在这里插入图片描述

二、删除

rm -rf 【软链接地址】
上述指令中,软链接地址最后不能含有“/”,当含有“/”时,删除的是软链接目标目录下的资源,而不是软链接本身。
示例:


三、修改

ln -snf 【新目标目录】 【软链接地址】
这里修改是指修改软链接的目标目录
示例:

 

软链接和硬链接的区别

硬链接

  硬链接的作用类似于原始文件的镜像副本。这些链接共享相同的 inode。对原始文件或硬链接文件所做的更改将反映在不同的文件中。删除硬链接时,其他文件不会发生任何变化。硬链接不能跨文件系统。

软链接

  其中软链接是指向原始文件的实际链接,也称为符号链接。这些链接将具有不同的Inodes值。软链接指向原始文件,因此如果原始文件被删除,则软链接将失败。如果删除软链接,文件将不会发生任何变化。这样做的原因是,实际文件或目录的inode与"软链接"创建的文件的inode不同。软链接可以跨文件系统。 

 

出处:https://blog.csdn.net/qq_34799070/article/details/123940331

https://blog.csdn.net/zhanglixin999/article/details/122507328

=======================================================================================

Linux 中软链接设置方法详解

一、软链接的设置方法

  • 首先我们分别在根目录下的home目录中建立一个新目录check,并在目录check中建立best.txt文件,并写入“You are the best”。再在根目录下的opt目录中建立新目录text。
  • 要求将/home/check/best.txt通过软链接,链接到/opt/text中,且通过软连接可在/opt/text中查看到check目录中的best.txt文件及文件中的内容。
    【前期准备】 [目录文件的设置]
[root@localhost /]# mkdir /home/check
[root@localhost /]# mkdir /opt/text
[root@localhost /]# touch /home/check/best.txt
[root@localhost /]# echo "You are the best" > home/check/best.txt 

在这里插入图片描述
【前期准备】 [ 查看best.txt文件 ]

[root@localhost /]# cat /home/check/best.txt

在这里插入图片描述
【设置软连接】[源及链接的确定]
根据将/home/check/best.txt通过软链接,链接到/opt/text的要求,可以得知/home/check/best.txt为源,/opt/text为链接。
*注意创建的语法:ln -s是命令,后面跟源,再后面跟一个当前目录的软链接名

[root@localhost /]# ln -s /home/check/best.txt /opt/text

查看是否链接成功

[root@localhost /]# cd /opt/text
[root@localhost text]# ls
best.txt
[root@localhost text]# cat best.txt
You are the best

在这里插入图片描述
此时在/opt/text中可以看到一个绿色的best.txt(注意我们看到的best.txt并不是一个文件,而是一个链接),证明软链接设置成功,我们可以在text目录中查看/home/check/best.txt文件中的内容。

二、课后练习

在根目录下创建目录/webdev,并且将论坛内容放置在目录内容。将/webdev通过软链接,链接到/var/www/html中。修改目录权限为777,并添加sgid权限。最终结果,论坛可以通过web访问。
(论坛创建及安装方法可参考上一篇博客,内有详细的论坛搭建、安装的步骤。)
部分命令提示截图如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

 

出处:https://blog.csdn.net/weixin_44728499/article/details/110233298

=======================================================================================

Linux硬链接和软链接详解(深度剖析)

通过学习《Linux ln 命令》一节可以看到,使用 ln 命令建立硬链接和软链接非常简单,那这两种链接有什么区别,它们各自的作用和特点又是什么?为了解开这些疑问,本节将对硬链接和软链接做深度剖析。

对硬链接的深度剖析

首先,我们再来建立一个硬链接文件,然后看看这两个文件的特点。

[root@localhost ~]# touch test
#建立源文件
[root@localhost ~]# ln /root/test /tmp/test-hard
#给源文件建立硬链接文件 /tmp/test-hard
[root@localhost ~]# ll -i /root/test /tmp/test-hard
262147 -rw-r--r-- 2 root root 0 6月 19 10:06 /root/test
hard
262147 -rw-r--r-- 2 root root 0 6月 19 10:06 /tmp/test-hard
#查看两个文件的详细信息,可以发现这两个文件的 inode 号是一样的,"ll"等同于"ls -l"。

这里有一件很奇怪的事情,我们之前在讲 inode 号的时候说过,每个文件的 inode 号都应该是不一样的。inode 号就相当于文件 ID,我们在查找文件的时候,要先查找 inode 号,才能读取到文件的内容。

但是这里源文件和硬链接文件的 inode 号居然是一样的,那我们在查找文件的时候,到底找到的是哪一个文件呢?我们来画一张示意图,如图 2 所示。



图 2 硬链接示意图

在 inode 信息中,是不会记录文件名称的,而是把文件名记录在上级目录的 block 中。也就是说,目录的 block 中记录的是这个目录下所有一级子文件和子目录的文件名及 inode 的对应;而文件的 block 中记录的才是文件实际的数据。

当我们查找一个文件,比如 /root/test 时,要经过以下流程步骤:
  1. 首先找到根目录的 inode(根目录的 inode 是系统已知的,inode 号是 2),然后判断用户是否有权限访问根目录的 block。
  2. 如果有权限,则可以在根目录的 block 中访问到 /root 的文件名及对应的 inode 号。
  3. 通过 /root/ 目录的 inode 号,可以查找到 /root/ 目录的 inode 信息,接着判断用户是否有权限访问 /root/ 目录的 block。
  4. 如果有权限,则可以从 /root/ 目录的 block 中读取到 test 文件的文件名及对应的 inode 号。
  5. 通过 test 文件的 inode 号,就可以找到 test 文件的 inode 信息,接着判断用户是否有权限访问 test 文件的 block。
  6. 如果有权限,则可以读取 block 中的数据,这样就完成了 /root/test 文件的读取与访问。

按照这个步骤,在给源文件 /root/test 建立了硬链接文件 /tmp/test-hard 之后,在 /root/ 目录和 /tmp/ 目录的 block 中就会建立 test 和 test-hard 的信息,这个信息主要就是文件名和对应的 inode 号。但是我们会发现 test 和 test-hard 的 inode 信息居然是一样的,那么,我们无论访问哪个文件,最终都会访问 inode 号是 262147 的文件信息。

这就是硬链接的原理。硬链接的特点如下:
  • 不论是修改源文件(test 文件),还是修改硬链接文件(test-hard 文件),另一个文件中的数据都会发生改变。
  • 不论是删除源文件,还是删除硬链接文件,只要还有一个文件存在,这个文件(inode 号是 262147 的文件)都可以被访问。
  • 硬链接不会建立新的 inode 信息,也不会更改 inode 的总数。
  • 硬链接不能跨文件系统(分区)建立,因为在不同的文件系统中,inode 号是重新计算的。
  • 硬链接不能链接目录,因为如果给目录建立硬链接,那么不仅目录本身需要重新建立,目录下所有的子文件,包括子目录中的所有子文件都需要建立硬链接,这对当前的 Linux 来讲过于复杂。

硬链接的限制比较多,既不能跨文件系统,也不能链接目录,而且源文件和硬链接文件之间除 inode 号是一样的之外,没有其他明显的特征。这些特征都使得硬链接并不常用,大家有所了解就好。

我们通过实验来测试一下。

[root@localhost ~]# echo 1111 >>/root/test
#向源文件中写入数据
[root@localhost ~]# cat /root/test
1111
[root@localhost ~]# cat /tmp/test-hard
1111
#源文件和硬链接文件都会发生改变
[root@localhost ~]# echo 2222 >> /tmp/test-hard
#向硬链接文件中写入数据
[root@localhost ~]# cat /root/test
1111
2222
[root@localhost ~】# cat /tmp/test-hard
1111
2222
#源文件和硬链接文件也都会发生改变
[root@localhost ~]# rm -rf/root/test
#删除源文件
[root@localhost ~]# cat /tmp/test-hard
1111
2222
#硬链接文件依然可常读取

对软链接的深度剖析

软链接也称作符号链接,相比硬链接来讲,软链接就要常用多了。我们先建立一个软链接,再来看看软链接的特点。

[root@localhost ~]# touch check
#建立源文件
[root@localhost ~]# ln -s /root/check /tmp/check-soft
#建立软链接文件
[root@localhost ~]# ll -id /root/check /tmp/check-soft
262154 -rw-r--r-- 1 root root 0 6月 19 11:30 /root/check
917507 lrwxrwxrwx 1 root root 11 6月 19 11:31 /tmp/ check-soft -> /root/check
#软链接和源文件的 inode 号不一致,软链接通过 -> 明显地标识出源文件的位置
#在软链接的权限位 lrwxrwxrwx 中,l 就代表软链接文件

再强调一下,软链接的源文件必须写绝对路径,否则建立的软链接文件就会报错,无法正常使用。

软链接的标志非常明显,首先,权限位中"l"表示这是一个软链接文件;其次,在文件的后面通过 "->" 显示出源文件的完整名字。所以软链接比硬链接的标志要明显得多,而且软链接也不像硬链接的限制那样多,比如软链接可以链接目录,也可以跨分区来建立软链接。

软链接完全可以当作 Windows 的快捷方式来对待,它的特点和快捷方式一样,我们更推荐大家使用软链接,而不是硬链接。

大家在学习软链接的时候会有一些疑问:Windows 的快捷方式是由于源文件放置的位置过深,不容易找到,建立一个快捷方式放在桌面,方便查找,那 Linux 的软链接的作用是什么呢?

笔者个人觉得,软链接主要是为了照顾管理员的使用习惯。比如,有些系统的自启动文件 /etc/rc.local 放置在 /etc 目录中,而有些系统却将其放置在 /etc/rc.d/rc.local 中,那么干脆对这两个文件建立软链接,不论你习惯操作哪一个文件,结果都是一样的。

如果你比较细心,则应该已经发现软链接和源文件的 inode 号是不一致的,我们也画一张示意图来看看软链接的原理,如图 3 所示。



图 3 软链接示意图

软链接和硬链接在原理上最主要的不同在于:硬链接不会建立自己的 inode 索引和 block(数据块),而是直接指向源文件的 inode 信息和 block,所以硬链接和源文件的 inode 号是一致的;而软链接会真正建立自己的 inode 索引和 block,所以软链接和源文件的 inode 号是不一致的,而且在软链接的 block 中,写的不是真正的数据,而仅仅是源文件的文件名及 inode 号。

我们来看看访问软链接的步骤和访问硬链接的流程步骤有什么不同。
  1. 首先找到根目录的 inode 索引信息,然后判断用户是否有权限访问根目录的 block。
  2. 如果有权限访问根目录的 block,就会在 block 中查找到 /tmp/ 目录的 inode 号。
  3. 接着访问 /tmp/ 目录的 inode 信息,判断用户是否有权限访问 /tmp/ 目录的 block。
  4. 如果有权限,就会在 block 中读取到软链接文件 check-soft 的 inode 号。因为软链接文件会真正建立自己的 inode 索引和 block,所以软链接文件和源文件的 inode 号是不一样的。
  5. 通过软链接文件的 inode 号,找到了 check-soft 文件 inode 信息,判断用户是否有权限访问 block。
  6. 如果有权限,就会发现 check-soft 文件的 block 中没有实际数据,仅有源文件 check 的 inode 号。
  7. 接着通过源文件的 inode 号,访问到源文件 check 的 inode 信息,判断用户是否有权限访问 block。
  8. 如果有权限,就会在 check 文件的 block 中读取到真正的数据,从而完成数据访问。

通过这个过程,我们就可以总结出软链接的特点(软链接的特点和 Windows 中的快捷方式完全一致)。
  • 不论是修改源文件(check),还是修改硬链接文件(check-soft),另一个文件中的数据都会发生改变。
  • 删除软链接文件,源文件不受影响。而删除原文件,软链接文件将找不到实际的数据,从而显示文件不存在。
  • 软链接会新建自己的 inode 信息和 block,只是在 block 中不存储实际文件数据,而存储的是源文件的文件名及 inode 号。
  • 软链接可以链接目录。
  • 软链接可以跨分区。

我们测试一下软链接的特性。

[root@localhost ~]# echo 111>>/root/check
#修改源文件
[root@localhost ~]# cat /root/check
111
[root@localhost ~]# cat /tmp/check-soft
111
#不论是源文件还是软链接文件,数据都发生改变
[root@localhost ~]# echo 2222 >>/tmp/check-soft
#修改软链接文件
[root@localhost ~]# cat /tmp/check-soft
111
2222
[root@localhost ~]# cat /root/check
111
2222
#不论是源文件还是软链接文件,数据也都会发生改变
[root@localhost ~]# rm -rf/root/check
#删除源文件
[root@localhost ~]# cat /tmp/check-soft
cat: /tmp/check-soft:没有那个文件或目录
#软链接无法正常使用

软链接是可以链接目录的,例如:

[root@localhost ~]# mkdir test
#建立源目录
[root@localhost ~]# ln -s /root/test/ /tmp/
[root@localhost ~]# ll -d /tmp/test
lrwxrwxrwx 1 root root 11 6月 19 12:43 /tmp/test->/root/test/
#软链接可以链接目录

 

出处:http://c.biancheng.net/view/6314.html

=======================================================================================

Linux命令详解----ln

ln命令

ln命令为文件或文件夹创建连接,连接类型有硬链接和符号连接两种,符号连接需要使用“-s”选项

ln语法

ln [选项] 参数

使用 ln --help查看可用选项

[root@node1 ~]# ln --help
Usage: ln [OPTION]... [-T] TARGET LINK_NAME   (1st form)
  or:  ln [OPTION]... TARGET                  (2nd form)
  or:  ln [OPTION]... TARGET... DIRECTORY     (3rd form)
  or:  ln [OPTION]... -t DIRECTORY TARGET...  (4th form)
In the 1st form, create a link to TARGET with the name LINK_NAME.
In the 2nd form, create a link to TARGET in the current directory.
In the 3rd and 4th forms, create links to each TARGET in DIRECTORY.
Create hard links by default, symbolic links with --symbolic.
When creating hard links, each TARGET must exist.  Symbolic links
can hold arbitrary text; if later resolved, a relative link is
interpreted in relation to its parent directory.

Mandatory arguments to long options are mandatory for short options too.
      --backup[=CONTROL]      make a backup of each existing destination file
  -b                          like --backup but does not accept an argument
  -d, -F, --directory         allow the superuser to attempt to hard link
                                directories (note: will probably fail due to
                                system restrictions, even for the superuser)
  -f, --force                 remove existing destination files
  -i, --interactive           prompt whether to remove destinations
  -L, --logical               make hard links to symbolic link references
  -n, --no-dereference        treat destination that is a symlink to a
                                directory as if it were a normal file
  -P, --physical              make hard links directly to symbolic links
  -s, --symbolic              make symbolic links instead of hard links
  -S, --suffix=SUFFIX         override the usual backup suffix
  -t, --target-directory=DIRECTORY  specify the DIRECTORY in which to create
                                the links
  -T, --no-target-directory   treat LINK_NAME as a normal file
  -v, --verbose               print name of each linked file
      --help     display this help and exit
      --version  output version information and exit

The backup suffix is `~', unless set with --suffix or SIMPLE_BACKUP_SUFFIX.
The version control method may be selected via the --backup option or through
the VERSION_CONTROL environment variable.  Here are the values:

Using -s ignores -L and -P.  Otherwise, the last option specified controls
behavior when the source is a symbolic link, defaulting to -P.

  none, off       never make backups (even if --backup is given)
  numbered, t     make numbered backups
  existing, nil   numbered if numbered backups exist, simple otherwise
  simple, never   always make simple backups

Report ln bugs to bug-coreutils@gnu.org
GNU coreutils home page: <http://www.gnu.org/software/coreutils/>
General help using GNU software: <http://www.gnu.org/gethelp/>
For complete documentation, run: info coreutils 'ln invocation'

选项参数说明

-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”参数<备份方式>指定不同备份方式时,也会产生不同字尾的备份字符串; 
--help:在线帮助; 
--version:显示版本信息。

参数

  1. 源文件:指定连接的源文件。如果使用-s选项创建符号连接,则“源文件”可以是文件或者目录。创建硬连接时,则“源文件”参数只能是文件; 目标文件:指定源文件的目标连接文件。
  2. 目标文件:指定源文件的目标连接文件

实例

先使用硬链接连接一个文件夹实验一下效果

[root@node1 data]# pwd
/data
[root@node1 data]# ll
total 16
drwxr-xr-x. 2 root root 4096 Jun 27 02:54 test
drwxr-xr-x. 3 1001 root 4096 Jun 26 18:34 webbench-1.5
-rw-r--r--. 1 root root 7675 May 19  2009 webbench-1.5.tar.gz
#/data 目录下有两个目录一个文件,就在此基础上进行操作查看效果
[root@node1 data]# ln /data/webbench-1.5 /data/test
ln: `webbench-1.5': hard link not allowed for directory
[root@node1 data]# ln /data/webbench-1.5 /data/test/
ln: `webbench-1.5': hard link not allowed for directory
[root@node1 data]# ln /data/webbench-1.5/ /data/test/
ln: `webbench-1.5/': hard link not allowed for directory
#怎么操作文件夹是不能连接的
[root@node1 data]# ln /data/webbench-1.5.tar.gz /data/test
[root@node1 data]# ls
test  webbench-1.5  webbench-1.5.tar.gz
[root@node1 data]# cd /data/test/
[root@node1 test]# ls
webbench-1.5.tar.gz
[root@node1 test]# ls -l
total 8
-rw-r--r--. 2 root root 7675 May 19  2009 webbench-1.5.tar.gz
#硬链接连接文件操作成功,相当复制文件到指定目录

下边看软件连操作

[root@node1 data]# ln -s /data/webbench-1.5 /data/test/
[root@node1 data]# ls test
webbench-1.5  webbench-1.5.tar.gz
[root@node1 data]# ln -s /data/webbench-1.5 /data/test/webbench-bak
[root@node1 data]# ls test
webbench-1.5  webbench-1.5.tar.gz  webbench-bak
[root@node1 data]# mkdir test/webbench-bak-2
[root@node1 data]# ln -s /data/webbench-1.5 /data/test/webbench-bak-2
[root@node1 data]# ls test/
webbench-1.5  webbench-1.5.tar.gz  webbench-bak  webbench-bak-2
[root@node1 data]# ls test/webbench-bak-2/
webbench-1.5
#如果目标文件夹已存在,会把当前文件夹连接到目标文件夹下生成和源文件夹同名的文件夹
#如果目标文件夹不存在,直接连接源文件到目标文件夹,同时生成目标文件夹
[root@node1 test]# ll
total 12
lrwxrwxrwx. 1 root root   18 Jun 27 03:22 webbench-1.5 -> /data/webbench-1.5
-rw-r--r--. 2 root root 7675 May 19  2009 webbench-1.5.tar.gz
lrwxrwxrwx. 1 root root   18 Jun 27 03:23 webbench-bak -> /data/webbench-1.5
drwxr-xr-x. 2 root root 4096 Jun 27 03:23 webbench-bak-2

备注

以上信息本人操作实验数据,操作过程强自己记忆,想查看更过linux命令,请到http://man.linuxde.net/查看

在进行连接的时候一定要使用全路径,否则会出现Too many levels of symbolic links错误,连接文件或文件夹不能用

 

出处:https://www.cnblogs.com/xiuluo--angel/p/7086643.html

=======================================================================================

linux每日命令(3):ln命令 

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

1.命令格式:

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

2.命令功能:

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

软链接:

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

软链接就相当于windows的的快捷方式,使用场景:
1.在文件系统中多处共享同一个较大文件时,使用软链接就可以避免创建多个副本。
2.维护动态库文件的版本时,使用软链接,在升级库文件后,只需修改软链接的源文件,而使用该库的程序则不需要修改。

使用原文件的绝对路径创建的软链接,不会随着软链接路径改动而失效!所以建议使用原文件绝对路径创建软链接。这时候的软链接才算得上是真正意义上相当于Windows的快捷方式,一旦生成处处可用

硬链接:

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

硬链接说白了是一个指针,指向文件索引节点,系统并不为它重新分配inode。源文件和硬链接文件都是指向同一块磁盘空间的!通过使用硬链接可达到备份数据(实际是备份节点)的效果!

注意:

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

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

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

3. 命令参数:

必要参数描述
-b 删除,覆盖以前建立的链接
-d 允许超级用户制作目录的硬链接
-f 强制执行
-i 交互模式,文件存在则提示用户是否覆盖
-n 把符号链接视为一般目录
-s 软链接(符号链接)
-v 显示详细的处理过程
选择参数描述
-S “-S<字尾备份字符串> ”或 “--suffix=<字尾备份字符串>”
-V “-V<备份方式>”或“--version-control=<备份方式>”
--help 显示帮助信息
--version 显示版本信息

4. 常用示例

1. 给2018.log创建一个名为link2018的软链接

命令:

ln -s 2018.log  link2018

输出:

hc@hc-virtual-machine:~/PycharmProjects/my_test$ ls
2018.log
hc@hc-virtual-machine:~/PycharmProjects/my_test$ ln -s 2018.log  link2018
hc@hc-virtual-machine:~/PycharmProjects/my_test$ ls
2018.log  link2018
hc@hc-virtual-machine:~/PycharmProjects/my_test$ ll
总用量 12
drwxrwxr-x 3 hc hc 4096 1023 11:53 ./
drwxrwxr-x 6 hc hc 4096 1019 18:22 ../
-rw-r--r-- 1 hc hc    0 1023 11:53 2018.log
drwxrwxr-x 2 hc hc 4096 1018 17:42 .idea/
lrwxrwxrwx 1 hc hc    8 1023 11:53 link2018 -> 2018.log

修改源文件2018.log内容,其软链接内容会同步修改

hc@hc-virtual-machine:~/PycharmProjects/my_test$ cat 2018.log 
我是log日志
hc@hc-virtual-machine:~/PycharmProjects/my_test$ cat link2018
我是log日志
hc@hc-virtual-machine:~/PycharmProjects/my_test$ vim 2018.log 
hc@hc-virtual-machine:~/PycharmProjects/my_test$ cat 2018.log 
我是log
hc@hc-virtual-machine:~/PycharmProjects/my_test$ cat link2018.log 
我是log

说明:

cat 命令是查看文件内容
为2018.log文件创建软链接link2018,如果2018.log丢失,link2018将失效

2. 为2018.log 创建一个硬链接ln2018

命令:

ln 2018.log  ln2018

输出:

hc@hc-virtual-machine:~/PycharmProjects/my_test$ ls
2018.log  link2018
hc@hc-virtual-machine:~/PycharmProjects/my_test$ ln 2018.log  ln2018
hc@hc-virtual-machine:~/PycharmProjects/my_test$ ls
2018.log  link2018  ln2018
hc@hc-virtual-machine:~/PycharmProjects/my_test$ ll
总用量 20
drwxrwxr-x 3 hc hc 4096 1023 12:02 ./
drwxrwxr-x 6 hc hc 4096 1019 18:22 ../
-rw-r--r-- 2 hc hc   10 1023 11:57 2018.log
drwxrwxr-x 2 hc hc 4096 1018 17:42 .idea/
lrwxrwxrwx 1 hc hc    8 1023 12:00 link2018 -> 2018.log
-rw-r--r-- 2 hc hc   10 1023 11:57 ln2018

说明:

为2018.log创建硬链接ln2018,2018.log与ln2018的各项属性相同

修改源文件2018.log内容,其软硬链接内容均会同步修改

hc@hc-virtual-machine:~/PycharmProjects/my_test$ cat ln2018 
我是log
hc@hc-virtual-machine:~/PycharmProjects/my_test$ cat 2018.log 
我是log
hc@hc-virtual-machine:~/PycharmProjects/my_test$ vim 2018.log 
hc@hc-virtual-machine:~/PycharmProjects/my_test$ cat 2018.log 
我是log1
hc@hc-virtual-machine:~/PycharmProjects/my_test$ cat ln2018 
我是log1
hc@hc-virtual-machine:~/PycharmProjects/my_test$ cat link2018 
我是log1

3. 接上面两实例,链接完毕后,删除和重建链接原文件

演示如下:

hc@hc-virtual-machine:~/PycharmProjects/my_test$ ls
2018.log  link2018  ln2018
hc@hc-virtual-machine:~/PycharmProjects/my_test$ ll
总用量 20
drwxrwxr-x 3 hc hc 4096 1023 12:04 ./
drwxrwxr-x 6 hc hc 4096 1019 18:22 ../
-rw-r--r-- 2 hc hc   11 1023 12:04 2018.log
drwxrwxr-x 2 hc hc 4096 1018 17:42 .idea/
lrwxrwxrwx 1 hc hc    8 1023 12:00 link2018 -> 2018.log
-rw-r--r-- 2 hc hc   11 1023 12:04 ln2018
hc@hc-virtual-machine:~/PycharmProjects/my_test$ rm -rf 2018.log 
hc@hc-virtual-machine:~/PycharmProjects/my_test$ ll
总用量 16
drwxrwxr-x 3 hc hc 4096 1023 12:57 ./
drwxrwxr-x 6 hc hc 4096 1019 18:22 ../
drwxrwxr-x 2 hc hc 4096 1018 17:42 .idea/
lrwxrwxrwx 1 hc hc    8 1023 12:00 link2018 -> 2018.log
-rw-r--r-- 1 hc hc   11 1023 12:04 ln2018
hc@hc-virtual-machine:~/PycharmProjects/my_test$ touch 2018.log
hc@hc-virtual-machine:~/PycharmProjects/my_test$ ll
总用量 16
drwxrwxr-x 3 hc hc 4096 1023 12:57 ./
drwxrwxr-x 6 hc hc 4096 1019 18:22 ../
-rw-r--r-- 1 hc hc    0 1023 12:57 2018.log
drwxrwxr-x 2 hc hc 4096 1018 17:42 .idea/
lrwxrwxrwx 1 hc hc    8 1023 12:00 link2018 -> 2018.log
-rw-r--r-- 1 hc hc   11 1023 12:04 ln2018
hc@hc-virtual-machine:~/PycharmProjects/my_test$ vim 2018.log 
hc@hc-virtual-machine:~/PycharmProjects/my_test$ cat 2018.log 
2018log日志
hc@hc-virtual-machine:~/PycharmProjects/my_test$ cat link2018 
2018log日志
hc@hc-virtual-machine:~/PycharmProjects/my_test$ cat ln2018 
我是log1
hc@hc-virtual-machine:~/PycharmProjects/my_test$ 

说明:

  1. 源文件被删除后,并没有影响硬链接文件;软链接文件在centos系统下不断的闪烁,提示源文件已经不存在
  2. 重建源文件后,软链接不在闪烁提示,说明已经链接成功,找到了链接文件系统;重建后,硬链接文件并没有受到源文件影响,硬链接文件的内容还是保留了删除前源文件的内容,说明硬链接已经失效

4. 将文件链接到目录中

演示如下:

hc@hc-virtual-machine:~/PycharmProjects/my_test$ ls
2018.log  link2018  ln2018
hc@hc-virtual-machine:~/PycharmProjects/my_test$ mkdir test
hc@hc-virtual-machine:~/PycharmProjects/my_test$ ls
2018.log  link2018  ln2018  test
hc@hc-virtual-machine:~/PycharmProjects/my_test$ ln 2018.log test
hc@hc-virtual-machine:~/PycharmProjects/my_test$ ls
2018.log  link2018  ln2018  test
hc@hc-virtual-machine:~/PycharmProjects/my_test$ cd test/
hc@hc-virtual-machine:~/PycharmProjects/my_test/test$ ls
2018.log
hc@hc-virtual-machine:~/PycharmProjects/my_test/test$ vi 2018.log 
hc@hc-virtual-machine:~/PycharmProjects/my_test/test$ cat 2018.log 
2018log日志,加1
hc@hc-virtual-machine:~/PycharmProjects/my_test/test$ cd ..
hc@hc-virtual-machine:~/PycharmProjects/my_test$ ls
2018.log  link2018  ln2018  test
hc@hc-virtual-machine:~/PycharmProjects/my_test$ cat 2018.log 
2018log日志,加1
hc@hc-virtual-machine:~/PycharmProjects/my_test$ ll
总用量 24
drwxrwxr-x 4 hc hc 4096 1023 13:31 ./
drwxrwxr-x 7 hc hc 4096 1023 13:30 ../
-rw-r--r-- 2 hc hc   19 1023 13:32 2018.log
drwxrwxr-x 2 hc hc 4096 1018 17:42 .idea/
lrwxrwxrwx 1 hc hc    8 1023 12:00 link2018 -> 2018.log
-rw-r--r-- 1 hc hc   11 1023 12:04 ln2018
drwxr-xr-x 2 hc hc 4096 1023 13:32 test/
hc@hc-virtual-machine:~/PycharmProjects/my_test$ 

说明:

在test目录中创建了2018.log的硬链接,修改test目录中的2018.log文件,同时也会同步到源文件

5:给目录创建软链接

命令:

ln -sv 源目录 目标目录

演示如下:

hc@hc-virtual-machine:~/PycharmProjects$ ll
总用量 28
drwxrwxr-x  7 hc hc 4096 1023 13:30 ./
drwxr-xr-x 23 hc hc 4096 1023 13:32 ../
drwxr-xr-x  9 hc hc 4096 1022 15:25 FreshOnline/
drwxrwxr-x  6 hc hc 4096 1019 19:07 FreshOnline_env/
drwxrwxr-x  4 hc hc 4096 1023 13:31 my_test/
drwxrwxr-x  4 hc hc 4096 1023 11:52 py3_test/
drwxr-xr-x  2 hc hc 4096 1023 13:30 test/
hc@hc-virtual-machine:~/PycharmProjects$ ln -sv /home/hc/PycharmProjects/my_test  /home/hc/PycharmProjects/test
'/home/hc/PycharmProjects/test/my_test' -> '/home/hc/PycharmProjects/my_test'
hc@hc-virtual-machine:~/PycharmProjects$ ll
总用量 28
drwxrwxr-x  7 hc hc 4096 1023 13:30 ./
drwxr-xr-x 23 hc hc 4096 1023 13:32 ../
drwxr-xr-x  9 hc hc 4096 1022 15:25 FreshOnline/
drwxrwxr-x  6 hc hc 4096 1019 19:07 FreshOnline_env/
drwxrwxr-x  4 hc hc 4096 1023 13:31 my_test/
drwxrwxr-x  4 hc hc 4096 1023 11:52 py3_test/
drwxr-xr-x  2 hc hc 4096 1023 13:38 test/
hc@hc-virtual-machine:~/PycharmProjects$ cd my_test/
hc@hc-virtual-machine:~/PycharmProjects/my_test$ ls
2018.log  link2018  ln2018  test
hc@hc-virtual-machine:~/PycharmProjects/my_test$ cd ..
hc@hc-virtual-machine:~/PycharmProjects$ ls
FreshOnline  FreshOnline_env  my_test  py3_test  test
hc@hc-virtual-machine:~/PycharmProjects$ cd test/
hc@hc-virtual-machine:~/PycharmProjects/test$ ls
my_test
hc@hc-virtual-machine:~/PycharmProjects/test$ cd my_test
hc@hc-virtual-machine:~/PycharmProjects/test/my_test$ ls
2018.log  link2018  ln2018  test
hc@hc-virtual-machine:~/PycharmProjects/test/my_test$ cd ..
hc@hc-virtual-machine:~/PycharmProjects/test$ ls
my_test
hc@hc-virtual-machine:~/PycharmProjects/test$ ll
总用量 8
drwxr-xr-x 2 hc hc 4096 1023 13:38 ./
drwxrwxr-x 7 hc hc 4096 1023 13:30 ../
lrwxrwxrwx 1 hc hc   32 1023 13:38 my_test -> /home/hc/PycharmProjects/my_test/

说明:

  1. 目录只能创建软链接
  2. 目录创建链接必须用绝对路径,相对路径创建会不成功,会提示:符号连接的层数过多 这样的错误
  3. 使用原文件的绝对路径创建的软链接,不会随着软链接路径改动而失效!所以建议使用原文件绝对路径创建软链接。这时候的软链接才算得上是真正意义上相当于Windows的快捷方式,一旦生成处处可用
  4. 在链接目标目录中修改文件都会在源文件目录中同步变化

 

出处:https://www.cnblogs.com/huchong/p/9836325.html

posted on 2022-06-07 15:37  jack_Meng  阅读(1132)  评论(0编辑  收藏  举报

导航