学习笔记
inode 在硬链接的时候,涉及到inode 使用stat filename
如果给一个文件创建硬链接的时候, 那个和源文件有相同的inode
在了Linux下创建硬链接和软链接(也就是符号链接)都是用ln命令, 当使用ln命令时加上-s选项就表示创建的连接文件是一个软链接, 如果使用ln命令时不带-s选项就表示创建的是一个硬链接。 命令的格式则是:ln 原文件 链接文件
$cp -r 46lseek/ 47inode
$cd 47inode/
$ls
dict.cp ? ? ? f.c ? ? ?lseek_test ? ?lseek.txt ?trunc
dict.txt.txt ?lseek.c ?lseek_test.c ?makefile ? trunc.c
$stat f.c
? File: f.c
? Size: 500 ? ? ? ?? ?Blocks: 8 ? ? ? ? ?IO Block: 4096 ? regular file
Device: 805h/2053d?? ?Inode: 669607 ? ? ?Links: 1
Access: (0744/-rwxr--r--) ?Uid: ( 1000/ ?ubuntu) ? Gid: ( 1000/ ?ubuntu)
Access: 2021-12-23 22:46:19.623477118 +0800
Modify: 2021-12-23 22:46:19.639477118 +0800
Change: 2021-12-23 22:46:19.639477118 +0800
?Birth: -
inode是一个整数。
inode的本质和文件描述符很类似。其本质是一个结构体,存储着文件的属性: 文件权限,文件类型,大小,访问修改时间,用户,所属组,盘块位置 就是ls -l 查看出来的东西。 大多数inode放在磁盘上,少量常用和近期使用的的inode会被缓存到内存里。
通过ls -li 来查看各个文件的文件inode数
$ls -li
total 5540
669609 -rw-rw-r-- 1 ubuntu ubuntu ? ? 250 12月 23 22:46 dict.cp
669604 -rwxr--r-- 1 ubuntu ubuntu 5600268 12月 23 22:46 dict.txt.txt
669607 -rwxr--r-- 1 ubuntu ubuntu ? ? 500 12月 23 22:46 f.c
669603 -rw-rw-r-- 1 ubuntu ubuntu ? ? 496 12月 23 22:46 lseek.c
663261 -rwxrwxr-x 1 ubuntu ubuntu ? 19904 12月 23 22:46 lseek_test
669605 -rw-rw-r-- 1 ubuntu ubuntu ? ? 369 12月 23 22:46 lseek_test.c
669602 -rw-rw-r-- 1 ubuntu ubuntu ? ? ?22 12月 23 22:46 lseek.txt
669595 -rwxr--r-- 1 ubuntu ubuntu ? ? 178 12月 23 22:46 makefile
669608 -rwxrwxr-x 1 ubuntu ubuntu ? 19616 12月 23 22:46 trunc
669606 -rw-rw-r-- 1 ubuntu ubuntu ? ? 284 12月 23 22:46 trunc.c
$ln f.c f_hard.c
$ls -li
total 5544
669609 -rw-rw-r-- 1 ubuntu ubuntu ? ? 250 12月 23 22:46 dict.cp
669604 -rwxr--r-- 1 ubuntu ubuntu 5600268 12月 23 22:46 dict.txt.txt
669607 -rwxr--r-- 2 ubuntu ubuntu ? ? 500 12月 23 22:46 f.c
669607 -rwxr--r-- 2 ubuntu ubuntu ? ? 500 12月 23 22:46 f_hard.c
669603 -rw-rw-r-- 1 ubuntu ubuntu ? ? 496 12月 23 22:46 lseek.c
663261 -rwxrwxr-x 1 ubuntu ubuntu ? 19904 12月 23 22:46 lseek_test
669605 -rw-rw-r-- 1 ubuntu ubuntu ? ? 369 12月 23 22:46 lseek_test.c
669602 -rw-rw-r-- 1 ubuntu ubuntu ? ? ?22 12月 23 22:46 lseek.txt
669595 -rwxr--r-- 1 ubuntu ubuntu ? ? 178 12月 23 22:46 makefile
669608 -rwxrwxr-x 1 ubuntu ubuntu ? 19616 12月 23 22:46 trunc
669606 -rw-rw-r-- 1 ubuntu ubuntu ? ? 284 12月 23 22:46 trunc.c
这里面的 1 2 就是inode数
文件由两部分组成: 1.dentry 2.inode
多提一嘴,当给一个文件创建硬链接的时候,这些硬链接有相同的inode ,但是有不同的目录项。
dentry (目录项:包含文件名,inode的编号)->inode存储文件的属性 -> 文件内容
删除一个硬链接,是把硬链接数字 - 1,实际上就是去掉一个目录项 当硬链接树为0,说明这个inode没有被引用。但是注意即使是硬链接数为0, 磁盘的内容也没有被擦除。磁盘空间只能覆盖。 所以安全起见,要注意格式化。但是格式化还是可以恢复数据。只要重新建立inode->磁盘空间(数据恢复) 所以要用数据覆盖安全些
|