当前位置: 首页 > news >正文

grep与nm命令的应用

  1. 相关知识拓展
    1. Linux中grep的命令使用

在Linux中,grep可用于shell脚本,因为grep通过返回一个状态值来说明搜索状态,如果模板搜索成功,则返回0,如果搜索不成功,则返回1,如果搜索的文件不存在,则返回2。利用这些返回值就可以进行一些自动化的文本处理工具。grep命令的语法如下:

grep 参数<配置> 文件/文件夹

其中参数定义如下:

(1)-a:不忽略二进制的数据。

(2)-b:打印匹配行距离文件头部的偏移量,以字节为单位。

例:grep -r -b vendor_ai_cust_set_next_process_mctrl --exclude-dir=.svn

4-1 grep -b示例

(3)-c:统计匹配到的行数,注意,是匹配到的总行数,不是匹配到的次数,比如一行有两个被匹配到,但输出只有一个。

例:grep -r -c vendor_ai_cust_set_next_process_mctrl

4-2 grep -c示例

(4)-E:将样式为延伸的正则表达式来使用,如匹配文件中多个字符。

4-3 grep -E示例

(5)-F:将样式视为固定字符串的列表,字符串中可以有特殊符号,例如{}、[]等。

4-4 grep -F示例

(6)-G:使用基本规则表达式解释匹配模式,该参数为默认值。

(7)-h:查询时不显示文件名。

4-5 grep -h示例

(8)-H:查询时显示文件名,加与不加无区别,与-h相反。

(9)-i:忽略关键字符的大小写。(跟-y参数相同)。

(10)-l:对多文件搜索关键字符时只显示文件名。

(11)-L:对多文件搜索关键字符时,只显示不匹配关键字符的文件名。

(12)-n:显示匹配结果所在行号。

(13)-q:不显示任何信息。用于if逻辑判断,安静模式,不打印任何标准输出。如果有匹配的内容则立即返回状态值0。

4-6 grep -q示例

(14)-d 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep命令将回报信息并停止动作。-d后面跟的是进行的动作,一般是"grep -d read"或"grep -d recure "或"grep -d skip"。其中,read 为在当前目录查找;recure 为所有递归子目录;skip 为忽略子目录

(15)-R/-r 此参数的效果和指定"-d recurse"参数相同。

(16)-s 当搜索关键字符,不显示不存在或无匹配文本的错误信息。使用方式:"grep -s 关键字符 filename"。

4-7 grep -s示例

(17)-v 反转或过滤搜索,即过滤出来那些不匹配关键字符的行。使用方式:"grep -v 关键字符"。

(18)-w 精准搜索关键字符,即,只匹配单词,不匹配字符串。

4-8 grep -w示例

(19)-x 只显示整行都是关键字符的行。使用方式:"grep -x 关键字符",行匹配。

(20)-y 忽略关键字符的大小写。(跟-i参数相同)。

(21)-A<行数>:在输出的时候包含结果所在行之后的指定行数,这里指之后的x行。

(22)-B<行数>:在输出的时候包含结果所在行之前的指定行数,这里指之前的x行。

(23)-C<行数>:在输出的时候包含结果所在行之前和之后的指定行数,这里指之前和之后的x行。

4-9 grep -C示例

(24) -e 一次只能传一个匹配值,想对于-E,-E则可以采用“|”进行查询。

4-10 grep -e示例

(25)-f 从文件中取得关键字符,以文件匹配文件。

例:grep -f b.txt a.txt  以b.txt每一行为元素,在a.txt中进行匹配,如过行元素相同,则会标红,如下图所示。

4-11 grep -f示例

(26)--exclude-from = FILE:在文件中编写通配方案,grep将不会到匹配方案中文件名的文件去查找匹配内容。

(27)--exclude-dir = DIR:匹配一个目录下的不少内容同时还要让一些子目录不接受匹配,就使用此选项。

(28)--include = GLOB:仅搜索其基本名称与GLOB匹配的文件(使用--exclude下所述的通配符匹配)。

    1. Linux中nm的命令使用

nm命令的语法如下所示:

$ nm [options(s)] [file(s)]

其中,[file(s)]中可以给出多个文件,如果没有指定文件名,则默认文件是a.out。

(1)-A/-o:在输出时加上文件名。

4-12 nm -A/-o示例

(2)-a:列出obj文件中所有的符号,包括debug所使用的符号,否则默认情况下不显示调试用的符号。

4-13 nm -a示例

(3)-B:BSD码显示,默认为8421码显示。

(4)-C或--demangle[=style]:对低级符号名称进行解码,C++文件需要添加。

(5)-D 或--dynamic:显示动态符号而不显示普通符号,一般用于动态库。

