inode表和软硬链接
linux中一个文件由两部分组成,一部分是元数据,另一部分是文件的实际数据。
元数据也就是文件的属性信息,如文件大小,修改时间,文件类型等等。文件的元数据存放在inode表中
inode表由很多条记录组成,第一条记录对应存放着文件的元数据信息
每一个inode表都对应保存了以下信息
- inode 节点号
- 文件类型
- 权限
- uid
- gid
- 链接数(指向这个文件名路径的名称个数)
- 文件大小和时间戳
- 指向磁盘文件上的数据块指针
- 有关文件的其他数据
目录和文件不同,目录算是一个特殊的文件,目录文件的内容是保存了目录中文件列表和inode number对应关系
inode表会占用系统次磁盘空间的%1,df -i 可以查看节点编号使用情况
cp过程
- 分配一个空闲的inode号,在inode表中生成一个新条目
- 在目录中创建一个目录项,将名称和inode号关联
- 拷贝数据生成新的文件
rm过程
- 链接数递减,释放inode号,释放之后的inode可以被重用
- 将数据块放在空闲列表中
- 删除目录项
- 数据块不会马上被删除,等到另一个文件使用数据块的时候会被覆盖
mv过程
第一种情况,mv命令的目标和源文件在同一个文件系统
- 用新的文件名创建新的目录项
- 删除旧目录条目对应的旧目录项
- 不影响inode表或磁盘上的数据位置:没有数据移动
第二种情况,mv命令的目标和源文件不在同一个文件系统
- 相当于cp和rm
删除大文件
有些服务会产生一些大文件,如日志文件等,如果直接删除的话不会释放空间(lsof | grep delete ,找到进程重启),需要重启占用进程的程序
这时候可以清空大文件
cat /dev/null > /var/log/kdump.log
硬链接和软链接
硬链接:硬链接的本质上就是给文件起一个新的名字,实质上是同一文件
- 硬链接会在对应的目录中增加新的目录项以引用文件
- 对应同一个文件系统上的一个物理文件
- 每个目录都是相同的inode号
- 创建硬链接连接数增加
- 删除文件时,rm递减计数的链接,当文件的链接数为0时,文件被删除
- 不能跨驱动器或分区
- 不支持对目录创建硬链接
软连接:symbolic链接或soft链接,一个符号链接指向一个文件,相当于windows上的快捷方式,本质上不是同一个文件
- 一个符号链接的内容是它引用文件的名称
- 可以对目录创建软链接
- 可以跨分区创建
- 指向的是另一个文件的路径,大小为指向路径字符串的长度,不增加或减少对inode号的引用