5.1 使用者与群组
Linux 多用户多任务环境下,文件权限针对三种身份:
| 身份 | 含义 | 对应角色 |
|---|---|---|
| Owner(拥有者) | 文件的创建者 | 每个人的私人房间 |
| Group(群组) | 同群组的帐号 | 全家人共用的客厅 |
| Others(其他人) | 以上都不是 | 陌生人,没门进不来 |
💡 鸟哥用”王家三兄弟”的比喻最传神:三毛房间的抽屉(Owner)只有自己能翻,客厅的电视(Group)三兄弟都能看,邻居张小猪(Others)连门都进不了——除非三毛亲自开门让他进来。root 是万能的天神,无视一切权限。
三个核心文件记录了用户与群组信息(第十三章详讲):
| 文件 | 内容 |
|---|---|
/etc/passwd | 所有帐号信息 |
/etc/shadow | 密码 |
/etc/group | 所有群组名 |
每个帐号可以同时属于多个群组——这是团队协作的关键设计。
5.2 Linux 文件权限概念
5.2.1 ls -al 输出解读(本章最重要的技能)
[root@study ~]# ls -al
-rw-r--r--. 1 root root 1864 May 4 18:01 initial-setup-ks.cfg
drwx------. 3 root root 24 May 4 17:59 .dbus
[--1--] [2] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ]七个字段:
| 栏位 | 名称 | 说明 |
|---|---|---|
| 1 | 权限 | 10 个字符(本章核心) |
| 2 | 链接数 | 有多少文件名链接到此 i-node |
| 3 | 拥有者 | 文件所属的用户 |
| 4 | 群组 | 文件所属的群组 |
| 5 | 文件大小 | 单位 Bytes |
| 6 | 修改日期 | 太久远只显示年份;ls -l --full-time 看完整时间 |
| 7 | 文件名 | . 开头 = 隐藏文件 |
第一栏的 10 个字符拆解:
- rwx rwx rwx
[类型] [Owner][Group][Others]
第一个字符 = 文件类型:
| 字符 | 类型 | 说明 |
|---|---|---|
- | 正规文件 | 文本、二进制、数据文件 |
d | 目录 | directory |
l | 链接文件 | link,类似 Windows 快捷方式 |
b | 区块设备 | block device,如硬盘(可随机存取) |
c | 字符设备 | char device,如键盘/鼠标(一次性读取) |
s | socket | 网络数据接口 |
p | FIFO | 管道,解决多进程同时存取同一文件的错误 |
后 9 个字符 = rwx 三组,位置永不改变:
| 字符 | 含义 | 数值 |
|---|---|---|
r | read 可读 | 4 |
w | write 可写 | 2 |
x | execute 可执行 | 1 |
- | 无此权限 | 0 |
💡
-rwxr-xr--= 拥有者 rwx(7) + 群组 r-x(5) + 其他人 r—(4) = 754。数字权限在这一刻就已经可以心算了。
5.2.2 改变文件属性与权限
三个命令(均支持 -R 递归):
| 命令 | 全称 | 作用 |
|---|---|---|
chgrp | change group | 改群组(组名必须存在于 /etc/group) |
chown | change owner | 改拥有者(用户名必须在 /etc/passwd 中) |
chmod | change mode | 改权限 |
chmod 两种方式:
数字法(最常用):
chmod 755 script.sh # rwxr-xr-x → 拥有者全权,其他人只读执行
chmod 644 file.txt # rw-r--r-- → 拥有者可写,其他人只读
chmod 740 secret.txt # rwxr----- → 只有拥有者和群组碰得到符号法(不知道原权限时好用):
chmod u=rwx,go=rx file # 设置:拥有者全权,群组和他人读+执行
chmod a+x script # 追加:所有人加执行权(a=all,+=加,-=去)
chmod a-x file # 去除:拿掉所有人的执行权
chmod g+w,o-r file # 组合:群组加写,他人去读u=user,g=group,o=others,a=all+=加入,-=去除,==设置为chown root:root file= 同时改拥有者和群组(用冒号,别用点,有些用户名含点会导致歧义)
5.2.3 目录与文件的权限意义(最核心的区分)
文件和目录的 rwx 完全不同——这是新手最容易混淆的地方:
对文件而言:rwx 针对”文件的内容”
| 权限 | 含义 |
|---|---|
| r | 可以读文件的实际内容(如 cat 看文本) |
| w | 可以编辑/新增/修改文件内容(不能删除文件本身!) |
| x | 可以被系统执行(Linux 不以扩展名判断能否执行,就看 x) |
对目录而言:rwx 针对”目录里的文件名列表”(这个抽屉里放了什么文件)
| 权限 | 含义 | 比喻 |
|---|---|---|
| r | 可以 ls 列出文件名 | 抽屉里装了灯,能看到有哪些文件夹 |
| w | 可以新增/删除/重命名/移动文件(不管文件本身权限!) | 可以放东西进抽屉、丢掉抽屉里的东西 |
| x | 可以 cd 进入这个目录(工作目录) | 抽屉的钥匙! |
💡 这是本章最重要的表格:目录的 w 权限意味着”我能丢掉这个抽屉里的任何文件”——即使那个文件属于 root 且权限是 700,只要它在你的目录里,你就能删掉它!因为删除改的是目录列表,不是文件内容。
权限需求速查表(以用户 dmtsai 对 /dir1/file1 的操作为例):
| 操作 | 需要 /dir1 的权限 | 需要 file1 的权限 |
|---|---|---|
| 读 file1 | x(能进门) | r(能读内容) |
| 改 file1 | x | rw |
| 执行 file1 | x | rx |
| 删除 file1 | wx(能进门+能改动抽屉) | 不需要! |
| 复制 file1 到 /dir2 | x(/dir1) | r(源文件) + wx(目标目录/dir2) |
注意:只需要 x 即可进入目录并读取文件——目录的 r 不是必须的(没灯也可以摸黑拿文件,只是 Tab 自动补全会失效)。
网站架设常见错误:给目录只设了 r--(比如 744),结果服务器进程进不了目录(没 x),用户看到的全是”Permission Denied”。正确做法:开放浏览 = rx 至少要给,w 绝不能随便给。
5.2.4 Linux 文件种类与扩展名
- Linux 没有”扩展名”概念——文件能不能执行只取决于权限里的
x,跟.exe/.bat没关系 - 但使用扩展名是约定俗成的习惯(
*.sh脚本、*.tar.gz压缩包、*.html网页),方便人识别 x权限 ≠ 文件确实可运行:给纯文本文件加x也不能执行,只是拥有了”可执行的资格”- 网络下载的可执行文件传到 Linux 后
x可能丢失 →chmod a+x补回来
文件名限制:最长 255 个英文字符或 128 个中文字符;避免用 * ? > < ; & ! [ ] | \ ' " \ ( ) { }这些字符;**文件名开头不要是-或+`**(会被当成指令选项)。
5.3 Linux 目录配置
5.3.1 FHS 标准
Filesystem Hierarchy Standard —— 让所有 Linux distribution 的目录结构保持统一。将目录按两个维度分类:
| 可分享(shareable) | 不可分享(unshareable) | |
|---|---|---|
| 不变的(static) | /usr(软件)、/opt(第三方) | /etc(配置)、/boot(内核) |
| 可变的(variable) | /var/mail、/var/spool | /var/run、/var/lock |
FHS 只定义三层目录,但这是整个文件系统的骨架:
第一层:/(根目录)——与开机有关
| 目录 | 用途 | 重要性 |
|---|---|---|
/bin | 单人维护模式下也能用的基础指令(cat, chmod, cp, bash…)→ CentOS 7 已链接到 /usr/bin | ⭐⭐⭐ |
/boot | 内核文件(vmlinuz)和 grub2 开机菜单 | ⭐⭐⭐ |
/dev | 所有设备文件(/dev/sda, /dev/tty, /dev/null…) | ⭐⭐⭐ |
/etc | 几乎所有系统配置文件(/etc/passwd, /etc/fstab, /etc/issue…) | ⭐⭐⭐ |
/lib | 开机时会用到的函数库 → CentOS 7 已链接到 /usr/lib | ⭐⭐ |
/media | 可移除设备挂载点(光盘、U 盘) | ⭐ |
/mnt | 临时挂载点 | ⭐ |
/opt | 第三方协力软件(KDE 等) | ⭐ |
/run | 开机后产生的运行时数据(用内存仿真,不占磁盘) | ⭐ |
/sbin | root 才能用的系统管理指令(fdisk, fsck, ifconfig…)→ CentOS 7 已链接到 /usr/sbin | ⭐⭐ |
/srv | 网络服务的数据目录 | ⭐ |
/tmp | 任何人都能存取的临时目录(FHS 建议开机时清空) | ⭐⭐ |
建议存在的目录:/home(用户主文件夹,~)、/root(管理员主文件夹,放在根目录下是因为单人维护模式只挂 / 时需要能访问)、/lost+found(ext 文件系统修复后存放碎片,xfs 没有)。
虚拟文件系统(不占硬盘):/proc(进程/内核/硬件状态,如 /proc/cpuinfo)、/sys(内核与硬件的更底层信息)
“五大目录”的历史变迁:早期救援模式只挂载 /,所以 /etc + /bin + /dev + /lib + /sbin 必须跟 / 放一起。到 CentOS 7,/bin、/sbin、/lib、/lib64 全部通通移进 /usr 然后用符号链接指向:
/bin → usr/bin
/sbin → usr/sbin
/lib → usr/lib
/lib64 → usr/lib64
/var/lock → /run/lock
/var/run → /run
第二层:/usr(Unix Software Resource,不是 user)——与软件安装/执行有关
相当于 Windows 的 C:\Windows\(部分)+ C:\Program Files\ 综合体,刚装完系统最占空间的目录。
| 目录 | 用途 |
|---|---|
/usr/bin/ | 所有用户指令(与 /bin 合并) |
/usr/sbin/ | 非开机必需的系统指令(与 /sbin 合并) |
/usr/lib/ | 与 /lib 合并 |
/usr/local/ | 自行安装的软件放这里(有自己的 bin/etc/lib 子树,与系统软件隔离) |
/usr/share/ | 硬件无关的只读数据(man, doc, zoneinfo) |
/usr/src/ | 源代码(内核源码放 /usr/src/linux/) |
第三层:/var(variable)——与系统运行过程有关
系统运行后渐渐占硬盘的目录(缓存、日志、邮件、数据库):
| 目录 | 用途 |
|---|---|
/var/log/ | 登录文件——系统出问题第一个来看的地方 |
/var/mail 或 /var/spool/mail/ | 用户邮件 |
/var/spool/ | 队列数据(cron 任务、待发邮件) |
/var/lib/ | 程序运行期间的数据(如 MySQL 数据库 /var/lib/mysql/) |
/var/cache/ | 应用程序缓存 |
💡 现在回头看第二章的分区规划:为什么建议
/var独立分区?因为/var不断增长(日志、邮件),如果跟/放一起,一旦/var写满 →/也满了 → 系统崩溃。独立出来至少/活着,还能进救援模式。
5.3.3 绝对路径与相对路径
| 类型 | 写法 | 例子 |
|---|---|---|
| 绝对路径 | 从 / 开始写 | /home/dmtsai/.bashrc |
| 相对路径 | 不以 / 开头,相对于当前目录 | ../var/log(回到上一层再进 var/log) |
两个特殊目录:. = 当前目录,.. = 上一层目录。
./run.sh 的意思:当前目录下名为 run.sh 的文件。之所以要加 ./,是因为当前目录不在系统的指令搜寻路径(PATH)里,不加 ./ 系统不知道去哪里找。
关键命令
| 命令 | 用途 |
|---|---|
ls -al | 列出所有文件(含隐藏)的详细权限与属性 |
ls -l --full-time | 显示完整时间格式(年月日时分) |
chgrp 群组名 文件名 | 改变文件所属群组 |
chown 用户:群组 文件名 | 改变文件拥有者(:群组可省略) |
chmod 755 文件名 | 数字法改权限(rwx=4+2+1) |
chmod u=rwx,go=rx 文件名 | 符号法改权限(u/g/o/a + +/-/=) |
chmod a+x 文件名 | 给所有人加执行权 |
su - | 切换为 root(exit 退回) |
uname -r | 查看 Linux 核心版本 |
uname -m | 查看操作系统位版本(x86_64) |
lsb_release -a | 查看 LSB 和 distribution 版本信息(需先安装 redhat-lsb) |