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 常用操作如下:

目的 按键 / 命令
向下滚动一行 jEnter
向上滚动一行 k
向下翻一页 空格Page Downf
向上翻一页 bPage 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.loghead -20 app.log
-c N 显示前 N 个字节 head -c 100 app.log
-q 当查看多个文件时,不显示文件名头部 head -q file1 file2
-v 总是显示文件名头部 head -v file1

常见用法

  1. 查看日志最新几行(实际是开头的几行)

    head -5 app.log
    
  2. 同时查看多个文件的前几行(默认会显示文件名)

    head -n 3 file1.log file2.log
    
  3. 查看文件前 200 个字节

    head -c 200 app.log
    

配合管道使用

# 查看 ls 输出结果的前 5 行
ls -l | head -5

tail 用于显示文件的末尾部分,默认输出最后 10 行。适合查看最新日志实时跟踪文件变化。

基本语法

tail [选项] 文件名

常用选项

选项 说明 示例
-n N-N 显示最后 N tail -n 20 app.logtail -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

常见用法

  1. 查看最后 20 行日志

    tail -20 app.log
    
  2. 实时监控日志输出(最常用)

    tail -f app.log
    
  3. 实时监控并支持日志轮转(如 logrotate)

    tail -F app.log
    
  4. 查看最后 500 字节

    tail -c 500 app.log
    
  5. 从第 50 行开始显示到末尾

    tail -n +50 app.log
    
  6. 同时查看多个文件末尾

    tail -n 5 app.log error.log
    

wc 命令用于统计文件中的行数、单词数、字节数/字符数。用于快速了解文件大小或内容规模。

基本语法

wc [选项] 文件名

常用选项

选项 说明 示例输出
-l 统计行数 wc -l app.log100 app.log
-w 统计单词数(由空白字符分隔) wc -w app.log
-c 统计字节数 wc -c app.log
-m 统计字符数(多字节字符如中文按一个字符算) wc -m app.log
-L 打印文件中最长行的长度(字符数) wc -L app.log

无选项时:默认输出三个数字:行数、单词数、字节数,以及文件名。
示例:wc app.log120 540 10240 app.log(120行,540个单词,10240字节)

常见用法

  1. 统计代码行数

    wc -l *.py
    
  2. 统计当前目录下所有文件的总行数(结合管道):

    find . -type f -exec cat {} \; | wc -l
    
  3. 查看实时输出行数

    tail -f app.log | wc -l   # 注意:这会一直等待,不会自动结束
    
  4. 统计字符串中的单词数

    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 启动该进程的用户的用户名(如 rootubuntu)。系统实际存储的是数字 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/0tty1 等。
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=200ps auxfww 查看完整命令。
  • ps aux 区别ps aux 显示更丰富的 CPU/内存百分比、进程状态等,而 ps -ef 风格更传统,且包含 PPID 和 STIME。

top -o %CPU: 按照 CPU 使用率从高到低对进程进行排序

在这里插入图片描述

图片相关解释:

  1. 系统负载(第 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

👉 最近修改的文件在最上面

常用于:

  • 查最新日志
  • 查最新部署文件
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