linux软连接j,Linux的软硬链接

##软链接: 也叫符号链接,实际上就是windows之中的快捷方式,软连接是一个文件,这个文件保存这目标文件完整路径。所以创建软连接的时候目标文件一定输入完整路径。否则你将软连接文件移动到别的地方就不好用了。 创建软连接命令:

ln -s /home/myhome/vim/vimrc /home/myhome/.vimrc #-s选项表示创建符号连接

此外你完全可以创建一个目标文件不存在的软连接,以作为特殊用途。

##硬链接: 相对于软连接,硬链接要复杂的多。在了解硬链接前,首先需要知道inode的概念。

inode 是 UNIX 操作系统中的一种数据结构,其本质是结构体,它包含了与文件系统中各个文件相关的一些重要信息。在 UNIX 中创建文件系统时,同时将会创建大量的 inode 。通常,文件系统磁盘空间中大约百分之一空间分配给了 inode 表。

我们都知道,磁盘是将文件分割成许多块,放到由扇区(sector,512字节)组成的块(block,一般为4mb)之中。而为了快速查找文件,必须有索引来指示那个文件的第一块的位置。这就是inode的作用之一。 在Linux当中,最常见的就是EXT系列文件系统,它们的inode组成大致如下:

文件的字节数

文件拥有者的User ID

文件的Group ID

文件的读、写、执行权限

文件的时间戳,共有三个:ctime指inode上一次变动的时间,mtime指文件内容上一次变动的时间,atime指文件上一次打开的时间。

链接数,即有多少文件名指向这个inode

文件数据block的位置

其次是目录项。Linux中所有的目录都被视为文件,内容是他所包含的文件的文件名和对应inode。特别的,对于根目录,每一个分区都包含一个磁道组信息。根分区也不例外,根分区的 Cylinder Group Blocks里面也包含了根分区的inodes数据,其中包含了根的inode编号。 Linux查找一个文件,例如/home/wgj/ak47.txt,假设我们未对/home独立分区。 那么系统首先读取分区的头部分,获得根目录的inode值,然后得到根目录文件的内容,查找wgj目录,获取其inode值,递归下去,直到找到ak47.txt的inode值为止。

了解了这个过程,硬链接就不难理解了:实际上所有的你见到的文件都是硬链接。添加一个硬链接实际上就是在目录文件中添加一个文件名和inode值的key-value对。

这样就可以理解硬链接的一些特性了,例如不占用inode值(只是对目录文件的修改),无法跨分区创建硬链接(分区不同,inode值可能是一样的),删除源文件,不影响硬链接。(inode值未丢失。还有至少一个)

学过JAVA编程的可以这么理解,硬链接就相当于变量的引用,一个对象可以有多个引用。如果没有引用指向这个对象,那就可以回收了。所以对于垃圾文件或者非重要文件不要建立硬链接,要不然你删除的时候还要找它所有的硬链接Orz。

创建硬链接(无需完整路径):

ln ak47.txt ak48.txt

##软链接和硬链接的场景

软链接会占用inode值,如果存在大量软连接,可能造成硬盘空间未满,inode值却耗尽的问题。(软连接很小,但是却至少要占一个block),但这种情况很少发生。

根据硬链接的特性,可以为重要文件创建多个硬链接,防止误操作删除导致的问题。

如果遇到了磁盘空间占满的情况,但又忘记配置LVM的情况,但是文件不是太大的话,可以将数据迁移到其他磁盘,通过软连接访问。(不过如果是文件数目特别大的时候,消耗的时间就。。。所以尽快迁移到LVM吧)

##关于硬链接目录和软链接目录 根据ln的man page,Linux使可以建立目录的硬链接的,但是需要root权限。这么做的原因是为了防止环的存在。例如有一个目录A,现在建立一个目录A的硬链接,添加到A当中,作为A的子文件夹,那么递归搜索的时候,就会形成一个环,进入死循环。如果要防止这种情况发生,那么就必须将访问过的目录储存在内存中,然后每访问一个文件都检查一下是否已经访问过了。这个过程对于系统来说,无论是时间复杂度和空间复杂度都是无法接受的。所以原则上并不建议为目录建立硬链接,虽然这对于系统来说并不是很麻烦。

但是软链接却不存在上述问题。对于系统来说,软连接数目相对较少,而且识别一个文件是软链接的成本很低,所能以较小的代价在内存中建立一个软链接的树或者散列。所以当存在软连接目录环的时候就可以十分方便的判断。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值