(6)-f format或--format=format:指定输出格式,可以使用 nm -f sysv 查看变量所在的节区。

4-14 nm -f 示例

(7)-g或--extern-only:仅显示外部符号,一般用于对静态库的函数查询。

4-15 nm -g示例

(8)-h或--help:国际惯例,显示命令的帮助信息。

(9)-n或-v或--numeric-sort:显示的符号以地址排序,而不是名称排序。

例:nm -g -n libvendor_ai2_pub.a

 

4-16 nm -n示例                4-17 nm不加-n对比示例

(10)-p或--no-sort:不对显示内容进行排序。

 

4-18 nm -p示例                   4-19 nm不加-p示例

(11)-P或--portability:按照POSIX2.0标准格式输出,等同于使用 -f posix。

4-20 nm -P示例

(12)-V或--version:国际管理,查看nm的版本。

4-21 nm -V示例

(13)-s:当列出库中成员的符号时,包含索引。索引的内容包含:哪些模块包含哪些名字的映射。

(14)-u: 只显示未定义的符号。

4-22 nm - u示例

在执行nm指令之后,显示的符号代表如下:

4-1 nm命令显示符号相关说明

符号

描述

A

符号的值是绝对值,不会通过进一步的链接而改变。

B/b

符号在 BSS 数据段中。通常包含零初始化或未初始化的数据。

C

未初始化的数据。如果符号在任何地方定义,则被视为未定义的引用。

D/d

符号在初始化数据段中。

G/g

符号在小对象的初始化数据段中。一些目标文件格式允许更有效地访问小型数据对象,例如全局int变量,而不是大型全局数组。

i

对于PE格式文件,这表示符号位于特定于实现的部分中 DLL。对于ELF格式文件,这表明该符号是一个间接函数。这是一个GNU对标准ELF 符号类型集的扩展。它表示一个符号,如果被一个重定位不计算其地址,而是必须在运行时调用。运行时然后执行将返回要在重定位中使用的值。

I

该符号是对另一个符号的间接引用。

N

该符号是调试符号。

n

符号在只读数据段中。

p

符号在堆栈展开部分中。

R/r

该符号位于只读数据段中。

S/s

该符号在小对象的未初始化或零初始化数据段中。

T/t

符号在文本(代码)部分。

U

符号未定义。

a

本地不可变符号,通常为文件名

  1. 总结

(1)在代码编译阶段,遇到缺少相关的函数定义时,可以从函数是否未声明、定义函数的代码文件、相关库函数的添加方面着手,一一排查。

(2)grep的常用命令

5-1 grep常用命令

命令

描述

grep -n

显示行号

grep -l

只显示文件名

grep -E “条件a | 条件b | …”

多条件的搜索(可采用“条件a|条件b“”)

grep -x

按行进行匹配

grep -r

递归的查找目录

(3)nm的常用命令

5-2 nm常用命令

命令

描述

nm -g

静态库、可执行文件、中间文件相关函数查询

nm -f sysv

输出变量所在的区

nm -D

动态库中的函数查询

nm -A

输出时加上文件名

nm -a

输出所有符号,包含debug符号

相关文章:

grep与nm命令的应用

相关知识拓展 Linux中grep的命令使用 在Linux中&#xff0c;grep可用于shell脚本&#xff0c;因为grep通过返回一个状态值来说明搜索状态&#xff0c;如果模板搜索成功&#xff0c;则返回0&#xff0c;如果搜索不成功&#xff0c;则返回1&#xff0c;如果搜索的文件不存在&…...

【linux】软硬链接

在linux中在磁盘中定位文件并不是根据文件名而是根据文件的inode&#xff0c;一个文件对应一个inode但是一个inode可以对应多个文件。硬链接硬链接是通过索引节点进行的链接。在Linux中&#xff0c;多个文件指向同一个索引节点是允许的&#xff0c;像这样的链接就是硬链接。硬链…...

骨传导蓝牙耳机排行,盘点几款性能不错的骨传导耳机

随着蓝牙耳机的普及&#xff0c;骨传导耳机也越来越受到欢迎&#xff0c;很多人也都开始在了解并尝试骨传导耳机。相比于其他类型耳机&#xff0c;在舒适度、安全方面有一定优势。尤其是在户外运动时&#xff0c;或者长时间佩戴运动时&#xff0c;使用骨传导耳机可以避免耳朵因…...

ARM中的寄存器

ARM工作模式 ARM有8个基本的工作模式 User 非特权模式&#xff0c;一般在执行上层的应用程序时ARM处于该模式FIQ 当一个高优先级中断产生后ARM将进入这种模式IRQ 当一个低优先级中断产生后ARM将进入这种模式SVC 当复位或执行软中断指令后ARM将进入这种模式Abort 当产生存取异常…...

