Linux 硬链接 软链接 绝对路径 相对路径详解

发布时间:2020-03-24编辑:脚本学堂
你对linux的软硬链接,以及相对与绝对路径,了解有多少呢?有兴趣的朋友,可以参看下本文的介绍,以作进一步的了解。

linux链接,分为硬链接(Hard Link)与符号链接(Symbolic Link,软链接)。
默认情况下,ln命令产生硬链接。

下面我们针对这块内容,进行具体的分析,并辅之以简单的例子加深理解。

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

硬连接的2个限制:
1)、不允许给目录创建硬链接
2)、只有在同一文件系统中的文件之间才能创建链接。 即不同硬盘分区上的两个文件之间不能够建立硬链接。这是因为硬链接是通过结点指向原始文件的,而文件的i-结点在不同的文件系统中可能会不同。

2、软连接
另外一种连接称之为符号连接(Symbolic Link),也叫软连接。软链接文件有类似于Windows的快捷方式。它实际上是一个特殊的文件。在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。
这就允许符号链接(经常简写为symlinks)指向位于其他分区、甚至是其他网络硬盘上的某个文件。
 

3、通过实验加深理解
 

复制代码 代码示例:
[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不受影响,但是符号连接f3文件无效

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

附:linux目录管理相关知识
.   代表此层目录   
..  代表上层目录   
~   代表自己的家目录   
~user 代表到 user 这个人的家目录   

---目录与路径的常用指令:   
cd   变换目录   
pwd  显示目前的目录   
mkdir 建立一个新目录   
rmdir 删除一个里面是空的空目录   
cd 与 pwd   这两个指令主要是在『变换目前目录』与『显示目前所在目录』的工作,底下说一说他们的用途与语法吧!   
cd   语法: [root @test /root ]# cd [相对路径绝对路径]    
参数说明:   路径有『相对路径』与『绝对路径』的分别,请千万小心啰!   范例:   [root @test /root]# cd ..       
<==回到上一层目录   [root @test /root]# cd ../home    
<==相对路径的写法   [root @test /root]# cd /var/www/html 
<==绝对路径的写法   [root @test /etc]# cd         
<==回到使用者的家目录   [root @test /etc]# cd ~        
<==回到使用者的家目录!   [root @test /etc]# cd ~test      
<==回到 test 这个使用者的家目录   
说明:   cd 是 change directory 的缩写,这是用来变换工作路径的指令。注意,路径与 cd 指令之间存在一个空格!一登入 Linux 系统后,root 会在 root 的家目录,亦即 /root 下,至于使用者会在预设的 /home/username 底下,例如鸟哥的 ID 为 vbird ,则以 vbird 的身份登入后,会到 /home/vbird 这个路径下。OK!那回到上一层可以用『 cd .. 』而到相对路径可到『 cd ../bird』,至于绝对路径则是 cd /usr/sbin !注意喔,在前面的提示字元会改变路径名称!此外,家目录还有一个代码,那就是『 ~ 』符号!例如上面的例子可以发现,使用『 cd ~ 』可以回到个人的家目录里头去呢!此外,如果你的 Linux 主机当中有个 testing 的帐号,你要到他的家目录去,可以下达『 cd ~testing』立刻去到 testing 的家目录啰!   
pwd   语法: [root @test /root ]# pwd    
范例:   [root @test root]# cd /home/test   
[root @test test]# pwd    /home/test       
<==显示目前所在的目录!   
说明:
pwd 是 print working directory 的缩写,也就是显示目前所在目录的指令,例如在上个表格最后的目录是 /home/test 这个目录,但是提示字元仅显示 test ,如果你想要知道目前所在的目录,可以输入 pwd 即可:
此外,由于很多的套件所使用的目录名称都相同,例如 /usr/local/etc 还有 /etc ,但是通常 Linux 仅列出最后面那一个目录而已,这个时候你就可以使用 pwd 来知道你的所在目录啰!免得搞错目录,结果……   
mkdir 与 rmdir 管理目录:  
创建与删除目录的命令:mkdir 与 rmdir ,即make/remove directory 的缩写,多么奇妙而简单的命令!