对正则表达式有基本了解的读者,一定不会陌生『d』、『[a-z]+』之类的表达式,前者匹配一个数字字符,后者匹配一个以上的小写英文字母。但是如果你用过vi、grep、awk、sed之类linux/Unix下的工具或许会发现,这些工具虽然支持正则表达式,语法却很不一样,照通常习惯的办法写的『d』、『[a-z]+』之类的正则表达式,往往不是无法识别就是匹配错误。而且,这些工具自身之间也存在差异,同样的结构,有时需要转义有时不需要转义。究竟是为什么呢?原因在于,Unix/Linux下的工具大多采用POSIX规范,同时,POSIX规范又可分为两种流派(flavor)。所以,首先有必要了解一下POSIX规范。

一、POSIX规范
POSIX的全称是Portable Operating System Interface for UNIX,它由一系列规范构成,定义了UNIX操作系统应当支持的功能,所以“POSIX规范的正则表达式”其实只是“关于正则表达式的POSIX规范”,它定义了BRE(Basic Regular Expression,基本型正则表达式)和ERE(Extended Regular Express,扩展型正则表达式)两大流派。在兼容POSIX的UNIX系统上,grep和egrep之类的工具都遵循POSIX规范,一些数据库系统中的正则表达式也符合POSIX规范。
POSIX的诞生和Unix的发展是密不可分的,电气和电子工程师协会(Institute of Electrical and Electronics Engineers,IEEE)最初开发 POSIX 标准,是为了提高 UNIX 环境下应用程序的可移植性。Unix于70年代诞生于贝尔实验室,并于80年代向美各大高校分发V7版的源码以做研究。加利福尼亚大学伯克利分校在V7的基础上开发了BSD Unix。后来很多商业厂家意识到Unix的价值也纷纷以贝尔实验室的System V或BSD为基础来开发自己的Unix,较著名的有Sun OS,AIX,VMS。
然而,POSIX 并不局限于 UNIX。许多其它的操作系统,例如 DEC OpenVMS 支持 POSIX 标准,尤其是 IEEE Std. 1003.1-1990(1995 年修订)或 POSIX.1,POSIX.1 提供了源代码级别的 C 语言应用编程接口(API)给操作系统的服务程序,例如读写文件。POSIX.1 已经被国际标准化组织(International Standards Organization,ISO)所接受,被命名为 ISO/IEC 9945-1:1990 标准。
POSIX 已发展成为一个非常庞大的标准族,某些部分正处在开发过程中。POSIX 与 IEEE 1003 和 2003 家族的标准是可互换的。
Windows NT-based 系统不能直接支持新版POSIX接口,仅支持第一版POSIX v1:ISO/IEC9945-1:1990[1]
版标准。由于仅支持第一版POSIX的Windows NT-based系统不能创建符合POSIX接口标准的线程和窗体、套接字,所以微软公司提供POSIX兼容层Microsoft POSIX subsystem软件包(Windows Services for UNIX)以支持新版POSIX接口,Windows 系统还可以运行其他POSIX兼容层例如Cygwin.
二、gnu的由来
GNU是“GNU is Not Unix”的缩写。提到gnu不得不提到gnu计划。
GNU计划,又称革奴计划,是由Richard Stallman在1983年9月27日公开发起的。它的目标是创建一套完全自由的操作系统。Richard Stallman最早是在net.unix-wizards新闻组上公布该消息,并附带《GNU宣言》等解释为何发起该计划的文章,其中一个理由就是要“重现当年软件界合作互助的团结精神”。为保证GNU软件可以自由地“使用、复制、修改和发布”,所有GNU软件都有一份在禁止其他人添加任何限制的情况下授权所有权利给任何人的协议条款,GNU通用公共许可证(GNU General Public License,GPL)。即“反版权”(或称Copyleft)概念。
(ps:大胡子Stallman也是互联网史上功绩赫赫的人,也该属于开发人员该参拜的大神!)
1985年Richard Stallman又创立了自由软件基金会(Free Software Foundation)来为GNU计划提供技术、法律以及财政支持。尽管GNU计划大部分时候是由个人自愿无偿贡献,但FSF有时还是会聘请程序员帮助编写。当GNU计划开始逐渐获得成功时,一些商业公司开始介入开发和技术支持。当中最著名的就是之后被Red Hat兼并的 Cygnus Solutions。
1991年Linus Torvalds编写出了与UNIX兼容的Linux操作系统内核并在GPL条款下发布。Linux之后在网上广泛流传,许多程序员参与了开发与修改。1992年Linux与其他GNU软件结合,完全自由的操作系统正式诞生。该操作系统往往被称为“GNU/Linux”或简称Linux。
许多UNIX系统上也安装了GNU软件,因为GNU软件的质量比之前UNIX的软件还要好。GNU工具还被广泛地移植到Windows和Mac OS上。
GNU 包含3个协议条款,
GPL:GNU通用公共许可证(GNU General Public License)
LGPL:GNU较宽松公共许可证 (GNU Lesser General Public License), ) ,旧称 GNU Library General Public License (GNU 库通用公共许可证);
GFDL : GNU自由文档许可证(GNU Free Documentation License )的缩写形式。
这里指的自由,并不是价格免费,这和价格无关而是使用软件对所有的用户来说是自由的。GPL
通过如下途径实现这一目标:
1.它要求软件以源代码的形式发布,并规定任何用户能够以源代码的形式将软件复制或发布给别的用户。
2.如果用户的软件使用了受 GPL 保护的任何软件的一部分,那么该软件就继承了 GPL 软件,并因此而成为 GPL 软件,也就是说必须随应用程序一起发布源代码。
3.GPL 并不排斥对自由软件进行商业性质的包装和发行,也不限制在自由软件的基础上打包发行其他非自由软件。
GNU 认为任何软件都应当以 自由软件 发布。要让一个软件成为自由软件,您需要把它以自由软件许可证发布。我们通常使用 GNU 通用公共许可证 (GNU GPL) 发布软件,但有时我们也使用 其它自由软件许可证 发布软件。在 GNU 软件包中,GNU 只使用与GNU GPL兼容的许可证。
自由软件的文档应当是 自由文档 ,以便人们可以随着软件的改进去更新它或是重新发布它。若要把文档以自由文档的形式发布,您需要使用自由文档许可证。我们通常使用 GNU 自由文档许可证 (GNU FDL) ,但少数情况下我们也使用 其它的自由文档许可证 。
正因为linux遵循了这一原则,是linux的发展越来越完善,该系统也成为操作系统中优秀的系统之一。
我们近期会推出linux命令基础篇系列,愿这系列文章能给您带来帮助,错误之处还希望大家多多指正,小编一定及时改正!愿老司机勿喷!愿世界和平!如果您觉得还行,就动手点个赞关注我们吧!(ps:后期小编会推出各种实用的干货,如果你喜欢并且能给你带来帮助!快来关注我吧!)


还没有评论,来说两句吧...