硬链接的关于Linux系统的硬链接

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了硬链接的关于Linux系统的硬链接相关的知识,希望对你有一定的参考价值。

参考技术A

Linux 文件系统最重要的特点之一是它的文件链接。链接是对文件的引用,这样您可以让文件在文件系统中多处被看到。不过,在 Linux 中,链接可以如同原始文件一样来对待。链接可以与普通的文件一样被执行、编辑和访问。对系统中的其他应用程序而言,链接就是它所对应的原始文件。当您通过链接对文件进行编辑时,您编辑的实际上是原始文件。链接不是副本。有两种类型的链接:硬链接和符号链接(软链接)。
硬链接只能引用同一文件系统中的文件。它引用的是文件在文件系统中的物理索引(也称为 inode)。当您移动或删除原始文件时,硬链接不会被破坏,因为它所引用的是文件的物理数据而不是文件在文件结构中的位置。硬链接的文件不需要用户有访问原始文件的权限,也不会显示原始文件的位置,这样有助于文件的安全。如果您删除的文件有相应的硬链接,那么这个文件依然会保留,直到所有对它的引用都被删除。 在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号inode 。软连接,其实就是新建立一个文件,这个文件就是专门用来指向别的文件的(那就和windows 下的快捷方式的那个文件有很接近的意味)。软链接产生的是一个新的文件,但这个文件的作用就是专门指向某个文件的,删了这个软连接文件,那就等于不需要这个连接,和原来的存在的实体原文件没有任何关系,但删除原来的文件,则相应的软连接不可用(cat那个软链接文件,则提示“没有该文件或目录“)
硬连接是不会建立inode的,他只是在文件原来的inode link count域再增加1而已,也因此硬链接是不可以跨越文件系统的。相反都是软连接会重新建立一个inode,当然inode的结构跟其他的不一样,他只是一个指明源文件的字符串信息。一旦删除源文件,那么软连接将变得毫无意义。而硬链接删除的时候,系统调用会检查inode link count的数值,如果他大于等于1,那么inode不会被回收。因此文件的内容不会被删除。
硬链接实际上是为文件建一个别名,链接文件和原文件实际上是同一个文件。可以通过ls -i来查看一下,这两个文件的inode号是同一个,说明它们是同一个文件;而软链接建立的是一个指向,即链接文件内的内容是指向原文件的指针,它们是两个文件。
软链接可以跨文件系统,硬链接不可以;软链接可以对一个不存在的文件名(filename)进行链接(当然此时如果你vi这个软链接文件,linux会自动新建一个文件名为filename的文件),硬链接不可以(其文件必须存在,inode必须存在);软链接可以对目录进行连接,硬链接不可以。两种链接都可以通过命令 ln 来创建。ln 默认创建的是硬链接。使用 -s 开关可以创建软链接。

linux系统中的硬链接和软链接

首先我们需要了解linux下硬链接以及软连接的基本概念.
硬链接:新建的文件是已经存在的文件的一个别名,当原文件删除时,新建的文件仍然可以使用.
软链接:也称为符号链接,新建的文件以“路径”的形式来表示另一个文件,和Windows的快捷方式十分相似,新建的软链接可以指向不存在的文件.
下面详细介绍一下硬链接和软连接之间的区别.
1.硬链接和原来的文件没有什么区别,而且共享一个 inode 号(文件在文件系统上的唯一标识);而软链接不共享 inode,也可以说是个特殊的 inode,所以和原来的 inode 有区别。
2.若原文件删除了,则该软连接则不可以访问,而硬连接则是可以的。
3.由于符号链接的特性,导致其可以跨越磁盘分区,但硬链接不具备这个特性.
硬链接(hard link) ln
命令格式为:ln [选] 源文件 目标文件

选项:如果不加"-s",则建立硬链接文件。 加"-s",则建立软链接。

-f:强制,如果目标文件已经存在,则删除目标文件后在建立链接文件。

演示如下

命令为:ln sh1.cpp hard
命令:cat hard
#include<iostream>

using namespace std;

class Demo
{
        public:
                Demo()
                {
                        cout << "Now the constructor is running.
";
                }
};

int main()
{
        cout << "This is displayed before the object is created .
";

        Demo demobj;

        cout << "This is displayed before the object is treated .
";
        return 0;
}
命令:cat sh1.cpp #include
<iostream> using namespace std; class Demo { public: Demo() { cout << "Now the constructor is running. "; } }; int main() { cout << "This is displayed before the object is created . "; Demo demobj; cout << "This is displayed before the object is treated . "; return 0; }

 

硬链接的特点

1.不论是修改源文件还是修改硬链接文件,另一个文件中的数据都会发生改变。

2.不论是删除源文件还是删除硬链接文件,只要有一个文件存在,这个文件都会被访问。

3.硬链接不会建立新的inode信息,也不会更改inode的总数。

4.硬链接的限制比较多,即不能跨文件系统。也不能链接目录,而且源文件和硬链接文件之间除了inode号是一样的之外,没有其他的明显的特征。


软链接(symbolic link) ln-s
软链接可以直接建立,也可以通过目录建立。

演示如下:

 

直接建立软链接
命令:ln -s sh2.cpp soft
通过目录(必须用绝对路径)建立软链接
命令:ln -s /home/qqtsj/cpp/sh3.cpp  /home/qqtsj/cpp/swor

下面软链接建立完成,查看
命令:ls -l
-rw-rw-r-- 1 qqtsj qqtsj   289 11月  7 18:52  size.cpp
lrwxrwxrwx 1 qqtsj qqtsj     7 1月   5 19:27  soft -> sh2.cpp
lrwxrwxrwx 1 qqtsj qqtsj    23 1月   5 19:30  swor -> /home/qqtsj/cpp/sh3.cpp
-rwxrwxr-x 1 qqtsj qqtsj 29336 11月 12 17:07  tate
-rwxrwxr-x 1 qqtsj qqtsj 13280 11月 10 20:38  tate1
-rw-rw-r-- 1 qqtsj qqtsj   677 11月 10 20:46  tate1.cpp
-rw-rw-r-- 1 qqtsj qqtsj     0 11月 10 20:37  tate2.cpp

 

 

 

软链接的特点

1.不论是改变源文件,还是改变软链接文件,另一个文件中的数据都会发生改变。

2.删除软链接文件,源文件不受影响,而删除源文件,软链接文件将找不到实际的数据,从而显示文件不存在。

3.软链接会新建自己的inode信息和block,只是在block中不存储实际文件数据,而存储的是源文件的文件名和inode号。

4.软链接可以链接目录,可以夸分区。

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

以上是关于硬链接的关于Linux系统的硬链接的主要内容,如果未能解决你的问题,请参考以下文章

Linux的硬链接和软链接

Linux下的硬链接和软链接

linux的硬链接和软连接的区别

Linux的硬链接和软链接

Linux的硬链接和软链接

理解 Linux 的硬链接与软链接