Unix和Linux的差异

作者:mohamed akram
摘要:程序员都知道,linux 不是 unix,不过二者之间确实存在关系,即 linux 系统是从 unix 派生出来的,而 linux 是一个类 unix 的操作系统。那么,二者之间具体存在哪些明显的差异呢?
网上很多有关posix和unix工具的教程和指南总是假设你安装了linux,或者更具体地说,安装了基于gnu的操作系统。然而,在探讨shell的行为、工具程序以及c的标准库时,这种假设往往会产生很大的影响。
虽然linux的主导地位可能会让我们忽略linux与这些操作系统的不同,但我们还是应该有一定的了解。在本文中,我将列出一些比较明显的差异。
1. bash不是标准的shell
所有unix系统上的默认shell都是sh,而不是bash。posix标准中介绍了sh中使用的语言。然而,在许多linux系统上,sh只是指向bash的链接,这样可以用更接近标准的方式来使用bash,但人们依然可以使用一些无法在其他系统上使用的bash功能。如有疑问,请参阅标准。
2. unix不包含长选项
unix命令的选项有两种写法:短选项(只有一条短线-)与长选项(有两条短线--)。短选项一般会采用缩写的形式,而长选项一般会写出完整的单词。
许多工具程序都接受长选项,例如grep --count,对应的短选项是grep -c。前者是gnu的写法,其他系统通常不会采用这种写法,例如bsd。事实上,标准的getopts工具程序和相应的getopt c函数只支持短选项。
3. make不同于gnu make
posix版本的make比gnu版本更有局限性。这个问题很难解决,因为规范的许多方面都有所欠缺,特别是逻辑或条件运算符。为了解决这个问题,你可以将一些逻辑移动到configure脚本,由这个脚本生成另一个makefile,然后再包含到主文件中。此外,bsd的语法与gnu完全不同,例如条件语句。幸运的是,如果你只关注macos和linux,则可以放心地使用gnu的特性,因为macos都是基于gnu的。
4. c编译器不同于gcc
在makefiles文件中引用c编译器时,最好使用变量$(cc),在编译c++代码时,最好使用变量$(cxx)。大多数bsd系统的默认编译器如今都改为使用clang了,而且不提供gcc可执行文件。如果是在makefiles以外使用c和c++编译器,则可以直接使用cc和c++命令,这两个命令能在所有系统上工作。
5. gnu不同于linux
二者略有不同,gnu接口不一定会出现在linux系统上。例如,alpine linux发行版因其轻量级而流行于docker容器中,它没有使用musl的gnu c库,而且放弃了gnu工具程序,改为使用busybox。因此,最好还是使用可移植的接口,即便你的目标只是linux系统。
6. unix不同于unix
最后,请注意,unix与unix也不完全相同。后者是需要the open group认证的商标。在众多经过认证的操作系统中,最有名的是macos,它遵循一切unix规范。也就是说,包括bsd在内的大多数类unix系统以及gnu工具都在努力尽量遵守标准。


小米蓝米X1什么时候上市?蓝米X1最新消息:重返1999,小米手机全新子品牌蓝米X1现身!
奥尼C30电视摄像头评测 功能实用有待完善
OLED与TFT-LCD拼成本_OLED崭露头角成未来趋势
微软首席执行官谈AI战略
嵌入式软件开发和软件开发的区别
Unix和Linux的差异
戴姆勒拟研发双极电池 SKI拟61.5亿在美新建电池工厂
TE Connectivity获颁“最有影响力物联网传感企业奖”
卧龙电驱将为德国纬湃科技提供新能源汽车电机
HMI的交互方式和体现形式变化你喜欢吗
浅析气象雷达的基本知识及注意事项2
伺服专用输出电抗器
5G R16标准冻结对未来行业发展将迎来怎样的改变?
一种基于滑模控制的正弦波逆变器
压制干扰的原理是什么?怎样去实现它?
莱迪思发运MachXO可编程逻辑器件达7千5百万片
彩电市场线上零售规模上涨,彩电市场尺寸结构加速大屏化
汽车行业芯片紧缺 4家工厂的生产计划开始调整或关闭工厂
生成式AI正在偷走你的数据?
Marvell发布全方位云计算服务解决方案