以前我用strings命令的频率不高, 现在越用越顺手, 而且已经是离不开strings命令了。虽然以前说过strings命令, 但今天还是要说。 主要是两大用途, 下面来说明一下:

一. 确认代码编是否译到库中去了?

在大型的开发中, 我们经常修改一两行代码, 有时候自己修改的代码并没有编到库中去(有可能是代码没有同步到linux上编译, 也有可能是有编译错误导致生成库失败, 也有肯能是该make clean的地方没有make clean或rm库, 还有可能是其他杂七杂八的原因), 这样会经常误导自己的判断, 折腾大半天。

还有, 比如你代码提交了, 结果你的同事更新(svn up)了代码(也就是获取了你的代码), 但编译的时候由于各种原因没有把你的代码编译进去, 然后他提交了这个库, 然后呢, 自然就出了问题, 老板找到你的头上。 此时, 可以用strings命令快速判断提交的库中是否包含你自己的代码。 我用过无数次, 屡试不爽。 说了这么多, 下面来实战一下:

  1.  [taoge@localhost test]$ ls
  2.  test.c
  3.  [taoge@localhost test]$ cat test.c
  4.  #include <stdio.h>
  5.  
     
  6.  int main()
  7.  {
  8.  int a = 1;
  9.  int b = 2;
  10.  int c = a + b;
  11.  printf("xxx, %d, %d, %d\n", a, b, c);
  12.  
  13.  
  14.  return 0;
  15.  }
  16.  [taoge@localhost test]$ gcc test.c
  17.  [taoge@localhost test]$ ls
  18.  a.out test.c
  19.  [taoge@localhost test]$ strings a.out | grep xxx
  20.  xxx, %d, %d, %d
  21.  [taoge@localhost test]$

如上, 一般都是在自己写的代码中, 加点日志(字符串), 相当于打点tag, 然后用strings命令进行判断。 如果是不需要加日志, 那怎么办呢? 我经常是对文件中的之前日志中的字符串做简要修改, 比如加上xxx, 实际上也相当于打下自己的tag印记。

二. 对于新手来说, 需要知道新生成的代码进入了哪个库, 然后才好找库啊!

这个需求也很合理, 不能说代码编译到哪个库中去了, 你还不知道。 用strings命令吧, 如下:

  1.  [taoge@localhost test]$ find -name "*" | xargs strings -f | grep xxx
  2.  ./test.c: printf("xxx, %d, %d, %d\n", a, b, c);
  3.  ./a.out: xxx, %d, %d, %d
  4.  [taoge@localhost test]$

OK,  一目了然, 知道xxx编译到哪里去了。要补充一下, find命令中的双引号不能少, 否则:

  1.  [taoge@localhost test]$ find -name *
  2.  find: paths must precede expression: test.c
  3.  Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]
  4.  [taoge@localhost test]$

strings命令(转)的更多相关文章

  1. linux中的strings命令简介2

    摘自:http://blog.csdn.net/stpeace/article/details/46641069 linux中的strings命令简介 之前我们聊过linux strings的用法和用 ...

  2. linux中的strings命令简介

    摘自:http://blog.csdn.net/stpeace/article/details/46641069 linux中的strings命令简介 在linux下搞软件开发的朋友, 几乎没有不知道 ...

  3. linux中的strings命令

     strings - print the strings of printable characters in files.            意思是, 打印文件中可打印的字符.  我来补充一下吧 ...

  4. 技巧性极强的strings命令

    打印文件中的可打印字符串(print the strings of printable characters in files).常用来在二进制文件中查找字符串,与grep配合使用.strings命令 ...

  5. 用strings命令查看kafka-log内容

    kafka的log内容格式还不没怎么了解,想快速浏览消息内容的话,除了使用它自带的kafka-console-consumer.sh脚本,还可以直接去看log文件本身,不过内容里有部分二进制字符,通过 ...

  6. 用strings命令查看kafka-log内容 过滤二进制编码

    kafka的log内容格式还不没怎么了解,想快速浏览消息内容的话,除了使用它自带的kafka-console-consumer.sh脚本,还可以直接去看log文件本身,不过内容里有部分二进制字符,通过 ...

  7. centos Linux系统日常管理2 tcpdump,tshark,selinux,strings命令, iptables ,crontab,TCP,UDP,ICMP,FTP网络知识 第十五节课

    centos  Linux系统日常管理2  tcpdump,tshark,selinux,strings命令, iptables ,crontab,TCP,UDP,ICMP,FTP网络知识 第十五节课 ...

  8. strings命令的实现 2014-06-02 00:17 355人阅读 评论(0) 收藏

    本程序实现从文件中提取连续4个以上的可打印字符.模仿linux中string命令 #include <stdio.h> #include<stdlib.h> #include ...

  9. strings和nm命令

    strings和nm命令 strings 一.简介: 显示文件中的可打印字符 二.用法 strings [option(s)] [file(s)] 选项说明: -a – –all 扫描整个文件而不是只 ...

