正点原子 文件权限
1 文件信息
ls -l 是 Linux 或类 Unix 系统里常用的命令,用来 以长格式(long format)列出目录内容。
列号 | 示例 | 含义 |
---|---|---|
1 | -rw-r--r-- | 文件类型和权限:第一个字符表示类型(- 文件,d 目录,l 软链接),后面 9 个字符每 3 个一组,分别表示属主、属组、其他用户的读写执行权限(r=读,w=写,x=执行,- 表示无权限) |
2 | 1 | 硬链接数:该文件或目录的硬链接数量 |
3 | user | 所有者:文件的拥有者(用户名) |
4 | group | 所属组:文件所属的用户组 |
5 | 4096 | 文件大小(字节) |
6 | Jul 9 12:00 | 最后修改时间:默认显示最近一次修改的日期和时间 |
7 | example.txt | 文件或目录名 |
2 -rw-r–r-- 的解释
2.1 第一个字符表示文件类型
字符 | 含义 |
---|---|
- | 普通文件(regular file) |
d | 目录(directory) |
l | 符号链接(symbolic link,软链接) |
b | 块设备文件(block device,例如硬盘、U盘) |
c | 字符设备文件(character device,例如串口、终端) |
s | 套接字文件(socket,用于进程间通信) |
p | 命名管道(FIFO,先入先出) |
2.2 后面的字符
位置 | 表示 | 解释 |
---|---|---|
2–4 | 属主权限(owner) | 文件拥有者对该文件的权限 |
5–7 | 属组权限(group) | 文件所属用户组内其他用户对该文件的权限 |
8–10 | 其他用户权限(others) | 系统中除属主和属组外的所有其他用户对该文件的权限 |
r=读,w=写,x=执行,- 表示无权限
3 如何改用户权限
3.1 chmod — 改文件/目录的权限
全称: change mode
作用:修改文件或目录的读(r)、写(w)、执行(x)权限。
chmod [选项] 模式 文件
3.1.1 (1)符号法
用 u(属主)、g(属组)、o(其他)、a(所有),配合 +(增加)、-(移除)、=(设置)。
例子:
chmod u+x myscript.sh # 给属主加执行权限
chmod go-w file.txt # 去掉属组和其他用户的写权限
chmod a=r file.txt # 所有人只读
3.1.1 (2)数字法
用 u(属主)、g(属组)、o(其他)、a(所有),配合 +(增加)、-(移除)、=(设置)。
例子:
用 3 个八进制数表示权限:
r = 4,w = 2,x = 1
三位分别表示:属主 | 属组 | 其他用户
chmod 755 myscript.sh
解释:
7 = 4+2+1 = rwx (属主)
5 = 4+0+1 = r-x (属组)
5 = 4+0+1 = r-x (其他)
3.2 chown — 改文件/目录的属主和属组
命令 | 作用 | 说明 |
---|---|---|
chown | 改变文件或目录的所有者(属主)和所属组(属组) | 修改文件的拥有者和所属用户组,影响权限和访问控制 |
chown 常见用法对照表
命令示例 | 含义 | 备注 |
---|---|---|
chown user filename | 修改属主为 user | 不改变属组 |
chown :group filename | 修改属组为 group | 不改变属主 |
chown user:group filename | 同时修改属主和属组 | 同时改变 |
chown user: filename | 修改属主为 user,属组保持不变 | 等同 chown user filename |
chown : filename | 把属主改为空(无效,需指定) | 不常用 |
chown -R user:group dir | 递归修改目录及其所有内容的属主属组 | 递归修改子目录和文件 |
4 链接权限
在 Linux/Unix 文件系统里,链接(link) 是一种让 同一个文件内容(数据块/inode)被多个名字(路径)引用 的机制。
简单说:
一个文件 = 数据块 + inode + 路径名(目录项)
链接就是给一个 inode 多起几个名字,或者指向它。
软链接: 单独文件,保存目标路径,是“路径指针”,像 Windows 的快捷方式。
4.1 分类:硬链接 & 符号链接
特点 | 解释 |
---|---|
指向同一个 inode | 硬链接就是多个文件名共享同一个 inode(数据块和元数据) |
没有“原文件 vs 链接”之分 | 所有硬链接都是平等的,删除其中任何一个不影响 inode 里的数据,只是减少链接数 |
不跨文件系统 | 只能在同一个分区里 |
不对目录使用 | (除非特权场景)为了防止循环引用 |
1️⃣ 相同 inode
多个具有相同 inode 的文件互为硬链接。创建硬链接就相当于给同一个文件实体增加了一个新的“入口”,它们共享同一份数据块和元数据。
2️⃣ 删除机制
对于硬链接文件,只有当源文件及其所有硬链接都被删除时,inode 才会被释放,文件内容才会真正从磁盘上消失。
3️⃣ 防止误删
基于硬链接的机制,我们可以通过为重要文件创建额外的硬链接来防止误删。即使误删了其中一个路径,只要还有其他硬链接存在,文件数据依然安全。
4️⃣ 内容一致性
无论修改哪个硬链接文件,实际操作的都是同一个 inode,因此修改会同步体现在所有硬链接上。
5️⃣ 文件系统限制
硬链接只能在同一个文件系统(分区)内创建,不能跨文件系统。
6️⃣ 对目录的限制
为了避免出现循环引用和文件系统混乱,普通用户无法对目录创建硬链接(只有特殊情况下如 . 和 … 是目录硬链接的例外)。

特点 | 解释 |
---|---|
指向路径 | 软链接是一个独立的文件,内容是指向目标文件路径的字符串 |
类似快捷方式 | 删除原文件,符号链接就“悬挂”(Broken link) |
可跨文件系统 | 因为它只保存路径 |
可对目录使用 | 常用于把某个目录软挂到别处 |
4.3 总结
比较项 | 硬链接 (Hard Link) | 符号链接 (Symbolic Link / Soft Link) |
---|---|---|
是否有自己独立的 inode | ❌ 共享同一个 inode | ✅ 自己有单独 inode |
是否跨文件系统 | ❌ 只能在同一分区 | ✅ 可以跨文件系统 |
是否可用于目录 | ❌ 一般不允许(为了避免循环引用) | ✅ 可以对目录创建 |
删除源文件后 | 数据依然存在(只要还有链接) | 链接失效(悬挂,Broken link) |
关系 | 所有硬链接平等,共享内容 | 是路径指针,类似快捷方式 |
创建命令 | ln 源文件 新文件 | ln -s 源文件 新链接 |
ls -l 显示 | 普通文件,权限标识不变 | l 开头,带 -> 指向目标 |
使用场景 | 同一文件多路径访问(如备份、版本控制) | 快捷方式、路径重定向(如 /usr/bin/python -> /usr/bin/python3.11) |
典型用途 | 不常用于用户层,更多在底层/备份 | 很常见,如配置链接、可执行文件多版本 |