再强调一遍:Unix 不是 Linux!

2022 年 8 月 31 日 CSDN


摘要:程序员都知道,Linux 不是 Unix,不过二者之间确实存在关系,即 Linux 系统是从 Unix 派生出来的,而 Linux 是一个类 Unix 的操作系统。那么,二者之间具体存在哪些明显的差异呢?

文链接:https://akr.am/blog/posts/unix-is-not-linux

声明:本文为 CSDN 翻译,未经授权,禁止转载。


作者
| Mohamed Akram
译者 | 弯月
出品 | CSDN(ID:CSDNnews)

网上很多有关POSIX和Unix工具的教程和指南总是假设你安装了Linux,或者更具体地说,安装了基于GNU的操作系统。然而,在探讨shell的行为、工具程序以及C的标准库时,这种假设往往会产生很大的影响。

虽然Linux的主导地位可能会让我们忽略Linux与这些操作系统的不同,但我们还是应该有一定的了解。在本文中,我将列出一些比较明显的差异。


Bash不是标准的shell


所有Unix系统上的默认shell都是sh,而不是bash。POSIX标准中介绍了sh中使用的语言。然而,在许多Linux系统上,sh只是指向bash的链接,这样可以用更接近标准的方式来使用bash,但人们依然可以使用一些无法在其他系统上使用的bash功能。如有疑问,请参阅标准。


Unix不包含长选项


Unix命令的选项有两种写法:短选项(只有一条短线-)与长选项(有两条短线--)。短选项一般会采用缩写的形式,而长选项一般会写出完整的单词。

许多工具程序都接受长选项,例如grep --count,对应的短选项是grep -c。前者是GNU的写法,其他系统通常不会采用这种写法,例如BSD。事实上,标准的getopts工具程序和相应的getopt C函数只支持短选项。


Make不同于GNU make


POSIX版本的make比GNU版本更有局限性。这个问题很难解决,因为规范的许多方面都有所欠缺,特别是逻辑或条件运算符。为了解决这个问题,你可以将一些逻辑移动到configure脚本,由这个脚本生成另一个Makefile,然后再包含到主文件中。此外,BSD的语法与GNU完全不同,例如条件语句。幸运的是,如果你只关注macOS和Linux,则可以放心地使用GNU的特性,因为macOS都是基于GNU的。


C编译器不同于GCC


在Makefiles文件中引用C编译器时,最好使用变量$(CC),在编译C++代码时,最好使用变量$(CXX)。大多数BSD系统的默认编译器如今都改为使用Clang了,而且不提供gcc可执行文件。如果是在Makefiles以外使用C和C++编译器,则可以直接使用cc和c++命令,这两个命令能在所有系统上工作。


GNU不同于Linux


二者略有不同,GNU接口不一定会出现在Linux系统上。例如,Alpine Linux发行版因其轻量级而流行于Docker容器中,它没有使用musl的GNU C库,而且放弃了GNU工具程序,改为使用BusyBox。因此,最好还是使用可移植的接口,即便你的目标只是Linux系统。


Unix不同于UNIX


最后,请注意,Unix与UNIX也不完全相同。后者是需要The Open Group认证的商标。在众多经过认证的操作系统中,最有名的是macOS,它遵循一切UNIX规范。也就是说,包括BSD在内的大多数类Unix系统以及GNU工具都在努力尽量遵守标准。

— 推荐阅读 —
   
   
     
传华为将抢先苹果首发卫星通信 ;1200亿亿次每秒,阿里上线世界第一智算中心;wxPython团队辟谣已死传闻|极客头条
☞AMD 发布锐龙 7000 系列:采用 5nm 制程,性能加量但不加价,而且“管够”!
一个 Python Bug 干倒了估值 1.6 亿美元的公司


登录查看更多
0

相关内容

