inode表结构
- 每个文件的属性信息,比如:文件的大小、时间、类型等,称为文件的元数据(meta data)
- 这此元数据是存放在inode(index node)表中。inode 表中有很多条记录组成,每一条记录对应的存放了每一个文件的元数据信息
每一个inode表记录保存了以下信息
inode number 节点号
文件类型
权限
UID
GID
链接数(指向这个文件名路径名称个数)
该文件的大小和不同的时间戳
指向磁盘上文件的数据块指针
有关文件的其他数据
目录
- 目录是个特殊文件,目录文件的内容保存了此目录中文件的列表及inode number对应关系
- 文件引用一个是 inode号
- 通过文件名来引用一个文件
- 一个目录是目录下的文件名和文件inode号之间的映射
inode表和目录
cp和inode
cp命令
-
分配一个空闲的inode号,在inode表中生成新条目
-
在目录中创建一个目录项,将名称与inode编号关联
-
拷贝数据生成新的文件
rm和inode
rm命令
- 链接数递减,从而释放的inode号可以被重用
- 把数据块放在空闲列表中
- 删除目录项
- 数据实际上不会马上被删除,但当另一个文件使用数据块时将被覆盖
mv和inode
- 如果mv命令的目标和源在相同的文件系统,作为mv 命令用新的文件名,创建对应新的目录项,
删除旧目录条目对应的旧的文件名,不影响inode表(除时间戳)或磁盘上的数据位置:
没有数据被移动!
硬链接
- 硬链接本质上就是给文件起一个新的名称,实质是同一个文件
特点
- 创建硬链接会在对应的目录中增加额外的记录项以引用文件
- 对应于同一文件系统上同一个物理文件
- 每个目录引用相同的inode号
- 创建时链接数递
- 增删除文件时:rm命令递减计数的链接,文件要存在,至少有一个链接数,当链 接数为零时,该文件被删除
- 不能跨越驱动器或分区 不支持对目录创建硬链接
格式
ln filename [linkname ]
符号链接(软链接)
- 一个符号链接指向另一个文件,就像 windows 中快捷方式,软链接文件和原文件本质上不是同一个文件
特点
- 一个符号链接的内容是它引用文件的名称
- 可以对目录创建软链接
- 可以跨分区的文件实现
- 指向的是另一个文件的路径;其大小为指向的路径字符串的长度;不增加或减少目标文件inode的 引用计数
- 在创建软链接时, 如果源文件使用相对路径,是相对于软链接文件的路径,而非相对于当前工作目 录,但是软链接的路径如果是相对路径,则是相对于当前工作目录
格式
ln -s filename [linkname]
硬链接和软链接的异同
本质 | 跟源文件是同一个文件 | 跟源文件不是同一个文件 |
---|---|---|
跨设备 | 不支持跨设备 | 支持跨设备 |
indoe | inode相同 | inode不同 |
链接数 | 创建链接链接数会增加,反之 | 创建或删除,链接数都不变 |
文件夹 | 不支持 | 支持 |
相对路径 | 原始文件相对路径是相对于当前目录 | 原始文件的相对路径是相对于链接文件的相对路径 |
删除源文件 | 只是链接数减一,但链接文件的访问不受影响 | 链接文件将无法访问 |
文件类型 | 跟源文件相同 | 不同 |
特点 | 硬链接 | 软链接 |
文件大小 | 跟源文件相同 | 源文件的路径的长度 |
企业软件迭代
# 企业刚开始的软件版本是1.0
mkdir app-v1.0
# 创建一个软链接方便用户访问
ln -s app-v1.0 app
# 版本升级之后
mkdir app-v2.0
# 删除原来v1.0指向的软链接
rm -f app
# 重新创建app软链接指向v2.0
ln -s app-v2.0 app