认识BASH
管理整个计算机硬件其实是操作系统的核心,这个核心是需要保护的,所以我们一般使用者就只能通过shell来跟核心沟通,那么系统到底有多少shell呢,为什么我们要使用bash啊,下面来谈一谈。
1.硬件,核心,与shell
这应该是个蛮有趣的话题:“什么是 Shell ”?相信只要摸过计算机,对于操作系统 (不论是 Linux 、 Unix 或者是 Windows) 有点概念的朋友们大多听过这个名词,因为只要有“操作系统”那么就离不开 Shell这个东西。不过,在讨论 Shell 之前,我们先来了解一下计算机的运行状况吧! 举个例子来说:当你要计算机传输出来“音乐”的时候,你的计算机需要什么东西呢?
1). 硬件:当然就是需要你的硬件有“声卡芯片”这个配备,否则怎么会有声音
2). 核心管理:操作系统的核心可以支持这个芯片组,当然还需要提供芯片的驱动程序啰;
3). 应用程序:需要使用者 (就是你) 输入发生声音的指令啰
这就是基本的一个输出声音所需要的步骤!也就是说,你必须要“输入”一个指令之后, “硬件”才会通过你下达的指令来工作!那么硬件如何知道你下达的指令呢?那就是 kernel (核心) 的控制工作了!也就是说,我们必须要通过“ Shell ”将我们输入的指令与 Kernel 沟通,好让 Kernel 可以控制硬件来正确无误的工作!
操作系统其实是一组软件,由于这组软件在控制整个硬件与管理系统的活动监测, 如果这组软件能被使用者随意的操作,若使用者应用不当,将会使得整个系统崩溃!因为操作系统管理的就是整个硬件功能嘛! 所以当然不能够随便被一些没有管理能力的终端用户随意使用啰!但是我们总是需要让使用者操作系统的,所以就有了在操作系统上面发展的应用程序啦!使用者可以通过应用程序来指挥核心, 让核心达成我们所需要的硬件任务!
我们可以发现应用程序其实是在最外层,就如同鸡蛋的外壳一样,因此这个咚咚也就被称呼为壳程序 (shell) 啰!
其实壳程序的功能只是提供使用者操作系统的一个接口,因此这个壳程序需要可以调用其他软件才好。 我们用过很多指令,包括 man, chmod, chown, vi, fdisk, mkfs 等等指令,这些指令都是独立的应用程序, 但是我们可以通过壳程序 (就是命令行界面)来操作这些应用程序,让这些应用程序调用核心来运行所需的工作哩!这样对于壳程序是否有了一定的概念了?
2.系统合法的shell与/etc/shells功能
知道什么是 Shell 之后,那么我们来了解一下 Linux 使用的是哪一个 shell 呢?什么!哪一个?难道说 shell 不就是“一个 shell 吗?”哈哈!那可不!由于早年的 Unix 年代,发展者众,所以由于 shell 依据发展者的不同就有许多的版本,例如常听到的 Bourne SHell (sh) 、在 Sun 里头默认的 C SHell、 商业上常用的 K SHell、, 还有 TCSH 等等,每一种Shell 都各有其特点。至于 Linux 使用的这一种版本就称为“ BourneAgain SHell (简称 bash) ”,这个 Shell 是 Bourne Shell 的增强版本,也是基准于 GNU 的架构下发展出来的呦!
在介绍 shell 的优点之前,先来说一说 shell 的简单历史吧 [2] :第一个流行的 shell 是由 Steven Bourne 发展出来的,为了纪念他所以就称为Bourne shell ,或直接简称为 sh !而后来另一个广为流传的 shell 是由柏克莱大学的 Bill Joy 设计依附于 BSD 版的 Unix 系统中的 shell ,这个shell 的语法有点类似 C 语言,所以才得名为 C shell ,简称为 csh !由于在学术界 Sun 主机势力相当的庞大,而 Sun 主要是 BSD 的分支之一,所以 C shell 也是另一个很重要而且流传很广的 shell 之一 。
3.BASH Shell的功能
既然 /bin/bash 是 Linux 默认的 shell ,那么总是得了解一下这个玩意儿吧!bash 是 GNU 计划中重要的工具软件之一,目前也是 Linuxdistributions 的标准 shell 。 bash 主要相容于 sh ,并且依据一些使用者需求而加强的 shell 版本。不论你使用的是那个 distribution ,你都难逃需要学习 bash 的宿命啦!那么这个 shell 有什么好处,干嘛 Linux 要使用他作为默认的 shell 呢? bash 主要的优点有下面几个:
1 命令编修能力 (history)
2 命令与文件补全功能: ([tab] 按键的好处)
3 命令别名设置功能: (alias)
4 工作控制、前景背景控制: (job control, foreground,background)
5 程序化脚本: (shell scripts)
6 万用字符: (Wildcard)