1. stat结构
st_mode; /* file type & mode (permissions) */
st_ino; /* i-node number (serial number) */
st_dev; /* device number (file system) */
st_rdev; /* device number for special files */
st_nlink; /* number of links */
st_uid; /* user ID of owner */
st_gid; /* group ID of owner */
st_size; /* size in bytes, for regular files */
st_atime; /* time of last access */
st_mtime; /* time of last modification */
st_ctime; /* time of last file status change */
st_blksize; /* best I/O block size */
st_blocks; /* number of disk blocks allocated */
2. 七种文件类型
普通文件(测试宏S_ISREG)
目录文件(测试宏S_ISDIR):
对一个目录文件具有读权限的任一进程都可以读该目录的内容,但只有内核可以直接写目录文件。
很多实现阻止应用程序使用read函数读目录的内容,从而进一步讲应用程序和目录格式中的实现的细节隔离开。
块特殊文件(测试宏S_ISCHR)
字符特殊文件(测试宏S_ISBLK)
我觉得以上两种文件时操作系统对硬件设备的一种抽象
FIFO(测试宏S_ISFIFO)
套接字(测试宏S_ISLNK)
符号链接(测试宏S_ISSOCK)
3. 实际用户/组ID:我们究竟是谁
有效用户/组ID:决定文件访问权限
保存的设置用户/组ID:执行一个程序时包含了有效用户/组ID的副本
通过设置 “设置用户/组ID位”后,在执行此文件时,将进程的有效用户/组ID设置为文件所有者的用户/组ID。
4. 文件的访问权限
S_IRUSR 用户-读
S_IWUSR 用户-写
S_IXUSR 用户-执行
S_IRGRP 组-读
S_IWGRP 组-写
S_IXGRP 组-执行
S_IROTH 其他-读
S_IWOTH 其他-写
S_IXOTH 其他-执行
只有对目录具有执行权限才能穿越目录
只有对目录具有读和执行权限才能搜索目录
只有对目录具有执行和写权限才能在目录中创建文件
只有对目录具有执行和写权限才能在目录中删除文件
文件的用户/组ID是文件的性质,有效用户/组ID是进程的性质,每次打开、创建或删除文件时,内核就进行文件访问权限测试:
1. 进程的有效用户ID是超级用户(值为0),则允许访问
2. 进程的有效用户ID等于文件所有者ID(该进程拥有此文件),那么若适当的访问权限位被设置,则允许访问,否则不再进行剩余权限判断,直接拒绝
3. 进程的有效组ID或进程的附加组ID 等于文件组ID,那么若适当的访问权限位被设置,则允许访问,否则不再进行剩余权限判断,直接拒绝
4. 进程的有效用户/组 ID 不属于前两种情况,那么若其他用户适当的访问权限位被设置,则允许访问,否则拒绝
注:access函数是按实际用户ID和实际组ID进行访问权限测试的(以上规则将‘有效’改为‘实际’)
5. 新文件的目录所有权
新文件的用户ID设置位进程的有效用户ID
新文件的组ID:
1. 新文件的组ID可以是进程的有效组ID
2. 新文件的组ID可以是它所在目录的组ID
(Linux & Solaris:如果目录的设置组ID位被设置,则新文件的组ID设置位目录的组ID,否则将新文件的组ID设置为进程的有效组ID)
6. 文件模式创建屏蔽字
umask函数为进程设置文件模式创建屏蔽字,并返回以前的值
对于任何在文件模式创建屏蔽字中为1的位,在文件mode中的相应位一定被关闭
7. 修改文件的访问权限 chmod & fchmod
为了改变一个文件的权限位,进程的有效用户ID必须等于文件所有者ID,或者该进程必须具有超级用户权限
S_ISUID 执行时设置用户ID
S_ISGID 执行时设置组ID
S_ISVTX 保存正文(粘住位)
S_IRWXU 用户读、写、执行
S_IRWXG 组读、写、执行
S_IRWXO 其他读、写、执行
特例:
1. 如果没有超级用户特权的进程写一个文件,则设置用户ID位和设置组ID位将自动被清除
2. 只有超级用户特权才能设置普通文件的粘住位(Linux无此限制,粘住位对Linux上的普通文件并无意义)
3. 如果新文件的组ID不等于进程有效组ID或进程附加组ID中的一个,且进程没有超级用户特权,那么设置组ID位将自动被关闭
注:chmod函数更新的只是i节点最近一次被更新的时间。ls -l 默认列出的是最后修改文件内容的时间
8. 粘住位
如果对一个目录设置了粘住位,则只有对该目录具有写权限的用户在满足以下条件之一的情况下,才能删除或更改该目录下的文件:
1. 拥有此文件
2. 拥有此目录
3. 是超级用户
9. 修改文件的用户ID和组ID
只有超级用户进程才能更改文件的用户ID
满足以下条件,一个非超级用户也可以更改文件的组ID:
1. 进程拥有此文件
2. 参数owner等于-1或文件的用户ID,并且参数group等于进程的有效组ID或进程的附加组ID之一。
这意味着,你不能更改其他用户文件的用户ID。你可以更改你所拥有的文件组ID,但只能改到你所属的组。
如果这些函数由非超级用户进程调用,则在成功返回时,该文件的设置用户/组ID位都会被清除
10. 文件长度
st_size 表示以字节为单位的文件长度,只对普通文件,目录文件和符号链接有意义
st_blksize 表示对文件I/O较适合的块长度
st_blocks 表示所分配实际512字节块数量。
11. i节点
![](data:image/png;base64,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**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**+N6JUms4tGPnbQyOl0amkyW6/X0+lUdSugXguf3ED7HA6H+Xw+GAxGo5FBpZ8qOiu4LimtmYLrhiWzyidZXFU5zeQP5nZ78qnL6zc52xhwqyc/Pj6up7LyiHlqaTKbz+ftWMNgNE7NAPAYc0s/VXdZcP11Kc2oZFY2g1qlpdXTjAybVdrL8LXJJW378vZxI2qVTgnXMTMLPIwdAACeYXrpp+ryUp79fn80GtVecF1VMrvtsUm98p905pE0I6GpQmPuj5ldI30we3v6JBCSGV6EZAbgU9I0Xa/XrusOBgNDSz9Vd1ZwvZaUVnsyK04EfmLi8QF3lp4VPJBmvqbHFyQziXxfv/j8GW3tS2bNTN/jLpIZgHq0o/RTdXUVXH/BmNm3IbEbOzO/Hq1f2Mx4tub+sWGz6hGwaprJyy1VOW33sWR2VliAZPZVHMfsytQEp2YAqNlZ6aeW7RW4qlhwPU9pFdfw1pjMKgWqYgYrDnadr5ivHs4eGJurkmYuKqznQfOhpXEVZ1hJZl8tl0t2ZSLXqic3gNxut2tN6afq8oLrtm3nBddLUlpdF/hKaep8CKqYP4oB5+6dfb9SrXKKK3+wpSvLCmv1zyLT9WRYvW7mcxsA2pbMRqOR2oP9oJVWPbkBXGpZ6afqigXXJaVdFlyvL5ldlP9+udsFKW+4/mB/inmPbz04nU5Xqjk917ZHtSyZLZdL1U3AV3EcK18N0qonN4BbpPSTLJ+fTqdd+4B+WXBdUlrLLvDl2vRg2/RYoJUgCJTPLPPkBrqlraWfqisWXO/UBb5ND7ZNjwVaIZkBUKbFpZ+q69QFvk0PtjWPJY5j3/dVtwLfkMwAqNfu0k/lWnOBr6JND7Y1j2W5XM7nc9WtwDdhGCpf9teSJzeAz+tC6aczrbnAV9GmB9uax8KuTFxqyZMbQF2KpZ+m02mLSz+dWnSBr6JND7YdjyWO48FgoLoV0E4bntwAXqELpZ9+r//7JTUsW+YXv/iF6ibU5vf6v6/6uVOPDm7B0VySJJyaAUB3LS79NPrNj7+DgUa/+VH1cwftJIcgqm0DyQxAVcfjcbFY2LbtOE47Sj+RzAzVgmTWhXWcJiKZATBSa0o/kcwM1YJktlwuF4uF6lbgHMkMgNnOSj+pbs7DSGaGakEyY1emnqIo4tQMAMZL09TQ0k8kM0OZnszYlYkSJDMAtTGu9BPJzFCmJ7PtdsvR/7iFZAagflL6ybbt4XC4XC61Lf1EMjOU6ckM2uLUDAAtp3npJ5KZoUhmeBF2AADoCj1LP5HMDGV0MouiSLePKMiRzAB0i5R+mkwmmpR+IpkZyuhkNhwOW1lRox1IZgA6SpPSTyQzQ5mbzI7Ho23bqluBmzg1A0DXqS39RDIzlLnJLAgCdmWiHMkMgBaUlH4imRnK3GQWRZHyrX/QHMkMgF6aLP1EMjOUuckMmkvTVPlBjCQzAJrabDae51mW9brSTyQzQ5HM8CK73c51XbVtIJkB0NpLSz+RzAxlaDKbTCYvHQPG55HMAKCqs9JPtSzWIZkZysRktt/v2ZWpP5IZADzseDzWVfqJZGYoE5OZ7/vsytTf4XBYLBZq20AyA2Cqz5d+IpkZysRkZts2uzJRBckMgPGk9FO/359MJpvNpnrpJ5KZoUxMZqwwQ0UkMwAt8UTpJ5KZoUxMZjACp2YAQP2ql34imRnKuGRGCXNTsAMAAF4ojuPlcimln4IguFzlQzIzlFnJjF2ZBiGZAUATbpV+IpkZyqxkxq5Mg5DMAKBRZ6Wf/q//8f+rzhh4hlnJzLbtkil1aIVTMwBADSn99PP/7X//Q9v5P/6fvxz95kf+M+i/v5i9qX4GVZWm6WQyUd0KmIRkBqC7Xlr6CQCeQDIDgJeUfgJgnCzLlE89k8wA4JsaSz8Bx+Oxyrl60Eccx8o30pLMAOCKs9JPHOCOJ/i+HwSB6lbgASQzANDddrt9rvQTQK1M45DMAMAMT5R+Qsft9/vhcKi6FXhMkiSe56ltA8kMAB4gpZ9Go5GUflJeYg/aSpKE3b54AskMAJ5xt/QTOu4v/f+p/OA3/nviv7/0/6faZw7JDAA+5VbpJ3TciNpfZhqprjBBMgOAeux2u+l0alnWeDwOw5DtnB1HMjMUyQwA2kZKP1mW5XneZrNR3RyoQTIzFMkMANqJ0k8dRzIzFMkMAFouSZLVauU4jm3blH7qDpKZoUhmANAVlH7qFJKZoUhmANA5lH7qApKZoUhmANBdlH5qMZKZoUhmANB1Z6WfoihS3SLUgGRmKJIZAOCrJEko/dQaJDNDkcwAAOco/dQCJDNDkcwAADdJ6afBYOA4znq9pvSTQUhmhiKZAQDuo/STcUhmhiKZAQAeQOknU5DMDEUyAwA8TEo/ua5rWdZ8Pqf0k4ZIZoYimQEAnkfpJ22RzAxFMgMA1IDST7ohmRmKZAYAqNN+v5fST67rUvpJIZKZoUhmAICXoPSTWiQzQ5HMAAAvROknVUhmhiKZAQCaQOmnhpHMDEUyAwA0itJPzSCZGYpkBgBQg9JPL0UyMxTJDACgGKWfXoFkZiiSGQBAF1L6qd/ve5633W5VN8dsJDNDkcwAAHqh9FMtSGaGIpkBADRF6afPIJkZimQGANDd8Xj0fV9KP61WK0o/VUEyMxTJDABgDEo/VUcyMxTJDABgHko/3UUyMxTJDABgqizLwjCcTCaWZVH66QzJzFAkMwCA8Sj9dIlkZiiSGQCgPc5KP3V5rwDJzFAkMwBACx0Oh46XfiKZGYpkBgBos86WfiKZGYpkBgDohK6VfiKZGYpkBgDokO6UfiKZGYpkBgDoomLpJ9/321f6iWRmKJIZAKDT2lr6iWRmKJIZAACnU+tKP5HMDEUyAwDgO9vtNt8rYG7pJ5KZoUhmAABcYXrppz/64z/rdcavfvUr1U2ozR/98Z+pfeaQzAAAWjO09FOv16ErbJserPLH0p6uBAC0WxzHQRAMh8PhcKh/6SflF/gmtenBKn8s7elKAEBHGFH6SfkFvklterDKH0t7uhIA0DVnpZ+02iug/ALfpDY9WOWPpT1dCQDopizLNCz9pPoC//H29t7YD3vZg718FA88rvf3Z3pA9S+OZAYAaAutSj/VcYH/ePvS+/L2Ufxrb1Y5l8yq3vjj7cvNnYqFH1/igQd79pgqtOz7W1fvhPdZ5fYXkcwAAKiZlH4aDocKSz/VlMyKyeK7v76/3ckc77PzAHNruOnsx9z990uPPdj3WcXAVAiX+fdUbdTH25crAe5ur5HMAAB4HYWln25f4K8MBBW/8oDSiPI+u/o9V4abmk5mVxLiZYz8/h/fZ70vs/cHktn7rPfl7e1qF9wZcCOZAQDwcs2XfnommV255c0xs9PpdPr4KE9mFWc+X5fMHoya37W3+NMLf/7uj7Mbzbv62CvOo5LMAABoTmOln+q4wN9LZqUeSmZPjcp9U+nBXswkls5qSqO+fv199mU2u2jkl7f3ty9XE9hsNju/5/dZxUdDMgMAoGkNlH564QX+/SJ2fHVniOpWUPt4f390mfyZag/2LJqVBTNJV98WmX1r+p14mn/5u50ClWPZiWQGAIBCUvrJcZzBYLBYLGos/VRygS/PCTfWh1VJWddXvf90r7O37yY/H5tpLM811dLM97OPZRHrfTZ7zwf9qn/b91/7+Dqg9kgsO5HMAADQQe2ln55OZpe3Prvt7WxyJ5mVzm2WfO/pdGdJW9U081GYfCwZMfs6RPa1yWcjeqXJ7KKRjx00cjqdSGYAAGilrtJPhiWzyidZXFU5zeQP5nZ78qnL6zc52xhwqyc/Pj6up7LyiHkimQEAoKcoiqT002QyeaL0k1HJrGwGtUpLq6cZGTartJfha5NL2vbl7eNG1CqdEq5jZvaFSGYAANz0dOknVcnstscm9cp/0plH0oyEpgqNuT9mdo30wezt6ZNASGYAABjgrPTTfr8vv33tyaw4EfiJiccH3Fl6VvBAmvmaHl+QzCTyff3i82e0kcwAADBJHMdS+sn3/ZKbvWDM7NuQ2I2dmV+P1i9sZjxbc//YsFn1CFg1zeTllqqctvtYMjsrLEAyAwAABTUms0qBqpjBioNd5yvmq4ezB8bmqqSZiwrredB8aGlcxRlWkhkAACio6wJfKU2dD0EV80cx4Ny9s+9XqlVOceUPtnRlWWGt/llkup4Mq9fNfG4DAMkMAIA2qi+ZXZT/frnbBSlvuP5gf4p5j289OJ1OV6o5Pde2R5HMAABoIeUX+Ca16cEqfyzt6UoAAPSh/ALfpDY9WOWPpT1dCQCAPpRf4JvUpger/LG0NTKWXQAAAbxJREFUpysBANCH8gt8k9r0YJU/lvZ0JQAA+lB+gW9Smx6s8sfSnq4EAEAfyi/wTWrTg1X+WNrTlQAA6EP5Bb5JbXqwyh9Le7oSAAB9/F7/90uqi7fML37xC9VNqM3v9X9f7TOHZAYAQP1Gv/nxdzDQ6Dc/qn3mkMwAAKgfycxQJDMAAFqIZGYokhkAAC1EMjMUyQwAgBYimRmKZAYAQAuRzAxFMgMAoIVIZoYimQEA0EIkM0ORzAAAaCGSmaFIZgAAtBDJzFAkMwAAWohkZiiSGQAALfQXs7fRb37kP+P++4vZm9pnDskMAABAFyQzAAAAXZDMAAAAdEEyAwAA0AXJDAAAQBckMwAAAF2QzAAAAHRBMgMAANAFyQwAAEAXJDMAAABdkMwAAAB0QTIDAADQBckMAABAFyQzAAAAXZDMAAAAdEEyAwAA0AXJDAAAQBckMwAAAF2QzAAAAHRBMgMAANAFyQwAAEAXJDMAAABdkMwAAAB0QTIDAADQBckMAABAFyQzAAAAXZDMAAAAdEEyAwAA0AXJDAAAQBckMwAAAF2QzAAAAHRBMgMAANAFyQwAAEAXJDMAAABd/C8pew/WYa3gkwAAAABJRU5ErkJggg==)
![](data:image/png;base64,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**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**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)
![](/attachment/201503/9/30055459_1425870523xcQv.png)
一个i节点就是一个文件的表示
i节点包含了大多数与文件有关的信息:文件类型、文件访问权限位、文件长度和指向文件实际数据块在磁盘上的位置的指针。stat结构中大多数信息取自i节点。只有两项数据存放在目录项中:文件名和i节点编号。
每个文件系统各自对它们的i节点进行编号。
每个i节点都有一个连接计数,其值是指向该i节点的目录项数。当链接计数减少至0时,才可删除该文件。POSIX.1常量LINK_MAX指定了一个文件链接数的最大值。这种链接类型称为硬链接,硬链接也是普通文件。
另一个条件也会阻止删除文件的内容——只要有进程打开了该文件,其内容也不能被删除。关闭一个文件,内核首先检查打开该文件的进程数。如果达到0,然后内核检查其链接数,如果这个数也是0,那么就删除该文件。
进程用open或create创建了一个文件,然后立即调用unlink,这样即使程序崩溃,它所创建的文件也不会遗留下来。当unlink函数传入的参数是符号链接,那么unlink删除该符号链接,而不会删除有链接所引用的文件。给出符号链接名的情况下,没有一个函数可以删除链接所引用的文件。
当不更换文件系统情况下位一个文件更名时,该文件实际内容并未移动,只需要构造一个指向现有i节点的新目录项,并解除与旧目录项的链接。
12. 符号链接
同时用O_CREAT和O_EXCL两者调用open函数,若路径名引用符号链接,open将出错返回
各函数对符号链接的处理(图)
symlink创建符号链接、readlink打开符号链接本身,并读该链接中的名字
13. 文件时间
st_atime: 文件数据的最后访问时间
st_mtime: 文件数据的最后修改时间(默认)
st_ctime: i节点状态的最后更改时间
ls命令
-l或-t选项按文件的修改时间的先后顺序排序显示
-u选项使其用访问时间排序
-c选项用其更改状态时间排序
utime函数更改一个文件的访问时间和修改时间:
如果times是一个空指针,则访问时间和修改时间两者都设置位当前时间,为执行此条件,必须满足:
进程有效ID必须等于该文件的所有者ID或者进程对该文件具有写权限
如果times是非空指针,则访问时间和修改时间被设置。为执行此条件,必须满足
进程有效ID必须等于该文件的所有者ID或者进程必须是一个超级用户进程,对文件只具有写权限是不够的
15. 工作目录
每个进程都有一个当前工作目录,此目录是搜索所有相对路径名的起点。使用chdir或fchdir函数可以更改当前工作目录,getcwd返回当前工作目录的绝对路径
16. 设备特殊文件
每个文件系统所在的存储设备(用dev_t结构表示)都由其主次设备号表示。主设备号标识设备驱动程序,次设备号标识特定的子设备。通常可以使用宏major和minor来访问主次设备号。
系统中与每个文件名关联的st_dev值是文件系统的设备号。
只有字符特殊文件和块文件才有st_rdev值。此值包含实际设备的设备号。