ChinaUnix.net 首页 | 博客 | Linux | 论坛 | 人才 | 培训 | 知识库 | 资料 | 读书 | 手册 | 精华 | 下载 | 沙龙 | 搜索
Linux首页 | Linux论坛 | 论坛精华 | 开源新闻 | 技术文章 | 专题专栏 | 新手指南 | 迁移方案 | 产品方案 | 开源项目 | 开源图书 | 软件下载 | 人才招聘 | Linux博客
  搜索

  产品与方案
·中科红旗全面打造现代化邮政体系
·红旗助力“网上审批服务” 推动电子政务
·红旗正版化开创呼和浩特网吧建设新起点
·红旗Linux助信息产业部邮件服务器“快跑”
·中标普华Linux 为电子政务信息化保驾护航
·中标普华Linux助力基金产业
·中标普华Office率先支持UOF标准
·中标普华邮件系统助力西藏政府信息化建设
·红旗Linux助力国库集中支付系统改革
·红旗助中信卫星 掀起GIS通信应用风暴
·红旗软件助力烟草总局 全面建设“数字烟草”
·红旗助力“信访阳光工程”打造畅通信访渠道
·红帽联合FIS发布下一代实时核心银行平台
·红旗助力金盾 打造全无忧出入境信息系统
·红旗Linux全力打造中国邮政总局名址信息库
·爱尔兰证交所从Unix迁移到红帽企业Linux
·一流的意大利银行选择使用红帽企业Linux
·PLUS Finanzservice选择使用红帽企业Linux
·红帽助力TransACT Communications 公司
·法国零售业巨头Lapeyre采用Redhat Linux
·旅游预订网站选择使用红帽企业Linux
·马哈拉施特拉邦政府的红帽解决之道
·美国联邦政府案例
·红帽为慕尼黑展览会提供现代化集群系统
·Yuba郡用开源软件和红帽产品提高了效率
·红帽企业Linux助印度理工建立高性能计算中心
·采用红帽Linux 将系统维护时间缩短了65%
·从UNIX迁移到Linux使Peñoles公司获益非浅
·Hikal公司用红帽企业Linux开展任务关键的ERP项目
·KDE3.5.4新版本发布
·芝加哥商业交易所从Unix向Linux迁移
·南方基金管理有限公司成功案例 Red Hat Linux
·广东北电通讯设备有限公司成功案例
·挪威国家石油公司从UNIX迁移到红帽Linux,成本减半
·中央电视台CCTV动画部案例 Red Hat Linux

  图书

鸟哥的Linux私房菜基础学..


Linux程序设计.第3版


Linux设备驱动开发详解


  下载
·Endian Firewall
·linux kernel(Linux 内核)
·CentOS
·Fedora Core 6
·Scientific Linux
·Slackware 11.0
·Gentoo Linux
·ubuntu-6.10-i386服务器版本
·ubuntu-6.10-amd64服务器版
·ubuntu-6.10-i386桌面版
·ubuntu-6.10-amd64桌面版
·Engarde Linux
您的位置: Linux时代 > 技术文档 > 新手入门 >

Linux 技巧:谈Linux GNU实用工具兼容性

日期:2007-12-04 作者:王丽娜 来自:IBM DW中国


GNU utility 的默认行为和 POSIX 标准有不兼容的地方。Linux 系统的不同版本采用了不同版本的 POSIX 标准,而 POSIX 不同版本标准之间有不兼容的地方。这两个不兼容问题对于产品在 Linux 各个平台之间的可移植性影响很大。

Linux 系统的兼容性问题

POSIX 定义:

POSIX 表示可移植操作系统接口:Portable Operating System Interface,电气和电子工程师协会(Institute of Electrical and Electronics Engineers,IEEE)最初开发 POSIX 标准,是为了提高 UNIX 环境下应用程序的可移植性。

GNU utility 定义:

GNU 是 GNU Is Not UNIX 的递归缩写。Linux 的开发使用了许多 GNU 工具。Linux 系统上用于实现 POSIX 标准的工具几乎都是 GNU 项目开发的,如 emacs 编辑器、著名的 GNU C 和 C++ 编译器。

兼容性问题 1:

GNU/Linux 与 POSIX 标准基本是兼容的,但是在一些情况下,GNU utility 的默认行为和 POSIX 标准有不兼容的地方。

兼容性问题 2:

Linux 系统的不同版本采用了不同版本的 POSIX 标准,而 POSIX 不同版本标准之间有不兼容的地方。

这两个不兼容问题对于产品在 Linux 各个平台之间的可移植性影响很大,因此,掌握如何解决这两个兼容性问题非常重要。

GNU utility

在一些情况下,GNU utility 的默认行为和 POSIX 标准不兼容。为了解决这种不兼容情况,Linux 系统引入了环境变量’POSIXLY_CORRECT’。

设置方法:

export POSIXLY_CORRECT=TRUE
取消设置:

