Troubleshooting

Troubleshooting#

工具类别

工具名称

主要功能描述

网络分析

netstat

显示网络连接、路由表、接口统计等信息

tcpdump

网络抓包工具,用于分析网络流量

iperf

网络带宽测试工具

文件分析

lsof

列出打开的文件和网络连接

file

检测文件类型

strings

提取文件中的可打印字符串

系统调用跟踪

strace

跟踪程序执行时的系统调用和信号

ltrace

跟踪程序执行时的库函数调用

性能分析

perf

Linux 性能分析工具,支持 CPU 性能分析、函数调用图等

gprof

分析程序的性能瓶颈,生成函数调用图和耗时统计

vmstat

报告虚拟内存、CPU、I/O 等系统状态

iostat

监控系统I/O设备的使用情况

htop

交互式进程查看器,实时监控系统资源使用情况

内存调试

valgrind

内存调试工具,检测内存泄漏、非法内存访问等问题

gcov

代码覆盖率测试工具

二进制分析

objdump

显示目标文件的详细信息,包括反汇编、段信息、符号表等

readelf

显示 ELF 文件的详细信息,如段头、符号表、动态段等

nm

显示目标文件的符号表

addr2line

将地址转换为文件名和行号

ldd

列出可执行文件或共享库依赖的动态库

内核调试

dmesg

查看内核日志,用于分析内核级别的错误

sysctl

查看和修改内核参数

procd

OpenWrt 进程管理工具

动态分析

ld.so

动态链接器,支持环境变量调试功能

静态分析

cppcheck

C/C++ 代码静态分析工具

clang-tidy

Clang 的静态分析工具

splint

C 代码的静态分析工具

进程管理

ps

查看当前运行的进程信息

top

实时监控系统进程和资源使用情况

pidstat

监控进程的 CPU、内存、I/O 等资源使用情况

netstat#

# 显示 gpsd 进程的所有网络资源(TCP/UDP/UNIX)
netstat -ap | grep gpsd

tcpdump#

# 捕获 53494 端口的流量
tcpdump -i any port 53494

# 显示时间戳和数据内容
tcpdump -i any port 53494 -tttt -A

# 保存原始数据包供后续分析
tcpdump -i any port 53494 -w save.pcap

lsof#

# 查看 gpsd 所有打开的文件
lsof | grep gpsd

strace#

# 附加到正在运行的 gpsd 进程上,跟踪所有网络相关的系统调用
strace -p 7497 -e trace=network -s 100

gdb#

GDB 常用命令速查表请参见 GDB

grep#

命令

等价形式

示例说明

grep

-

grep "error" file.txt(搜索文件中的 "error"

grep -i "hello" file.txt(忽略大小写搜索 "hello"

grep -r "pattern" /path/to/dir/(递归搜索目录)

egrep

grep -E

egrep "error|warning" file.txt(匹配 "error""warning"

egrep "[0-9]{3}" file.txt(匹配 3 位数字)

fgrep

grep -F

fgrep "$100" file.txt(直接搜索 "$100",避免 $ 被当作正则)

fgrep "*.log" file.txt(搜索字面值 "*.log",不解析为通配符)

sed#

# 将 filename.txt 中的 abc def 替换为 def abc
sed -i 's@abc def@def abc@' filename.txt

注:@ 可以是其他符号,它的主要作用在于区分需要替换的字符串和原始字符串。

tee#

tee 命令主要用于将一段文字写入文件。

cat <<EOF | tee ~/.config/pip/pip.conf
[global]
index-url=http://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.com
EOF

如果向文件中添加的内容包含特殊字符,比如 $(),我们发现 $() 消失不见了,解决方式如下:

cat <<\EOF | tee test.txt
CURR_DIR := $(shell pwd)
EOF

tar#

tar 命令主要用于打包文件和目录,并不直接进行压缩。

如果你希望在打包的同时也减小文件的大小,你需要在使用 tar 命令时结合一个压缩工具,如 gzipbzip2xz 等。例如:

  • 使用 gzip 压缩:tar czf archive_name.tar.gz file_or_directory_to_compress

  • 使用 bzip2 压缩:tar cjf archive_name.tar.bz2 file_or_directory_to_compress

  • 使用 xz 压缩:tar cJf archive_name.tar.xz file_or_directory_to_compress

解压时,仍然需要跟上 zj 或者 J 选项,才能正常解压。

快捷键#

快捷键/命令

功能描述

Ctrl + s

冻结窗口,用 Ctrl + qCtrl + C 退出

Ctrl + l

清屏

Ctrl + c

终止程序运行

echo

输出到屏幕

echo $PATH

显示环境变量

echo $?

显示上次命令是否运行成功(0 表示成功,非 0 表示失败)

df

查看磁盘分区的使用情况

df [-m|-g|-k]

以指定单位(M、G、K)显示磁盘分区使用情况

shutdown

关机

reboot

重启

halt

关机后关闭电源