RHCE笔记
RHCE学习笔记
复习课
本地仓库:
vi /etc/yum.repos.d/
[BaseOS]
name=BaseOS
baseurl=/mnt/BaseOS
gpgcheck=0
[AppStream]
name=AppStream
baseurl=/mnt/AppStream
gpgcheck=0
挂载
#临时
mount /dev/sr0 /mnt
#自动挂载
vi /etc/fstab
/dev/sr0 /mnt iso9660 defaults 0 0
mount -a
常用工具安装
dnf install net-tools bash-completion wget curl vim tree -y
文件管理
[root@localhost ~]#echo hello world >> t1.txt
[root@localhost ~]#cat > t2.txt <<EOF
> hello
> world
> python
> java
> EOF
[root@localhost ~]#cat <<EOF | tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/rpm/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/rpm/repodata/repomd.xml.key
EOF
元数据
文件元数据(metadata)是文件系统中描述文件本身属性(而非文件内容)的数据
。它们存储在 inode 中,主要包含:
常见元数据字段:
- 权限(rwxr-xr-x)— 属主、属组、其他人的读/写/执行权限
- 所有者(uid/gid)— 文件的用户和组归属
- 时间戳:
- atime — 最后访问时间
- mtime — 最后修改时间(内容变更)
- ctime — 最后状态变更时间(权限/所有者/链接数等变更,非内容)
- 文件大小 — 字节数
- 链接计数 — 硬链接数量
- 文件类型 — 普通文件、目录、符号链接、设备文件等
- 扩展属性(xattrs)— 用户自定义或系统附加的键值对(如 SELinux 上下文)
查看元数据使用 stat 命令:
stat filename
可以用 ls -l(部分信息)或 getfattr -d(扩展属性)。
元数据与文件内容 分开存储:内容在 data blocks 中,元数据在 inode table 中。rm删除文件时,只是释放 inode 和 data block,但在某些文件系统下可通过 debugfs等工具恢复(前提是 inode 和数据块未被覆盖)。
[root@localhost ~]# stat a.txt
File: a.txt
Size: 2518 Blocks: 8 IO Block: 4096 regular file
Device: 253,0 Inode: 100871888 Links: 1
Access: (0755/-rwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2026-07-19 16:57:45.679395790 +0800
Modify: 2026-07-19 16:57:45.679395790 +0800
Change: 2026-07-19 16:57:45.682395782 +0800
Birth: 2026-07-19 16:57:45.679395790 +0800
| 字段 | 值 | 含义 |
|---|---|---|
| File | a.txt | 文件名,存储在目录项 (dentry),不在 inode 中 |
| Size | 2518 | 文件内容 2518 字节(~2.5KB) |
| Blocks | 8 | 占用 8 个 512B 扇区 = 4096B(XFS 最小分配 4KB) |
| Slack | 1578 | Size 不足一个 block 产生的碎片空间,无法被其他文件使用 |
| IO Block | 4096 | 文件系统 I/O 块大小 4KB |
| File type | regular file | 普通文件(Linux 七种文件类型之一) |
| Device | 253,0 | 主:次设备号,对应 /dev/mapper/rhel-root |
| Inode | 100871888 | 元数据索引编号,文件系统内唯一 |
| Links | 1 | 硬链接计数,=1 表示只有一个文件名指向此 inode |
| 权限 (八进制) | 0755 | 0 (特殊) + 7 (属主) + 5 (属组) + 5 (其他人) |
| 权限 (符号) | -rwxr-xr-x | 普通文件,属主 rwx (7),属组 r-x (5),其他人 r-x (5) |
| UID | 0 → root | 文件属主(超级管理员 uid=0) |
| GID | 0 → root | 文件属组(root 组) |
| SELinux User | unconfined_u | SELinux 非受限用户 |
| SELinux Role | object_r | 客体角色(文件 / 目录等对象) |
| SELinux Type | admin_home_t | 管理员家目录文件标签 |
| SELinux Level | s0 | 最低敏感级别 |
| atime | 16:57:45.679 | 最后访问时间,读取时更新(cat/vim打开/less) |
| mtime | 16:57:45.679 | 内容修改时间,写入时更新(echo / 重定向/vim :w) |
| ctime | 16:57:45.682 | 元数据变更时间,chmod/chown/mv 时更新 |
| birth | 16:57:45.679 | 文件创建时间,XFS 支持记录 |

文件类型
| 标识字符 | 文件类型全称 | 简要说明 |
|---|---|---|
- |
普通文件(regular file) | 文本文件、程序二进制文件、日志、压缩包等常规数据文件 |
d |
目录文件(directory) | 等同于文件夹,用于存放和管理下级文件与子目录 |
l |
符号链接(symbolic link) | 软链接,文件快捷方式,指向原文件路径 |
c |
字符设备文件(character device) | 按字符流式读写外设,例如键盘、串口、终端 /dev/tty |
b |
块设备文件(block device) | 按数据块批量读写存储硬件,例如硬盘、分区 /dev/sda |
s |
套接字文件(socket) | 用于本机进程间双向通信,典型示例 /run/docker.sock |
p |
命名管道(FIFO/named pipe) | 单向半双工进程间数据传递,先进先出管道通信 |
文件系统
Linux 常见文件系统分类
传统磁盘文件系统
适用于磁盘分区持久化存储,是服务器、物理机主流落地文件系统。
| 类型 | 核心特点 | 适用场景 |
|---|---|---|
| ext4 | Linux 经典主流文件系统,极致成熟稳定,完全向后兼容 ext2/ext3;日志机制完善,兼容性极强、故障率低 | Linux 通用默认选择,个人服务器、普通业务、中小型分区通用场景 |
| xfs | 专为高负载优化,支持高并发读写、超大文件读写性能优异;支持在线扩容,元数据日志机制高效 | RHEL/CentOS 系统默认文件系统,大数据、数据库、高并发业务、超大分区场景 |
| btrfs | 支持写时复制(COW),内置快照、数据压缩、校验和纠错功能;支持灵活的分区扩容、缩容,容错性强 | 需要数据快照备份、文件压缩、数据校验、轻量化容错的业务场景 |
| ZFS | 源自 Solaris,功能强于 btrfs;自带存储池管理、数据校验、自动修复、快照、重复数据删除,数据完整性拉满 | 企业级存储、重要数据留存、对数据安全与完整性要求极高的场景 |
特殊用途文件系统
非磁盘持久化文件系统,多用于系统内核交互、临时存储、容器、网络挂载等特殊场景。
| 类型 | 核心说明 |
|---|---|
| tmpfs | 基于内存+Swap 实现的临时文件系统,读写速度极快,重启数据全部丢失,用于存放临时缓存文件 |
| proc | 挂载在 /proc,虚拟文件系统,专门用于暴露内核进程、系统运行状态、硬件参数等实时信息 |
| sysfs | 挂载在 /sys,用于统一暴露系统设备、硬件驱动、总线信息,支撑硬件管理与识别 |
| devtmpfs | 挂载在 /dev,自动管理系统设备节点,实现硬件设备的识别与调用 |
| overlay | 联合挂载文件系统,是 Docker 容器镜像分层存储的核心,实现镜像多层叠加、读写层分离 |
| nfs/cifs | 网络文件系统,支持跨主机文件共享,多用于局域网、服务器集群文件互通 |
文件系统核心区别
精准区分 ext4、xfs、btrfs、ZFS 的核心特性差异
| 对比维度 | 详细特性对比 |
|---|---|
| 日志机制 | ext4:完整日志;xfs:仅元数据日志,性能更高;btrfs/ZFS:COW 机制替代传统日志 |
| 最大存储上限 | ext4:16TB~1EB;xfs:最高8EB;btrfs:最高16EB,超大分区支持最优 |
| 写时复制(COW) | btrfs、ZFS 原生支持;ext4、xfs 无原生 COW 能力 |
| 在线容量调整 | xfs:仅支持在线扩容,不支持缩容;ext4、btrfs:支持在线扩容、缩容 |
| 数据压缩 | btrfs、ZFS 内置文件压缩功能;ext4、xfs 无原生压缩,需依赖上层工具实现 |
| 快照功能 | btrfs、ZFS 原生支持快照备份;ext4、xfs 无原生快照,需借助 LVM 补充实现 |
查询磁盘文件系统
排查设备文件系统类型,推荐按顺序执行,精准排查,过滤冗余设备:
- 查看当前目录所属文件系统:
df -hT . - 查看所有块设备文件系统(过滤容器/快照虚拟设备):
lsblk -f | grep -v loop - 查看所有设备完整文件系统、UUID 信息:
blkid - 查看内核实时挂载设备表:
cat /proc/mounts | grep ^/dev
vim快捷操作
1、光标移动
shift+g:将光标定位到文件最后一行
gg:将光标定位到文件和一行
w:每按一次光标向后移动一个单词的位置
b:b个单词的位置
l:每按一次光标向后移动一个字符位置
h:每按一次光标向前移动一个字符位置
j:每按一次光标向下移动一行
k:每按一次光标向上移动一行
shift+$:将光标移到当前行的最后
shift+^:将光标移到当前行的最前面
2、模式切换
i:将命令模式切换为编辑模式,所输入的字符在光标之前
I:将命令模式切换为编辑模式,并且将光标移到所以行的最前面
a:将命令模式切换为编辑模式,会将光标向后移到一位
A:将命令模式切换为编辑模式,并且将光标移到所以行的最后面
o:将命令模式切换为编辑模式,会在光标所在行之下产生一个新行
O:将命令模式切换为编辑模式,会在光标所在行之上产生一个新行
esc:将编辑模式切换为命令模式
3、文件保存
w:将文件写入(保存)
w filepath:将文件另存为指定路径下
q:退出但不保存
q!:强制退出且不保存
wq:保存并退出
shift+z+z:保存并退出
4、查找和替换
/keyword:根据关键字来查找,按 n 向下查找,按 N 向上查找
:%s/被替换的内容/将替换的内容/g
用户管理
Linux 用户和组
基本概念
- 用户(User):每个进程都有一个属主,决定它能访问哪些文件
- 组(Group):用户的集合,用于批量管理权限
配置文件
| 文件 | 用途 |
|---|---|
/etc/passwd |
用户账户信息 |
/etc/shadow |
用户密码(加密存储) |
/etc/group |
组信息 |
/etc/gshadow |
组密码 |
用户分类
| 类型 | UID 范围 | 说明 |
|---|---|---|
| root | 0 |
超级管理员,不受权限限制 |
| 系统用户 | 1-999(RHEL) |
运行服务的专用账户,如 chrony、sshd |
| 普通用户 | 1000+ |
日常登录的用户 |
查看当前用户
whoami # 当前用户名
id # 当前用户完整信息(uid/gid/所属组)
/etc/passwd 格式详解
每行一个用户,7 个字段用冒号分隔:
root:x:0:0:root:/root:/bin/bash
↑ ↑ ↑ ↑ ↑ ↑ ↑
| | | | | | └─ 默认 shell(/bin/bash)
| | | | | └──────── 家目录(/root)
| | | | └────────────── 备注 GECOS(root)
| | | └───────────────── GID 主组编号(0)
| | └─────────────────── UID 用户编号(0)
| └───────────────────── 密码占位符(实际在 /etc/shadow)
└───────────────────────── 用户名(root)
x表示密码加密存储在/etc/shadow中——/etc/passwd所有人可读,/etc/shadow仅 root 可读。
/etc/group 格式详解
root:x:0:
wheel:x:10:user1,user2
↑ ↑ ↑ ↑
| | | └─ 附加成员列表(逗号分隔)
| | └────── GID(10)
| └──────── 密码占位符
└───────────── 组名(wheel)
主组 vs 附加组
每个用户有且只有一个主组(primary group),记录在 /etc/passwd 的 GID 字段。
用户可以属于零个或多个附加组(supplementary groups),记录在 /etc/group 中。
区别
| 场景 | 使用哪个组 |
|---|---|
| 创建文件时,文件的属组 | 主组 |
| 访问文件时,拥有的权限 | 主组 + 所有附加组 |
示例
$ id
uid=1000(zhang) gid=1000(zhang) groups=1000(zhang),10(wheel),1001(docker)
# ↑ 主组 ↑ 附加组
zhang创建的文件属组 =zhangzhang能访问wheel组和docker组的权限资源
增删改查命令
用户操作
useradd
Options:
-b:指定用户家目录的基础父目录
-c:添加用户备注信息(GECOS字段)
-d:手动指定用户家目录完整路径
-D:查看/修改useradd新建用户时的默认配置
-e:设置账号失效过期日期,格式YYYY-MM-DD
-f:设置密码过期后多少天账号停用(宽限期)
-g:指定用户**主组**(初始登录组)
-G:指定用户多个附加附属组,多组用逗号分隔
-h:查看帮助信息
-m:自动创建用户家目录(常用)
-M:不自动创建用户家目录
-N:不自动创建与用户名同名的私有主组
-o:允许创建UID重复的用户
-p:填写加密后的密码,一般不直接使用
-r:创建系统用户,无家目录、无过期时间、UID偏小
-s:指定用户登录Shell,如/bin/bash、/sbin/nologin
-u:手动指定用户UID编号
-U:创建和用户名同名的用户组(默认行为)
eg:useradd -m -d /home/myhome -c "测试账号" -s /bin/bash test
| 命令 | 作用 |
|---|---|
useradd zhangsan |
创建用户 |
passwd zhangsan |
设置/修改密码 |
usermod -aG wheel zhangsan |
将用户添加到附加组 |
userdel -r zhangsan |
删除用户(-r 同时删家目录和邮件池) |
组操作
| 命令 | 作用 |
|---|---|
groupadd devops |
创建组 |
groupmod -n newname oldname |
修改组名 |
groupdel devops |
删除组 |
gpasswd -a user group |
将用户加入组 |
gpasswd -d user group |
从组移除用户 |
查询操作
| 命令 | 作用 |
|---|---|
id zhangsan |
查看用户详情 |
groups zhangsan |
查看用户所属所有组 |
getent passwd |
查看所有用户(兼容网络数据库) |
getent group |
查看所有组 |
cat /etc/passwd | cut -d: -f1 |
列出系统所有用户名 |
文件权限关联
-rwxr-xr--
↑ ↑ ↑
| | └─ Others(其他人)
| └──── Group(属组)
└─────── Owner(属主)
# 特殊权限:
SUID:(所属者 x-->s)
这个特殊权限是只对可执行文件有效,它的作用是临时以文件的创建者身份来运行,运行结束后权限回收——简单来说就是临时提权。
SGID:(所属组 x-->s)
这个特殊权限是对可执行文件或者目录有效,它的作用是临时以文件或目录的所属者身份去运行,运行结束后回收。
SBIT:(目录 x-->t)
这个特殊权限是只对目录有效,它的作用是如果目录有这个特殊权限,好么在这个目录下所创建的目录和文件只能是创建者或者该目录的创建者才能删除。
修改归属
chown zhangsan:devops file.txt # 同时改属主:属组
chown zhangsan file.txt # 只改属主
chgrp devops file.txt # 只改属组
实用技巧
# 查看当前登录的用户
who
# 查看自己所属组
groups
# 切换用户
su - zhangsan # 切换并加载环境变量
sudo -u zhangsan cmd # 以 zhangsan 身份执行单条命令
# 查看文件创建时的默认权限掩码
umask # 如 0022
# 文件默认权限 = 666 - umask = 644(rw-r--r--)
# 目录默认权限 = 777 - umask = 755(rwxr-xr-x)