测试工作常用linux命令
cd命令等
返回上一级
cd ..
回家目录
cd ~
返回上一次目录
cd -
mkdir -p 创建多层目录:
mkdir -p project/logs/2026
直接生成:
project
└── logs
└── 2026
cp命令
复制文件
cp a.txt b.txt
备份配置:
cp application.yml application.yml.bak
复制目录:
cp -r logs logs_backup # 把整个 logs 目录及里面所有文件 复制一份 变成logs_backup
mv命令
移动文件:
mv a.txt test/
日志归档:
mv app.log backup/
重命名:
mv app.log app.log.bak
rm -rf命令
rm -rf logs
意思:
递归删除
+
强制删除
+
不询问确认
直接把整个目录干掉。
r: 递归删除
f: 强制删除,不询问
测试工程师最容易踩的坑
坑1: 少打一个字母
本来想:
rm -rf test/
结果:
rm -rf *
当前目录全没了。
坑2: 路径写错
本来:
rm -rf logs/
结果:
rm -rf /logs
删了系统目录。
坑3: 最恐怖的
rm -rf /
意思:
删除整个Linux系统
less app.log 常用操作如下:
| 目的 | 按键 / 命令 |
|---|---|
| 向下滚动一行 | ↓ 或 j 或 Enter |
| 向上滚动一行 | ↑ 或 k |
| 向下翻一页 | 空格 或 Page Down 或 f |
| 向上翻一页 | b 或 Page Up |
| 跳转到文件开头 | g |
| 跳转到文件末尾 | G |
| 搜索字符串(正向) | /关键词,然后按 n 找下一个,N 找上一个 |
| 搜索字符串(反向) | ?关键词,然后按 n 找上一个 |
| 实时查看文件新增内容(类似 tail -f) | F(按 Ctrl+C 停止) |
| 显示行号 | -N(启动后输入 -N 再回车,临时显示;也可用 less -N app.log 预启用) |
| 退出 less | q |
head 用于显示文件的开头部分,默认输出前 10 行。
基本语法:
head [选项] 文件名
常用选项:
| 选项 | 说明 | 示例 |
|---|---|---|
-n N 或 -N |
显示前 N 行 | head -n 20 app.log 或 head -20 app.log |
-c N |
显示前 N 个字节 | head -c 100 app.log |
-q |
当查看多个文件时,不显示文件名头部 | head -q file1 file2 |
-v |
总是显示文件名头部 | head -v file1 |
常见用法:
-
查看日志最新几行(实际是开头的几行)
head -5 app.log -
同时查看多个文件的前几行(默认会显示文件名)
head -n 3 file1.log file2.log -
查看文件前 200 个字节
head -c 200 app.log
配合管道使用:
# 查看 ls 输出结果的前 5 行
ls -l | head -5
tail 用于显示文件的末尾部分,默认输出最后 10 行。适合查看最新日志或实时跟踪文件变化。
基本语法:
tail [选项] 文件名
常用选项:
| 选项 | 说明 | 示例 |
|---|---|---|
-n N 或 -N |
显示最后 N 行 | tail -n 20 app.log 或 tail -20 app.log |
-f |
实时跟踪文件新增内容(按 Ctrl+C 退出) |
tail -f app.log |
-F |
类似 -f,但会重试文件被重命名或切割后重新打开(常用于日志轮转) |
tail -F app.log |
-c N |
显示最后 N 个字节 | tail -c 200 app.log |
-n +N |
从第 N 行开始显示到末尾 | tail -n +15 app.log(显示第15行及之后) |
-q |
查看多个文件时不显示文件名头部 | tail -q file1 file2 |
常见用法:
-
查看最后 20 行日志
tail -20 app.log -
实时监控日志输出(最常用)
tail -f app.log -
实时监控并支持日志轮转(如 logrotate)
tail -F app.log -
查看最后 500 字节
tail -c 500 app.log -
从第 50 行开始显示到末尾
tail -n +50 app.log -
同时查看多个文件末尾
tail -n 5 app.log error.log
wc 命令用于统计文件中的行数、单词数、字节数/字符数。用于快速了解文件大小或内容规模。
基本语法:
wc [选项] 文件名
常用选项:
| 选项 | 说明 | 示例输出 |
|---|---|---|
-l |
统计行数 | wc -l app.log → 100 app.log |
-w |
统计单词数(由空白字符分隔) | wc -w app.log |
-c |
统计字节数 | wc -c app.log |
-m |
统计字符数(多字节字符如中文按一个字符算) | wc -m app.log |
-L |
打印文件中最长行的长度(字符数) | wc -L app.log |
无选项时:默认输出三个数字:行数、单词数、字节数,以及文件名。
示例:wc app.log → 120 540 10240 app.log(120行,540个单词,10240字节)
常见用法:
-
统计代码行数:
wc -l *.py -
统计当前目录下所有文件的总行数(结合管道):
find . -type f -exec cat {} \; | wc -l -
查看实时输出行数:
tail -f app.log | wc -l # 注意:这会一直等待,不会自动结束 -
统计字符串中的单词数:
echo "hello world" | wc -w # 输出 2
配合管道实用示例:
# 查看当前目录下有多少个文件
ls -l | wc -l
# 查看历史命令中有多少个包含 "git"
history | grep git | wc -l
# 查看日志文件中 "ERROR" 出现的行数
grep ERROR app.log | wc -l
注意:
- 单词的定义是由空白字符(空格、制表符、换行)分隔的连续字符序列。
- 对于中文字符,
-w可能不会按预期统计单词,需要用-m统计字符数。
grep命令
grep "关键字" 文件名
忽略大小写:
grep -i "error" app.log
显示行号:
grep -n "ERROR" app.log
统计 ERROR 数量:
grep -c "ERROR" app.log
多条件搜索, 查 ERROR 或 WARN:
grep -E "ERROR|WARN" app.log
查看上下文, 有时候只看 ERROR 不够, 想看错误前后几行。
查看后面3行:
grep -A 3 "ERROR" app.log
查看前面3行:
grep -B 3 "ERROR" app.log
前后各3行:
grep -C 3 "ERROR" app.log
进程排查
查看所有进程
ps -ef
查看 Java 服务
ps -ef | grep java
ps -ef 的输出包含多列:UID PID PPID C STIME TTY TIME CMD。
grep "java" 会逐行过滤,只要该行任意位置(如 CMD 列、参数、路径等)出现 java 字样,就会输出这一整行。
ps -ef 命令用于显示当前系统中所有进程的完整信息。其输出通常包含以下 8 列(不同 Unix/Linux 版本可能略有差异,但含义基本一致):
| 列名 | 全称 / 含义 | 详细解释 |
|---|---|---|
| UID | User ID | 启动该进程的用户的用户名(如 root、ubuntu)。系统实际存储的是数字 UID,ps 会自动转换为用户名显示。 |
| PID | Process ID | 进程的唯一标识号(正整数)。可用于发送信号(如 kill -9 PID)或查看进程详情。 |
| PPID | Parent Process ID | 该进程的父进程 PID。所有进程(除 init/systemd 外)都由另一个进程创建,PPID 即创建者的 PID。 |
| C | CPU utilization (old style) | 表示 CPU 使用率的旧式估算值。它是进程占用 CPU 时间的百分比(实际为进程执行时间与系统时间之比的整数部分,通常显示为整数,取值 0~99)。在较新系统中可能被替换为 %CPU 列,但 -ef 仍保留此字段。注意:该值并非实时精确百分比,而是基于衰减计算的历史使用率。 |
| STIME | Start Time | 进程的启动时间。通常显示为 HH:MM(当日启动)或 MMM DD(非当日启动,如 Feb 28)。具体格式取决于系统设置。 |
| TTY | Terminal Type | 进程所关联的控制终端名称。如果是后台守护进程或无终端进程,此处显示 ?;如果是当前终端登录的进程,显示如 pts/0、tty1 等。 |
| TIME | Cumulative CPU Time | 进程自启动以来累计占用 CPU 的时间,格式为 [DD-]HH:MM:SS。注意这个时间是用户态+内核态 CPU 时间总和,不包含进程等待 I/O 或休眠的时间。一个进程即使运行了很长时间,如果一直处于空闲等待状态,TIME 也不会增加。 |
| CMD | Command Name / Arguments | 启动该进程的完整命令行(包括命令名和所有参数)。对于内核线程或某些守护进程,可能会显示在 [] 中(例如 [kworker/0:0])。 |
使用示例与常见陷阱
$ ps -ef | head -4
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 Feb28 ? 00:00:42 /sbin/init splash
root 2 0 0 Feb28 ? 00:00:00 [kthreadd]
ubuntu 12345 1234 0 10:15 pts/0 00:00:01 java -jar app.jar
- C 列:对调试性能问题价值有限,更推荐使用
ps aux中的%CPU列(更直观)。 - TTY 为
?:通常表示进程没有控制终端(如守护进程)。 - CMD 列:可能会被截断(某些旧系统限制宽度),可使用
ps -ef --cols=200或ps auxfww查看完整命令。 - 与
ps aux区别:ps aux显示更丰富的 CPU/内存百分比、进程状态等,而ps -ef风格更传统,且包含 PPID 和 STIME。
top -o %CPU: 按照 CPU 使用率从高到低对进程进行排序

