韩老魔的博客0XHANNIBA1 · NOTES

Linux常用命令

第一部分:基础技能 - 构建可信赖的测试环境

根本问题: 如何确保我的测试环境是干净、正确、且可重复的? 核心原则: 任何测试的有效性都建立在一个稳定且配置正确的环境之上。以下命令是构建和维护这种环境的基石。

A. 文件系统:管理测试资产

这是我们的数字化工作台,存放着代码、数据、日志和脚本。

  • 导航与检视 (我们在哪?这里有什么?)
    • pwd (Print Working Directory): 回答“我现在在哪里?”这个问题,获取当前位置的绝对路径。
    • ls -lah (List): 回答“这里有什么?”。 -l (长格式) 看权限和所有者,-a (所有) 看隐藏文件,-h (人类可读) 看文件大小。这是检查环境状态的第一步。
    • cd (Change Directory): 切换工作空间,去往你需要操作的地方。
  • 创建与组织 (搭建工作区)
    • mkdir -p <路径>: 创建目录。-p 选项能一次性创建多层嵌套的目录,非常适合组织测试结果,如 mkdir -p test_results/run_20250927
    • touch <文件名>: 创建一个空文件,常用于脚本中创建锁文件或日志占位符。
  • 操作与管理 (移动和清理资产)
    • cp -r <源> <目标>: 复制文件或目录。-r 用于递归复制整个目录,是准备测试数据的常用操作。
    • mv <源> <目标>: 移动或重命名文件/目录。
    • rm -rf <文件/目录>: 删除文件或目录。-r 递归删除,-f 强制执行。这是一个高风险操作,使用前请三思。
  • 精确定位 (大海捞针)
    • find <路径> -name "<模式>": 在指定路径下根据名称、类型、修改时间等多种条件查找文件。
      • 测试场景: find /var/log -name "*.log" -mtime -1 -> 查找过去24小时内被修改过的所有日志文件,是排查近期问题的利器。

B. 权限管理:控制访问权限

根本问题: 谁能对这个文件做什么?(读、写、执行) 这是导致自动化脚本失败最常见也最容易被忽略的原因之一。

  • chmod (Change Mode): 修改权限。
    • 场景: 自动化脚本无法执行? -> chmod +x my_script.sh (为脚本添加执行权限)。
    • 两种模式:
      • 符号模式 (易读): u+x (为所有者增加执行权限), g-w (为用户组移除写权限)。
      • 八进制模式 (高效): 755, 644755 通常用于目录和脚本,644 用于普通文件。
  • chown (Change Owner): 更改文件/目录的所有者和所属组。
    • 场景: 被测应用无法写入日志? -> 检查日志目录的所有者是否为运行该应用的用户,如果不是,使用 chown -R app_user:app_group /var/log/app 修正。

第二部分:核心技能 - 从数据中提取洞见

根本问题: 系统出错了,日志里记录了什么?海量日志中,哪一句是关键信息? 核心原则: 日志是系统行为的唯一事实来源。我们的任务不是“读”日志,而是“审问”日志,从中压榨出有价值的信息。

A. 查看日志:初步侦查

  • cat: 一次性显示整个文件(仅适用于小文件)。
  • less: 查看大文件的正确方式。 交互式查看,支持搜索 (/) 和翻页,不消耗大量内存。
  • head/tail: 查看文件的开头/结尾。
  • tail -f <文件名>: 实时问题分析的王者。 持续监控文件末尾的新增内容,可以将测试操作与系统日志输出实时关联。

B. 过滤与分析:沙里淘金

  • grep (Global Regular Expression Print): 文本搜索的瑞士军刀。
    • 核心功能: 筛选包含特定模式的行。grep "ERROR" app.log
    • 关键选项:
      • -i: 忽略大小写。
      • -C <数字> (Context): 显示匹配行的上下文,理解错误背景至关重要。
      • -v (Invert): 反向匹配,排除无关信息。
      • -r: 递归搜索目录。
  • sed (Stream Editor): 行编辑器。 擅长对文本行进行批量替换、删除、插入
    • 场景: sed 's/DEBUG/INFO/g' log.txt -> 将日志中的 “DEBUG” 全部替换为 “INFO”,便于分析。
  • awk (Aho, Weinberger, and Kernaghan): 列处理器。 擅长将一行文本分割成多个字段(列)并进行处理。
    • 核心能力: 将非结构化或半结构化的日志数据化
    • 场景: 从访问日志中计算平均响应时间。 grep "200 OK" access.log | awk '{sum+=$10} END {print sum/NR}' -> 筛选成功请求,并对第10列(响应大小)求和,最后打印平均值。

第三部分:控制被测应用 - 管理进程生命周期

根本问题: 我的应用启动了吗?它运行得怎么样?如何安全地启停它? 核心原则: 建立一个“验证 -> 观察 -> 控制”的反馈回路来主动管理被测应用。

  • ps aux | grep <应用名>: 验证 (Verify) 进程是否存在、状态如何。这是测试开始前的第一步检查。
  • top: 观察 (Observe) 系统和进程的实时资源消耗(CPU、内存)。这是诊断性能问题的首选工具。
  • kill: 控制 (Control) 进程的生命。
    • kill <PID>: 发送 SIGTERM (15) 信号,请求进程“优雅地”退出。
    • kill -9 <PID>: 发送 SIGKILL (9) 信号,强制终止进程。这是最后的手段。

第四部分:高级诊断 - 深入性能与网络

根本问题: 系统为什么慢?是 CPU、内存、磁盘还是网络的问题?API 调用为何失败?

A. 系统性能剖析

  • 宏观监控 (发现症状):
    • free -h: 查看内存和交换空间使用情况。
    • vmstat: 全面了解 CPU、内存、I/O 的动态。
    • iostat: 深入分析磁盘 I/O 性能。
  • 微观剖析 (定位病因):
    • perf: 专家的终极武器,能直接定位到代码函数级别的性能瓶颈。
      • perf stat <命令>: 快速获取一个操作的宏观性能指标。
      • perf top: 实时查看消耗 CPU 最多的函数。
      • perf record & perf report: 记录详细数据并离线分析,找出导致性能问题的具体调用链。

B. 网络诊断与测试

  • 基础连通性:
    • ping: 检查两台主机之间网络是否通畅。
    • traceroute: 显示数据包经过的路由路径,定位网络延迟点。
    • nslookup: 验证域名解析是否正确。
  • 端口与连接:
    • netstat -lntp: 查看哪些进程在监听哪些 TCP 端口。验证服务是否成功启动并监听在正确端口上。
  • API 交互:
    • curl: API 测试的命令行王者。 模拟各类 HTTP 请求。
      • -X <方法>: 指定请求方法 (GET, POST, etc.)。
      • -H "<头信息>": 添加请求头 (e.g., “Content-Type: application/json”)。
      • -d '<数据>': 发送请求体。
      • -v: 显示详细的通信过程,用于调试。
      • -o <文件>: 将响应输出到文件。
  • 安全文件传输:
    • scp -r <源> <目标>: 在本地和远程服务器之间安全地复制文件/目录。用于部署构建包、上传测试数据、下载日志报告。

Tweaks