软链接和硬链接

要理解软链接和硬链接需要首先理解文件系统的原理,这里以EXT2文件系统为例。

Ext2文件系统由3部分组成:

super block

记录此文件系统的整体信息,包括 inode/block 的总量,使用量,剩余量。以及文件系统的格式与相关信息。

inode

一个文件占用一个inode,记录文件的属性和权限等,同时也记录此文件的数据所在的block号码。

block

实际记录文件内容,若文件太大时,会占用多个block。

每个inode和block都有编号,而每个文件都会占用一个inode,同时记录此文件数据所在的block号码。因此,我们知道一个一个文件的inode,也就自然知道这个文件所放置数据的block号码,当然也就能够读出文件的实际数据。

inode/block数据访问示意图.jpg

链接文件

Linux下的链接文件有2种:

hard link(硬链接)

使用命令:ln 源文件 目标文件

我们知道文件名只与目录有关,但是文件内容则与 inode 有关。硬链接就是多个文件名对应同一个inode。

hard link.jpg
  • hard link 只是在某个目录下的 data block多写入一个:文件名->inode,它不会消耗 inode 也不会消耗 block。
  • 它不能跨文件系统
  • 它不能链接到目录
硬链接.png
symbolic link(符号连接,也即是软链接)

使用命令:ln -s 源文件 目标文件

symbolic link 就是在创建一个独立的文件,而这个文件里的数据就是它链接的那个文件的文件名。

symbolic link.jpg
symbolic link.png
readlink
  • readlink 命令
    readlink 命令输出符号链接值或指向的源文件名(通常使用的是 -f 参数)


    readlink命令.png
  • readlink函数
    #include<unistd.h>
    ssize_t readlink(const char *path, char *buf, size_t bufsiz);
    
    readlink()会将参数path的符号链接内容存储到参数buf所指的内存空间。
    注意:返回的内容不是以\0作字符串结尾,但会将字符串的字符数返回。
    失败返回 -1,并设置errno

参考资料
1、https://www.cnblogs.com/kwdeblog/p/11413756.html
2、https://blog.csdn.net/qq_41982304/article/details/82263478
3、https://blog.csdn.net/qq_16209077/article/details/51974359

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 修改硬链接会影响源文件的内容,也会影响软链接的内容;修改源文件也会影响硬链接和软链接; 删除源文件,输入命令:ll...
    慧琴如翌阅读 266评论 0 0
  • 可以用不同的文件名访问同样的内容;对文件内容进行修改,会影响到所有文件名;但是,删除一个文件名,不影响另一个文件名...
    看远方的星阅读 1,449评论 0 7
  • 在Linux上,一个文件被分为两部分(如图一):用户数据 (user data) 与元数据 (metadata)。...
    YYL07阅读 2,267评论 2 2
  • 1.软链接 软连接类似于windows下的快捷方式 如何创建软连接ln -s 文件名 快捷方式的名字例如:ln -...
    无涯之涯阅读 431评论 0 0
  • 前言:对于普通的文件而言,不仅有实际数据还有诸如文件权限,文件属性等元数据(meta data),对于Linux操...
    Stone_説阅读 675评论 0 1