Linux文件元信息完全指南:权限、链接与时间属性
Linux文件元信息完全指南:权限、链接与时间属性
关键词:inode
SUID/SGID
硬链接/软链接
文件时间戳
权限管理
一、文件权限体系
-
基础权限(9位标识)
-rwxr-xr-- # ls -l 输出示例
- 三组权限:拥有者(
u
)/所属组(g
)/其他用户(o
) - 权限值:
r
(读) = 4w
(写) = 2x
(执行) = 1
- 三组权限:拥有者(
-
特殊权限(高位标识)
权限位 作用场景 效果 设置命令 SUID (4) 可执行文件 执行时以文件所有者身份运行 (e.g. /usr/bin/passwd
)chmod u+s file
SGID (2) 可执行文件 执行时以文件所属组身份运行 chmod g+s file
目录 新建文件自动继承目录的所属组(覆盖用户主组) chmod g+s dir/
Sticky Bit (1) 目录 用户仅能删除自己创建的文件 (e.g. /tmp
)chmod +t dir/
权限显示:
- SUID:
-rwsr-xr-x
- SGID:
-rwxr-sr-x
- Sticky:
drwxrwxrwt
- SUID:
二、文件链接机制
类型 | 本质 | 特点 | 命令 |
---|---|---|---|
硬链接 | 同一inode的多个路径 | 1. 与源文件inode相同 2. 不可跨文件系统 3. 删除源文件不影响链接 | ln source link |
软链接 | 独立inode的指针文件 | 1. 存储源文件路径 2. 可跨文件系统 3. 源文件删除后链接失效 | ln -s source link |
显示标识:
-rw-r--r-- 2 user group 4096 Jan 1 10:00 hardlink # 硬链接(第二列为链接计数)
lrwxrwxrwx 1 user group 11 Jan 1 10:00 softlink -> source.txt # 软链接
三、用户与组信息
-
元数据存储位置:
- 文件所有者:
st_uid
→ 映射/etc/passwd
- 文件所属组:
st_gid
→ 映射/etc/group
- 文件所有者:
-
关键命令:
stat filename # 查看文件元信息 ls -n filename # 显示UID/GID而非用户名
四、文件大小与磁盘占用
struct stat {off_t st_size; // 文件实际大小(字节)blkcnt_t st_blocks; // 占用磁盘块数量(通常每块512字节)
};
示例:
- 1字节文件可能占用4KB磁盘空间(受块大小影响)
五、时间戳详解
类型 | 简称 | 触发条件 | 查看命令 |
---|---|---|---|
Access | atime | 读取文件内容 | ls -lu |
Modify | mtime | 修改文件内容 | ls -l |
Change | ctime | 修改元信息(权限/所有者等) | ls -lc |
时间转换代码示例(C语言):
#include <sys/stat.h>
#include <time.h>struct stat sb;
stat("file.txt", &sb);struct tm *timeinfo = localtime(&sb.st_mtime); // 解析mtime
char buffer[80];
strftime(buffer, 80, "%Y-%m-%d %H:%M:%S", timeinfo); // 格式化为字符串
printf("Last Modified: %s\n", buffer);
六、最佳实践
- 权限安全:
- 慎用
SUID
位,避免普通用户获得root权限 - 共享目录使用
SGID+Sticky Bit
(如团队协作目录)
- 慎用
- 时间戳优化:
- 频繁读场景可关闭
atime
提升性能(mount -o noatime
)
- 频繁读场景可关闭
- 链接选择:
- 备份用硬链接(节省空间),快捷访问用软链接