分类: LINUX
2007-12-29 05:26:15
Linux 技巧:谈 Linux GNU 实用工具兼容性 |
王 丽娜 (), 软件工程师, IBM 中国软件开发中心 2007 年 11 月 29 日 GNU utility 的默认行为和 POSIX 标准有不兼容的地方。Linux 系统的不同版本采用了不同版本的 POSIX 标准,而 POSIX 不同版本标准之间有不兼容的地方。这两个不兼容问题对于产品在 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 的默认行为和 POSIX 标准不兼容。为了解决这种不兼容情况,Linux 系统引入了环境变量’POSIXLY_CORRECT’。 设置方法: export POSIXLY_CORRECT=TRUE unset POSIXLY_CORRECT POSIX 细节: 输出结果在缺省时以 512 字节为计数单位,若给以 -k 选项,则以 1024 字节为计数单位。 GNU 细节: (在没有用选项指定计数单位的情况下)输出结果以 1024 字节为计数单位,但不包括由于设置了环境变量’POSIXLY_CORRECT’而跟从 POSIX 标准的情况。 清单 1. df 命令输出 # df # df GNU utilities 通常遵从的 POSIX 版本就是系统所在的 POSIX 版本。RedHat5 GNU utilities 采用的是新的 POSIX 版本,RedHat3,4 采用的是旧的 POSIX 版本,由于 POSIX 新旧版本之间有不兼容存在,导致一些在 RedHat3,4 上运行良好的应用程序和脚本直接移植到 RedHat5 上不能正常运行行。 比如,’tail +2
清单 2. 文件 wln.txt 内容 # more wln.txt 清单 3. 在旧版本POSIX上运行 # tail +2 wln.txt 清单 4. 在新版本POSIX上运行 # tail +2 wln.txt 为 了解决不同版本的 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 清单 5. 使用’_POSIX2_VERSION’环境变量 # tail +2 wln.txt
本文讲述了Linux系统下的两个环境变量解决兼容性问题的方法。Linux是个开源的系统,通过这两个环境变量的使用,提高了应用程序在不同Linux版本之间的移植性。
|