git操作修改历史版本指定tag标签的代码,并发布新标签

场景&#xff1a; 当项目已经迭代多个版本之后&#xff0c;突然发现旧版本0.0.1出现了紧急bug&#xff0c;需要及时处理&#xff1b; 如果直接用新版本替换上去是存在极大隐患的&#xff0c;且时间来不及&#xff1b; 所以需要直接在0.0.1版本的基础上去修复bug&#xff0c;然…...

SpringMVC——响应处理(1)【包含源码分析】

Controller public class JsonReturnController {ResponseBodyGetMapping("/getPet")public Pet getPet(){Pet petnew Pet();pet.setAge(5);pet.setName("lily");return pet;} }项目启动后 浏览器输入 http://localhost:8080/getPet 。 debug DispatcherS…...

Normalization

1、BN&#xff08;Batch Normalization&#xff09; 深度网络参数训练时内部存在协方差偏移&#xff08;Internal Covariate Shift&#xff09;现 象&#xff1a;深度网络内部数据分布在训练过程中发生变化的现象。训练深度网络时&#xff0c;神经网络隐层参数更新会导致网络输…...

27K测试老鸟分享自己6年面试心得,四种公司、四种问题…

这里总结了下自己今年的面试情况 先说一下自己的个人情况&#xff0c;普通二本计算机专业毕业&#xff0c;懂python&#xff0c;会写脚本&#xff0c;会selenium&#xff0c;会性能。趁着金三银四跳槽季&#xff0c;面试字节跳动测试岗技术面都已经过了&#xff0c;本来以为是…...

中小企业数字化自动化转型的方法

自动化是我们国内未来的趋势。智能制造的实现主要依托两个基础能力&#xff0c;一个是工业制造技术&#xff0c;另一个就是工业互联网。而自动化是工业制造技术的重要组成部分&#xff0c;是高度智能制造装备的核心部分&#xff0c;与承接着制造单元与工业互联网这两大核心。懂…...

利用GPT-3 Fine-tunes训练专属语言模型

利用GPT-3 Fine-tunes训练专属语言模型 文章目录什么是模型微调&#xff08;fine-tuning&#xff09;&#xff1f;为什么需要模型微调&#xff1f;微调 vs 重新训练微调 vs 提示设计训练专属模型数据准备清洗数据构建模型微调模型评估模型部署模型总结什么是模型微调&#xff0…...

kubeadm方式安装k8s高可用集群(版本1.26x)

K8S官网&#xff1a;https://kubernetes.io/docs/setup/ 高可用Kubernetes集群规划 配置备注系统版本CentOS 7.9Docker版本20.10.xPod网段172.16.0.0/12Service网段10.103.10.0/16 主机IP说明k8s-master01 ~ 03192.168.77.101 ~ 103master节点 * 3k8s-master-lb192.168.77.2…...

分享5款堪称神器的免费软件,建议先收藏再下载

转眼间新年已经过去一个月了&#xff0c;最近陆陆续续收到好多小伙伴的咨询&#xff0c;这边也是抓紧整理出几个好用的软件&#xff0c;希望可以帮到大家。 1.电脑安全管家——火绒 火绒是一款电脑安全软件&#xff0c;病毒库更新及时&#xff0c;界面清晰干净&#xff0c;没…...

【项目实战】从0开始入门JDK源码 - LinkedList源码

一、源码位置 一般来说IDEA配置好JDK以后 ,JDK的源码其实也配置好了,本文是基于JDK1.8的源码说明 rt - java - util - LinkedList 二、 继承关系图 LinkedList public class LinkedList<E>extends AbstractSequentialList<E>implements...

Polygon zkEVM的gas定价

1. 引言 所有的zkEVM都存在一个有趣的问题&#xff1a; 如何给gas定价&#xff1f; 在Ethereum Virtual Machine (EVM)中&#xff0c;gas通过为每个计算设置economic fee&#xff0c;来保持网络安全。恶意行为&#xff0c;如拒绝服务&#xff08;DoS&#xff09;攻击&#x…...

stl中的智能指针类详解

C98/03的尝试——std&#xff1a;&#xff1a;auto_ptr C11标准废弃了std&#xff1a;&#xff1a;auto_ptr&#xff08;在C17标准中被移除&#xff09;&#xff0c;取而代之的是std&#xff1a;&#xff1a;unique_ptr, std&#xff1a;&#xff1a;auto_ptr容易让人误用的地…...

Linux 阻塞和非阻塞 IO 实验

