linux根目录索引节点,Linux索引节点以及链接

Linux索引节点以及链接

在学习Linux中,索引节点以及链接概念都是一个既简单又重要的基础概念,一下是我学习这两个概念的总结,在此分享给大家,如有不当之处,敬请各位大神留言提醒,谢谢!

1.0  Linux索引节点

在Linux文件系统中,不管什么类型的文件,保存在磁盘分区中,系统都会给它分配一个编号,称为索引节点index node。在Linux中,存在多个文件指向同一个inode,这种情况一般称为硬链接【hard link】.

一个索引节点(inode)是在一个表项,包含有关文件的信息(元数据),包括:文件类型,权限,UID,GID,硬链接数(指向这个文件路径名称个数),该文件的大小和不同的时间戳,指向磁盘上文件的数据块指针,有关文件的其他数据. 可用 stat 命令查看[root@localhost testdir]# stat filename

File: ‘filename’

Size: 38       Blocks: 8     IO Block: 4096   regular file

Device: 805h/2053dInode: 134         Links: 1

Access: (0755/-rwxr-xr-x)  Uid: (  0/  root)   Gid: (  0/  root)

Context: unconfined_u:object_r:etc_runtime_t:s0

Access: 2016-07-24 21:54:56.948084045 -0400

Modify: 2016-07-24 21:53:30.720370973 -0400

Change: 2016-07-24 21:54:37.683701323 -0400

Birth: -

[root@localhost testdir]#

上述显示文件名(File)为: filename ;

大小(Size) : 38 字节 (一般情况下显示为字节,若想直观查看文件大小,用命令`ll -h filename`) ;

块数量(Blocks) : 8 ;

单块IO设备块大小 (IO Blocks) 4096 字节 ;

文件类型 : rugular file(普通文件) ;

索引节点(inode) : 134 ;

硬链接数(Link) : 1 ;

权限(Access) : (0755/-rwxr-xr-x) ;

Uid & Gid : ( 0/  root)  &  (  0/  root) ;

三个时间戳 : Access: 2016-07-24 21:54:56.948084045 -0400

Modify: 2016-07-24 21:53:30.720370973 -0400

Change: 2016-07-24 21:54:37.683701323 -0400

1158ac09bdedd4f846bf531feabce5fa.png

inode结构如上图一

inode的元数据存储方式类似于人类的记忆方法--记忆宫殿:

1、当存储的元数据不是很大时,恰好在 12个直接块指针 的容量范围内,就讲源数据存储在12个直接块指针中;

2、当存储的原数据大小超过 12个直接块指针 的容量时,则启用第13个块 间接块指针 :次块作为存放多个指针目录的块,每个指针目录都指向下一个块,下一个块便是存放原数据的块. 双重间接块指针以及三重块指针 等工作原理都是如此.

c6a76cf06df3c90582e9e1bee50802f1.png   人是通过文件名来引用一个文件,而文件引用是通过一个inode号,所以一个目录是目录下的文件名和文件inode号之间的映射.如上图.

1.2 cp rm 与inode关系

1.2.1  cp和inode

CP 命令:

分配一个空闲的inode号,在inode表中生成新条目

在目录中创建一个目录项,将名称与inode编号关联

拷贝数据生成新的文件

1.2.2 rm和inode

rm 命令:

链接数递减,从而释放的inode号可以被重用

把数据块放在空闲列表中

删除目录项

数据实际上不会马上被删除,但当另一个文件使用数据块

时将被覆盖。

1.2.3  mv和inode

如果mv命令的目标和源在相同的文件系统,作为mv 命令

用新的文件名创建对应新的目录项

删除旧目录条目对应的旧的文件名

不影响inode表(除时间戳)或磁盘上的数据位置:没有

数据被移动!

如果目标和源在一个不同的文件系统, mv相当于cp和rm

2.0  Linux链接

在Linux系统中,Linux链接分为两种:硬链接(hardlink) 和 软链接(symbolic link)

2.1 硬链接(hard link)

在Linux文件系统中,不管什么文件保存在磁盘中,系统都会自动分配一个inode号,多个文件名指向同一个inode号是存在的,而这种行为叫 硬链接(hard link).

硬链接的作用是一个inode号可拥有多个有效路径.如下图:

bed412d8451dc630c0ba695147376558.png   对于重要文件而言,创建硬链接是必要的.因为当修改源文件是,对应的硬链接文件也会随之修改;当删除原文件是,对应的硬链接文件不会受影响.也就是说,文件真正删除的条件是与之相关的所有硬链接文件均被删除.(ll -i filename 可查看文件filename  inode号)[root@localhost testdir]# ll -i ./hard1 ./hard.link 

7304 -rw-r--r--. 2 root root 0 Jul 29 04:43 ./hard1

7304 -rw-r--r--. 2 root root 0 Jul 29 04:43 ./hard.link

[root@localhost testdir]# echo test > ./hard.link

[root@localhost testdir]# cat ./hard1

test

[root@localhost testdir]# rm -f ./hard.link

[root@localhost testdir]# cat ./hard1

test

要注意的是,硬链接是对应于同一文件系统上一个物理文件,所以创建硬链接是必须要在 同一分区下 或者 不能跨越驱动器 ,否则无法进行.

在删除文件时:

rm命令递减计数的链接

文件要存在,至少有一个连接数

当链接数为零时,该文件被删除

2.1 软链接(SymbolicLink) ln -s 原始文件路径 软链接

另外一种连接称之为符号连接(SymbolicLink),也叫软连接。软链接文件有类似于Windows的快捷方式。它实际上是一个特殊的文件。在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。

软链接文件与硬链接文件有所不同:

不共用源文件inode;

删除源文件,对应的软链接文件无法使用;删除软链接文件,源文件还可以使用;

可以跨越驱动器 或者 不在 同一分区下 创建;

路径--原始文件相对路径:相对于软连接文件路径,而不是相对于当前工作目录

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值