1. 为什么需要有文件系统?
解放你的双手,让你的双手能干更多的事情,没有文件系统,你想在磁盘上下载一个小电影,你需要记录电影的起始位置与长度等等信息。wtf为什么我还需要做这些事情,我只是想看个小片片而已。更绝的是当你看完了想替换一个新的电影时,结果发现删除移动复制让你瞬间回到了解放前。
你就想着如果有人能替你管理一下这些小片片,你就可以解放自己的双手了,可以做更多的事情。。。有了你的需求,文件系统应用而生!
2. Linux的文件系统长啥样?
Linux系统一切皆文件,我们可以很简单的使用linux cmd来查看linux中的文件分布:
你突然发现,他是个tree啊,的确他像个tree,简单明了。
3. 在linux中找到你的小片片?
inode(你的小本本,记录着你想看电影的信息,但是你不敢写电影名字,index node):
里面写着:你的电影多大,谁有权限可以看,谁有权限删除,啥时候下载的,并记录了那些谁。内行的人一看你的信息就大概猜到你的电影是什么名字了。
一个文件对应一个inode。通过inode可以方便的找到文件在磁盘扇区的位置,inode模块可链接到address_space模块,方便查找自身文件数据是否已经缓存。
内行的人都知道: stat xxxx.cpp file xxxx.cpp
File: xxxx.cpp
Size: 49350 Blocks: 104 IO Block: 4096 regular file
Device: 802h/2050d Inode: 51648461 Links: 1
Access: (0775/-rwxrwxr-x) Uid: ( 1000/xxxx) Gid: ( 1000/xxxx)
Access: 2021-11-26 15:25:38.330963850 +0800
Modify: 2021-11-12 16:38:34.473441460 +0800
Change: 2021-11-12 16:38:34.473441460 +0800
Birth: -
file xxxx.cpp: C source, ASCII text
找到你的小片片:
- 首先location到你的小本本,这个里面的信息很重要,这是你的密码本
- 打开你的小本本,找到Inode,Size,Blocks
- 找到文件所在block,开始看你的珍藏。
- 突然发现没有权限,原来你那么狗,给我设置了权限。
4. 解密你的小本本,让人尽皆知。
既然你不让我看,我就要破解你的小本本,然后交给老师。。。
- 1. survey your 本本(知己知彼百战百胜):
- 原来在系统格式化的时候你就开始记录了,还贴心给你的本本分配了inode区,把电影放到数据区。而且你居然为了多放电影,给你本本分配小的区域,这样你就有了漏洞,你的本本能记录的电影是有限的。
- 2. 查看你得本本(知道你的极限):
-
[root@localhost ~]# df -i Filesystem Inodes IUsed IFree IUse% Mounted on /dev/mapper/centos-root 8910848 26029 8884819 1% / devtmpfs 230602 384 230218 1% /dev tmpfs 233378 1 233377 1% /dev/shm
- 3. 你的诡计:
- 你居然用乱码来命名,我居然用rm -f 都无法删除你的记录,高手!那没办法了,只能撕掉你的本本,气不气
-
find ./* -inum 节点号 -delete
- 只要我知道了你的本本内容,即使你怎么改文件名字,我都能找到它。
- 看电影的时候,想更新电影,只需要在本本上面生成新的inode,文件名还保持一样!旧的inode也在你的本本上面消失不见,你的本本居然还可以动态更新。
- 4. 攻击:让你的本本用尽。
-
touch /data/test{1..n}.txt
- 你只能删掉哪些大量占用inode的文件了。
- 5. 你的防御:硬链接
- 多个文件名指向同一个片片,Links++,目录是不可以做硬链接的(因为在目录中除了文件相关内容外,还有一个指向父目录的目录项):
-
ln 源文件 目标
- 5. 你的防御:软链接
- 文件名的指向,文件路径的指向,Links不变,因为不是inode的链接。
-
ln -s 源文件或目录 目标文件或目录