硬件、核心与 Shell
什么是 Shell ?举个例子来说:如当要计算机传输出来"音乐"的时候,计算机需要什么东西呢?
1. 硬件:当然就是需要你的硬件有『声卡芯片』这个配备,否则怎么会有声音;
2. 核心管理:操作系统的核心可以支持这个芯片组,当然还需要提供芯片的驱动程序啰;
3. 应用程序:需要使用者 (就是你) 输入发生声音的指令啰!
以上这就是基本的一个输出声音所需要的步骤!也就是说,必须要“输入”一个指令之后, “硬件”才会透过你下达的指令来工作!那么硬件如何知道你下达的指令呢?那就是 kernel (核心) 的控制工作了!也就是说,我们必须要透过“Shell ”将我们输入的指令与 Kernel 沟通,好让 Kernel 可以控制硬件来正确无误的工作!
操作系统其实是一组软件,由于 这组软件在控制整个硬件与管理系统的活动监测, 如果这组软件能被用户随意的操作,若使用者应用不当,将会使得整个系统崩溃!因为操作系统管理的就是整个硬件功! 所以当然不能够随便被一些没有管理能力的终端用户随意使用了!但是我们总是需要让用户操作系统的,所以就有了在操作系统上面发展的应用程序啦!用户可以透过应用程序来指挥核心, 让核心达成我们所需要的硬件任务!
其实应用程序是在最外层,就如同鸡蛋的外壳一样,因此这个咚咚也就被称呼为壳程序 (shell) ! 其实壳程序的功能只是提供用户操作系统的一个接口,因此这个壳程序需要可以呼叫其他软件才好。比如我们常用的 man, chmod, chown, vi, fdisk, mkfs 等等指令,这些指令都是独立的应用程序, 但是我们可以透过壳程序 (就是指令列模式) 来操作这些应用程序,让这些应用程序呼叫核心来运作所需的工作!
也就是说,只要能够操作应用程序的接口都能够称为壳程序。狭义的壳程序指的是指令列方面的软件,包括本章要介绍的 bash 等。 广义的壳程序则包括图形接口的软件!因为图形接口其实也能够操作各种应用程序来呼叫核心工作!
系统的合法 shell
知道什么是 Shell 之后,那么我们来了解一下 Linux 使用的是哪一个 shell 呢?由于早年的 Unix 年代,发展者众多,所以由于 shell 依据发展者的不同就有讲多的版本,例如常听到的 Bourne SHell (sh) 、在 Sun 里头预设的 C SHell、 商业上常用的 K SHell、, 还有 TCSH 等等,每一种 Shell 都各有其特点。至于 Linux 使用的这一种版本就称为“ Bourne Again SHell (简称 bash) ”,这个 Shell 是 Bourne Shell 的增强版本,也是基准于 GNU 的架构下发展出来的呦!
那么目前我的 Linux (以 我当前虚拟机中的SUSE 为例) 有多少我们可以使用的 shells 呢? 可以检查一下 /etc/shells 这个档案,至少就有底下这几个可以用的 shells:(Linux 预设就是使用 bash)
linux-peej:~ # cat /etc/shells
/bin/ash
/bin/bash
/bin/bash1
/bin/csh
/bin/false
/bin/ksh
/bin/sh
/bin/tcsh
/bin/true
/bin/zsh
/usr/bin/csh
/usr/bin/ksh
/usr/bin/passwd
/usr/bin/bash
/usr/bin/tcsh
/usr/bin/zsh