Linux 基础与环境初始化:常用命令、用户权限、网络与防火墙
说实话,很多测试同学一听到 Linux 就头疼。觉得那是运维的事。
但你想过没有——你的测试环境跑在什么上面?十有八九是 Linux。你不会 Linux,环境出问题就只能干等着。我见过太多测试因为不会看日志、不会重启服务,卡在一个小问题上半天。
这一章,我把最常用的东西拎出来。不讲废话,全是干活用的。
3.1 SSH 与 SCP:远程连接与文件传输
SSH 是你操作远程服务器的“门”。没有它,你连机器都摸不到。
3.1.1 SSH 基本用法
ssh 用户名@服务器IP
# 例如
ssh root@192.168.1.100
第一次连会提示确认指纹,输入 yes 就行。然后输密码。
我的习惯:从来不用密码登录。太慢了,而且不安全。我会配 SSH 密钥对,一次配好,以后直接
ssh user@ip 就进去了。
3.1.2 配置密钥登录
# 本地生成密钥对
ssh-keygen -t rsa -b 4096
# 把公钥传到服务器
ssh-copy-id user@服务器IP
嗯,这里要注意:ssh-copy-id 第一次还是要输密码。但之后就不用再输了。
3.1.3 SCP 传文件
测试环境部署,经常要传包、传脚本。SCP 是最直接的方式。
# 本地文件传到服务器
scp ./test_app.tar.gz root@192.168.1.100:/opt/
# 从服务器下载文件
scp root@192.168.1.100:/var/log/app.log ./
我曾经踩过的坑:传大文件时网络断了,SCP 不会自动续传。后来我改用
rsync,支持断点续传,而且只传变化的部分。部署大包时强烈推荐。
3.2 systemctl:服务管理三板斧
测试环境里,你经常要启停服务。比如重启 Nginx、查看 MySQL 状态。systemctl 就是干这个的。
| 操作 | 命令 | 说明 |
|---|---|---|
| 启动服务 | systemctl start nginx |
立即启动 |
| 停止服务 | systemctl stop nginx |
立即停止 |
| 重启服务 | systemctl restart nginx |
先停再启 |
| 查看状态 | systemctl status nginx |
看运行状态和最近日志 |
| 设置开机自启 | systemctl enable nginx |
服务器重启后自动启动 |
| 取消开机自启 | systemctl disable nginx |
取消自动启动 |
核心思路:测试环境里,我习惯把服务写成 systemd 单元文件。这样统一用 systemctl 管理,比手动写启动脚本靠谱得多。
3.3 用户与权限管理
测试环境经常多人共用。你不能让所有人都用 root。太危险了。
3.3.1 用户管理常用命令
# 创建用户
useradd -m tester
# 设置密码
passwd tester
# 切换到该用户
su - tester
# 删除用户
userdel -r tester
3.3.2 文件权限三剑客
Linux 权限分三组:所有者、所属组、其他人。每个组有 rwx 三种权限。
# 查看权限
ls -l
# 修改权限(数字法)
chmod 755 script.sh
# 修改所有者
chown tester:tester script.sh
我的建议:测试环境里,给每个项目建一个专用用户。比如
project-a、project-b。这样日志、文件不会互相干扰。出了问题也容易定位是谁干的。
3.4 网络配置
测试环境网络搞不定,服务之间连不上,你根本没法测。
3.4.1 查看网络状态
# 查看 IP 地址
ip addr
# 查看路由
ip route
# 测试连通性
ping -c 4 8.8.8.8
# 查看端口监听
ss -tlnp
3.4.2 配置静态 IP(以 CentOS/RHEL 为例)
# 编辑网卡配置文件
vi /etc/sysconfig/network-scripts/ifcfg-eth0
# 关键参数
BOOTPROTO=static
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=8.8.8.8
# 重启网络
systemctl restart network
我曾经犯过的错:配完静态 IP 忘了配 DNS,结果域名解析不了。服务能 ping 通 IP,但 curl 请求一直超时。排查了半天才发现是 DNS 没配。所以配完网络一定要测两样:
ping IP 和 ping 域名。
3.5 防火墙设置
防火墙是测试环境里最容易忽略、也最容易坑人的东西。服务明明启动了,就是连不上——十有八九是防火墙没放行。
3.5.1 firewalld 常用操作
# 查看防火墙状态
systemctl status firewalld
# 查看当前规则
firewall-cmd --list-all
# 开放端口(立即生效)
firewall-cmd --add-port=8080/tcp
# 永久开放端口
firewall-cmd --add-port=8080/tcp --permanent
# 重新加载规则
firewall-cmd --reload
3.5.2 常用场景
| 场景 | 命令 |
|---|---|
| 开放 HTTP 端口 | firewall-cmd --add-service=http --permanent |
| 开放 HTTPS 端口 | firewall-cmd --add-service=https --permanent |
| 开放自定义端口 | firewall-cmd --add-port=3000/tcp --permanent |
| 允许特定 IP 访问 | firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port port="3306" protocol="tcp" accept' --permanent |
我的原则:测试环境防火墙不要全关。只开放需要的端口。比如数据库只允许应用服务器访问,不允许外网直连。这样即使有人扫端口,也扫不到你的数据库。
3.6 本章知识体系
下面这张图,把这一章的核心内容串起来了。你可以把它当作操作手册的目录。
3.7 实战:初始化一台测试服务器
把上面的知识点串起来,走一遍完整的流程。
- SSH 登录:用密钥登录服务器
- 创建用户:
useradd -m tester,设置密码 - 配置权限:把部署目录给 tester 用户
- 开放端口:放行应用需要的端口(比如 8080)
- 启动服务:用 systemctl 启动 Nginx 或 Tomcat
- 验证网络:从本地 curl 测试一下
我的经验:每次初始化完,我都会写一个简单的验证脚本。跑一遍就知道环境是不是正常的。省得后面排查半天,结果发现是初始化漏了一步。
Linux 这东西,说白了就是多用。你亲手配几次环境,这些命令就刻在脑子里了。别怕敲错,测试环境嘛,大不了重装。