UNIX操作系统(UNIX),是美国AT&T公司1971年在PDP-11上运行的操作系统。具有多用户、多任务的特点,支持多种处理器架构,最早由肯·汤普逊(Kenneth Lane Thompson)、丹尼斯·里奇(Dennis MacAlistair Ritchie)和道格拉斯·麦克罗伊于1969年在AT&T的贝尔实验室开发。 现为 Linux、BSD 和 Solaris 等多种符合 POSIX 标准的「Unix 类操作系统」的统称。
【硬核书】Linux 基础第二版,500页pdf
专知会员服务
84+阅读 · 2022年9月12日
【经典书】现代C语言教程,408页pdf手写教你写C代码
专知会员服务
59+阅读 · 2022年8月5日
找工作实用书《LeetCode 题解》,262页pdf
专知会员服务
129+阅读 · 2021年12月2日
【硬核书】Linux核心编程|Linux Kernel Programming,741页pdf
专知会员服务
78+阅读 · 2021年3月26日
【经典书】Linux UNIX系统编程手册,1554页pdf
专知会员服务
44+阅读 · 2021年2月20日
【干货书】Linux命令行与shell脚本编程大全,第3版818页pdf
专知会员服务
61+阅读 · 2020年12月30日
专知会员服务
79+阅读 · 2020年9月28日
【2020新书】现代C++初学者指南,301页pdf
专知会员服务
156+阅读 · 2020年7月24日
【实用书】Python爬虫Web抓取数据,第二版,306页pdf
专知会员服务
115+阅读 · 2020年5月10日
Swift 终将成为操作系统的一部分
CSDN
0+阅读 · 2022年10月20日
说好的 Swift 取代 Python 呢?
CSDN
0+阅读 · 2022年9月8日
Linux 内核不能进行软件工程?
CSDN
2+阅读 · 2022年8月30日
“C不再是一种编程语言”
AI前线
1+阅读 · 2022年4月2日
2021 年 Python 的好与坏
InfoQ
2+阅读 · 2021年11月16日
国家自然科学基金
1+阅读 · 2013年12月31日
国家自然科学基金
0+阅读 · 2013年12月31日
国家自然科学基金
0+阅读 · 2013年12月31日
国家自然科学基金
0+阅读 · 2012年12月31日
国家自然科学基金
0+阅读 · 2012年12月31日
国家自然科学基金
1+阅读 · 2012年12月31日
国家自然科学基金
0+阅读 · 2009年12月31日
国家自然科学基金
1+阅读 · 2008年12月31日
Arxiv
57+阅读 · 2022年1月5日
已删除
Arxiv
31+阅读 · 2020年3月23日
Arxiv
25+阅读 · 2018年8月19日
VIP会员
相关VIP内容
【硬核书】Linux 基础第二版,500页pdf
专知会员服务
84+阅读 · 2022年9月12日
【经典书】现代C语言教程,408页pdf手写教你写C代码
专知会员服务
59+阅读 · 2022年8月5日
找工作实用书《LeetCode 题解》,262页pdf
专知会员服务
129+阅读 · 2021年12月2日
【硬核书】Linux核心编程|Linux Kernel Programming,741页pdf
专知会员服务
78+阅读 · 2021年3月26日
【经典书】Linux UNIX系统编程手册,1554页pdf
专知会员服务
44+阅读 · 2021年2月20日
【干货书】Linux命令行与shell脚本编程大全,第3版818页pdf
专知会员服务
61+阅读 · 2020年12月30日
专知会员服务
79+阅读 · 2020年9月28日
【2020新书】现代C++初学者指南,301页pdf
专知会员服务
156+阅读 · 2020年7月24日
【实用书】Python爬虫Web抓取数据,第二版,306页pdf
专知会员服务
115+阅读 · 2020年5月10日
相关资讯
Swift 终将成为操作系统的一部分
CSDN
0+阅读 · 2022年10月20日
说好的 Swift 取代 Python 呢?
CSDN
0+阅读 · 2022年9月8日
Linux 内核不能进行软件工程?
CSDN
2+阅读 · 2022年8月30日
“C不再是一种编程语言”
AI前线
1+阅读 · 2022年4月2日
2021 年 Python 的好与坏
InfoQ
2+阅读 · 2021年11月16日
相关基金
国家自然科学基金
1+阅读 · 2013年12月31日
国家自然科学基金
0+阅读 · 2013年12月31日
国家自然科学基金
0+阅读 · 2013年12月31日
国家自然科学基金
0+阅读 · 2012年12月31日
国家自然科学基金
0+阅读 · 2012年12月31日
国家自然科学基金
1+阅读 · 2012年12月31日
国家自然科学基金
0+阅读 · 2009年12月31日
国家自然科学基金
1+阅读 · 2008年12月31日
Top
微信扫码咨询专知VIP会员