kdump+crash使用:
kdump是linux下分析内核崩溃原因的工具。系统崩溃时,kdump用于转储运行内存,捕获当前运行信息,将此时内存中所有运行状态和数据信息收集到一个dump core文件中(一般是在var/crash中的vmcore),以便后续分析。(ps:虚拟机中设置的crash memory为256M,过大或过小都不行)
crash是用于分析kdump生成的core文件的工具。crash常用的指令:
(1)log:显示内核消息缓存区
(2)bt:显示内核崩溃前的堆栈信息(可以指定进程号,如:bt <pid>)
(3)ps:显示系统中进程状态
(4)dis:对给定地址进行反汇编
其中,我们在项目中常用到的指令是log、bt和dis,具体而言:
(1)在代码中写入printk打印的某些信息,在内核崩溃后用log指令查看。
(2)bt显示内核崩溃前的堆栈信息,找到其中的崩溃点RIP,再用dis反汇编RIP提供的地址,从而找到程序中出错的位置(具体到函数指令)
vim使用:
vim是linux下编写程序的环境工具,通过vim /usr/code.cpp指令打开,常用指令如下:
(1)正常模式下光标上下左右: h:左 j:下 k:上 l:右
(2)正常模式下保存和退出: 不保存退出::q 保存退出::wq (ps:q或wq后加!表示强制退出)
(3)正常模式下删除: 单个字符:x 整行:dd 光标至行末:d$
(4)正常模式下撤销: 撤销最后指令:u
(5)正常模式下置入: 将最后删除的内容复制到光标处:p
(6)正常模式下替换: 将光标所有字符替换为指定字符:r字符
(7)正常模式下跳转: 跳转至最后一行:Shift-G 跳转至指定行21:输入21后输入Shift-G
(8)正常模式下搜索: 搜索"int":/int 查找下一个:n
(9)正常模式下复制: 复制n个整行:nyy 复制至行尾:y$ 复制指定n0-n1行置n2行: :n0,n1 co n2
(10)正常模式进入插入模式: 从光标处插入:i 从光标下一行插入:o 从光标下一字符插入:a
gdb使用:
gdb是linux下的程序调试工具,可以进行设置断点和单步执行、检测死锁操作等。
(1)启动gdb调试: gdb 程序路径(ps:gdb /usr/code/bucket)
(2)设置断点: 1. b 程序名:行号(ps:b bucket.cpp:21) 2. b 程序名:函数名(ps:b bucket.cpp:main)
(3)运行到断点处: r (ps:r会运行到断点处,并显示断点行代码和断点所在函数)
(4)查看断点: info breakpoints(ps:会显示断点编号、类型、所属行数和函数)
(5)删除断点: delete 断点编号
(6)显示断点周围代码: l
(7)单步执行: 会进入中间调用函数的单步:s 会跳过中间调用函数的单步:n
(8)继续执行: c
(9)查看和设置变量: 查看变量i:p i 设置变量i的值为5: set i = 5
(10)退出gdb: q
netstat使用:
netstat是linux系统用于监测TCP/IP网络的工具,可以监听TCP、UDP、ICMP等网络连接,以及查看路由表等功能。常用的指令有:
(1)netstat -a 列出所有连接
(2)netstat -t 列出TCP连接
(3)netstat -u 列出UDP连接
(4)netstat -c 持续列出连接
(5)netstat -s 显示连接统计信息
(6)netstat -n 直接使用IP而不通过DNS
(7)netstat -p 显示PID和进程名称
(8)netstat -r 显示内核IP路由表
实际中常用的复合指令是:
netstat -actnp | grep 80 持续显示所有80端口的tcp连接,并且显示进程和PID
netstat -actnp | grep chrome 持续显示所有chrome进程的tcp连接
tcpdump使用:
tcpdump是linux下的抓包工具,可以将网络中传输数据包的报头完全截获下来提供分析。可以只抓tcp的SYN或ACK等特定包,也可以只抓HTTP的POST或GET指令的包等等。常用的指令有:
(1)tcpdump -i eth0 -i表示指定抓包的接口,如:eth0、wlan0等等(ifconfig中inet有值都可以抓)
(2)tcpdump -A -A表示以ascii的形式显示每一个数据包
(3)tcpdump -c 100 -c表示抓取指定数量的包,如抓100个就是tcpdump -c 100
(4)tcpdump -t -t表示不显示时间戳
(4)tcpdump host host后可以加IP或域名,如:host www.baidu.com
(5)tcpdump port port后加监听的端口号,如:port 80
(6)tcpdump src net src net后接源IP地址
(7)tcpdump -w ./data.cap -w使输出的信息保存到./data.cap中,方便之后分析
实际中常用的指令是:
tcpdump -i eth9 -t -A -c 100 host www.baidu.com and port 80 -w ./data.cap
ipcs使用:
ipcs是linux下用于查看进程间通信的共享内存、消息队列、信号量的信息的工具。常用的指令有:
(1)ipcs -a 查看linux下共享内存、消息队列、信号量的所有信息,包括:key、ID、拥有者、字节数、状态等等。
(2)ipcs -p 查看linux下共享内存、消息队列的相关进程号,如:消息队列的发送进程和接收进程的PID。
(3)ipcs -u 查看linux下共享内存、消息队列、信号量已使用的资源情况。
(4)ipcs -l 查看linux下共享内存、消息队列、信号量的系统资源限制情况,如:最大个数、最大占用空间等。
(5)ipcs -t 查看linux下共享内存、消息队列、信号量的创建和断开时间。
(6)ipcs -m -q -s -m表示查看共享内存,-q表示查看消息队列,-s表示查看信号量。
ipcrm使用:
ipcrm是linux下用于删除共享内存、消息队列、信号量的IPC资源的工具。常用的指令有:
(1)ipcrm -M key 通过key删除共享内存
(2)ipcrm -m id 通过id删除共享内存
(3)ipcrm -Q key 通过key删除消息队列
(4)ipcrm -q id 通过id删除消息队列
(5)ipcrm -S key 通过key删除信号量
(6)ipcrm -s id 通过id删除信号量