好的工具能够让我们工作更加高效,结合工作中的情况,今天分享下linux下比较好用的几个工具。
网络分析工具
mtr
mtr是网络链路检测判断问题非常好用的工具,集成了tracert和ping这两个命令的功能,动态的输出检测结果。mtr 默认发送icmp数据包进行链路探测,会对链路上的相关节点做持续探测并给出相应的统计信息,mtr 能避免节点波动对测试结果的影响
其中中间线路丢包严重但是目标地址不丢包,可能是因为某些主机路由对icmp协议不做处理或者只分配固定限额的资源处理,所以是正常情况。因为icmp协议请求消耗cpu资源,为了节省开销,cpu只分配固定资源处理icmp请求
root@master1:~# mtr 114.114.114.114
输出结果说明
第一列(host):节点ip和域名
第二列(Loss%):节点丢包率,通常最后的目标丢包才算是真正的丢包
第三列(Snt):发送数据包的数量
第四列(Last):最后一次的探测延迟值
第五列(Avg):探测延迟的平均值
第六列(Best):探测延迟的最小值,即最优值
第七列(Wrst):探测延迟的最大值,即最差值
第八列(StDev):标准偏差
可选参数说明
-h(--help):提供帮助信息
-v(--version):显示版本
-c(--count):设置ping的数量限制值,达到该值后程序退出
-r(--report):以报告模式输出
-p(--split):将每次追踪的结果分别列出来
-s(--psize):指定ping数据包的大小
-n(--no-dns):不对ip地址做域名解析
-a(--address):设置发送包的ip地址,主机有多个ip时使用
-i(--interval):设置icmp返回之间的间隔,默认是1s
-4:使用ipv4协议
-6:使用ipv6协议
运行时交互式选项
?或h:显示帮助菜单
d:切换显示模式
n:启用或禁用dns域名解析
u:切换使用icpm或udp数据包进行探测
eg:
设置ping的数量为20,包大小为1024字节,以报告模式输出,检查百度的连通性
性能分析工具
top
通过top命令查看系统的CPU、内存、运行时间、交换分区、执行的线程等信息。可以有效的发现系统的缺陷出在哪里,是内存不够、CPU处理能力不够还是IO读写问题等。
root@master1:~# top
输出结果说明
第一行:系统当前时间、系统运行时间、当前登录用户数、系统负载(1分钟、5分钟、15分钟的平均值)
第二行:tasks为任务进程,total进程总数,ruuning正在运行的进程数,sleeping睡眠的进程数,stopped停止运行的进程数,zombie僵尸进程数
第三行:cpu使用情况,us(user)用户空间占用cpu时间百分比,sy(system)内核空间占用cpu时间百分比,ni(nice)运行低优先级进程的cpu时间百分比,id(idle)空闲cpu时间百分比,wa(iowait)等待io占用cpu时间百分比,hi(hard interrupt)硬件硬中断占用cpu百分比,si(soft interrupt)软件软中断占用cpu百分比,st(steal)当前系统运行在虚拟机中的时候,被其他虚拟机占用的cpu时间百分比
整体的cpu使用率=1-id。当us很高时,证明cpu时间主要消耗在用户代码,需要优化用户代码。sy很高时,说明cpu时间都消耗在内核,要么是频繁的系统调用,要么是频繁的cpu切换(进程切换/线程切换)。wa很高时,说明有进程在进程频繁的IO操作,有可能是磁盘IO,也有可能是网络IO。si很高时,说明cpu时间消耗在处理软中断,网络收发包会触发系统软中断,所以大量的网络小包会导致软中断的频繁触发,典型的SYN Floor会导致si很高。
第四行:内存使用情况,total物理内存总大小,free空闲内存总量,used已经使用的内存量,buff表示用于读写磁盘缓存的内存,cache表示用于读写文件缓存的内存。avail表示可用的内存大小
第五行:虚拟内存信息, total表示能用的swap总量,swap free表示剩余,used表示已经使用的。
swap原理是把一块磁盘空间或者一个本地文件当成内存来使用,称为交换分区
第六行:具体的每个进程状态,PID进程id,USER进程所有者的用户名,PR进程调度优先级,NI进程nice值(优先级),越小的值代表越高的优先级,VIRT进程使用的虚拟内存,RES进程使用的物理内存(不包括共享内存),SHR 进程使用的共享内存大小,S进程状态(D:不可中断的睡眠状态,R:运行,S:睡眠,T:跟踪/停止,Z:僵尸进程),%CPU 进程使用的cpu占用百分比,%MEM 进程使用的内存占用百分比,TIME+ 进程启动后到现在所用的全部cpu时间,COMMAND 进程的启动命令(默认只显示二进制,-c参数能够显示命令行和启动参数)
可选参数说明
-b 批处理模式操作
-d 指定每两次屏幕信息刷新之间的时间间隔
-p 通过指定监控进程ID来仅仅监控某个进程的状态
-q 使top没有任何延迟的进行刷新,如果调用程序有超级用户权限,那么top将以尽可能高的优先级运行
-S 指定累积模式
-s 使top命令在安全模式中运行,这将去除交互命令所带来的潜在危险。
-i 使top不显示任何闲置或者僵死进程
-c 显示整个命令行而不只是显示命令名
运行时交互式选项
h或者? 显示快捷键帮助
q 退出程序
1 展开多核cpu显示
m 切换显示内存信息
M 根据内存使用大小排序
P 根据CPU使用率进行排序(默认排序)
c 切换显示命令名称和完整命令行
k 终止一个进程
i 忽略闲置和僵死进程
r 重新安排一个进程的优先级别,系统提示用户输入需要改变的进程PID以及需要设置的进程优先级
S 切换到累计模式
s 更改刷新间隔时间,单位秒,默认是5s
f或者F 从当前显示中添加或者删除项目
o或者O 改变显示项目的顺序
l 切换显示平均负载和启动时间信息
t 切换显示进程和CPU状态信息
T 根据时间/累计时间进行排序
w 将当前设置写入~/.toprc文件中
格式化工具
jq
jq可以对json数据进行分片、过滤、映射和转换,可以让linux命令和shell脚本在处理json数据时变得得心应手。
默认linux系统是不带jq命令的,首先需要安装
root@master1:~# apt-get install -y jq
有如下json格式的文件
root@master1:~# cat test.txt
[{"address":{"province":"hubei","city":"wuhan"},"site":"www.hubei.com"},{"address":{"province":"hunan","city":"changsha"},"site":"www.hunan.com"},{"address":{"province":"zhejiang","city":"hangzhou"},"site":"www.zhejiang.com"}]
根据索引查看元素
如查看第一个元素
注意:用jq处理的文件必须首先是符合json格式的,否则用jq格式化会报错,jq格式化不会改变原文件排版格式
文件操作工具
sponge
sponge是一个修改文件比较好用的工具,支持在文件写入前读取所有输入,所以在读取文件后再次向同一文件写入时比较有用
例如有如下文件
root@master1:~# cat ceshi.txt
windowns
linux
c language
python language
go language
hello world
现在我们需要将该文件按照首字母顺序排列后重新保存到该文件
root@master1:~# sort ceshi.txt
c language
go language
hello world
linux
python language
windowns
但是你会发现这样重定向后源文件为空了,当然这不是我们希望看到的。
现在我们重新将内容写入文件
root@master1:~# cat ceshi.txt
windowns
linux
c language
python language
go language
hello world
这时你可能又会想到通过临时文件的方式重定向
当然通过临时文件的方式可以满足我们的需求
因为sponge可以在文件写入前读取所有输入,所以通过sponge可以很好的解决我们的需求
linux默认是没有sponge命令的,首先需要安装
root@master1:~# apt-get install -y moreutils
上面介绍jq工具时,我们格式化输出了test.txt,但是test.txt文件本身没有改变,所以现在我们可以将jq和sponge结合使用格式化文件test.txt
root@master1:~# cat test.txt
[{"address":{"province":"hubei","city":"wuhan"},"site":"www.hubei.com"},{"address":{"province":"hunan","city":"changsha"},"site":"www.hunan.com"},{"address":{"province":"zhejiang","city":"hangzhou"},"site":"www.zhejiang.com"}]