图片相关解释:
- 系统负载(第 1 行 load average)
load average: 0.12, 0.16, 0.17
- 含义:1、5、15 分钟内的平均活跃进程数(包括正在运行 + 不可中断睡眠的)。
- 关注点:负载值是否 接近或超过 CPU 核心数(你的输出中 CPU 核心数可通过
nproc查看,若无则猜测至少 2 核)。- 例:2 核 CPU,负载持续 > 2.0 → 系统可能过载。
- 测试场景:压测时负载飙升,说明系统处理不过来。
2. CPU 状态(第 3 行)
%Cpu(s): 0.2 us, 0.4 sy, 0.0 ni, 99.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
| 字段 | 关注场景 | 异常信号 |
|---|---|---|
| us(用户态) | 应用进程占用高 | 持续 > 70% 可能代码有密集计算或死循环 |
| sy(内核态) | 系统调用、驱动、上下文切换 | 持续 > 30% 可能内核瓶颈或大量中断 |
| id(空闲) | 越低说明越忙 | 接近 0% 且负载高 → CPU 瓶颈 |
| wa(等待 I/O) | 磁盘读写慢 | 持续 > 10% 说明 I/O 成为瓶颈(可结合 iostat 确认) |
| st(被偷取) | 虚拟机环境 | > 0% 说明宿主机超售,可能影响性能 |
3. 内存与交换(第 4、5 行)
KiB Mem : total, free, used, buff/cache
KiB Swap: total, free, used
- used 接近 total → 物理内存紧张
- swap used 持续增长 → 内存不足,开始用磁盘做交换,性能会严重下降
- buff/cache 很大是正常的(缓存文件),关键是
avail Mem(可用内存)是否充裕
4. 进程列表中的关键进程
- CPU 占用 %CPU:压测时找到消耗 CPU 最高的进程(通常是被测服务)
- 内存占用 %MEM:排查内存泄漏(进程 %MEM 持续增长不释放)
- 进程状态 S:
D(不可中断睡眠) → 多为 I/O 阻塞,数量多说明磁盘或网络 I/O 有问题Z(僵尸) → 代码有 bug(子进程未回收),少量无大碍,多了会耗尽 PID
- TIME+:进程累计占用 CPU 时间,如果某个进程刚启动不久 TIME+ 已经很大,说明它一直在忙
5. 交互操作快速诊断
| 按键 | 用途 |
|---|---|
P |
按 CPU 降序(找最耗 CPU 的进程) |
M |
按内存降序(找最耗内存的进程) |
1 |
查看每个 CPU 核心的使用率(判断是否单核瓶颈) |
c |
显示完整命令行(看清是哪个程序或脚本) |
e |
切换内存单位(KB/MB/GB) |
排查进程和端口问题时常用命令
场景1:服务启动后无法访问,检查是否监听端口
# 查看所有监听端口
netstat -tunlp | grep 8080
# 或
ss -tunlp | grep 8080
# 或
lsof -i :8080
场景2:端口被占用,找出占用进程并终止
# 找出占用 8080 端口的 PID
lsof -i :8080
# 或
ss -tunlp | grep 8080
# 杀掉进程
kill -9 <PID>
场景3:某进程 CPU 或内存持续过高
# 实时查看 top,按 P 键按 CPU 排序,按 M 键按内存排序
top
# 或使用 htop
htop
# 获取进程详细信息
ps aux | grep <进程名>
find 命令用法
find 查找路径 条件
例如:
find /home -name "*.log" # -name按文件名查找
含义:在/home目录下查找所有.log文件
忽略大小写查找:
find . -iname "*.log"
从整个Linux系统开始查找:
find / -name "application.yml"
按文件大小查找:
find /var/log -size +100M # 查找大于100M日志
按时间查找:
find . -mtime -3 # 最近3天修改
find . -mtime -1 # 最近1天
systemctl 命令
查看服务状态
查看 nginx:
systemctl status nginx
查看 mysql:
systemctl status mysql
查看所有 service
systemctl list-units --type=service
启动服务
systemctl start nginx
停止服务
systemctl stop nginx
重启服务
systemctl restart nginx
Spring Boot 服务更新后:
systemctl restart app
查看是否开机自启
systemctl is-enabled nginx
设置开机启动
systemctl enable nginx
取消开机启动
systemctl disable nginx
查看失败服务
systemctl --failed
ls 用法
查看指定目录
ls /var/log
看文件权限:
ls -l
输出:
-rw-r--r-- 1 root root 2048 Jun 3 10:00 app.log
drwxr-xr-x 2 root root 4096 Jun 3 09:00 logs
对应:
[权限] [硬链接数] [所属用户] [所属组] [大小] [时间] [文件名]
- rw- r-- r--
│ │ │ │
│ │ │ └── 其他用户权限
│ │ └──────── 组用户权限
│ └────────────── 拥有者权限
└────────────────── 文件类型
文件类型(第1位):
-普通文件d目录l软链接
ls -lh(人类可读大小)
ls -lh
输出:
2.0K app.log
1.2M server.log
3.4G dump.bin
ls -a(显示隐藏文件):
ls -a
输出:
. .. .bashrc .profile app.log
👉 . 开头的是隐藏文件
ls -la(最常用组合)
ls -la
👉 = 详细信息 + 隐藏文件
测试工作中经常直接用这个
ls -lt(按时间排序)
ls -lt
👉 最近修改的文件在最上面
常用于:
- 查最新日志
- 查最新部署文件
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)