Unix、Linux、 MacOs、 Bash、 Shell
在使用过Windows的用户初次接触macOS时,很可能会发现一个有趣的现象——在macOS系统中竟然可以使用Linux的命令!这无疑让人产生了很大的疑惑和好奇。为什么mac下可以使用Linux的命令?
要解答这个问题,我们需要深入了解Unix、Linux、macOS以及与它们紧密相关的Bash和Shell。
Unix
Unix是一种操作系统家族,起源于20世纪70年代初。最初由肯·汤普森(Ken Thompson)、丹尼斯·里奇(Dennis Ritchie)等人在贝尔实验室开发,后来成为了一个开放标准,并衍生出了许多不同的变种和实现。
Unix操作系统被广泛用于服务器、工作站(专业领域计算机)和个人计算机等领域。它的设计哲学是简单、灵活和模块化,支持多用户、多任务和多进程,并提供了强大的命令行界面(Shell)来执行各种任务。
Unix操作系统的设计和实现为计算机科学界做出了重要贡献,并对后来的操作系统和软件开发产生了深远的影响。许多现代操作系统(如Linux、macOS等)都受到了Unix的启发,并在其基础上进行了扩展和改进。
Linux & MacOs
Linux和macOS都属于类Unix操作系统的家族,它们有着共同的设计哲学和基本架构,在大部分情况下,macOS和Linux之间的命令是相似或相同的,这意味着许多标准的命令行工具在两个系统中都是可用的,并且它们的用法和语法也是一样的。
例如,ls
、cd
、cp
、mv
、rm
、mkdir
等命令在 macOS 和 Linux 中都是通用的,并且用法相同。
具体关系如下:
- Linux:Linux是一种自由、开放源代码的操作系统内核,它作为操作系统的核心被广泛用于各种Linux发行版(如Ubuntu、CentOS、Debian等)。Linux发行版通常包含了Linux内核、系统工具、库以及一些基本的用户空间程序。
- macOS(前称Mac OS X):macOS是由苹果公司开发的类Unix操作系统,是基于Darwin内核,它是专门为苹果的Macintosh电脑设计的操作系统。macOS提供了图形用户界面(GUI)和命令行界面(Terminal),允许用户在命令行中执行各种操作。
它们都使用Bash作为默认的Shell(命令行解释器)。
Bash & Shell
Shell是计算机操作系统中的一个命令行解释器,它是用户与操作系统内核之间的桥梁。用户可以通过Shell来输入命令,并且Shell会解释这些命令并将其传递给操作系统内核执行。Shell还可以执行脚本,这些脚本是一系列命令的集合,可以用于自动化和批处理任务。
Bash是Shell的一种具体实现,是Bourne Again Shell的缩写。Bash是在Bourne Shell的基础上进行扩展和改进的,它添加了许多新特性和功能,使得Shell的使用更加方便和强大。Bash在很多Linux发行版和macOS中都作为默认的Shell,并且是广泛使用的Shell版本之一。
你可以这样理解:
Shell就像是"汽车"这个概念。汽车是一种交通工具,用于在地面上运输人员和货物。类似地,Shell是一种命令行解释器,用于在计算机操作系统中执行命令和操作。
而Bash则类似于特定品牌的汽车,比如"Toyota"或"Ford"。Toyota和Ford都是汽车的具体品牌和型号,它们在汽车市场上有自己的特点和优势。同样,Bash是Shell的一种具体实现,它在Shell市场上也有自己的特点和优势。
其他的Shell实现,比如Korn Shell(ksh)、C Shell(csh)、Z Shell(zsh)等,就像其他汽车品牌一样,它们也有各自的特点和用途。
zsh
从 macOS Catalina (10.15) 开始,macOS 默认的终端 shell 已从 bash 切换为 zsh。因此,macOS 现在使用 zsh 作为默认的 shell。
bash 的环境变量是.bash_profile
文件。
zsh 的环境变量是.zshrc
文件。
如果你希望将 macOS 终端的默认 shell 切换回 bash,可以执行以下命令:
chsh -s /bin/bash
但是切换到bash
之后,系统会提示现在推荐zsh
,因为zsh比bash更强大。
总结
- Unix是最早的操作系统之一,Linux和macOS都是基于Unix内核的操作系统。
- Shell是用户与操作系统之间的接口即命令行解释器,允许用户通过命令行或脚本执行操作系统命令和任务。Bash是命令行解释器的一种,常用于Linux和macOS系统,zsh是比Bash更强大的工具。
彩蛋
Android操作系统是一种基于Linux内核的开源操作系统。因此它继承了一些Unix的特性和设计理念,并在此基础上构建了适应移动设备的独特的运行时环境和框架。