linux文件系统的权限王国(二).pdf
文本预览下载声明
Linux ⽂件系统的权限⺩国(⼆)
作者:池建强
对世界的认知,很多⼈通过各种⽅式和模式进⾏探求,⽐如科学、宗
教、神学,当然还包括⼀些实践、⼊世、旅⾏、禅修等等,这些都是
认知世界的⽅式。作为⼀个写了很多年程序的码农,我更愿意探求计
算机世界的奥秘,虽然和年轻⼈相⽐,学习能⼒、速度和效率都⼤不
如前了,但是只要我们⼀直在往前⾛就好,世界本⽆尽头,⾛不动
了,才是终点!
inode 元信息
上⼀篇⽂章中我们讲到了索引节点 inode ,每个⽂件都有⼀个唯⼀的
inode对象,描述了⽂件的元信息。inode与⽂件是⽣死相依、⼀损俱
损的关系,⽣命周期⼀致。很多痛恨⾝份证的⼈都说,「⽼纸⼀⽣下
来就特么有⾝份了,干嘛还有给个⾝份证?」Mac 君对这种态度是赞
同的、肯定的、欣赏的,但 inode 不⼀样,它就像你的指纹,属于⽂
件的⼀部分并定义⽂件,这就像⼈⽣元编程⼀样,有了「元」的意
味。inode 由⼀个数据结构组成的,主要包含这样⼀些字段:
i_hash
i_list
i_sb_list
i_dentry
i_ino
i_count
i_mode
i_nlinki_uid
...
这些字段记录了⽂件的⼏乎所有信息,⽐如链表指针、索引节点号、
引⽤计数器、⽂件权限、硬链接数、⽂件所有者标识等等,⼀共有⼏
⼗个。但是这么去了解 inode 是令⼈发指和不⼈道的,谁能记住这么
多 i 字段?写到这估计很多⼩⽩和⽼⽩已经拍案⽽起义愤填膺了,
「Mac 君难道我们记住 iPad 和 iPhone还不够么?」是的,这么写⼈
民是不会答应的!
我们⻢上来实际操作⼀下,⽤ stat 命令来查看真实⽂件的 inode 信
息。打开终端,找到⼀个⽂件输⼊:
stat .zshrc
结果是:
File: .zshrc
Size: 2566 Blocks: 8 IO Block: 4096 普通
⽂件
Device: fd02h/64770d Inode: 1048553 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 500/ chjq) Gid: (
500/ chjq)
Access: 2013-09-12 11:37:39.396922508 +0800
Modify: 2013-07-20 03:56:17.645786812 +0800
Change: 2013-07-20 03:56:17.660906263 +0800
这就好办多了,只要认识英⽂,我们就能看到⽂件的 inode ⾥包含了
⽂件的字节数、⽂件占⽤的块数、⽂件所属设备的设备号、索引节点
号、链接数(有多少⽂件名指向这个inode)、权限(后续篇章会细
说)、⽤户 ID 、组 ID 。
最后三⾏分别表⽰上次⽂件的访问时间、⽂件内容改变时间和⽂件属
性改变时间,这⼀点 Mac ⽤户应该深有体会,打开 Finder 时可以根
据⽂件属性对⽂件排序,那些属性中有类似这样的创建时间、打开时
间、添加时间等等,⼤家可以去感受下。
如果想我们单独查看⽂件的索引节点号,可以执⾏如下命令:
ls -i .zshrc
系统会显⽰:
1048553 .zshrc
inode的存储
⽂件会占⽤硬盘空间这事⼤家都清楚(注意是空间不是重量,⽆论您
是拷⻉100G进来,还是清除100G 出去,硬盘都在哪⾥,份量既不增
⼀分,也不减⼀克),那么 inode 存放在哪⾥呢?当然也是在硬盘
上,Linux 是很聪明的,在分区和格式化硬盘的时候,就把硬盘分为
了数据区和索引节点区,数据区存放普通⽂件,索引节点区存放
inode 对象。每个 inode 对象的⼤⼩⼀般是128字节或256字节,这个
数值可以在格式化的时候设定。
如何查看 inode 的使⽤情况呢?可以执⾏如下命令:df -iH
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/xvda 1.3M 83k 1.2M 7% /
devtmpfs 127k 1.5k 125k 2% /dev
none 127k 801
显示全部