Shell 是 Linux 系统为了处理来自用户的交互信息而提供给用户的一个命令行界面,它是用户与内核进行交互的接口,接受用户输入的命令,解析之后转交给内核去执行。Linux 系统下的 Shell 类似于 Windows 系统下的命令提示符(cmd.exe),执行基于字符的命令或功能。
一、何谓 Shell
Shell 作为英文单词的中文意思是“壳、外壳”,Linux 系统下的 Shell 即可以理解为操作系统的外壳。广义上讲,所有用户可以接触到的界面 UI 或者命令终端都可以称之为 Shell;而我们这里主要介绍的是狭义层面上的 Shell,当用户登陆 Linux 系统之后,系统初始化程序 init 将为每个用户运行一个称之为 Shell 的程序(例如:Ubuntu 下默认的 Shell 程序为 /bin/bash ),它是一个命令行解释器,为用户提供了一个向 Linux 内核发送请求,以便内核帮助用户运行指定程序的界面系统程序。用户可以使用 Shell 来启动、挂起、停止以及编写、编译程序等。
Shell 本身便是一个应用程序,能够被系统中的其他应用程序所调用。它拥有自己内置的 Shell 命令集,如切换目录命令 cd 跟退出当前 Shell 命令 exit 。当然,在 Shell 运行的的大多数程序都不是它内置的,如拷贝命令 cp 和删除命令 rm,这些命令通常被放置于系统环境变量所指定的搜索路径下(如 /usr/bin )。
Shell 在执行命令之前,先检查指定命令是否为内部命令,若不是则检查其是否为一个应用程序,然后在系统环境变量所指定的搜索路径下寻找这些应用程序,如果键入的命令既不是 Shell 内部命令,又没有存在于搜索路径下,则 Shell 将提示程序未找到;如果成功找到指定程序,它将被分解为系统调用并传送给 Linux 内核。
Shell 的另一个重要特征是它自身就是一个解释型的程序设计语言,Shell 程序设计语言支持绝大多数在高级语言中能见到的程序元素,如函数、变量、数组和程序控制结构等。Shell 编程语言简单易学,任何在终端命令行中能使用的命令都可以放到一个可执行的 Shell 脚本中执行。
根据用户的不同,Shell 终端的命令行提示符也不同,普通用户使用“$”作为提示符,而超级(root)用户则使用“#”作为提示符。在命令提示符后面键入命令名跟相关参数,Shell 将执行这些命令。如果命令运行了很长时间还未结束,而此时你又想结束它,则可以在键盘上按“Ctrl+c”发送中断信号来非正常地结束它。工作完成了以后,倘若想退出 Shell 终端,我们可以使用 exit 命令,也可以制造文结束符EOF(按“Ctrl+d”)来实现退出。
二、Shell 种种
Linux 下的 Shell 有好几种,目前流行的主要有 bash、ash、ksh、csh、zsh等,我们可以使用如下命令来查看本机使用的 Shell 类型:
#echo $SHELL
前面讲到了,Shell 实际上也是一个可执行程序,上条命令中,$SHELL是一个环境变量,它记录着用户所使用的 Shell 对应的可执行程序的绝对路径,例如 Ubuntu 下的执行结果为“/bin/bash”。如果系统中有多个 Shell ,在默认 Shell 的命令行中,我们可以通过输入其他 Shell 的名字来切换到其他 Shell,新切换过来的 Shell 属于原来 Shell 终端的子 Shell,使用 exit 命令可以回到原来的 Shell 终端中。
之所以有这么多 Shell 的存在是因为它们各自都有自己的特点,下面作一个简单的介绍:
1、bash
bash 是 Linux 系统默认使用的 Shell,内置 40 个命令,它能够被采纳为 Linux 系统下的默认 Shell 得益于如下特点:
(1)可以使用方向键来快速查看最近的操作记录; (2)给出部分字符串,支持使用 Tab 键来自动查找或补全以指定字符串开头的命令; (3)提供帮助信息,在命令行下输入 help 即可获得帮助。
2、ash
ash 是 Linux 中占用系统资源最少的一个简易版 Shell,因为只包含了 24 个内置命令,使用起来不大方便。
3、ksh
ksh 内置 42 条命令,分为免费版跟商业版,该 Shell 的最大优点就是免费版跟商业发行版几乎完全兼容,这样就可以在不花钱购买商业版的情况下体验商业版的性能了。
4、csh
csh 是 Linux 下比较大的 Shell,包含 52 个内部命令,其可执行文件的绝对路径一般为 /bin/tcsh ,所以 csh 通常又被称为 tcsh 。
5、zch
zch 是 Linux 下最大的 Shell 之一,共有84个内部命令,如果只是需要 Shell 完成一般的用途,没有必要安装这样的 Shell 。
除非注明,文章均为CppLive 编程在线原创,转载请注明出处,谢谢。