再强调一遍:unix不是linux!

CSDN资讯 CSDN资讯     2022-12-02     317

关键词:

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

— 推荐阅读 —

Linux/Unix 检查 *** 连接是不是激活/启动

】Linux/Unix检查***连接是不是激活/启动【英文标题】:Linux/Unixcheckif***connectionisActive/UpLinux/Unix检查***连接是否激活/启动【发布时间】:2015-07-1503:17:46【问题描述】:我有一个代码可以检测Open***连接是打开还是关闭:ifecho\'ifconfigt... 查看详情

Unix/Linux 符号链接是不是支持回退?

】Unix/Linux符号链接是不是支持回退?【英文标题】:DoesUnix/Linuxsymboliclinksupportfallback?Unix/Linux符号链接是否支持回退?【发布时间】:2016-07-1116:30:04【问题描述】:我设置了一个连接5-6个Ubuntu机器的nfs/autofs-ldap系统。我所有的计... 查看详情

在 ubuntu/linux/unix 中是不是有带有 cbc 加密的 aes 256?

】在ubuntu/linux/unix中是不是有带有cbc加密的aes256?【英文标题】:isthereaes256withcbcencryptioninubuntu/linux/unix?在ubuntu/linux/unix中是否有带有cbc加密的aes256?【发布时间】:2011-09-0809:03:57【问题描述】:我想使用aes256和cbcpkcs7填充创建IV... 查看详情

在 Unix/Linux 中判断两个文件是不是具有相同内容的最快方法?

】在Unix/Linux中判断两个文件是不是具有相同内容的最快方法?【英文标题】:FastestwaytotelliftwofileshavethesamecontentsinUnix/Linux?在Unix/Linux中判断两个文件是否具有相同内容的最快方法?【发布时间】:2012-10-0517:12:32【问题描述】:我... 查看详情

linux重启apache无反应

...,是一个性能稳定的多用户网络操作系统。参考技术A是不是添加虚拟主机的时候,如果是检查一下VHOST文件我重启也没提示,如果apache启动是正常的你可以不用管的 参考技术B1.servicehttpdstart,再输入ps-ef|grephttpd看apache进程是否在... 查看详情

现代 Unix/Linux 系统上的密码是不是仍限制为 8 个字符?

】现代Unix/Linux系统上的密码是不是仍限制为8个字符?【英文标题】:ArepasswordsonmodernUnix/Linuxsystemsstilllimitedto8characters?现代Unix/Linux系统上的密码是否仍限制为8个字符?【发布时间】:2011-01-1121:16:58【问题描述】:多年前,Unix密... 查看详情

在 unix (linux/osx) 中创建的符号链接是不是仍然可以在 Windows 中工作?

】在unix(linux/osx)中创建的符号链接是不是仍然可以在Windows中工作?【英文标题】:Willsymboliclinkscreatedinunix(linux/osx)stillworkinginwindows?在unix(linux/osx)中创建的符号链接是否仍然可以在Windows中工作?【发布时间】:2013-10-1409:29:52【问... 查看详情

再温习一遍事务

  说起事务来大家都不会陌生,ACID啊,银行转账啊。这里我要谈的不是概念性的东西,而是在代码中是怎么使用事务的。privateConnectionconn=null;privatePreparedStatementps=null;try{conn.setAutoCommit(false);//将自动提交设置为falseps.executeU... 查看详情

苹果的macos是基于linux内核编写的吗?

参考技术A不是MacOS是基于Unix商业系统开发的个人操作系统,用于苹果RISC系列的机器,不过最近几年也出了与IBM-PC兼容的X86版操作系统。Linux是仿造Unix开发的操作系统,是自由开源的,不像Unix或者MacOS甚至Windows这样是收费或者商... 查看详情

linux入门第一讲(代码片段)

...商业上来讲,只有unix认证的系统才是unix系统.linuxlinux和unix不是单纯的继承关系,linux只是继承了unix的设计理念.但是底层实现不同,所以不完全兼容.linux不同的发行版,只是侧重点不同.本质是包管理不同.ubuntu使用apt包管理工具对图形... 查看详情

在下想用unix开始练编程,应该用啥版本?

...接口。非要Unix的话可以用FreeBSD参考技术A还是linux吧,UNIX不是很好上手的!追问不是说lunix是从unix中搞出来的“简易版本”?追答linux是类系统,在两个系统下编程的思想和操作基本是一致的! 查看详情

第一章linux內核簡介

1.Linux是類Unix系統,但他不是Unix。儘管Linux借鑑了Unix的許多設計並且實現了Unix的API(由Posix標準和其他SingleUnixSpecification定義的),但Linux沒有像其他Unix變種那樣直接使用Unix的源代碼。2.Linux系統的基礎是內核、C庫、工具集和系... 查看详情

Solaris、HP-UX、IBM-AIX 等平台是不是支持 Unix 域套接字而无需套接字文件,如 Linux?

】Solaris、HP-UX、IBM-AIX等平台是不是支持Unix域套接字而无需套接字文件,如Linux?【英文标题】:DoesplatformslikeSolaris,HP-UX,IBM-AIXetcsupportUnixDomainSocketwithoutneedforsocketfile,likeLinux?Solaris、HP-UX、IBM-AIX等平台是否支持Unix域套接字而无需套... 查看详情

如何在linux/unix系统中验证端口是不是打开

在Linux/Unix中查看端口打开状况的命令是netstat。查看所有端口占用情况并显示占用进程名称# netstat -apn查看所有tcp端口占用情况并显示占用进程名称# netstat -atpn查看所有udp端口占用情况并显示占用进程名称# netst... 查看详情

浅谈unix,linux,ios,android区别和联系

  浅谈unix,linux,ios,android区别和联系  网上的答案并不是很好,便从网上整理的相对专业的问答。  1、UNIX和Linux  UNIX操作系统(尤尼斯),是一个强大的多用户、多任务操作系统,支持多种处理器架构,按照操作系统的... 查看详情

linux如何判断哪个网卡是不是连接网线

【解决方法】1、ifconfig查看现在使用的网卡。2、ethtool命令查看网卡的具体信息,如eth0是连接状态,则正常使用。2、在ifconfig中可以看到有eth2这个网卡,但不知道是否连线,这时用ethtool就可以看到link是no,那么表示是没有连线的... 查看详情

mac系统是基于linux的。。为啥mac上有非常非常多精美的软件,而不能移植到linux.

...le)的Solaris要少。腾讯那帮就是一群shability。另外我再说一遍,linux也不是基于UNIX的,他是Linus自己参考MINIX重开发的内核,外加GNU项目的软件组成的GNU/Linux。而且Linux内核不是仅仅只能搭配GNU项目的软件,GNU项目的软件也不是之... 查看详情

什么是linux+unix?

...问题时该如何在互联网上很快的搜索到答案?1、什么是Linux?准确的说,是指Linux的kernel(系统的核心程序),其内核版权属于LinusTorvalds,在GPL(GNUGeneralPublicLicense)版权协议下发行,任何人都可以自由的复制(copy),修改(change),套装分发(... 查看详情