CentOS 常见问题
FreeGuideOnline
最新
2026-07-14
bash
查看发行版版本(CentOS 7/8/Stream 可用)
cat /etc/redhat-release
或
cat /etc/centos-release
查看内核版本
uname -r
查看系统位数
uname -m
### CentOS 7/8/Stream 有什么区别?我该选哪个?
- **CentOS 7**:最稳定的传统版本,采用 yum 包管理,支持至 2024 年 6 月 30 日。
- **CentOS 8**:已停止维护,替代者转向 CentOS Stream,不推荐新部署。
- **CentOS Stream**:滚动的开发中版本,介于 Fedora 和 RHEL 之间,采用 dnf 包管理。适合需要较新软件但接受一定变动的环境。
**建议**:稳定优先选 CentOS 7;想要长期支持可改用 Rocky Linux 或 AlmaLinux;若需与 RHEL 发展同步可选 CentOS Stream。
### 忘记 root 密码如何重置?
1. 重启系统,在 GRUB 启动菜单按 `e` 进入编辑模式。
2. 找到以 `linux16` 或 `linux` 开头的行,在行末添加 `rd.break`(CentOS 7)或 `init=/bin/sh`(部分情况)。
3. 按下 `Ctrl + X` 启动,进入紧急 shell。
4. 重新挂载根分区为读写:
```bash
mount -o remount,rw /sysroot
chroot /sysroot
- 修改密码:
passwd root - 创建 SELinux 重标记文件并退出:
touch /.autorelabel exit reboot
yum/dnf 报“Cannot find a valid baseurl”错误怎么办?
此错误通常由网络不通或仓库配置错误引起。
- 检查网络连通性:
ping 8.8.8.8 - 若网络不通,配置 DNS 或检查网卡是否启用:
nmcli device status - 若 DNS 正常但仓库无法连接,可能是镜像列表失效。清除 yum 缓存并重建:
yum clean all yum makecache - 对于 CentOS 8 已停止维护的情况,需要更换至 Vault 仓库:
sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-* sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
如何添加 EPEL 仓库以获取更多软件?
yum install -y epel-release # CentOS 7
dnf install -y epel-release # CentOS Stream 8/9
安装后即可使用 yum install 或 dnf install 获取丰富的额外软件包。
网络配置与防火墙
静态 IP 如何配置?
方法一:使用 nmcli(推荐)
# 查看连接名
nmcli connection show
# 修改连接(例如 ens33)
nmcli connection modify ens33 ipv4.addresses 192.168.1.100/24
nmcli connection modify ens33 ipv4.gateway 192.168.1.1
nmcli connection modify ens33 ipv4.dns "8.8.8.8 114.114.114.114"
nmcli connection modify ens33 ipv4.method manual
nmcli connection up ens33
方法二:直接编辑网卡配置文件
编辑 /etc/sysconfig/network-scripts/ifcfg-ens33(文件名根据实际接口名确定):
BOOTPROTO=static
ONBOOT=yes
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=8.8.8.8
DNS2=114.114.114.114
保存后重启网络:systemctl restart network(CentOS 7)或 nmcli connection reload(CentOS 8+)
firewalld 防火墙常用操作有哪些?
# 启动/停止/重启
systemctl start firewalld
systemctl stop firewalld
systemctl restart firewalld
# 查看状态
firewall-cmd --state
# 开放端口(如 80/tcp)
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --reload
# 查看已开放端口
firewall-cmd --list-ports
# 删除端口规则
firewall-cmd --zone=public --remove-port=80/tcp --permanent
如何为 SSH 修改默认的 22 端口?
- 编辑 SSH 配置文件:
vim /etc/ssh/sshd_config - 找到
#Port 22,取消注释并改为新端口(如 2222)。 - 在防火墙中开放新端口,并(可选)禁止旧端口:
firewall-cmd --zone=public --add-port=2222/tcp --permanent firewall-cmd --reload - 向 SELinux 添加允许端口(如果 SELinux 为 enforcing):
semanage port -a -t ssh_port_t -p tcp 2222 - 重启 SSH 服务:
systemctl restart sshd
注意:不要关闭当前连接窗口,新开终端测试成功再退出原窗口。
为什么服务监听正常但外部无法访问?
常见原因排查顺序:
- 服务是否监听在 0.0.0.0 而非 127.0.0.1?用
ss -tlnp检查。 - 防火墙是否放行对应端口?
- SELinux 是否放行?可用
getenforce查看状态,临时关闭测试:setenforce 0。若关闭后正常,则需配置 SELinux 上下文,而非永久关闭。 - 云服务器安全组/防火墙是否放行。
软件包与系统更新
如何完全卸载软件及其依赖?
使用 yum 的自动清理功能:
yum autoremove 软件名 # CentOS 7 需要安装 yum-utils
yum remove 软件名 # 仅移除软件本身
对于 dnf:
dnf autoremove 软件名
遇到“Another app is currently holding the yum lock”如何解决?
说明有另一个 yum/dnf 进程正在运行或异常退出导致锁未释放。解决方法:
rm -f /var/run/yum.pid
或杀死残留的 yum 进程:
ps aux | grep yum
kill -9 PID
如何使用 Chrony 同步时间?
CentOS 7 及以上推荐使用 Chrony 替代 ntp。
# 安装
yum install -y chrony
# 启动并开机自启
systemctl start chronyd
systemctl enable chronyd
# 查看时间同步源
chronyc sources -v
# 强制同步一次
chronyc -a makestep
用户与权限
如何创建 sudo 用户?
# 创建用户
useradd -m newuser
passwd newuser
# 加入 wheel 组(该组默认有 sudo 权限)
usermod -aG wheel newuser
验证:切换到该用户后运行 sudo whoami,应返回 root。
文件夹权限为“drwxr-xr-x.”那个点是什么意思?
代表该文件或目录受到了SELinux 上下文的标记。这是正常的权限显示,表示 SELinux 在启用状态。使用 ls -Z 可查看详细上下文。
系统故障排查与日志
服务启动失败,如何查看详细日志?
使用 journalctl 查看服务日志:
journalctl -u 服务名.service -xe
例如查看 nginx 启动失败原因:journalctl -u nginx -xe。
传统日志仍可在 /var/log/messages 或 /var/log/secure 中找到。
磁盘空间不足报警,如何快速定位大文件?
# 查看各目录占用(从根开始逐层深入)
du -h --max-depth=1 / | sort -hr
# 查找大于 100MB 的文件
find / -type f -size +100M -exec ls -lh {} \; 2>/dev/null
常见占用大户:日志文件 /var/log,包缓存 /var/cache/yum,核心转储文件等。
如何安全地清理系统垃圾?
# 清理 yum 缓存
yum clean all
# 清理旧的内核(保留当前在用内核)
package-cleanup --oldkernels --count=2 # 需要 yum-utils
# 清理日志(可配置 logrotate 自动进行)
journalctl --vacuum-size=200M