Linux命令学习六:inode和链接

2022/4/28 7:12:52

本文主要是介绍Linux命令学习六:inode和链接,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

inode简介

  • 扇区:(sector)硬盘最小的存储单元,每个扇区一般是512个字节,即 0.5KB。
  • 块:(block)文件系统存取的最小单元,多个扇区组成的一个块,一般是8个连续的扇区,组成的4KB大小的块。
  • 索引节点:(inode)存储文件的元信息,其中就包含了文件数据所存放的块(block)位置,有多少个文件指向这个inode,文件的权限,文件的修改时间,文件所属用户等信息。

    Unix/Linux系统内部不使用文件名,而使用inode号码来识别文件。对于系统来说,文件名只是inode号码便于识别的别称或者绰号。表面上,用户通过文件名,打开文件。实际上,系统内部这个过程分成三步:首先,系统找到这个文件名对应的inode号码;其次,通过inode号码,获取inode信息;最后,根据inode信息,找到文件数据所在的block,读出数据。

查看inode信息:stat

    安装好系统后,root用户的家目录有一个文件anaconda-ks.cfg,以这个文件以例,看一下该文件的inode信息。

$ stat anaconda-ks.cfg
  文件:anaconda-ks.cfg
  大小:1152            块:8          IO 块:4096   普通文件
设备:fd00h/64768d      Inode:33757248    硬链接:1
权限:(0600/-rw-------)  Uid:(    0/    root)   Gid:(    0/    root)
环境:system_u:object_r:admin_home_t:s0
最近访问:2022-04-23 04:54:15.200283588 -0400
最近更改:2022-04-23 03:14:15.129695148 -0400
最近改动:2022-04-23 03:14:15.129695148 -0400
创建时间:2022-04-13 10:10:41.924217883 -0400

硬链接

    一般情况下,文件名和inode号码是"一一对应"关系,每个inode号码对应一个文件名。但是,Unix/Linux系统允许,多个文件名指向同一个inode号码。

    这意味着,可以用不同的文件名访问同样的内容;对文件内容进行修改,会影响到所有文件名;但是,删除一个文件名,不影响另一个文件名的访问。这种情况就被称为"硬链接"(hard link)。

基础语法

ln 源文件 目标文件

实例

    增加一个硬链接,指向root用户家目录的anaconda-ks.cfg文件,命名为anaconda.cfg

ln anaconda-ks.cfg anaconda.cfg

    然后通过ll 命令,可以看到anaconda-ks.cfg这个文件的链接数由原来的1,变成2了。因为硬链接,就是直接指向inode的文件数呀。

$ ll anaconda-ks.cfg
-rw-------. 2 root root 1152 4月  23 03:14 anaconda-ks.cfg

    删除一个文件名,就会使得inode节点中的"链接数"减1。当这个值减到0,表明没有文件名指向这个inode,系统就会回收这个inode号码,以及其所对应block区域。

目录的链接数

    有了上面对硬链接的了解,知道输入ll命令会展示出相关文件或者目录的硬链接数。那么接下来就了解一下,为什么新建一个空目录的时候,空目录的硬链接数为2。

    每一个目录,都会自带了两个隐藏的目录,分别是代表当前目录的.以及代表父目录的.. 。基于上面对硬链接的了解,接下来查看一下这两个目录的inode以及它们之间的关系。

实例

    先来看一下目录结构。当前正在root用户的家目录下。

$ pwd
/root

    命令ll 后面的参数 a 代表显示所有的目录,包括隐藏目录.以及..,参数i代表的是显示文件对应的inode

$ ll -ai
33575041 dr-xr-x---.  5 root root      4096 4月  23 08:27 .
     128 dr-xr-xr-x. 17 root root       224 4月  12 07:43 ..

    接下来再看看home/admin这个目录所对应的inode信息。参数-d代表的是查看目录文件的信息,而不是查看目录下面的文件信息。

$ ll -id /root
33575041 dr-xr-x---. 5 root root 4096 4月  23 08:27 /root

    可以看到,/root这个目录的 inode,跟/root这个目录下面的隐藏目录.的 inode 是一样的。就是说,有两个文件,指向了同一个inode 。这就是为什么,每一个新建的目录,它的硬链接数都是 2 的原因。因为还有一个硬链接,指向了父目录的 inode。从此也可以推出结论,每一个目录的硬链接数,总是等于2加上它的子目录总数(含隐藏目录)。

软链接

    软件链接跟windows操作系统下的快捷方式差不多一个意思。就好像QQ软件安装在D盘了,但是通过双击桌面上QQ软件的快捷方式,可以正常运行QQ软件。但是把QQ软件删除了,这个时候双击桌面上QQ软件的快捷方式,就会出现“快捷方式指向了一个未知位置”等信息。

    硬链接有自己的文件名,但没有自己的 inode。软链接有自己的 inode,但是这个 inode 指向的目标文件的inode。这个时候,如果把目标文件删除了,软链接的inode 所指向的 inode 也没有了。再使用软链接访问目标文件的时候,就会出现 “No such file or directory”的错误。

基础语法

ln -s 源文文件或目录 目标文件或目录

实例

    为root用户下的anaconda-ks.cfg文件增加一个软链接,名为anaconda

ln -s anaconda-ks.cfg anaconda

    这个也可以通过ll命令,看到软链接有直观的指向说明

$ ll 
lrwxrwxrwx. 1 root root        15 4月  23 08:27 anaconda -> anaconda-ks.cfg
-rw-------. 2 root root      1152 4月  23 03:14 anaconda.cfg
-rw-------. 2 root root      1152 4月  23 03:14 anaconda-ks.cfg

总结

image



这篇关于Linux命令学习六:inode和链接的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程