Redian新闻
>
再强调一遍:Unix 不是 Linux

再强调一遍:Unix 不是 Linux

公众号新闻

摘要:程序员都知道,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工具都在努力尽量遵守标准。

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

(版权归原作者所有,侵删)


微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
神奇!双胞胎在妈妈肚子里竟是这样生活的,忍不住看了一遍又一遍硬核观察 #848 Linux 6.1 发布,拉开 Rust 进入 Linux 内核的大幕如何挖掘最好资产?天风证券赵晓光最新细讲两大核心逻辑,强调一定要带着“穿越式”的周期视角去看待Linux 中的 su 和 sudo 命令有什么区别? | Linux 中国天赋“易昺(bǐng)”,创造历史!如何在 Arch Linux 中安装 OpenOffice(新手指南) | Linux 中国阳了之后哪些情况需要就医?专家再强调……使用 PCManFM 文件管理器让你的 Linux PC 轻装上阵 | Linux 中国马斯克:我再强调一次,特斯拉不是电车公司如何在 Arch Linux 中安装 Cinnamon 桌面 | Linux 中国我在 CES 2023 现场走了一遍:说好的创新去哪了?如何在 Linux 中找到一个进程 ID 并杀死它 | Linux 中国宾州 French Creek State Park,湖边踏秋在 Mac 上运行 Linux 更进一步,Apple SoC CPUFreq 驱动即将并入 Linux 主线内核再说一遍:赶紧卖房!史上最大的抛售潮,已经开始了美好的巧合如何在 Silverblue 上变基到 Fedora Linux 37 | Linux 中国《最后的诗歌》:38: 喔,我的小伙子,请呆在家乡如何在 Ubuntu 和其他 Linux 下安装 IDLE Python IDE | Linux 中国Kali Linux 发布今年最后一个版本 | Linux 中国华侨是革命之母Gnoppix Linux 22.12 发布 | Linux 中国deadhang,坚持出奇迹2023才刷到这部剧,那可太亏了!它已一遍又一遍治好了我精神内耗你现在可以在 Arch Linux 上安装 Unity 7.6 桌面了 | Linux 中国世界上只有两个 Linux 发行版:Arch Linux 与其它 | Linux 中国Linux 内核 6.1 发布,包含初始 Rust 支持 | Linux 中国如何在 Arch Linux 中安装 elementary OS 的 Pantheon 桌面 | Linux 中国在 Linux 上试试这个 Java 文件管理器 | Linux 中国最佳 Linux 远程桌面客户端 | Linux 中国为什么你要在 Linux 上尝试 Nemo 文件管理器? | Linux 中国Bodhi Linux 7.0.0 开始测试新的功能和软件包 | Linux 中国在 Linux 中使用 “Converter” GUI 工具转换和操作图像 | Linux 中国如何在 Linux 系统中访问 UEFI 设置 | Linux 中国5 个 htop 替代:增强你的 Linux 系统监控体验 | Linux 中国
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。