Linux中随手可得的测试、调试、性能检验工具

简介:
原定标题是“linux自带的测试、调试、性能工具”,不过并不恰当,比如本文要提到的gdb,很多Linux发行版中都提供了它,但毕竟不是Linux的必要组成部分,只是对与大多数Linux用户随手可得罢了。合理组合使用这些工具可以满足更复杂的要求,并写成测试脚本,能为测试提供很大的方便。本文不涉及具体的脚本编写,也不涉及与网络相关的命令如netstat和tcpdump。
  为了方便阅读,用横线把内容进行分割,并且每个下划线下对这部分主要内容进行提示。
  对于1~6这几个命令,单独使用时看上去很简单,但当它们结合重定向和正则表达式从而构成更复杂的功能甚至是自动化脚本时,才能发挥其真正威力。

   cmp和diff可以用于版本控制,比较两个版本文件的不同之处,也可以用于比较程序产生的输出。
 
1.cmp
  逐字节比较两个文件,输出。无选项则输出第一个不同的地方。
  常用选项:
  -l 输出所有不同的字节,并显示 字节数(十进制)和每个不同的不同字节(八进制)。例如,如果第3个字节file1.txt中是八进制151,flie2.txt中是12,则 显示:

    3 151  12

 

2.diff

  逐行比较两个文件;如果指定的是目录,则比较目录下的同名文件。

  输出为:文件1中的行数+格式提示+文件2中的行数,其中格式提示为a、c、d,对应add、change、delete。

  diff的退出值有特定含义, 0 表示没有不同,1 表示找到不同处,2 表示出错。

  常用选项:

    -y --side-by-side 以两列输出。这时用 |标注二者不同的行,<标注后者比前者少一行,>标注前者比后者少一行。此时还可以加上下面的选项:
-W NUM --width=NUM 输出最多打印 NUM (默认 130) 列。
--left-column 仅输出共有行的左侧列。

    -c  -C NUM  --context[=NUM]  输出 NUM (默认 3) 行复制的上下文。两个文件的全文都会显示。

    -u  -U NUM  --unified[=NUM]  输出 NUM (默认 3) 行合并的上下文。两个文件相同的部分只显示一次。

    -ruN 生成patch文件,格式为diff -ruN file1 file2 >patch.dat,这时使用patch file1 patch.dat就能把file1的内容更新到与file2一致了。

 


  sort、sum、wc同样可以对文件和输出按需要进行处理。对于能够把stdin重定向到文件中的Linux来说,对输出的处理和对文件的处理是一样的。

3.sort

  按字母序输出各行。这个命令可以同时处理多个文件。

  常用选项:

    -u 去除重复行

    -r  降序输出

    -n 按数字序排序,(这样2才不会排到10后面)

    -t    按某个分隔符分隔,这时可以用-k指定列数

 

4.sum

  计算文件校验和以及占用的块(block)数。校验和算法和block的大小可以根据选项设定。

 

5.wc

  输出文件的行数、字(word)数、字节数。如果多于一个文件还将输出总行数。

  常用选项:

    -c   输出字节数

    -m  输出字符数

    -l  输出行数

    -w  输出字(word)数

 


6.grep

  从文本中搜索符合正则表达式的内容并显示。这里就不提正则表达式是多么的强大了,其规则可以单独写成一篇博文,并且很多人已经这么做过了。下面是一些用法启发,看完之后会让人觉得,原来这个“搜索”的需求的具体化如此多样。例子出于《程序设计实践》:

  哪些文件里用到了类Regexp?  %grep Regexp *.java

  这个类的实现在哪个文件?     %grep 'class.*Regexp' *.java

  文件中有多少空行?        %grep '.' *.c++ |wc

 


   运行时间的统计和测定:time和gprof

7.time
  用法是$time 可执行文件/命令
  显示程序运行的 总时间、 用户时间和 系统时间。
  对于一个执行时间很短的程序,运行时间可能显示为0。
  因为并不是由程序执行本身收集的,如果time命令被停止或被换出内存,显示的时间可能大于真实的时间。
 
8.gprof
  统计程序运行时各个函数的运行时间和被调用的次数。这对代码调优很有帮助,通过这个统计,可以找到占用时间比率大、调用次数多的函数,对齐进行优化,这样可以提升程序的性能。而对于较少执行而且占用时间不多的函数,即使存在优化的可能性,也不必费心考虑优化方案,因为对它的优化对性能提升不大。
如果需要gprof,在gcc时需要增加-pg选项,这时会生成一个gmon.out文件。
 

代码查错:gcc -Wall选项、lint
9.gcc -Wall
  之所以把这个gcc选项也列上,主要是其作用容易被人忽略。Writing Solid Code上援引Peter Lynch——据说是80年代最好的合股投资公司管理者——的话:投资者与赌徒之间的区别在于投资者利用每一次机会,无论它是多么小,去争取利益;而赌徒则只靠运气。作者建议把这句话应用于编程,选择编译程序的所有可选警告选项,并视之为无风险高偿还的程序投资。不要问“应该使用这一警告设施吗?”而是问:“为什么不使用这一警告设施呢?”把所有警告选项都打开,除非有极好的理由才不这么做。
 
10.lint
  最初lint用于检查C语言中不可移植的代码,而现在已经不只是一个可移植性检查程序,还可以检查出代码中那些虽然可移植并且完全合乎语法但很有可能是错误的特性。
  lint有很多版本,Linux下可以使用splint,通过apt-get安装。
 
 

   较综合的调试:gdb
