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号的引用