硬链接:
1: 简言之就是一个物理文件对应多个不同的文件名。
|80 |xyz |
|----- |----- |
|80 | ab |
|-----|----- |
比如文件i-number=80的文件,可以有多个名字,如ab,xyz等等
这种缺点是:只能在一个文件系统中使用。
(为虾米不能再别的文件系统中使用呢?)那是因为:
inode编号(即i-number)在自己文件系统之外没有任何意义,所以不能跨文件系统建立链接,而硬链接主要就是inode。所以hard link不能跨文件系统
2:软链接(符号链接)
为了允许跨越文件系统建立链接,unix系统实现了符号链接
每个软链接都有自己的inode和包含被链接文件完整路径名的数据块。即xy文件名对应一个i-number根据这个编号找到一个inode,在这个inode中包含被链接文件完整路径名的数据块。。比如说:存在的是哪个文件系统上的哪个文件。。
符号链接的操作是透明的:对符号链接文件进行读写的程序会表现得直接对目标文件进行操作。某些需要特别处理符号链接的程序(如备份程序)可能会识别并直接对其进行操作。 一个符号链接文件仅包含有一个文本字符串,其被操作系统解释为一条指向另一个文件或者目录的路径。它是一个独立文件,其存在并不依赖于目标文件。如果删除一个符号链接,它指向的目标文件不受影响。如果目标文件被移动、重命名或者删除,任何指向它的符号链接仍然存在,但是它们将会指向一个不复存在的文件。这种情况被有时被称为被遗弃。
这个人写的这篇文章也很不错,容易懂:
软连接,其实就是新建立一个文件,这个文件就是专门用来指向别的文件的(那就和windows 下的快捷方式的那个文件有很接近的意味)。软连接产生的是一个新的文件,但这个文件的作用就是专门指向某个文件的,删了这个软连接文件,那就等于不需要这个连接,和原来的存在的实体原文件没有任何关系,但删除原来的文件,则相应的软连接不可用(cat那个软链接文件,则提示“没有该文件或目录“)
硬连接是不会建立Inode的,他只是在文件原来的Inode link count域再增加 1而已,也因此硬链接是不可以跨越文件系统的。相反都是软连接会重新建立一个Inode,当然Inode的结构跟其他的不一样,他只是一个指明源文件的字符串信息,一旦删除源文件,那么软连接将变得毫无意义。而硬链接删除的时候,系统调用会检查link count的数值,如果他大于等于1,那么Inode不会被回收。因此文件的内容没有不会被删除。
硬链接实际上是为文件建一个别名,链接文件和原文件实际上是同一个文件。可以通过ls -i来查看一下,这两个文件的inode号是同一个,说明它们是同一个文件;而软链接建立的是一个指向,即链接文件内的内容是指向原文件的指针,它们是两个文件。
1.软连接可以跨文件系统,硬链接不可以;
2.软连接可以对一个不存在的文件名(filename)进行连接(当然此时如果你vi这个软连接文件,linux会自动新建一个文件名为filename的文件),硬链接不可以(其文件必须存在,inode必须存在);
3.软连接可以对目录进行连接,硬链接不可以。
其他知识:
软连接(symbolic link)又叫符号连接,这个软链接文件包含了另一个文件的路径名。可以是任意文件或目录,可以链接不同文件系统的文件。
ln -s source_file softlink_file
硬链接,命令:ln -d existfile newfile 不用参数-d也可以的,如:ln existfile newfile
在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Number)。在Linux中,多个文件名指向同一索引节点是存在的(如:硬链接)
I节点(Inode) :它是UNIX内部用于描述文件特性的数据结构.我们通常称I节点为文件索引结点(信息结点).i节点 含有关于文件的大部分的重要信息,包括文件数据块在磁盘上的地址.每一个I节点有它自己的标志号,我们称为文件顺序号.I节点包含的信息 1.文件类型 2.文件属主关系 3.文件的访问权限 4.文件的时间截.
他的博客签名也不错O(∩_∩)O哈!:
Stay hungry, stay foolish. 得意之时谨记,一半命运还掌握在上帝手里;失意之时须知,一半命运还掌握在自己手里。
用ln -s 命令可以生成一个软连接,如下:
[root@linux236 test]# ln -s source_file softlink_file (注意此时的softlink_file一开始的时候是不存在的)
ls -l的时候看见softlink_file指向source_file
在对符号文件进行读或写操作的时候,系统会自动把该操作转换为对源文件的操作,但删除链接文件时,系统仅仅删除链接文件,而不删除源文件本身。
删除硬/软链接用rm softlink_file
或者unlink softlink_file
ls -l的时候,发现softlink_file已经被删除了