Linux下的实体连接与符号连接

Linux 文件系统最重要的特色之一是它的文件连接。连接是对文件的引用,这样可让文件在文件系统中多处被看到。在 Linux 中,连接能够如同原始文件同样来对待,即连接能够与普通的文件同样被执行、编辑和访问。对系统中的其余应用程序而言,连接就是它所对应的原始文件。当经过连接对文件进行编辑时,编辑的其实是原始文件。连接不是副本。node

在Linux中,有两种类型的连接:实体连接(hard link,硬连接)和符号连接(symbolic link软连接)。安全

实体连接ide

咱们知道,在Linux中,文件名实际上是存在文件所属目录的block里的,且该block里存放了文件的inode号。根据此inode号码,咱们能够找到文件的block,从而读取文件内容。那么,若是咱们在其它目录的block里添加一条记录,引用另外一个文件名(或者同名),该文件对应的inode号和上一个文件的inode号码一致。这样的话,不一样目录里的不一样文件,其实对应的是同一个inode号码,对应的也就是同一个文件。这就是实体连接的概念。blog

clip_image002

从示意图能够看出,实体连接是不会创建新的inode的,它只是在某目录的block区增长了一条记录而已,也所以实体连接是不能够跨越文件系统的。也能够说,实体连接其实是为文件建了一个别名,连接文件和原文件其实是同一个文件。不管对哪一个文件的操做,都是对同一个文件的操做。ip

实体连接的好处是安全。当移动或删除某文件时,实体连接不会被破坏,由于它所引用的是文件的物理数据而不是文件在文件结构中的位置。同时若是删除了某文件,而该文件有相应的实体连接,那么这个文件依然会保留,直到全部对它的引用都被删除。get

符号连接it

符号连接至关于Windows下的快捷方式。符号连接会产生的一个新的文件,但这个文件的做用就是专门指向某个文件的,当删除连接文件时,那就等于不须要这个连接,和原来的存在的实体原文件没有任何关系。但删除原来的文件,则相应的符号连接不可用。class

因为会产生新的文件,因此当建立符号连接时,会占用新的inode编号。cli

ln命令file

建立连接的命令是ln,默认状况下建立的实体连接,当加上-s选项时,则建立符号连接。

ln的用法以下:

clip_image004

建立一个实体连接:

clip_image005

上图中,对于新建立的文件file1,添加了一个在当前目录下的实体连接文件file1-hardlink,当使用ll命令查看时,会发现此两个文件彻底同样。同时,因为建立了连接文件,因此,文件的连接数目都是2.

再针对file1建立一个符号连接:

clip_image007

上图中能够看到,建立的符号连接文件file1-symlink和原文件并不相同,而且当咱们ll时,能够看到系统会标明符号连接所连接到的原文件。

当删除文件时:

clip_image008

上图能够看到,当删除原文件file1时,实体连接文件不会报错,而符号连接文件则会提示找不到文件。

关于目录

咱们知道,当新建一个目录时,该目录下会有.和..两个目录,.表明当前目录,而..表明上层目录。因此,对于某个新建立的目录来讲,.目录至关因而该目录的一个连接,故新建目录的连接数目是2。而..至关因而其上层目录的一个连接,故上层目录的连接数目会+1.

clip_image009

上图中,/tmp目录的原连接数目为10.当建立了新的子目录dir2后,能够看出,dir2的连接数目是2,而/tmp的连接数目变为了11.

相关文章
相关标签/搜索