nice命令兼容性分析实例
背景
产品实验室出现一例日志转储问题,经定位发现当前版本号没有提供nice命令,而cron拉起定时任务时,却调用了nice命令,对定时任务做优先级调整。
毫无疑问兴许版本号须要提供nice命令,可是是否能在之前的版本号升级到兴许版本号时。将该nice命令copy一份到升级前的版本号里,先做日志转储。再升级呢?
Linux 兼容性
当前版本号的nice命令,是否能在低版本号上正常执行。这属于二进制兼容性的范畴。
Linux领域有个二进制规范标准,称为LSB(Linux Standards Base),这个组织专门制订Linux二进制接口的标准(当前最新公布标准为LSB 5.0),不论什么影响二进制接口变化的因素,她都须要考虑。
当然LSB支持的二进制兼容性是向后兼容(backwards compatibility),这是什么意思呢?简单地说就是:
- 在低版本号Linux编译的二进制,能够直接执行在高版本号上
- 在高版本号Linux编译的二进制,不能保证一定能够执行在低版本号上
其实,我们遇到的兼容性问题都是第2类。而非第1类。在这样的场景上(特别是开源软件)。从技术上是无法做保证100%兼容的。
为什么会有LSB,大家想过吗?仅仅要API兼容,大不了编译一把出一个新的二进制,不就能够解决这个二进制兼容性问题了么?
那是由于Linux发行版许多(几百种不在话下,著名者如Redhat。SUSE和Ubuntu)。站在软件供应商的角度试想一下,比方Linux防火墙(Checkpoint)软件供应商。他们就须要在每一个发行版上公布一个二进制软件,并且同一发行版不同版本号(比方Ubuntu 12.4和14.4)都得公布不同的二进制软件。对谁来说都听吃不消。
二进制兼容。在业界其实算不上什么新奇的事情,各种场景下根本无法重编和重出版本号(由于老版本号压根就没有这个东西,重出版本号解决不了升级场景。由于他影响不了老版本号)
LSB就是来解决这个事情的,仅仅需公布一个二进制程序,就能通吃全部的公布版。
nice命令依赖分析
前面提及,LSB或者一般软件,仅仅能保证向后兼容,无法保证向前兼容。如今遇到的问题是有限版本号的向前兼容问题,仅仅须要正向分析一下曾经全部版本号是否OK就能够了。
当前全部历史版本号,kernel和glibc的版本号号是没有发生变化的,他们遵守的LSB版本号也是同样的,从这个角度来说。应该是兼容的。
除非nice依赖glibc/kernel二进制中的新增接口。造成新软件老法在老版本号上执行。
nice命令库依赖分析
通过ldd命令可一目了然知道nice命令依赖那些执行库:
$ ldd /usr/bin/nice
linux-vdso.so.1 => (0x00007ff5761000)
libc.so.6 => /lib64/libc.so.6 (0x00007fd4c2268000)
/lib64/ld-linux-x86-64.so.2(0x00007fd4c25c6000)
咋一看nice依赖3个执行库,各自是 linux-vdso, libc以及ld-linux。
- linux-vdso.so.1是Linux kernel提供的虚拟库,不是nice二进制明白依赖的。
- libc.so.6正是 glibc执行库,nice依赖于它
- ld-linux-x86-64.so.2是86-64 Linux的动态链接器
综上。仅仅需之前全部版本号都提供libc.so.6和ld-linux-x86-64.so.2这两个库。并且SONAME保持一致就可以。
经分析,满足。
nice命令函数依赖分析
通过readelf可查看nice命令所调用的外部定义函数和变量:
$ readelf -s /usr/bin/nice | grep UND | grep -v NOTYPE
1:0000000000000000 0 FUNC GLOBAL DEFAULT UND memset@GLIBC_2.2.5 (2)
2:0000000000000000 0 FUNC GLOBAL DEFAULT UND mbrtowc@GLIBC_2.2.5 (2)
3:0000000000000000 0 FUNC GLOBAL DEFAULT UND abort@GLIBC_2.2.5 (2)
4:0000000000000000 0 FUNC GLOBAL DEFAULT UND __fprintf_chk@GLIBC_2.3.4 (3)
6:0000000000000000 0 FUNC GLOBAL DEFAULT UND textdomain@GLIBC_2.2.5 (2)
7:0000000000000000 0 FUNC GLOBAL DEFAULT UND execvp@GLIBC_2.2.5 (2)
8:0000000000000000 0 FUNC GLOBAL DEFAULT UND exit@GLIBC_2.2.5 (2)
9:0000000000000000 0 FUNC GLOBAL DEFAULT UND __assert_fail@GLIBC_2.2.5 (2)
10:0000000000000000 0 FUNC GLOBAL DEFAULT UND __printf_chk@GLIBC_2.3.4 (3)
11:0000000000000000 0 FUNC GLOBAL DEFAULT UND bindtextdomain@GLIBC_2.2.5 (2)
12:0000000000000000 0 FUNC GLOBAL DEFAULT UND malloc@GLIBC_2.2.5 (2)
13:0000000000000000 0 FUNC GLOBAL DEFAULT UND __libc_start_main@GLIBC_2.2.5 (2)
14:0000000000000000 0 FUNC GLOBAL DEFAULT UND getpriority@GLIBC_2.2.5 (2)
15:0000000000000000 0 FUNC GLOBAL DEFAULT UND _exit@GLIBC_2.2.5 (2)
16:0000000000000000 0 FUNC GLOBAL DEFAULT UND __cxa_atexit@GLIBC_2.2.5 (2)
17:0000000000000000 0 FUNC GLOBAL DEFAULT UND free@GLIBC_2.2.5 (2)
18:0000000000000000 0 FUNC GLOBAL DEFAULT UND strlen@GLIBC_2.2.5 (2)
19:0000000000000000 0 FUNC GLOBAL DEFAULT UND opterr@GLIBC_2.2.5 (2)
20:0000000000000000 0 FUNC GLOBAL DEFAULT UND __ctype_get_mb_cur_max@GLIBC_2.2.5 (2)
21:0000000000000000 0 FUNC GLOBAL DEFAULT UND __vfprintf_chk@GLIBC_2.3.4 (3)
22:0000000000000000 0 FUNC GLOBAL DEFAULT UND __ctpe_b_loc@GLIBC_2.3.4 (3)
23:0000000000000000 0 FUNC GLOBAL DEFAULT UND fputs_unlocked@GLIBC_2.2.5 (2)
24:0000000000000000 0 FUNC GLOBAL DEFAULT UND setpriority@GLIBC_2.2.5 (2)
25:0000000000000000 0 FUNC GLOBAL DEFAULT UND __fpending@GLIBC_2.2.5 (2)
26:0000000000000000 0 FUNC GLOBAL DEFAULT UND strtol@GLIBC_2.2.5 (2)
27:0000000000000000 0 FUNC GLOBAL DEFAULT UND memcpy@GLIBC_2.2.5 (2)
28:0000000000000000 0 FUNC GLOBAL DEFAULT UND strchr@GLIBC_2.2.5 (2)
29:0000000000000000 0 FUNC GLOBAL DEFAULT UND getopt_long@GLIBC_2.2.5 (2)
30:0000000000000000 0 FUNC GLOBAL
posted on
2017-07-21 09:35
slgkaifa
阅读(...)
评论(...)
编辑
收藏
nice命令兼容性分析实例的更多相关文章
- Oracle dbms_lock.sleep()存储过程使用技巧-场景-分析-实例
<Oracle dbms_lock.sleep()存储过程使用技巧>-场景-分析-实例 摘要:今天是2014年3月10日,北京,雾霾,下午组织相关部门开会.会议的结尾一名开发工程师找到了我 ...
- sodu 命令场景分析
摘自:http://www.cnblogs.com/hazir/p/sudo_command.html sudo 命令情景分析 Linux 下使用 sudo 命令,可以让普通用户也能执行一些或者全 ...
- ELK 日志分析实例
ELK 日志分析实例一.ELK-web日志分析二.ELK-MySQL 慢查询日志分析三.ELK-SSH登陆日志分析四.ELK-vsftpd 日志分析 一.ELK-web日志分析 通过logstash ...
- 使用python 模仿mybinlog 命令 二进制分析mysql binlog
出处:黑洞中的奇点 的博客 http://www.cnblogs.com/kelvin19840813/ 您的支持是对博主最大的鼓励,感谢您的认真阅读.本文版权归作者所有,欢迎转载,但请保留该声明. ...
- 基于linux与busybox的reboot命令流程分析
http://www.xuebuyuan.com/736763.html 基于Linux与Busybox的Reboot命令流程分析 ********************************** ...
- 利用Python进行异常值分析实例代码
利用Python进行异常值分析实例代码 异常值是指样本中的个别值,也称为离群点,其数值明显偏离其余的观测值.常用检测方法3σ原则和箱型图.其中,3σ原则只适用服从正态分布的数据.在3σ原则下,异常值被 ...
- php开发面试题---游戏面向对象设计与分析实例
php开发面试题---游戏面向对象设计与分析实例 一.总结 一句话总结: 不要光空想,多看几个实例就知道自己的游戏该怎么设计了 根据实例去理解面向对象编程的的六大原则 1.英雄种类分别有:战士.法师. ...
- Uboot命令U_BOOT_CMD分析
其中U_BOOT_CMD命令格式如下: U_BOOT_CMD(name,maxargs,repeatable,command,"usage","help") 各 ...
- sudo 命令情景分析
Linux 下使用 sudo 命令,可以让普通用户也能执行一些或者全部的 root 命令.本文就对我们常用到 sudo 操作情景进行简单分析,通过一些例子来了解 sudo 命令相关的技巧. 情景一:用 ...
随机推荐
- 【bzoj3105】[cqoi2013]新Nim游戏 高斯消元求线性基
题目描述 传统的Nim游戏是这样的:有一些火柴堆,每堆都有若干根火柴(不同堆的火柴数量可以不同).两个游戏者轮流操作,每次可以选一个火柴堆拿走若干根火柴.可以只拿一根,也可以拿走整堆火柴,但不能同时从 ...
- CS231n笔记 Lecture 1 Introduction
主题有关 这一讲主要是介绍性质的,虽然大多数概念以前听说过,但还是在他们的介绍中让我有如下一些认识,所谓温故而知新,不无道理: IMAGENET Feifei Li的团队首先爬取.标注了IMAGENE ...
- 【Luogu】P2567幸运数字(容斥爆搜)
题目链接 先预处理出幸运数,把成倍数关系的剔掉,然后用容斥原理搜索一下. 这里的容斥很像小学学的那个“班上有n个同学,有a个同学喜欢数学,b个同学喜欢语文……”那样. #include<cstd ...
- 【Luogu】P2569股票交易(单调队列优化DP)
题目链接 首先这题可以肯定的是朴素DP秒出.然后单调队列优化因为没接触过所以不会emmm 而且脑补没补出来 坐等四月省选倒数第一emmm 心态爆炸,偷懒放题解链接 #include<cstdio ...
- java web项目防止多用户重复登录解决方案
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本人声明.否则将追究法律责任.作者:永恒の_☆ 地址:http://blog.csdn.net/chenghui031 ...
- Begin to study Deep Learning
今天是儿童节,我开始了人生的新的阶段.借助这个节日我想在今年静下心来,简单执着的进行学习,不掺杂任何利益. 早上起来的比较晚,洗了床单吃了早午饭,背着书包就来到了公司.软件园里面很多游客,但是背着电脑 ...
- 超爽的Windows终端Cmder
我们常常看到科研.军事.编程上用的计算机系统是"黑洞洞"的,没有桌面.相对我们现在使用的Windows系统,既方便又美观,那么他们怎么不用Windows一样的图形化界面呢? 告诉你 ...
- 巧克力(zoj 1363)
2100年,ACM牌巧克力将风靡全球. “绿的,橘红的,棕色的,红的…”,彩色的糖衣可能是ACM巧克力最吸引人的地方.你一共见过多少种颜色?现在,据说ACM公司从一个24种颜色的调色板中选择颜色来装饰 ...
- Java-二叉树-插入、删除、遍历
二叉树的具体特性和细节知识点,自行百度,直接上代码. 节点:节点内容.左子孩子.右子孩子.父亲 class Node { private int data; private Node leftChil ...
- 【NOIP2016练习】T2 旅行(树形DP,换根)
题意:小C上周末和他可爱的同学小A一起去X湖玩. X湖景区一共有n个景点,这些景点由n-1条观光道连接着,从每个景点开始都可以通过观光道直接或间接地走到其他所有的景点.小C带着小A从1号景点开始游玩. ...