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
  1. 修改密码:
    passwd root
    
  2. 创建 SELinux 重标记文件并退出:
    touch /.autorelabel
    exit
    reboot
    

yum/dnf 报“Cannot find a valid baseurl”错误怎么办?

此错误通常由网络不通或仓库配置错误引起。

  1. 检查网络连通性:ping 8.8.8.8
  2. 若网络不通,配置 DNS 或检查网卡是否启用:nmcli device status
  3. 若 DNS 正常但仓库无法连接,可能是镜像列表失效。清除 yum 缓存并重建:
    yum clean all
    yum makecache
    
  4. 对于 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 installdnf 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 端口?

  1. 编辑 SSH 配置文件:
    vim /etc/ssh/sshd_config
    
  2. 找到 #Port 22,取消注释并改为新端口(如 2222)。
  3. 在防火墙中开放新端口,并(可选)禁止旧端口:
    firewall-cmd --zone=public --add-port=2222/tcp --permanent
    firewall-cmd --reload
    
  4. 向 SELinux 添加允许端口(如果 SELinux 为 enforcing):
    semanage port -a -t ssh_port_t -p tcp 2222
    
  5. 重启 SSH 服务:
    systemctl restart sshd
    

注意:不要关闭当前连接窗口,新开终端测试成功再退出原窗口。

为什么服务监听正常但外部无法访问?

常见原因排查顺序:

  1. 服务是否监听在 0.0.0.0 而非 127.0.0.1?用 ss -tlnp 检查。
  2. 防火墙是否放行对应端口?
  3. SELinux 是否放行?可用 getenforce 查看状态,临时关闭测试:setenforce 0。若关闭后正常,则需配置 SELinux 上下文,而非永久关闭。
  4. 云服务器安全组/防火墙是否放行。

软件包与系统更新

如何完全卸载软件及其依赖?

使用 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