11.gdb
  gdb是一个较为综合的调试工具,提供了诸如断点、变量监测和设置、信号、查看函数堆栈、单步执行等功能,这里不做详细介绍,相关的博文很多,可以进行参考,我以前也做了个记录: gdb调试命令
 

其他:strace
12.strace
   strace可以跟踪到一个进程产生的系统调用,包括参数,返回值,执行消耗的时间。这条命令我之前没有用过,下面贴一个地址供需要的人进一步研究:http://www.cnblogs.com/ggjucheng/archive/2012/01/08/2316692.html




本文转自五岳博客园博客,原文链接:www.cnblogs.com/wuyuegb2312/archive/2013/06/13/3119163.html,如需转载请自行联系原作者

相关实践学习
阿里云图数据库GDB入门与应用
图数据库(Graph Database,简称GDB)是一种支持Property Graph图模型、用于处理高度连接数据查询与存储的实时、可靠的在线数据库服务。它支持Apache TinkerPop Gremlin查询语言,可以帮您快速构建基于高度连接的数据集的应用程序。GDB非常适合社交网络、欺诈检测、推荐引擎、实时图谱、网络/IT运营这类高度互连数据集的场景。 GDB由阿里云自主研发,具备如下优势: 标准图查询语言:支持属性图,高度兼容Gremlin图查询语言。 高度优化的自研引擎:高度优化的自研图计算层和存储层,云盘多副本保障数据超高可靠,支持ACID事务。 服务高可用:支持高可用实例,节点故障迅速转移,保障业务连续性。 易运维:提供备份恢复、自动升级、监控告警、故障切换等丰富的运维功能,大幅降低运维成本。 产品主页:https://www.aliyun.com/product/gdb
目录
打赏
0
0
0
0
20
分享
相关文章
【03】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-测试hello word效果-虚拟华为手机真机环境调试-为DevEco Studio编译器安装中文插件-测试写一个滑动块效果-介绍诸如ohos.ui等依赖库-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
【03】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-测试hello word效果-虚拟华为手机真机环境调试-为DevEco Studio编译器安装中文插件-测试写一个滑动块效果-介绍诸如ohos.ui等依赖库-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
29 10
【03】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-测试hello word效果-虚拟华为手机真机环境调试-为DevEco Studio编译器安装中文插件-测试写一个滑动块效果-介绍诸如ohos.ui等依赖库-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
Burp Suite Professional 2025.2 (macOS, Linux, Windows) - Web 应用安全、测试和扫描
Burp Suite Professional 2025.2 (macOS, Linux, Windows) - Web 应用安全、测试和扫描
41 12
Burp Suite Professional 2025.2 (macOS, Linux, Windows) - Web 应用安全、测试和扫描
【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
134 3
【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
|
26天前
|
Linux下如何安装配置Fail2ban防护工具
通过以上步骤,可以在Linux系统中成功安装和配置Fail2ban,从而有效保护服务器免受暴力破解等攻击。Fail2ban通过实时监控日志文件,自动更新防火墙规则,为系统安全提供了一层重要的保护。
100 36
|
2月前
|
[Linux工具] Makefile
Makefile是Linux环境下用于自动化编译和链接程序的配置文件,常用于简化大型项目的编译流程。通过定义目标文件、依赖文件及生成命令,Makefile能高效管理编译任务。它不仅适用于C语言项目,还可扩展到其他编程语言和非编程任务中。
59 20
[Linux工具] Makefile
|
12天前
|
Linux下载工具wget与curl
`wget` 是一个用于从网络下载文件的命令行工具,支持HTTP、HTTPS和FTP协议。它能自动处理下载中断,并支持递归下载网站内容。基本用法:`wget URL`,可指定文件名(`-O`)、保存目录(`-P`),还支持断点续传(`-c`)、限速(`--limit-rate`)和递归下载(`-r`)。相比之下,`curl` 更侧重于发送各种HTTP请求(如GET、POST),并支持文件上传、自定义请求头和cookie等功能。
45 10
Metasploit Framework 6.4.49 (macOS, Linux, Windows) - 开源渗透测试框架
Metasploit Framework 6.4.49 (macOS, Linux, Windows) - 开源渗透测试框架
17 0
Metasploit Framework 6.4.49 (macOS, Linux, Windows) - 开源渗透测试框架
Linux软件包管理工具概览
在Linux系统中,dpkg、apt、rpm、yum和dnf是几种常见的包管理工具,它们分别属于不同的Linux发行版或家族,并有着各自的诞生顺序和特点。下面将按照这些工具的诞生顺序,并结合Debian、Red Hat、CentOS、Ubuntu和Kali等系统,进行详细的介绍。
19 4
Linux(openwrt)下iptables+tc工具实现网络流量限速控制(QoS)
通过以上步骤,您可以在Linux(OpenWrt)系统中使用iptables和tc工具实现网络流量限速控制(QoS)。这种方法灵活且功能强大,可以帮助管理员有效管理网络带宽,确保关键业务的网络性能。希望本文能够为您提供有价值的参考。
108 28
深入解析:Linux网络配置工具ifconfig与ip命令的全面对比
虽然 `ifconfig`作为一个经典的网络配置工具,简单易用,但其功能已经不能满足现代网络配置的需求。相比之下,`ip`命令不仅功能全面,而且提供了一致且简洁的语法,适用于各种网络配置场景。因此,在实际使用中,推荐逐步过渡到 `ip`命令,以更好地适应现代网络管理需求。
46 11

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等