unset POSIXLY_CORRECT
例如:df命令(报告文件系统的磁盘使用情况)输出在 POSIX 标准下和 GNU 下是不同的。要使系统 GNU utilities 完全遵从 POSIX 标准,可以设置环境变量’POSIXLY_CORRECT’。

POSIX 细节:

输出结果在缺省时以 512 字节为计数单位,若给以 -k 选项,则以 1024 字节为计数单位。

GNU 细节:

(在没有用选项指定计数单位的情况下)输出结果以 1024 字节为计数单位,但不包括由于设置了环境变量’POSIXLY_CORRECT’而跟从 POSIX 标准的情况。

清单 1. df 命令输出

# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 70675484 9834248 57251112 15% /
# export POSIXLY_CORRECT=True
# df
Filesystem 512B-blocks Used Available Use% Mounted on
/dev/sda1 141350968 19668496 114502224 15% /
# df –k
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 70675484 9834248 57251112 15% /
# unset POSIXLY_CORRECT

# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 70675484 9834248 57251112 15% /
Linux 系统的不同版本采用了不同版本的POSIX标准,如 RedHat3,4系统采用的是旧版本 POSIX 标准 1003.2-1992,RedHat5 采用的是新版本 POSIX 标准 1003.1-2001,新旧版本的 POSIX 标准在一些地方有不兼容情况存在。

GNU utilities 通常遵从的 POSIX 版本就是系统所在的 POSIX 版本。RedHat5 GNU utilities 采用的是新的 POSIX 版本,RedHat3,4 采用的是旧的 POSIX 版本,由于 POSIX 新旧版本之间有不兼容存在,导致一些在 RedHat3,4 上运行良好的应用程序和脚本直接移植到 RedHat5 上不能正常运行行。

比如,’tail +2 <filename>’这个命令在旧版本 POSIX 上的意思是得到文件从第二行到末尾的内容,但是从新的 POSIX 版本 1003.1-2001 开始,这个命令的意思变成了得到文件’+2’的内容,如果你想得到真正文件的内容,就得改用命令’tail –n +2 <filename>’。

清单 2. 文件 wln.txt 内容

# more wln.txt
It is sunny today,
you are an industrious boy,
give the room a good sweep
这是用于下面tail命令示例的文件。

清单 3. 在旧版本POSIX上运行

# tail +2 wln.txt
you are an industrious boy,
give the room a good sweep.
旧版本POSIX用’tail +2’可以正确显示文件前两行内容。

清单 4. 在新版本POSIX上运行

# tail +2 wln.txt
tail: cannot open `+2` for reading: No such file or directory
==> wln.txt <==
It is sunny today,
you are an industrious boy,
give the room a good sweep.
# tail –n +2 wln.txt
you are an industrious boy,
give the room a good sweep.
新版本POSIX用’tail +2’命令不能正确显示文件前两行内容,必须用’tail –n +2’命令才行。

为了解决不同版本的 POSIX 标准的兼容性问题,使得 GNU utilities 能和不同版本的 POSIX 标准工作,Linux 系统引入了环境变量’_POSIX2_VERSION’,这个变量的格式是 YYYYMM,表示 POSIX 标准采用的年代和月份。

当前’_POSIX2_VERSION’有两个值:

‘199209’ 代表 POSIX 1003.2-1992

‘200112’ 代表 POSIX 1003.1-2001

设置用法:

export _POSIX2_VERSION=199209
取消设置:

unset _POSIX2_VERSION
如果你有旧版本的应用程序和脚本想移植到采用新版本 POSIX 标准的系统上运行,比如’tail +10’,’sort +1’等,你就能通过设置环境变量’_POSIX2_VERSION=199209’来解决兼容性。

清单 5. 使用’_POSIX2_VERSION’环境变量

# tail +2 wln.txt
tail: cannot open `+2` for reading: No such file or directory
==> wln.txt <==
It is sunny today,
you are an industrious boy,
give the room a good sweep.
# export _POSIX2_VERSION=199209
# tail +2 wln.txt
you are an industrious boy,
give the room a good sweep.
引入’_POSIX2_VERSION’变量后,’tail +2’能够正确显示文件前两行了。

总结

本文讲述了Linux系统下的两个环境变量解决兼容性问题的方法。Linux是个开源的系统,通过这两个环境变量的使用,提高了应用程序在不同Linux版本之间的移植性。

原文链接:http://www.ibm.com/developerworks/cn/linux/l-cn-posix/index.html

本文被浏览



 相关新闻

厂商各自为政兼容性成瓶颈 Linux统一大业受阻2006-08-30 09:19:30
LSB实验室落户中国 Linux兼容性问题有望解决2006-01-17 13:56:14
从Windows到Linux的顾虑:安全、成本、兼容性2005-04-08 10:37:34


 相关评论
关于我们 | 联系方式 | 广告合作 | 诚聘英才 | 网站地图 | 免费注册

Copyright © 2001-2006 ChinaUnix.net All Rights Reserved

感谢所有关心和支持过ChinaUnix的朋友们

京ICP证041476号