目录 一、阻塞和非阻塞简介 1、IO 概念 2、阻塞与非阻塞 二、等待队列 1、等待队列头 2、等待队列项 3、将队列项添加/移除等待队列头 4、等待唤醒 5、等待事件 三、轮询 1、应用程序的非阻塞函数 2、Linux 驱动下的 poll 操作函数 四、阻塞IO之等待事件唤醒 添加…...

你要的react+ts最佳实践指南

本文根据日常开发实践&#xff0c;参考优秀文章、文档&#xff0c;来说说 TypeScript 是如何较优雅的融入 React 项目的。 温馨提示&#xff1a;日常开发中已全面拥抱函数式组件和 React Hooks&#xff0c;class 类组件的写法这里不提及。 前沿 以前有 JSX 语法&#xff0c;…...

软件测试人员会被替代吗?IT行业哪个方向的前景最好?字节12年测开是这样说的

互联网测试从业12年&#xff0c;前来作答。 逻辑上来说&#xff0c;软件工程最初始只需要两个岗位&#xff0c;一个是产品经理。&#xff0c;一个是研发&#xff08;开发&#xff09;&#xff0c;剩余的 所有岗位都是由他们衍生而来的。 第三个岗位大概率就是测试&#xff0c…...

十六、vue3.0之富文本编辑器的选择

在工作过程中我们会遇到很多的时候会使用到富文本编辑器,市场上流行的也是各种各样的,那么究竟如何选择呢,今天就给大家讲讲有哪一些,方便大家的选择。 一、TinyMCE TinyMCE 是富文本编辑器领域的头部玩家之一,主流富文本编辑器,功能非常全,你需要的大多数功能它都支持…...

kafka(一) 的架构,各概念

Kafka架构 Kafak 总体架构图中包含多个概念&#xff1a; &#xff08;1&#xff09;ZooKeeper&#xff1a;Zookeeper负责保存broker集群元数据&#xff0c;并对控制器进行选举等操作。 &#xff08;2&#xff09;Producer&#xff1a; 生产者负责创建消息&#xff0c;将消息发…...

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周&#xff0c;有很多同学在写期末Java web作业时&#xff0c;运行tomcat出现乱码问题&#xff0c;经过多次解决与研究&#xff0c;我做了如下整理&#xff1a; 原因&#xff1a; IDEA本身编码与tomcat的编码与Windows编码不同导致&#xff0c;Windows 系统控制台…...

超短脉冲激光自聚焦效应

前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应&#xff0c;这是一种非线性光学现象&#xff0c;主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场&#xff0c;对材料产生非线性响应&#xff0c;可能…...

label-studio的使用教程(导入本地路径)

文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

云计算——弹性云计算器(ECS)

弹性云服务器&#xff1a;ECS 概述 云计算重构了ICT系统&#xff0c;云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台&#xff0c;包含如下主要概念。 ECS&#xff08;Elastic Cloud Server&#xff09;&#xff1a;即弹性云服务器&#xff0c;是云计算…...

Java 8 Stream API 入门到实践详解

一、告别 for 循环&#xff01; 传统痛点&#xff1a; Java 8 之前&#xff0c;集合操作离不开冗长的 for 循环和匿名类。例如&#xff0c;过滤列表中的偶数&#xff1a; List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...

深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法

深入浅出&#xff1a;JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中&#xff0c;随机数的生成看似简单&#xff0c;却隐藏着许多玄机。无论是生成密码、加密密钥&#xff0c;还是创建安全令牌&#xff0c;随机数的质量直接关系到系统的安全性。Jav…...

MODBUS TCP转CANopen 技术赋能高效协同作业

在现代工业自动化领域&#xff0c;MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步&#xff0c;这两种通讯协议也正在被逐步融合&#xff0c;形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...

关于 WASM:1. WASM 基础原理

一、WASM 简介 1.1 WebAssembly 是什么&#xff1f; WebAssembly&#xff08;WASM&#xff09; 是一种能在现代浏览器中高效运行的二进制指令格式&#xff0c;它不是传统的编程语言&#xff0c;而是一种 低级字节码格式&#xff0c;可由高级语言&#xff08;如 C、C、Rust&am…...

Java面试专项一-准备篇

一、企业简历筛选规则 一般企业的简历筛选流程&#xff1a;首先由HR先筛选一部分简历后&#xff0c;在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如&#xff1a;Boss直聘&#xff08;招聘方平台&#xff09; 直接按照条件进行筛选 例如&#xff1a…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3

一&#xff0c;概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本&#xff1a;2014.07&#xff1b; Kernel版本&#xff1a;Linux-3.10&#xff1b; 二&#xff0c;Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01)&#xff0c;并让boo…...