linux符号链接权限,linux中硬链接和符号链接的区别及设定方法

1、符号链接

符号链接英文为symblolic link,有些文章也称为软链接。创建符号链接实际上就是创建了一个文件属性为l的新文件,新文件的内容就是创建时设定的目标文件路径。这个比较容易理解,可以理解成windows下的快捷方式。

下面来创建符号链接试试,在linux下创建链接使用ln命令。假设测试目录下有一个test.txt文件,创建一个符号链接到这个文件:

ln -s test.txt test

其中-s就是表示symblolic的意思,来看下这两个文件的属性:

ll -i test test.txt

fa7cf5e01294c815db0c5fcbfcf0b0be.png

linux符号链接文件属性

可以观察到test的文件属性为l,就是link的意思,test的大小为8bytes,实际上就是创建符号链接时设定的目标文件”test.txt”的长度。这边还有一个信息,就是最前面的数字,这个数字是表示inode的意思,可以看出两个文件的inode并不一致。

笔者尝试用vim,less,cat,head和cp命令来操作符号链接test,最终读取到的内容都是从test.txt文件来的。使用mv和rm命令,是操作符号链接本身。

2、硬链接

硬链接英文为hard link,创建硬链接实际上就是创建一个文件,它所指向的inode和目标文件的inode一致。接上例,创建硬链接来看看:

ln test.txt test_hard

观察下test,test_hard,test.txt的文件属性:

5cff4fc6a60385077d8ce901dc78f481.png

linux硬链接文件属性

可以观察到test_hard和test.txt的属性一模一样,只有名称不一样。要理解硬链接的本质内容,需要了解一些linux文件系统的知识:linux在存文件时系统会分配一个inode来记录文件的权限、文件大小、文件所有者与所属群组等属性,还会分配若干个block来存储文件实际内容,并将block的地址记录在inode中。

结合上例,要读取test.txt的内容,就要先从538782这个inode里获取相应block的地址,然后才能读取到文件存储的内容。

因为test_hard和test.txt指向了同一个inode,所以修改test_hard和test.txt文件内容实际上是一致的。那么删除其中一个文件,是否会删除另外一个呢?答案是不会,看上面图片的第三列信息(1,2,2),这个信息表示有多少个文件指向这个inode,其中538782有两个指向,就是test_hard和test.txt,删除任意一个,都只是减少一个指向,只有当指向为0时,系统才会真正删除文件内容。这也是C语言中删除文件函数unlink的含义了。

总结

因为硬链接只能在同一个文件系统内使用,为了方便在不同文件系统中使用,才推出了符号链接。硬链接和目标文件指向的是同一个文件;符号链接本身是一个单独的文件,和目标文件不同,只是系统在处理符号链接时会导向到目标文件。

查看符号链接本身的内容可以参考这篇文章:linux如何读取符号链接本身的内容。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值