`
darrenzhu
  • 浏览: 802166 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

硬链接和软链接的区别和联系

阅读更多
首先要弄清楚,在Linux系统中,内核为每一个新创建的文件分配一个Inode(索引结点),每个文件都有一个惟一的inode号。文件属性保存在索引结点里,在访问文件时,索引结点被复制到内存在,从而实现文件的快速访问。

  链接是一种在共享文件和访问它的用户的若干目录项之间建立联系的一种方法。Linux中包括两种链接:硬链接(Hard Link)和软链接(Soft Link),软链接又称为符号链接(Symbolic link)。

  一、硬链接

  硬链接说白了是一个指针,指向文件索引节点,系统并不为它重新分配inode。可以用:ln命令来建立硬链接。语法:
QUOTE:
ln [options] existingfile newfile
ln[options] existingfile-list directory

  用法: 第一种:为”existingfile”创建硬链接,文件名为”newfile”。第二种:在”directory”目录中,为 ”existingfile-list”中包含的所有文件创建一个同名的硬链接。常用可选[options] –f 无论”newfile”存在与否,都创建链接。-n 如果”newfile”已存在,就不创建链接。

  下面举一些例子:
QUOTE:
$ ls –il
13058 -rwx - - - - - - 1 longcheng longcheng 48 8月 5 16:38 file1
13059 -rwx - - - - - - 1 longcheng longcheng 57 8月 5 16:40 file2
$ ln file2 file2hard
$ ls –il
13058 -rwx - - - - - - 1 longcheng longcheng 48 8月 5 16:38 file1
13059 -rwx - - - - - - 2 longcheng longcheng 57 8月 5 16:40 file2
13059 -rwx - - - - - - 2 longcheng longcheng 57 8月 5 16:40 file2hard

  
注意在创建链接前,file1 显示的链接数目为1,创建链接后
(1)file1和file1hard的链接数目都变为2;
(2) file1和file1hard在inode号是一样的;
(3) file1和file1hard显示的文件大小也是一样。
可见进行了ln命令的操作结果:file2和file2hard是同一个文件的两个名字,它们具有同样的索引节点号和文件属性,建立文件file2的硬链接,就是为file2的文件索引节点在当前目录上建立一个新指针。

  链接数同时减一,只有将所有指向文件内容的指针,也即链接数减为0时,内核才会把文件内容从磁盘上删除。当前目录逻辑结构:(不好意思图没有显示出来)。

  还可以在不同目录,但同一文件系统中建立文件的硬链接。设file1、file2在目录/home/longcheng/dir1中,下面的命令,在/home/longcheng中建立file2的硬链接。
QUOTE:
ln file2 /home/longcheng/file2hard

  下面的程序,是将dir1目录中所有文件,在目录dir2中建立硬链接
QUOTE:
$mkdir dir2
$ln /home/longcheng/dir1/* /home/longcheng/dir2

  如果使用了 ln –f existingfile newfile,如果newfile已经存在,则无论原来newfile是什么文件,只用当前用户对它有写权限,newfile就成为exisitngfile的硬链接文件。

  尽管硬链接节省空间,也是Linux系统整合文件系统的传统方式,但是存在一下不足之处:

  (1)不可以在不同文件系统的文件间建立链接

  (2)只有超级用户才可以为目录创建硬链接。虽然很多树上说root用户可以创建,但是笔者在学习过程中发现即使是root用户也不能创建,我的系统是Redhat,内核2.4、2.6都试过,在其他系统中不知道是不是可以。

 二、软链接(符号链接)

  软链接克服了硬链接的不足,没有任何文件系统的限制,任何用户可以创建指向目录的符号链接。因而现在更为广泛使用,它具有更大的灵活性,甚至可以跨越不同机器、不同网络对文件进行链接。

  建立软链接,只要在ln后面加上选项 –s,下面举个例子
QUOTE:
$ ls -il
13058 -rwx - - - - - - 1 longcheng longcheng 48 8月 5 16:38 file1
13059 -rwx - - - - - - 2 longcheng longcheng 57 8月 5 16:40 file2
13059 -rwx - - - - - - 2 longcheng longcheng 57 8月 5 16:40 file2hard
$ln –s file1 file1soft
$ls -il
13058 -rwx - - - - - - 1 longcheng longcheng 48 8月 5 16:38 file1
13059 -rwx - - - - - - 2 longcheng longcheng 57 8月 5 16:40 file2
13059 -rwx - - - - - - 2 longcheng longcheng 57 8月 5 16:40 file2hard
13061 lrwxrwxrwx 1 longcheng longcheng 5 8月 5 16:58 file1soft->file1

  从上面链接后的结果可以看出来软链接与硬链接,区别不仅仅是在概念上,在实现上也是不同的。
区别:硬链接原文件及其链接文件公用一个inode号,说明他们是同一个文件(有相同的文件内容而有不同的文件名),而软链接原文件及其链接文件拥有不同的inode号,表明他们是两个不同的文件(文件名和文件内容都不同,软链接文件里的文件内容只是保存了找到原文件所需的路径等信息);在文件属性上软链接明确写出了是链接文件,而硬链接没有写出来,因为在本质上硬链接文件和原文件是完全平等关系;链接数目是不一样的,软链接的链接数目不会增加;文件大小是不一样的,硬链接文件显示的大小是跟原文件是一样的,这用强调,因为是等同的嘛,而这里软链接显示的大小与原文件就不同了,file1大小是48B,而file1soft是5B,这里面的5实际上就是“file1”的大小。

  总之,建立软链接就是建立了一个新文件。当访问链接文件时,系统就会发现他是个链接文件,它读取链接文件找到真正要访问的文件。

  在不同系统之间建立软链接、对目录建立链接,这里就不举例了,读者可以自己去尝试,我也是在不断实践中学习的。

  当然软链接也有硬链接没有的缺点,因为链接文件包含有原文件的路径信息,所以当原文件从一个目录下移到其他目录中,再访问链接文件,系统就找不到了~~,而硬链接就没有这个缺陷,你想怎么移就怎么移(呵呵);还有它要系统分配额外的空间用于建立新的索引节点和保存原文件的路径。

  补充一下:可以通过symlinks来查看链接文件,可以用 man symlinks来学习。


两者之间的区别 (再论证)

    硬连接指通过索引节点来进行的连接, info ln 命令告诉您,硬链接是已存在文件的另一个名字(A "hard link" is another name for an existing file),这多少有些令人困惑。在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Number)。
    在Linux中,多个文件名指向同一索引节点是存在的。一般这种连接就是硬连接。*******硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要
    文件,以防止“误删”的功能。其原因如上所述,因为对应该目录的索引节点有一个以上的连接。只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个
    连接被删除后,文件的数据块及目录的连接才会被释放。也就是说,文件才会被真正删除。
    软链接文件有点类似于Windows的快捷方式。它实际上是特殊文件的一种。在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。
三  个人体会
    软链接是另一个文件,作用可以理解为一个指针,******作用在这个文件上的操作除了删除都直接转向实际指向文件,由于是一个真实的文件所以占用磁盘空间
    硬链接可以认为不是一个文件,它只是实际文件的一个别名,它的作用是防止真实文件被误操作,给一个文件建立硬链接后,他们互为别名,删除其中任意一个,
    这样用RM命令只会删除该别名,实际文件并不会被删除。只有链接数为0时,才会删除原始文件。

linux ln(link) 命令详解

功能说明:连接文件或目录。

语  法:ln [-bdfinsv][-S <字尾备份字符串>][-V <备份方式>][--help][--version][源文件或目录][目标文件或目录] 或 ln [-bdfinsv][-S <字尾备份字符串>][-V <备份方式>][--help][--version][源文件或目录...][目的目录]

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

参  数:
-b或--backup  删除,覆盖目标文件之前的备份。
-d或-F或--directory  建立目录的硬连接。
-f或--force  强行建立文件或目录的连接,不论文件或目录是否存在。
-i或--interactive  覆盖既有文件之前先询问用户。
-n或--no-dereference  把符号连接的目的目录视为一般文件。
-s或--symbolic  对源文件建立符号连接,而非硬连接。
-S<字尾备份字符串>或--suffix=<字尾备份字符串>  用"-b"参数备份目标文件.




ln 命令详解与范例
链接有两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link)。
建立硬链接时,链接文件和被链接文件必须位于同一个文件系统中,并且不能建立指向目录的硬链接。
而对符号链接,则不存在这个问题。默认情况下,ln产生硬链接。
ln 命令
用途:
     链接文件。
语法:
     将某个文件链接到一个文件上
     ln [ -f | -n] [ -s ] SourceFile [ TargetFile ]
     将一个或多个文件链接到一个目录上
     ln [ -f | -n] [ -s ] SourceFile ... TargetDirectory
描述:
     ln 命令将在 SourceFile 参数中指定的文件链接到在 TargetFile 参数中指定的文件,或将其链接到在 TargetDirectory 参数中指定的另一个目录中的文件。在缺省情况下,ln 命令会创建硬链接。如果需要使用 ln 命令来创建符号链接,请指明 -s 标志。
符号链接是指向文件的一个间接指针;它的目录项中包含了它所链接的文件名。符号链接可能会跨越文件系统,可能指向目录。
如果正在将某个文件链接到新的名字,那么只能列出一个文件。如果链接到一个目录,那么可以列出多个文件。
TargetFile 参数是可选的。如果不指定目标文件,ln 命令会在当前的目录中创建一个新的文件。新的文件继承了指定在 SourceFile 参数中的文件名。请参阅示例 5。
注意:
如果不使用 -s 标志,就不能在文件系统之间链接文件。
如果 TargetDirectory 已经是链接到目录上的一个符号链接,那么 ln 命令将现有的目标视为文件。这意味着,类似于 ln -fs somepath/lname symdir 的命令不会遵循现有的 symdir 符号链接,作为代替,它会创建一个从 somepath/lname 到 symdir 的新的符号链接。
标志
-f 促使 ln 命令替换掉任何已经存在的目的路径。如果目的路径已经存在,而没有指定 -f 标志,ln 命令不会创建新的链接,而是向标准错误写一条诊断消息并继续链接剩下的 SourceFiles。
-n 指定,如果链接是一个现有的文件,那么不要覆盖文件的内容。 -f 标志重设了这个标志。这是缺省的行为。
-s 促使 ln 命令创建符号链接。符号链接中包含了它所链接的文件的名字。当对链接执行打开操作的时候,会使用到引用文件。对符号链接的 stat 调用会返回链接的目标文件;必须完成lstat 调用来获取链接的信息。可以使用 readlink 调用来读取符号链接的内容。符号链接可能跨越文件系统,指向目录。
注意:当为 -s 标志指定 SourceFile 参数的时候,必须使用绝对路径。如果没有指明绝对路径,那么当 SourceFile 和 TargetFile 参数位于不同的目录中的时候,可能会发生意外的结果。在创建符号链接之前,不需要存在源文件。
-d : 允许系统管理者硬链结自己的目录
-i : 在删除与 dist 同档名的档案时先进行询问
-v : 在连结之前显示其档名
-b : 将在链结时会被覆写或删除的档案进行备份
-S SUFFIX : 将备份的档案都加上 SUFFIX 的字尾
-V METHOD : 指定备份的方式
--help : 显示辅助说明
--version : 显示版本
退出状态
此命令返回以下的退出值:
0 所有指定的文件都成功链接上了。
>0 出现一次错误。
示例
1、为了创建到一个文件的另一个链接(别名),请输入:
ln     -f chap1     intro
这会将 chap1 链接到新的名称, intro。如果 intro 不存在,那么会创建该文件名。如果 intro 已经存在了,那么这个文件会被替换为指向 chap1的一个链接。然后 chap1 和 intro 文件名会指向同一个文件。对其中任何一个的更改都会出现在另一个中。如果一个文件名被 rm 命令删除,那么该文件并没有完全被删除,因为它仍然以其它的名字存在。
2、为了将文件链接为另一个目录中的相同名字,请输入:
ln     index     manual
这会将 index 链接到新的名称,manual/index。
注意:在示例 1 中的 intro 是一个文件的名称;在示例 2 中的 manual 是一个已经存在的目录。
3、为了将几个文件链接为另一个目录中的名称,请输入:
ln     chap2   

jim/chap3     /home/manual
这会将 chap2 链接到新的名称 /home/manual/chap2;将 jim/chap3 链接到新的名称 /home/manual/chap3。
4、如果想要在 ln 命令中使用模式匹配字符,请输入:
n     manual/* .
这会将 manual 目录中的所有文件链接到当前目录中, . (点),给他们在 manual 目录中同样的名称。
注意: 必须在星号和句点之间输入一个空格。
5、为了创建一个符号链接,输入:
ln -s /tmp/toc toc
这会在当前的目录中创建符号链接 toc。 toc 文件指向 /tmp/toc 文件。如果 /tmp/toc 文件已经存在了,那么 cat toc 命令可以列出其内容。
6、如果想要在不指明 TargetFile 参数的情况下得到相同的结果,请输入:ln -s /tmp/toc
分享到:
评论

相关推荐

    Linux软连接和硬链接

    在Linux操作系统中,...文章《Linux软连接和硬链接》以及相关资料提供了深入的探讨,包括它们的工作原理、创建方法以及使用示例。通过阅读这些材料,你可以更全面地了解如何在Linux环境中有效地利用这两种链接技术。

    linux软链接 硬链接区别

    硬链接和软链接是 Linux 中两种不同的文件链接方式,硬链接通过索引节点来进行连接,而软链接是一种特殊的文件,包含的有另一文件的位置信息。了解硬链接和软链接的区别对 Linux 操作系统的使用和管理非常重要。

    Linux软连接和硬链接-实际操作一遍你就会懂

    硬链接和软链接都是Linux环境下对文件建立额外引用的方式,但它们在实现机制和使用效果上有明显区别。通过实验可以发现,硬链接和原始文件共享同一个inode节点,而软链接则创建了一个新的inode节点,其内容为原文件...

    Linux 软连接与硬链接.pdf

    Linux 软连接与硬链接 Linux 操作系统中有两种类型的连接:硬连接(Hard Link)和软连接(Symbolic Link)。这两种连接类型都可以实现文件的共享,但它们的实现机制和应用场景不同。 一、硬连接(Hard Link) 硬...

    java学习:03.硬链接和软连接.md

    Java是一种高级的面向对象的程序设计语言,它具有广泛的应用和强大的跨平台特性。Java语言于1995年由Sun公司推出,由Java之父詹姆斯高斯林设计。Java的设计目标是提供一种易学易用、功能强大的编程语言,使开发人员...

    linux 硬链接和软链接深入理解.docx

    了解硬链接和软链接的区别和使用场景对于 Linux 系统管理员和开发者非常重要。 硬链接(Hard Link) 硬链接是一种文件系统中的节点(inode),它是已存在文件的另一个名字。硬链接文件指向的是 inode,修改其中一...

    ln的软硬连接区别

    在Linux操作系统中,链接主要分为两类:硬链接(hard link)和软链接(又称为符号链接,symbolic link)。下面我们将从多个维度详细分析这两种链接的特点及其差异。 ### 软链接(Symbolic Link) 软链接在功能上...

    软链接与硬链接

    根据链接方式的不同,可以将链接分为硬链接(Hard Link)和软链接(符号链接,Symbolic Link)。本文将详细介绍这两种链接的区别及其本质原理,帮助读者从根本上理解它们的工作机制。 #### 二、硬链接 硬链接是...

    Centos 7 硬连接和软连接.pdf

    本文将深入探讨两个关键概念:硬连接(Hard Links)和软连接(Symbolic Links),它们都是Linux系统中创建多条访问同一文件内容路径的方法。了解这两个概念对于日常的文件管理和系统维护至关重要。 首先,让我们来...

    需要了解的linux硬链接与软链接.docx

    在 Linux 系统中,硬链接和软链接都是重要的文件系统组成部分,它们可以帮助用户快速链接到目标档案或目录,但是它们也存在一些限制和不足之处,例如硬链接不允许给目录创建硬链接,不可以在不同文件系统的文件间...

    硬连接和符号连接

    硬连接和符号连接是Linux系统中两种不同的连接方式,它们各自具有独特的特性和应用场景。理解这两种连接的工作原理及其区别对于有效管理和优化Linux文件系统至关重要。无论是日常使用还是系统开发,了解这些基础知识...

    详解linux软连接和硬链接

    在Linux操作系统中,文件系统支持两种类型的链接:硬链接(Hard Link)和软链接(Symbolic Link),这两种链接都是为了提供文件的多个访问路径。理解它们的区别和使用场景对于日常的Linux操作非常重要。 首先,硬...

    shell中的函数、硬链接、软链接、权限、特定变量$1,$#等

    本文将深入探讨Shell中的函数、硬链接、软链接、权限管理以及特定变量如$1和 $#等概念。 首先,让我们从Shell函数开始。函数在Shell脚本中起到模块化代码的作用,可以重复使用并降低复杂性。定义一个函数的基本语法...

    Linux教程-磁盘相关-分区-文件系统-挂载-软连接硬连接.zip

    涵盖了Linux系统管理的核心概念和技能。...此外,重点讲解了软连接和硬链接的区别,并提供了额外的补充材料以加深理解。适合Linux初学者和系统管理员提升对文件系统管理、磁盘空间优化和链接应用的实战能力。

    +实验4 Linux的文件系统.docx

    通过实验,我们可以了解到文件硬链接和软连接的区别。硬链接是建立在文件系统中的物理链接,而软连接是建立在文件系统中的逻辑链接。 四、结论 本实验报告通过实验和分析,掌握了文件硬链接和软连接的实现方法,...

    linux软、硬链接的区别

    总结软链接和硬链接的主要区别: 1. **创建方式**:软链接使用`ln -s`,硬链接直接用`ln`。 2. **链接类型**:软链接可以跨文件系统,硬链接则不行。 3. **I节点**:硬链接共享相同inode,软链接有自己的inode并...

    Linux实验三 软硬连接 压缩打包和解压

    * 使用 ln 建立文件链接:ln 命令用于建立文件链接,分为硬链接和软链接两种。 * tar 文件打包和压缩功能的使用:tar 命令用于将文件和目录打包和压缩,常用的选项有-c、-x、-z 等。 三、实验过程 1. find 命令的...

Global site tag (gtag.js) - Google Analytics