linux网络分析、性能分析、文本格式化、文件读写操作之利器

好的工具能够让我们工作更加高效,结合工作中的情况,今天分享下linux下比较好用的几个工具。

网络分析工具

mtr

mtr是网络链路检测判断问题非常好用的工具,集成了tracert和ping这两个命令的功能,动态的输出检测结果。mtr 默认发送icmp数据包进行链路探测,会对链路上的相关节点做持续探测并给出相应的统计信息,mtr 能避免节点波动对测试结果的影响
其中中间线路丢包严重但是目标地址不丢包,可能是因为某些主机路由对icmp协议不做处理或者只分配固定限额的资源处理,所以是正常情况。因为icmp协议请求消耗cpu资源,为了节省开销,cpu只分配固定资源处理icmp请求

[email protected]:~# 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读写问题等。
[email protected]:~# 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命令的,首先需要安装

[email protected]:~# apt-get install -y jq

有如下json格式的文件

[email protected]:~# 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"}]

现在格式化输出test.txt

或者如下格式化

根据索引查看元素
如查看第一个元素

注意:用jq处理的文件必须首先是符合json格式的,否则用jq格式化会报错,jq格式化不会改变原文件排版格式

文件操作工具

sponge

sponge是一个修改文件比较好用的工具,支持在文件写入前读取所有输入,所以在读取文件后再次向同一文件写入时比较有用
例如有如下文件

[email protected]:~# cat ceshi.txt
windowns
linux
c language
python language
go language
hello world

现在我们需要将该文件按照首字母顺序排列后重新保存到该文件

[email protected]:~# sort ceshi.txt
c language
go language
hello world
linux
python language
windowns

可能你会想到如下重定向

但是你会发现这样重定向后源文件为空了,当然这不是我们希望看到的。
现在我们重新将内容写入文件

[email protected]:~# cat ceshi.txt
windowns
linux
c language
python language
go language
hello world

这时你可能又会想到通过临时文件的方式重定向

当然通过临时文件的方式可以满足我们的需求

因为sponge可以在文件写入前读取所有输入,所以通过sponge可以很好的解决我们的需求
linux默认是没有sponge命令的,首先需要安装

[email protected]:~# apt-get install -y moreutils

上面介绍jq工具时,我们格式化输出了test.txt,但是test.txt文件本身没有改变,所以现在我们可以将jq和sponge结合使用格式化文件test.txt

[email protected]:~# 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"}]

原文地址:https://blog.51cto.com/13053917/2422257

时间: 2024-11-12 07:02:23

linux网络分析、性能分析、文本格式化、文件读写操作之利器的相关文章

java文件读写操作类

借鉴了项目以前的文件写入功能,实现了对文件读写操作的封装 仅仅需要在读写方法传入路径即可(可以是绝对或相对路径) 以后使用时,可以在此基础上改进,比如: 写操作: 1,对java GUI中文本框中的内容进行捕获,放在txt文本文档中 2,对各种类型数据都以字符串的形式逐行写入 3,对全局数组的内容进行写入 读操作: 获取文件行数 对逐行字符串型数据进行类型转换,放入二维数组中 为后面算法处理提供入口,但是要小心的是:不可以将行数用全局变量做计数器,否则每次读入是全局变量累加出错,应重新开始读取

Python常用的文件读写操作和字符串操作

文件读写操作 fileUtils.py # -*- coding: utf-8 -*- import os def getFileList(dir, fileList=[]):     """     遍历一个目录,输出所有文件名     param dir: 待遍历的文件夹     param filrList : 保存文件名的列表     return fileList: 文件名列表     """     newDir = dir     

Android数据存储——文件读写操作(File)

Android文件读写操作 一.文件的基本操作 Android中可以在设备本身的存储设备或外接的存储设备中创建用于保存数据的文件.在默认状态下,文件是不能在不同程序间共享的. 当用户卸载您的应用程序时,这些文件删除. 文件存储数据可以通过openFileOutput方法打开一个文件(如果这个)文件不存在就自动创建这个文件),通过load方法来获取文件中的 数据,通过deleteFile方法删除一个指定的文件. 1,常用方法介绍: File是通过FileInputStream和FileOutput

C文件读写操作

C语言的文件 一.文件基本操作:        在c语言中,对数据文件的操作都是依靠文件类型指针来完成. 1.文件类型指针的定义方式:FILE *文件类型变量 2.调用fopen函数打开文件的方法: 文件类型指针变量=fopen(文件名,使用文件打开方式): 文件打开方式(12种) 文件打开方式 意义 rt 只读打开一个文本文件,只允许读数据 wt 只写打开或建立一个文本文件,只允许写数据 at 追加打开一个文本文件,并在文件末尾写数据 rb 只读打开一个二进制文件,只允许读数据 wb 只写打开

C语言文件读写操作,从文件读取数据

很早写的在linux系统下的文件读写操作,从文件中读取数据 #include <stdio.h> int ReadInfoFromFile(const char *strFile) { FILE *fp; char ch; fp = fopen(strFile, "r"); // 只读的方式打开文件 if(fp==NULL) { perror("fopen"); // 打开文件失败 打印错误信息 return -1; } ch = fgetc(fp);

【python学习笔记】pthon3.x中的文件读写操作

在学习python文件读写的时候,因为教程是针对python2的,而使用的是python3.想要利用file类时,类库里找不到,重装了python2还是使不了.在别人园子认真拜读了<详解python2和python3区别>(已收藏)之后,才发现python3已经去掉file类. 现在利用python进行文件读写的方法更加类似于C语言的文件读写操作. 如今总结如下: 一 打开文件—— f = open('poem.txt','x+'): 读过open的帮助文档,然后自己翻译了一下,现给大家分享一

C语言文件读写操作,写入数据到文件

很早写的在linux系统下的文件读写操作,写入数据到文件,很时候初学者学习 #include <stdio.h> int writeInfoToFile(const char *strFile) { int age, i; char name[10]; FILE *fp; fp = fopen(strFile, "w"); // 只读的方式打开文件 if(fp == NULL) { perror("fopen"); // 文件打开失败,打印错误信息 re

php学习基础-文件系统(二) 文件读写操作、文件资源处理

一.文件的打开与关闭 /* *读取文件中的内容 * file_get_contents(); //php5以上 * file() * readfile(); * * 不足:全部读取, 不能读取部分,也不能指定的区域 * * fopen() * fread() * fgetc() * fgets() * * * * * 写入文件 * file_put_contents("URL", "内容字符串"); //php5以上 * 如果文件不存在,则创建,并写入内容 * 如果

python进阶--文件读写操作

Python读写文件 1. open 使用open打开文件后一定要记得调用 文件对象的close()方法.比如可以用try --finally语句来确保最后能关闭文件. >>>f1 = open('thisfile.txt') >>>try: f1.read() finally: f1.close() 2. 读文件(read,readline,readlines) ①读文本文件 input = open('data','r') input.read() ②读二进制文件