linux文件系统的权限王国(二)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
linux 文件系统的权限王国(二)
Linux 文件系统的权限王国(二)作者:池建强
对世界的认知,很多人通过各种方式和模式进行探求,比如科学、宗教、神学,当然还包括一些实践、入世、旅行、禅修等等,这些都是认知世界的方式。
作为一个写了很多年程序的码农,我更愿意探求计算机世界的奥秘,虽然和年轻人相比,学习能力、速度和效率都大不如前了,但是只要我们一直在往前走就好,世界本无尽头,走不动了,才是终点!
元信息
上一篇文章中我们讲到了索引节点 inode,每个文件都有一个唯一的 inode 对象,描述了文件的元信息。
inode 与文件是生死相依、一损俱损的关系,生命周期一致。
很多痛恨身份证的人都说,「老纸一生下来就特么有身份了,干嘛还有给个身份证?」Mac 君对这种态度是赞同的、肯定的、欣赏的,但 inode 不一样,它就像你的指纹,属于文件的一部分并定义文件,这就像人生元编程一样,有了「元」的意味。
inode 由一个数据结构组成的,主要包含这样一些字段:i_hash
_list
_sb_list
_dentry
_ino
_count
_mode
_nlinki_uid
...
这些字段记录了文件的几乎所有信息,比如链表指针、索引节点号、引用计数器、文件权限、硬链接数、文件所有者标识等等,一共有几十个。
但是这么去了解 inode 是
令人发指和不人道的,谁能记住这么
多 i 字段?写到这估计很多小白和老白已经拍案而起义愤填膺了,「Mac 君难道我们记住 iPad 和 iPhone 还不够么?」是的,这么写人民是不会答应的!
我们马上来实际操作一下,用 stat 命令来查看真实文件的 inode 信息。
打开终端,找到一个文件输入:
>stat .zshrc
结果是:
: ".zshrc"
: 2566 Blocks: 8 IO Block: 4096 普通文件
: fd02h/64770d Inode: 1048553 Links: 1
: (0644/-rw-r--r--) Uid: ( 500/ chjq) Gid: ( 500/ chjq)
: 2013-09-12 11:37:39.396922508 0800
: 2013-07-20 03:56:17.645786812 0800
: 2013-07-20 03:56:17.660906263 0800
这就好办多了,只要认识英文,我们就能看到文件的 inode 里包含了文件的字节数、文件占用的块数、文件所属设备的设备号、索引节点号、链接数(有多少文件名指向这个inode)、权限(后续篇章会细说)、用户 ID、组 ID。
最后三行分别表示上次文件的访问时间、文件内容改变时间和文件属性改变时间,这一点 Mac 用户应该深有体会,打开 Finder 时可以根据文件属性对文件排序,那些属性中有类似这样的创建时间、打开时间、添加时间等等,大家可以去感受下。
如果想我们单独查看文件的索引节点号,可以执行如下命令:>ls -i .zshrc
系统会显示:
.zshrc
的存储
文件会占用硬盘空间这事大家都清楚(注意是空间不是重量,无论您是拷贝 100G 进来,还是清除 100G 出去,硬盘都在哪里,份量既不增一分,也不减一克),那么 inode 存放在哪里呢?当然也是在硬盘上,Linux 是很聪明的,在分区和格式化硬盘的时候,就把硬盘分为了数据区和索引节点区,数据区存放普通文件,索引节点区存放
对象。
每个 inode 对象的大小一般是 128 字节或 256 字节,这个数值可以在格式化的时候设定。
如何查看 inode 的使用情况呢?可以执行如下命令:df -iH
Inodes IUsed IFree IUse% Mounted on
/dev/xvda 1.3M 83k 1.2M 7% /
127k 1.5k 125k 2% /dev
127k 801 126k 1% /run
127k 2 127k 1% /run/lock
127k 1 127k 1% /run/shm
大家可以看到,在文件系统/dev/xvda 上 inode 对象使用了可用空间的 7%。
这里做个提醒,如果你的系统里小文件非常多的话,那么完全可能发生在磁盘空间还有剩余的时候不能创建文件的情况,这时候就要用 df -iH 命令看一下是否 inode 对象已经把索引节点区占满了,一旦无法创建 inode,无论是文件还是目录,都将无法创建!
如果我们想查看在/dev/xvda 上 inode 对象的实际大小,可以执行如下命令:
>sudo tune2fs -l /dev/xvda | grep "Inode size"
系统会返回如下内容,也就是每个 inode 对象大小是 256 字节。
tune2fs 是 Linux 下的文件系统参数调整工具。
size: 256
时间不早了,就到这里,休息,休息一下。