学习笔记
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->磁盘空间(数据恢复)
所以要用数据覆盖安全些