Linux学习笔记——Shell和Bash

Shell和Bash

shell 是运行在终端中的文本互动程序,bash(GNU Bourne-Again Shell) 是最常用的一种 shell,其是当前大多数 Linux 发行版的默认 shell

shell 相当于翻译器,其可以将计算机上的操作或用户输入的命令翻译为计算机可识别的二进制命令,传递进内核,以便调用计算机硬件执行相关的操作;同时,计算机执行完命令后,再通过 shell 翻译成自然语言,呈现在我们面前。

下图可见 shell 如桥梁一般连接用户与内核。

除了 bash 以外,有许多其他的 shell 如:shkshrshcsh 等。Unbuntu 系统常用的是 bashBio-linux 系统是基于 unbuntu 定制的,但是却使用了 zsh

这里的 sh 全名为 Bourne Shell,名字中的 Bourne 就是这个 shell 的作者。

而最常使用的 bash 全名是 Bourne Again Shell。最开始在 Unix系统中流行的是 sh,而 bash作为 sh 的改进版本,提供了更加丰富的功能。一般来说,都推荐使用 bash 作为默认的 shell

这里可以使用 echo $SHELL 查看当前系统中 shell 的类型:


Shell命令的分类

shell 命令可分为如下三类:

  • 内建函数(built-in function):shell 自带的功能;
  • 可执行文件(executable file):保存在 shell 之外的脚本,提供了额外的功能;
  • 别名(alias):给某个命令的简称。

可以使用 type 命令查看 shell 命令的类型,如果是内建命令会显示 xx is a shell builtin,如果是可执行文件会显示该命令的可执行文件位置,如果是别名则会显示 xx is aliased to xx

比如 cdpwd 都是 shell 内建命令,而 date 则是可执行文件,llls -alF 的简称。

shell内建函数是自带的预先写好的,实现一定功能的程序。可执行文件shell之外的脚本,提供了使用者自定义的功能。shell 必须在系统中找到对应命令名的可执行文件,才能正确执行。我们可以用绝对路径来告诉 shell 可执行文件所在的位置。如果用户只是给出了命令名,而没有给出准确的位置,那么 shell 必须自行搜索一些特殊的位置,也就是所谓的默认路径。shell 会执行第一个名字和命令名相同的可执行文件。我们可以通过 which 命令,来确定命令名对应的是哪个可执行文件:


别名 是给某个命令一个简称,以后在 shell 中就可以通过这个简称来调用对应的命令。在 shell 中,可以用 alias 来定义别名:

alias freak="free -h"

版权声明:本文为weixin_44491423原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。