CentOS7 安装wget、vim、net-tools常用工具包
前言
新装的 CentOS7 最小化系统默认不带 wget、vim、net-tools(ifconfig、netstat)、lsof、curl 等常用工具,执行命令时会提示 command not found。本篇汇总这些基础工具包的安装命令、对应包名和常见报错处理,新机器上线后可一次性补齐。
一、先更新缓存
yum clean all
yum makecache
若提示镜像 404 或超时,先更换国内 yum 源(阿里云/清华),再执行安装。
二、常用工具包安装命令
# wget:下载文件
yum install -y wget
# vim:文本编辑器(最小化系统默认只有 vi)
yum install -y vim
# net-tools:提供 ifconfig、netstat、route、arp 等网络工具
yum install -y net-tools
# curl:命令行请求接口
yum install -y curl
# lsof:查看端口/文件被哪个进程占用
yum install -y lsof
# zip/unzip:压缩解压
yum install -y zip unzip
# tar 系统自带;补充常用编译工具链(源码编译时需要)
yum install -y gcc gcc-c++ make
一次性批量安装:
yum install -y wget vim net-tools curl lsof zip unzip gcc gcc-c++ make
三、各工具用途速查
| 工具/包 | 提供命令 | 典型用途 |
|---|---|---|
| wget | wget | 下载文件、整站镜像 |
| vim | vim | 编辑配置文件 |
| net-tools | ifconfig、netstat、route | 查看网卡、端口、路由 |
| curl | curl | 测试接口、下载 |
| lsof | lsof | 查端口占用、删不掉的文件 |
| zip/unzip | zip、unzip | 打包解压 zip |
| gcc/gcc-c++/make | gcc、g++、make | 编译源码 |
四、安装后验证
# 查看版本确认安装成功
wget --version
vim --version
netstat -tlnp
curl --version
lsof -v
netstat -tlnp 能正常输出监听端口列表,说明 net-tools 已装好。
五、常见坑
ifconfig: command not found:不是系统坏了,是没装 net-tools;新系统推荐用ip addr替代;vim: command not found:最小化只带vi,装 vim 才有语法高亮和完整快捷键;wget: command not found:最小化镜像默认不装,单独yum install -y wget;- yum 安装报 404/超时:CentOS7 官方源已逐步归档,先换阿里云 vault 镜像源再装;
- 提示包不存在:确认系统版本(
cat /etc/centos-release),net-tools 在 CentOS7 仓库内,8/9 对应包名基本一致; - 编译安装软件缺依赖:先装
gcc gcc-c++ make,再按报错补pcre-devel、openssl-devel、zlib-devel等开发包。
六、补充:网络工具 iproute2
CentOS7 已默认带 iproute2,提供 ip 命令,功能比 net-tools 更现代:
ip addr # 替代 ifconfig
ip route # 替代 route
ss -tlnp # 替代 netstat -tlnp
老运维习惯 net-tools,新脚本建议优先用 ip 和 ss。
总结
新机器先 yum clean all && yum makecache,再 yum install -y wget vim net-tools curl lsof zip unzip 批量补齐;命令找不到先判断是缺包,用 yum provides 命令名 反查对应包名;网络排查可新旧工具并用,ip、ss 作为现代替代。
遇到问题加QQ23979811 协助处理
CentOS7 yum安装软件报错,yum源更换教程
前言
CentOS7执行 yum install 经常报错:Could not resolve host、No package available、Download failed、Metadata cache expired。原因大多是默认国外源慢或已失效、DNS不通、缓存过期。换成国内阿里云/清华镜像源,再清缓存重建,基本都能解决。本篇给出完整换源步骤。
一、先判断报错类型
# 看当前yum源列表
yum repolist
# 测试网络与DNS
ping -c 3 mirrors.aliyun.com
nslookup mirrors.aliyun.com
- 解析不了域名:先修DNS(
/etc/resolv.conf加nameserver 114.114.114.114); - 能ping通但装不上:源本身失效,换国内源。
二、备份原有源
cd /etc/yum.repos.d/
mkdir backup
mv CentOS-Base.repo backup/
保留备份,换源失败可还原。
三、更换阿里云Base源(CentOS7)
# 下载阿里云7镜像源配置
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
# 若curl不可用用wget
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
清华源备选:
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.tuna.tsinghua.edu.cn/repo/Centos-7.repo
四、更换EPEL源(装扩展软件常用)
# 先删旧epel
rm -f /etc/yum.repos.d/epel.repo
# 阿里云epel7
curl -o /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
五、清缓存并重建
# 清除旧缓存
yum clean all
# 重建缓存
yum makecache
# 验证源是否生效
yum repolist
# 再试安装
yum install -y vim wget net-tools
六、常见坑
- CentOS8/9换了7的源:版本号要对应,
Centos-7.repo只用于7; - 下载源文件404:镜像站路径改版,换清华或官方备用地址;
- 多个repo残留冲突:
/etc/yum.repos.d/下旧的失效repo没删干净,会重复报错; - makecache卡在Metadata:DNS或网络不通,先
ping镜像站确认; - yum install -y 卡住超时:可临时调大超时,或换网络更好的镜像;
- 时间不准导致HTTPS证书校验失败:先
date检查系统时间,用ntpdate校时。
总结
yum报错先分DNS不通还是源失效:DNS不通修resolv.conf;源失效就备份 /etc/yum.repos.d/,下载阿里云Centos-7.repo和epel-7.repo,yum clean all && yum makecache 重建缓存后再安装。
遇到问题加QQ23979811 协助处理
CentOS7重启网络报错,network与NetworkManager冲突处理
前言
CentOS7改完网卡配置后 systemctl restart network 报错,常见提示是 "Job for network.service failed because the control process exited with error code"。根源往往是老的 network 服务和新的 NetworkManager(简称NM)同时管一块网卡,配置互相打架。本篇讲清楚怎么判断、怎么处理。
一、先看报错到底是什么
# 重启网络看具体错误
systemctl restart network
# 查看详细失败原因
systemctl status network -l
journalctl -xe | grep network
# 看网卡配置有没有写错
cat /etc/sysconfig/network-scripts/ifcfg-ens33
常见报错:配置里 NM_CONTROLLED=no 与NM冲突、ONBOOT、网关或IP写重复、网卡名和配置文件名对不上。
二、方案一:服务器纯命令行,关掉NetworkManager
服务器一般用不到图形网络管理,直接停用NM,让network接管最干净:
# 停止并禁用NetworkManager
systemctl stop NetworkManager
systemctl disable NetworkManager
# 再重启network
systemctl restart network
同时确认网卡配置里写:
NM_CONTROLLED=no
这样两块不会抢同一张网卡。
三、方案二:保留NetworkManager,用它管网络
如果是桌面或需要NM的场景,就别用老network:
# 查看NM识别到的连接
nmcli connection show
# 重启某块网卡连接
nmcli connection down ens33 && nmcli connection up ens33
# 查看设备状态
nmcli device status
注意:用NM管理时,配置尽量通过 nmcli 或nmtui改,不要手改ifcfg后又让network重启。
四、常见配置文件检查项
/etc/sysconfig/network-scripts/ifcfg-ens33:
TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=114.114.114.114
NAME/DEVICE要和实际网卡名一致;- 改完配置重启前,保留一个已登录SSH会话,防止网络断了把自己关外面。
五、常见坑
- network和NetworkManager同时重启:两个服务都抢网卡,IP时有时无,二选一;
- 网卡名变了配置文件没改:新系统网卡名是ens33不是eth0,文件名和DEVICE要对应;
- GATEWAY写了两个:多网卡配多个网关会路由冲突;
- 改完只restart不验证:用
ping、ip addr确认IP真的起来了; - 云服务器别乱关NM:部分云镜像靠NM配内网,关了可能丢内网,先确认再操作。
总结
重启网络报错,先 systemctl status network -l 看原因;服务器场景停掉并禁用NetworkManager、配置里 NM_CONTROLLED=no,再restart network;桌面场景改用nmcli管理。二选一,不要两个服务同时管网卡。
遇到问题加QQ23979811 协助处理
CentOS7关闭SELinux详细步骤,临时与永久关闭
前言
CentOS7 默认开启 SELinux,它是一套强制访问控制机制,经常和自行搭建的 Nginx、PHP-FPM、网站目录权限冲突,表现为页面 403、文件写不进去、代理被拦截。生产环境如果不想精细配置策略,最直接的做法就是关闭。本篇区分临时关闭和永久关闭,并给出验证方法。
一、先查看SELinux当前状态
# 查看运行状态
getenforce
# 返回 Enforcing 表示强制开启,Permissive 只记录不拦截,Disabled 已关闭
sestatus
# 也可看配置文件
grep SELINUX= /etc/selinux/config
二、临时关闭(重启后恢复)
# 切换为宽容模式,立即生效但重启复原
setenforce 0
# 验证
getenforce
# 返回 Permissive 即临时关闭成功
setenforce 1 可重新切回 Enforcing。临时关闭适合先定位问题,不想动配置时使用。
三、永久关闭(重启仍生效)
编辑配置文件:
vi /etc/selinux/config
把这一行:
SELINUX=enforcing
改为:
SELINUX=disabled
保存后必须重启服务器才完全生效:
reboot
重启后执行 getenforce 返回 Disabled 即永久关闭成功。
四、两种方式区别速记
| 方式 | 命令/改文件 | 是否立即生效 | 重启后 |
|---|---|---|---|
| 临时 | setenforce 0 | 是 | 恢复为Enforcing |
| 永久 | /etc/selinux/config 改disabled | 否,需重启 | 保持关闭 |
五、常见坑
- 只 setenforce 0 不重启改文件:重启后又自动开启,问题复现;
- 改了配置不重启:getenforce 仍显示 Enforcing,以为没改成功;
- 改错变量名:是
SELINUX=而不是SELINUXTYPE=,后者是策略类型别动; - 急着排查时建议先临时关:验证是不是SELinux拦截,确认后再决定永久关,避免一刀切损失安全性;
- 某些面板/容器环境改完仍受影响,可用
sestatus复核当前模式。
总结
临时关用 setenforce 0,永久关改 /etc/selinux/config 为 disabled 后重启,最后用 getenforce 确认。排查403、写入失败时,SELinux是经常被忽略的一层。
遇到问题加QQ23979811 协助处理
CentOS7 firewalld开放80、443端口永久生效命令
前言
CentOS7 默认用 firewalld 管理防火墙,新装系统后外网访问 80、443 经常被拒,浏览器打不开网站。很多人只在临时会话里加规则,重启或 reload 后端口又被关。本篇给出永久开放 80、443 的完整命令和验证方法。
一、先确认防火墙状态
systemctl status firewalld
firewall-cmd --state
返回 running 表示防火墙在运行;如果是 not running,先启动并设为开机自启:
systemctl start firewalld
systemctl enable firewalld
二、永久开放80、443端口
关键是 --permanent 参数,不加它规则只在当前运行时生效,reload 或重启就丢失。
# 永久开放HTTP 80
firewall-cmd --permanent --add-port=80/tcp
# 永久开放HTTPS 443
firewall-cmd --permanent --add-port=443/tcp
# 重载使永久规则立即生效
firewall-cmd --reload
也可以用服务名方式(firewalld 自带 http/https 服务定义):
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reload
三、查看已开放端口,确认生效
# 查看永久规则里已开放的端口
firewall-cmd --permanent --list-ports
# 查看当前运行时生效的服务
firewall-cmd --list-services
能看到 80/tcp 443/tcp 或 http https 即成功。
四、开放单个/多个端口常用命令汇总
# 永久开放单个端口
firewall-cmd --permanent --add-port=8080/tcp
# 永久移除某个端口
firewall-cmd --permanent --remove-port=8080/tcp
# 开放一段端口范围(如30000-30100)
firewall-cmd --permanent --add-port=30000-30100/tcp
# 开放UDP(DNS、视频流用)
firewall-cmd --permanent --add-port=53/udp
每加完一条都要 firewall-cmd --reload。
五、常见坑
- 加了规则但不 reload:运行时看不到,外网照样访问不通;
- 忘记 --permanent:重启服务器后规则消失,以为没生效;
- 协议选错:Web 是 tcp,写成 udp 无效;
- 云服务器安全组没放行:系统防火墙开了,云厂商控制台安全组还拦着,两边都要开;
- 服务本身没监听:
ss -tlnp确认 nginx 在 80/443 上监听,否则放了端口也连不上。
总结
记住三步:--add-port=端口/tcp --permanent → --reload → --list-ports 验证。系统防火墙和云安全组同时放行,网站才能从外网访问。
遇到问题加QQ23979811 协助处理
CentOS7 安装图形界面,最小化安装升级
前言
很多人装 CentOS7 的时候选了最小化安装,后来发现想用图形界面怎么办?不用重装,直接在线装就行。本文讲一下怎么从命令行升级到带图形界面的版本。
先更新系统
装图形界面前先把系统更新一下:
yum update -y
安装 GNOME 桌面
方法一:安装 GNOME 桌面(推荐)
yum groupinstall -y "GNOME Desktop"
这个安装包比较大,大概几个 G,需要等一会儿。
方法二:安装带图形界面的服务器版
yum groupinstall -y "Server with GUI"
这个比 GNOME Desktop 多一些服务器相关的工具。
设置默认启动方式
查看当前默认启动方式
systemctl get-default
输出 multi-user.target 就是命令行模式,graphical.target 就是图形界面模式。
设置默认启动到图形界面
systemctl set-default graphical.target
设置默认启动到命令行
如果以后想改回命令行:
systemctl set-default multi-user.target
重启生效
reboot
重启之后就会进入图形界面了。
不重启直接进入图形界面
如果不想重启,可以直接启动图形界面:
startx
或者:
systemctl isolate graphical.target
常见坑
坑1:yum 安装报错
安装的时候报错,下载失败。
原因: yum 源没配好。
解决: 先换国内 yum 源(参考之前的 yum 源更换教程),然后再装。
坑2:安装完了还是命令行
装完重启后还是进命令行。
原因: 没设置默认启动方式。
解决:
systemctl set-default graphical.target
reboot
坑3:服务器装图形界面很卡
云服务器上装了图形界面之后特别卡。
原因: 图形界面占内存和 CPU 很多,云服务器配置一般不高。
建议: 生产服务器不要装图形界面,命令行更省资源。如果确实需要图形界面,用 VNC 或者远程桌面连。
坑4:安装包太大下载慢
几个 G 的包下载半天。
解决: 先换国内 yum 源,速度会快很多。
总结
| 步骤 | 命令 |
|---|---|
| 更新系统 | yum update -y |
| 安装 GNOME 桌面 | yum groupinstall -y "GNOME Desktop" |
| 设置默认图形界面 | systemctl set-default graphical.target |
| 重启 | reboot |
提醒: 生产服务器建议用命令行模式,更稳定、更省资源。图形界面只在测试或者个人电脑上用。
遇到问题加QQ23979811 协助处理
CentOS7 关闭防火墙,永久关闭firewalld
前言
刚装好的 CentOS7 默认开了防火墙,很多端口都访问不了。有时候为了省事想直接关掉防火墙,本文讲一下怎么操作,以及临时关和永久关的区别。
查看防火墙状态
先看看防火墙现在是开还是关:
systemctl status firewalld
输出里有 active (running) 就是开着,inactive (dead) 就是关了。
或者用:
firewall-cmd --state
输出 running 就是开着,not running 就是关了。
临时关闭防火墙
只关掉当前运行状态,重启后又会自动开起来:
systemctl stop firewalld
永久关闭防火墙
永久关闭,重启后也不会再开:
systemctl stop firewalld
systemctl disable firewalld
两条命令一起执行,先停掉当前的,再禁止开机自启。
重新开启防火墙
如果以后又想开起来:
systemctl start firewalld
systemctl enable firewalld
验证是否关闭成功
执行完之后再看一下状态:
systemctl status firewalld
应该显示 inactive (dead)。
常见坑
坑1:只 stop 了但没 disable
执行了 systemctl stop firewalld,但重启后防火墙又自己开起来了。
原因: 只停了当前运行,没关开机自启。
解决: 还要执行 systemctl disable firewalld。
坑2:关了防火墙但还是访问不了
防火墙关了,但外部还是访问不了网站。
原因: 除了系统防火墙,云服务商还有一层安全组。
解决: 去云服务商控制台(阿里云、腾讯云、华为云等)的安全组里,把对应的端口也开放了。
坑3:Ubuntu 用的不是 firewalld
在 Ubuntu 上执行 firewalld 命令报错。
原因: Ubuntu 默认用 ufw 防火墙,不是 firewalld。
解决: Ubuntu 关防火墙用:
ufw stop
ufw disable
坑4:关闭防火墙不安全
直接关了防火墙,服务器暴露在公网上很危险。
建议: 生产环境不要直接关防火墙,而是只开放需要的端口。比如只开 80、443、22 端口,其他都关。
总结
| 操作 | 命令 |
|---|---|
| 查看防火墙状态 | systemctl status firewalld |
| 临时关闭 | systemctl stop firewalld |
| 永久关闭 | systemctl stop firewalld && systemctl disable firewalld |
| 开启防火墙 | systemctl start firewalld |
| 开机自启 | systemctl enable firewalld |
注意: 生产环境建议不要直接关防火墙,用开放指定端口的方式更安全。
遇到问题加QQ23979811 协助处理
CentOS7 防火墙开放端口范围,一次性开放多个端口
前言
有时候需要一次性开放很多端口,或者开放一段端口范围,一个个加太麻烦。CentOS7 的 firewalld 支持开放端口范围,也支持一次性开放多个端口,本文讲一下怎么操作。
查看当前开放的端口
先看看现在防火墙开了哪些端口:
firewall-cmd --list-ports
输出类似:
80/tcp 443/tcp 8080/tcp
开放单个端口
永久开放
firewall-cmd --permanent --add-port=80/tcp
然后重载生效:
firewall-cmd --reload
开放 UDP 端口
把 tcp 改成 udp 就行:
firewall-cmd --permanent --add-port=53/udp
firewall-cmd --reload
一次性开放多个端口
方法一:一条命令加多个
firewall-cmd --permanent --add-port=80/tcp --add-port=443/tcp --add-port=8080/tcp
firewall-cmd --reload
多个 --add-port 用空格分开就行。
方法二:开放端口范围
如果要开放一段连续的端口,比如 8000 到 9000:
firewall-cmd --permanent --add-port=8000-9000/tcp
firewall-cmd --reload
这样 8000 到 9000 之间所有 TCP 端口都开放了。
方法三:同时开放 TCP 和 UDP
firewall-cmd --permanent --add-port=53/tcp --add-port=53/udp
firewall-cmd --reload
移除端口
移除单个端口
firewall-cmd --permanent --remove-port=8080/tcp
firewall-cmd --reload
移除端口范围
firewall-cmd --permanent --remove-port=8000-9000/tcp
firewall-cmd --reload
常见场景
场景1:开放 20 到 80 之间的所有端口
firewall-cmd --permanent --add-port=20-80/tcp
firewall-cmd --reload
场景2:同时开放 HTTP 和 HTTPS 服务
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reload
场景3:只允许某个 IP 访问某个端口
这个更安全,只允许 192.168.1.100 访问 3306 端口:
firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='192.168.1.100' port protocol='tcp' port='3306' accept"
firewall-cmd --reload
常见坑
坑1:加了端口没生效
执行了 add-port 但还是访问不了。
原因: 没加 --permanent,或者没 reload。
解决: 一定要加 --permanent 参数,然后执行 firewall-cmd --reload。
坑2:端口范围写反了
写成了 9000-8000,报错。
原因: 范围必须从小到大写。
正确写法: 8000-9000/tcp
错误写法: 9000-8000/tcp
坑3:防火墙没启动
执行 firewall-cmd 报错。
原因: firewalld 服务没启动。
解决:
systemctl start firewalld
systemctl enable firewalld
坑4:开了端口但还是访问不了
防火墙开了端口,但是外部还是访问不了。
原因: 除了防火墙,还有可能是云服务商的安全组没开。
解决: 去云服务商控制台(阿里云、腾讯云等)的安全组里,把对应的端口也开放了。
总结
| 操作 | 命令 |
|---|---|
| 开放单个端口 | firewall-cmd --permanent --add-port=80/tcp |
| 开放多个端口 | firewall-cmd --permanent --add-port=80/tcp --add-port=443/tcp |
| 开放端口范围 | firewall-cmd --permanent --add-port=8000-9000/tcp |
| 移除端口 | firewall-cmd --permanent --remove-port=8080/tcp |
| 查看已开放端口 | firewall-cmd --list-ports |
| 重载生效 | firewall-cmd --reload |
记住:加完端口一定要 --reload 才生效。
遇到问题加QQ23979811 协助处理
CentOS7 安装wget、vim、net-tools常用工具包
前言
新装好的 CentOS7 最小化系统,很多常用命令都没有,比如 wget、vim、ifconfig 都用不了。本文就讲一下怎么一次性把常用工具包装上。
为什么要装这些工具
CentOS7 最小化安装(minimal install)为了节省空间,默认不带很多常用工具。刚装完系统你会发现:
wget命令找不到vim命令找不到ifconfig命令找不到netstat命令找不到
所以刚装完系统第一件事,就是把这些常用工具装上。
安装常用工具包
一键安装
最省事的方式,一条命令全装上:
yum install -y wget vim net-tools lrzsz unzip telnet
这一条命令就把最常用的都装了。
各工具说明
| 工具包 | 作用 |
|---|---|
| wget | 命令行下载文件 |
| vim | 文本编辑器 |
| net-tools | 包含 netstat、ifconfig 等网络工具 |
| lrzsz | 包含 rz、sz 上传下载文件 |
| unzip | 解压 zip 文件 |
| telnet | 测试端口连通性 |
分开装
如果你只想装某一个:
# 只装 wget
yum install -y wget
# 只装 vim
yum install -y vim
# 只装 net-tools(ifconfig、netstat)
yum install -y net-tools
常用工具包推荐
基础工具包(必装)
yum install -y wget vim net-tools lrzsz unzip telnet curl
开发工具包
yum groupinstall -y "Development Tools"
这个包包含了 gcc、make 等编译工具,装东西经常需要。
其他常用工具
# 查看进程树
yum install -y psmisc
# 实时监控网络
yum install -y nload
# 查看端口占用
yum install -y lsof
# 查看磁盘性能
yum install -y iotop
# 查看内存
yum install -y htop
常见坑
坑1:ifconfig 命令找不到
执行 ifconfig 提示 command not found。
原因: CentOS7 最小化安装不带 net-tools 包。
解决:
yum install -y net-tools
装完之后 ifconfig 就能用了。
坑2:vim 命令找不到
执行 vi 能用,但 vim 找不到。
原因: 最小化安装只有 vi,没有 vim。
解决:
yum install -y vim
坑3:rz 命令找不到
想从本地上传文件到服务器,执行 rz 提示找不到。
原因: 没装 lrzsz 包。
解决:
yum install -y lrzsz
装完之后:
rz:从本地上传文件到服务器sz 文件名:从服务器下载文件到本地
坑4:yum 安装报错
执行 yum install 的时候报错。
原因: yum 源没配好,或者网络不通。
解决: 先换国内源(参考之前的 yum 源更换教程),然后再装。
总结
新系统刚装完,先跑这一条命令:
yum install -y wget vim net-tools lrzsz unzip telnet curl
把常用工具一次性装齐,后面省得每次都报 command not found。
遇到问题加QQ23979811 协助处理
CentOS7 yum安装软件报错,yum源更换教程
前言
CentOS7 默认的 yum 源是国外的,装软件特别慢,有时候还报错 "Could not resolve host" 或者 "Failed to connect"。换个国内源就好了,速度飞快。本文就讲一下怎么换 yum 源。
报错现象
执行 yum install xxx 的时候,报类似这样的错:
Could not retrieve mirrorlist http://mirrorlist.centos.org/...
或者:
Could not resolve host: mirrorlist.centos.org
或者下载速度特别慢,几 KB/s。
原因
默认 yum 源是 CentOS 官方的,服务器在国外,国内访问慢。有时候官方源还会挂。
更换国内源
第一步:备份原来的源
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
第二步:下载阿里源
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
或者用 wget:
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
第三步:清理缓存并重建
yum clean all
yum makecache
第四步:测试
yum install -y wget
应该秒装完成。
其他国内源
清华源
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.tuna.tsinghua.edu.cn/repo/Centos-7.repo
网易源
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.163.com/.help/CentOS7-Base-163.repo
中科大源
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.ustc.edu.cn/repo/Centos-7.repo
安装 EPEL 源
EPEL 源是 Extra Packages for Enterprise Linux,很多常用软件(比如 nginx)都在 EPEL 里。
yum install epel-release -y
装完之后也可以换成阿里的 EPEL 源:
mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.backup
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum clean all
yum makecache
常见坑
坑1:换完源还是慢
换了阿里源还是慢。
原因: DNS 解析慢,或者服务器本身带宽小。
解决: 换个源试试(清华、网易),或者检查 DNS:
cat /etc/resolv.conf
坑2:yum makecache 报错
执行 yum makecache 的时候报错。
原因: 源文件没下好,或者网络不通。
解决: 检查源文件内容对不对:
cat /etc/yum.repos.d/CentOS-Base.repo
或者重新下一遍。
坑3:CentOS7 已经 EOL 了
CentOS7 官方已经停服了(2024年6月30日),官方源已经不能用了。
解决: 用 vault 源(存档源):
阿里 vault 源:
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-7.repo
坑4:404 Not Found
装软件的时候报 404。
原因: 源文件里的路径不对,或者软件包被删了。
解决: 换个源,或者清理缓存:
yum clean all
yum makecache
总结
换 yum 源就三步:
- 备份:
mv /etc/yum.repos.d/CentOS-Base.repo 备份 - 下载新源:curl 下载阿里/清华源
- 清缓存:
yum clean all && yum makecache
国内服务器一定要换国内源,不然装软件能急死。
遇到问题加QQ23979811 协助处理
CentOS7重启网络报错,network与NetworkManager冲突处理
前言
CentOS7 里有两套网络管理工具:传统的 network 服务和新的 NetworkManager。两个同时用就会打架,重启网络的时候报错,甚至把网络搞断。本文就讲一下这个冲突怎么解决。
报错现象
执行 systemctl restart network 或者 service network restart 的时候,报类似这样的错:
Restarting network (via systemctl): Job for network.service failed. See 'systemctl status network.service' and 'journalctl -xn' for details.
或者:
RTNETLINK answers: File exists
原因
CentOS7 默认装了 NetworkManager(简称 NM),它也在管理网络接口。传统的 network 服务也在管。两个同时管同一个网卡,配置就会冲突。
解决方法
方法一:关掉 NetworkManager(推荐服务器用)
服务器一般不需要图形界面的网络管理工具,直接关掉:
systemctl stop NetworkManager
systemctl disable NetworkManager
然后重启 network:
systemctl restart network
方法二:让 network 忽略 NetworkManager
编辑网络配置文件:
vi /etc/sysconfig/network-scripts/ifcfg-eth0
在文件里加一行:
NM_CONTROLLED=no
意思是这个网卡不归 NetworkManager 管,只由 network 服务管理。
然后重启网络:
systemctl restart network
方法三:全部交给 NetworkManager 管
如果你想用 NM 管理,那就把传统 network 关掉:
systemctl stop network
systemctl disable network
然后用 NM 的命令管理网络:
nmcli connection show
nmcli connection up eth0
验证
重启网络之后,看看网卡 IP 还在不在:
ip addr
如果 IP 还在,能 ping 通外网,就说明搞定了。
常见坑
坑1:改了配置把自己踢下线
远程 SSH 连上去改网络配置,改完重启网络,结果 SSH 断了,再也连不上。
解决:
- 改配置之前先开个备用 SSH 连接,别关
- 或者直接用云服务器控制台的 VNC 操作
- 不要在生产环境随便重启网络
坑2:重启服务器后网络又坏了
临时重启 network 好了,但重启服务器后又不行了。
原因: NetworkManager 又自动启动了,和 network 冲突。
解决: 把 NetworkManager 禁用掉:
systemctl disable NetworkManager
坑3:网卡名不是 eth0
新一点的系统网卡名可能是 ens33、enp0s3 这种。
解决: 先看一下网卡叫什么:
ip addr
然后改对应的配置文件,比如 ifcfg-ens33。
总结
CentOS7 网络冲突的解决思路很简单:
| 方案 | 操作 | 适用场景 |
|---|---|---|
| 关 NM | systemctl disable NetworkManager |
服务器,推荐 |
| NM_CONTROLLED=no | 网卡配置里加这行 | 只用 network 服务 |
| 全用 NM | 关掉 network,用 nmcli | 桌面环境 |
服务器上推荐直接关掉 NetworkManager,用传统的 network 服务管理网络,简单稳定。
遇到问题加QQ23979811 协助处理
CentOS7 firewalld开放80、443端口永久生效命令
前言
CentOS 7 开始,系统默认的防火墙管理工具从原来的 iptables 换成了 firewalld。很多刚接触 CentOS 7 的运维同学,部署完 Nginx 或者 Apache 之后发现网站访问不了,最后排查半天发现是防火墙没放行 80 和 443 端口。
这篇文章就详细讲讲 CentOS 7 下用 firewalld 开放 80、443 端口,并且确保重启后依然生效的完整操作步骤。
操作步骤
1. 先确认 firewalld 服务状态
在配置端口之前,先确认防火墙服务是否正在运行:
systemctl status firewalld
如果看到 active (running) 就说明防火墙正在运行。如果是 inactive 状态,说明防火墙没启动,可以先启动它:
systemctl start firewalld
systemctl enable firewalld
2. 查看当前已经开放的端口和服务
firewall-cmd --list-all
执行完之后会看到类似下面的输出:
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0
sources:
services: ssh dhcpv6-client
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
从这里可以看到,默认只开放了 ssh 和 dhcpv6-client 两个服务,80 和 443 端口都没开。
3. 永久开放 80 端口
这里要注意,必须加上 --permanent 参数,否则重启服务器之后配置就丢了。
firewall-cmd --permanent --add-port=80/tcp
执行成功之后会返回 success。
4. 永久开放 443 端口
同样的方式开放 443 端口,这个是 HTTPS 默认端口:
firewall-cmd --permanent --add-port=443/tcp
5. 重载防火墙使配置生效
很多同学加完端口就以为完事了,其实不对。firewalld 有运行时配置和永久配置之分,加了 --permanent 的配置写入了永久配置,但还需要重载一下才能在当前运行时生效:
firewall-cmd --reload
6. 验证端口是否真的开放了
最后再检查一下:
firewall-cmd --list-ports
如果看到 80/tcp 和 443/tcp 都在列表里,就说明配置成功了。
常见坑
坑 1:忘记加 --permanent 参数
这是最常见的错误。如果不加 --permanent,配置只在当前运行时生效,服务器一重启就没了。很多同学配置完当时测试没问题,第二天服务器重启网站又打不开了,就是这个原因。
正确写法:firewall-cmd --permanent --add-port=80/tcp
坑 2:加完端口忘记 reload
加了 --permanent 之后,必须执行 firewall-cmd --reload 才能生效。不然你会发现配置写进去了,但端口还是不通。
坑 3:想一次性开放多个端口怎么办
如果要开放一批连续的端口,比如 1000 到 2000,可以用这个写法:
firewall-cmd --permanent --add-port=1000-2000/tcp
如果要开放多个不连续的端口,就执行多次 add-port 命令就行。
坑 4:怎么移除已经开放的端口
如果不小心开错了端口,要移除的话用 remove-port:
firewall-cmd --permanent --remove-port=8080/tcp
firewall-cmd --reload
总结
CentOS 7 下 firewalld 开放端口的核心就三步:
- 用
--permanent --add-port=端口号/tcp添加永久规则 - 执行
firewall-cmd --reload重载生效 - 用
firewall-cmd --list-ports确认结果
记住这三个关键点,基本不会踩坑。Web 服务常用的 80 和 443 端口开放之后,外部才能正常访问你的网站。
遇到问题加QQ23979811 协助处理
CentOS7 关闭SELinux详细步骤,临时+永久关闭
前言
刚装完 CentOS7,部署网站的时候老是遇到各种权限问题:文件明明权限对了还是访问不了,端口也开了就是连不上。排查半天发现是 SELinux 在捣乱。SELinux 是 CentOS 自带的强制访问控制安全机制,安全性很高,但对新手来说确实不太友好。本文详细讲一下怎么临时和永久关闭 SELinux,以及关闭前需要知道的注意事项。
什么是 SELinux
SELinux(Security-Enhanced Linux)是 Linux 内核的一个安全模块,提供强制访问控制(MAC)机制。它比传统的自主访问控制(DAC)更严格,不仅看文件权限,还看进程和文件的安全上下文(SELinux 标签)。
CentOS7 默认开启 SELinux,这也是为什么很多新手部署完网站各种报错的原因——Nginx、PHP、MySQL 的进程和文件上下文不匹配,SELinux 直接拦截。
查看 SELinux 状态
在关闭之前,先看看 SELinux 当前是什么状态:
getenforce
输出可能是:
Enforcing:强制模式,SELinux 正在拦截违规操作Permissive:宽容模式,只记录警告不拦截Disabled:已关闭
也可以用这个命令看更详细的信息:
sestatus
输出示例:
SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: enforcing
Mode from config file: enforcing
Policy MLS status: enabled
Policy deny_unknown status: allowed
临时关闭 SELinux(重启后失效)
如果你只是临时测试一下,不想改配置文件,可以用这个方法:
setenforce 0
setenforce 0 表示切换到 Permissive 宽容模式,SELinux 不会再拦截操作,但会在日志里记录。这个命令立即生效,不需要重启。
验证一下:
getenforce
应该输出 Permissive。
注意: 这种方式重启服务器后 SELinux 会重新开启,所以只是临时生效。
永久关闭 SELinux(重启后依然关闭)
要永久关闭,需要修改配置文件:
1. 编辑 SELinux 配置文件
vi /etc/selinux/config
2. 修改 SELINUX 的值
找到这一行:
SELINUX=enforcing
改成:
SELINUX=disabled
3. 保存退出,重启服务器
reboot
重启后再验证一下:
getenforce
应该输出 Disabled。
三种模式说明
SELinux 有三种模式,大家可以根据需求选择:
| 模式 | 说明 |
|---|---|
enforcing |
强制模式,SELinux 强制执行策略,违规操作直接拦截 |
permissive |
宽容模式,只记录警告日志,不拦截操作 |
disabled |
完全关闭 SELinux |
建议: 如果只是临时调试,可以用 permissive 模式,既能放行所有操作,又能通过日志看到哪些操作被 SELinux 拦截了。生产环境如果实在搞不懂 SELinux,再考虑完全关闭。
常见坑
坑1:改了配置文件没重启就以为关了
很多朋友改完 /etc/selinux/config 文件,马上用 getenforce 查看,发现还是 Enforcing,就以为没改成功。其实配置文件改了之后必须重启服务器才会生效。临时生效用 setenforce 0,永久生效必须重启。
坑2:改了 SELINUX=disabled 但还有问题
有时候即使把 SELinux 关了,之前设置的安全上下文标签还在,可能会导致一些奇怪的问题。如果遇到这种情况,可以重启服务器彻底解决。
坑3:生产环境直接关闭有安全风险
SELinux 是一道安全防线,生产环境直接完全关闭会降低系统安全性。建议先尝试把模式改成 permissive,看看日志里哪些操作被拦截了,再针对性地调整上下文标签,而不是直接全部关掉。
总结
CentOS7 关闭 SELinux 的两种方式:
临时关闭(立即生效,重启失效):
setenforce 0
永久关闭(重启后生效):
- 编辑
/etc/selinux/config - 把
SELINUX=enforcing改成SELINUX=disabled - 重启服务器
新手刚部署完服务器,先临时关了跑通业务,后面再慢慢研究 SELinux 的配置,别一上来就跟它死磕。
遇到问题加QQ23979811 协助处理
CentOS7 firewalld开放80、443端口永久生效命令
前言
刚装好 CentOS7 服务器,部署完 Nginx 网站后,外网却访问不了?十有八九是防火墙没放行端口。CentOS7 默认用 firewalld 代替了旧版的 iptables,很多刚接触的朋友不太熟悉操作。本文就详细讲解如何在 CentOS7 上永久开放 80、443 等常用端口,以及操作中容易踩的坑。
操作步骤
1. 检查 firewalld 运行状态
首先确认防火墙服务是否正在运行:
systemctl status firewalld
如果显示 active (running) 说明防火墙已启动。如果没启动,先启动它:
systemctl start firewalld
systemctl enable firewalld
2. 查看当前已开放的端口
firewall-cmd --list-ports
这个命令会列出当前防火墙放行的所有端口。
3. 永久开放 80 端口
firewall-cmd --permanent --add-port=80/tcp
参数说明:
--permanent:永久生效,不加这个参数重启防火墙后就失效--add-port=80/tcp:开放 80 端口,协议为 TCP
4. 永久开放 443 端口
firewall-cmd --permanent --add-port=443/tcp
5. 同时开放多个端口
如果需要一次性开放多个端口,可以这样写:
firewall-cmd --permanent --add-port=80/tcp --add-port=443/tcp --add-port=8080/tcp
6. 开放端口范围
如果要开放一整段端口,比如 3000 到 4000:
firewall-cmd --permanent --add-port=3000-4000/tcp
7. 重载防火墙使配置生效
修改完规则后,必须重载才能生效:
firewall-cmd --reload
8. 验证端口是否开放成功
firewall-cmd --list-ports
如果输出里能看到 80/tcp 443/tcp 就说明开放成功了。
9. 移除开放的端口(如果需要)
firewall-cmd --permanent --remove-port=8080/tcp
firewall-cmd --reload
常见坑
坑1:忘了加 --permanent 参数
很多朋友执行了 firewall-cmd --add-port=80/tcp,当时测试是通的,但重启服务器或者重启防火墙后就又不通了。原因就是没加 --permanent,这种方式只是临时生效,重启后规则丢失。
解决: 开放端口时一定要加 --permanent 参数,然后执行 firewall-cmd --reload 重载配置。
坑2:改完规则忘了 reload
执行完 --add-port 后,规则只是写入了配置文件,还没有真正生效。必须执行 firewall-cmd --reload 才能让新规则生效。
坑3:以为开放了端口就一定能访问
防火墙只是第一道关卡。如果网站还是访问不了,还要检查:
- Nginx/Apache 是否启动并监听了对应端口
- 安全组(云服务器)是否也放行了端口
- 服务器内部的应用是否正常运行
坑4:用了 iptables 命令却不生效
CentOS7 默认是 firewalld 管理防火墙,如果你用 iptables 命令添加规则,firewalld 重启后会把规则覆盖掉。要么用 firewalld 命令,要么先关掉 firewalld 再用 iptables。
总结
CentOS7 开放端口的核心命令就是三步:
firewall-cmd --permanent --add-port=端口号/tcp添加规则firewall-cmd --reload重载生效firewall-cmd --list-ports验证结果
记住 --permanent 和 --reload 这两个关键点,90% 的问题都能解决。
遇到问题加QQ23979811 协助处理
CentOS7 firewalld开放80、443端口永久生效命令
CentOS 7 默认使用 firewalld 作为防火墙管理工具。很多新手搭建网站后发现外网访问不了,90% 都是因为 80、443 端口没开放。下面是完整的操作步骤,照抄就能用。
1. 先确认防火墙状态
systemctl status firewalld
如果显示 active (running) 说明防火墙正在运行,需要继续下面的操作。如果是 inactive 那就是防火墙没开,问题不在这里。
2. 开放 80 端口(HTTP)
firewall-cmd --zone=public --add-port=80/tcp --permanent
参数说明:
--zone=public:作用域为公共区域--add-port=80/tcp:开放 80 端口,TCP 协议--permanent:永久生效,不加这个重启服务器就失效了
3. 开放 443 端口(HTTPS)
firewall-cmd --zone=public --add-port=443/tcp --permanent
4. 一次性开放多个端口
如果需要同时开放多个端口,可以一条命令搞定:
firewall-cmd --zone=public --add-port=80/tcp --add-port=443/tcp --permanent
5. 重载防火墙使配置生效
⚠️ 重点:开放端口后必须重载,否则不生效!
firewall-cmd --reload
6. 查看已开放的端口
确认一下端口有没有真正开放成功:
firewall-cmd --list-ports
正常会输出类似:
80/tcp 443/tcp
7. 常用其他端口开放命令
SSH 端口(默认22,建议改成别的):
firewall-cmd --zone=public --add-port=22/tcp --permanent
MySQL 端口(如果需要远程连接数据库):
firewall-cmd --zone=public --add-port=3306/tcp --permanent
Redis 端口:
firewall-cmd --zone=public --add-port=6379/tcp --permanent
8. 移除/关闭已开放的端口
如果某个端口不需要了,想关掉:
firewall-cmd --zone=public --remove-port=8080/tcp --permanent
firewall-cmd --reload
常见坑
-
加了
--permanent还是不生效?
忘记firewall-cmd --reload了。永久配置写入后必须重载才会加载到运行时。 -
端口开放了还是访问不了?
检查云服务商的安全组(阿里云/腾讯云/华为云都有这个东西),防火墙和安全组是两层,都要开。 -
firewalld 命令找不到?
CentOS 7 最小化安装可能没装,执行yum install firewalld -y安装。 -
临时开放端口(重启就失效)
去掉--permanent参数就是临时开放,重启或 reload 后自动关闭。
遇到服务器、Nginx、MySQL 报错,可以加微信远程协助排查问题。