随机推荐

  1. 利用Travis IC实现Hexo博客自动化部署

    1.Hexo博客的利与弊 Hexo中文 我就默认为看到这篇文章的人都比较了解Hexo博客,也都能够成功手动部署吧.所以第一部分推荐两篇文章一笔带过,让我们快速进入本文的重点内容.实在不知道也不要方先看 ...

  2. 【模板】LCT

    核心思想: 动态维护一个森林.支持删边,加边,查询链信息等很多操作. 由若干棵$Splay$组成,每棵$Splay$维护一条链,以深度作为关键字. 也就是说$Splay$的中序遍历相当于从上到下遍历这 ...

  3. Linux学习笔记之iptables学习笔记

    iptables系列学习推荐: http://www.zsythink.net/archives/category/%e8%bf%90%e7%bb%b4%e7%9b%b8%e5%85%b3/iptab ...

  4. SSRS连接ORACLE数据库制作报表

    SSRS报表基于ORACLE数据库做报表示例. 开发环境:VS2010 SQL SERVER 数据库:SQL SERVER 2012 PS:数据库连接部分可能有还有个问题就是ORACLE数据源这一部分 ...

  5. C# vb .net图像合成-合成矩形

    在.net中,如何简单快捷地实现图像合成呢,比如合成文字,合成艺术字,多张图片叠加合成等等?答案是调用SharpImage!专业图像特效滤镜和合成类库.下面开始演示关键代码,您也可以在文末下载全部源码 ...

  6. 安装vivado 2016.1时出错

    在将vivado 2016.1安装到d:\ xilinx时,发生以下错误: 提取存档D时遇到 错误:\ Xilinx_Vivado_SDK_2016.1_0409_1 \ payload \ rdi_ ...

  7. 【转载】C#使用InsertRange方法往ArrayList集合指定位置插入另一个集合

    在C#的编程开发中,ArrayList集合是一个常用的非泛型类集合,ArrayList集合可存储多种数据类型的对象.在实际的开发过程中,我们可以使用InsertRange方法在ArrayList集合指 ...

  8. MES系统帮助冷轧厂实现次品的流程解析

    为了解决现场实际生产过程中纸质不良品卡片易丢失.周期长.传递缓慢,不能起到质量警示和生产预警等诸多方面的问题,某冷轧厂采取了在MES系统中实现不良品业务流程的方案,完全替代和取消了纸质不良品卡片,在M ...

  9. 2 Android程序的执行

    Android系统采用的是分层架构,分四层: 1.  Applicitations:应用层 2.  Applicitation Framework:架构层 3.  Libraries:类库层 4.  ...

  10. Linux chage命令详解

    原文 chage命令用于密码实效管理,该是用来修改帐号和密码的有效期限,接下来通过本文给大家介绍Linux chage命令相关知识,本文介绍的非常详细,具有参考借鉴价值,感兴趣的朋友一起学习吧 lin ...