1 调用跟踪
跟踪系统调用 strace ls –l
跟踪库调用 ltrace
2 lsof(list open file)
查看程序命令打开了哪些文件 lsof –p PID; lsof –c CMD
查看某个用户打开的文件 lsof –u root
查看某个文件被哪个程序访问 lsof filename
3 proc文件系统
虚拟文件系统,可以使用cat,more,less查看
例如:cat /proc/cpuinfo; cat /proc/meminfo
4 网络调试
ping
tcpdump tcpdump –i eth0 –s0 –SvX host 192.168.1.12 and port 1234 –w test.pcap
tcpdump -i eth0 -s0 -nn udp port 6561 #指定协议类型以及端口
tcpdump -i em1 -s0 -nn udp and src host 60.173.13.115 and src port 6561 #指定协议类型以及ip和端口
lsof -i:port #查看指定端口对应的进程
ethtool
traceroute
netstat –anp | grep port
5 二进制文件调试
file filename 文件类型
ldd 显示依赖动态库,对应的库路径配置文件 /etc/ld.so.conf,重新加载命令 ldconfig
nm 列出目标文件中符号信息
objdump 列出目标文件信息,反汇编 objdump –d hello | more
readelf 显示ELF文件信息,查看某个库是否定义了某个函数 readelf –s hello.so –W 60 | grep symbol_name
addr2line 在包含调试信息下,将地址转换成源程序名字
6 系统性能查看
top
vmstat
7 .o文件查看
find /home/libs –iname “*.*o” –exec sh –c “ ls {}; nm –A {} | grep –iH “match_conten””\;
8 特殊删除
bash下,可以使用扩展的globbing,启动方法:shopt –s extglob,删除除fie1和file2之外的所有文件 rm !(file1|file2)
9 保存文件中指定位置开始指定字节数
dd if=input_file of=output_file bs=1 skip=200 count=100 #保存input_file中从200字节开始后的100字节数据到output_file文件中
10 查看指定进程的线程数目
pstree -p `ps -e | grep procName | awk '{print $1}'` | wc -l
11 查看网卡流量信息
sar -n DEV 1 100
查看指定端口流量信息 iftop -nP
nload
12 valgrind
valgrind --log-file=./valgrind_report.log --leak-check=full --show-reachable=no --track-origins=yes --trace-children=yes ./run_exe
13 dmesg
dmesg -T
14 cat /proc/pid/smaps
15 多线程VIRT过高
16 添加用户
useradd -u 33 -g root -c www-data -d /var/www -s /usr/sbin/nologin www-data