Linux默认shell—bash shell的优点

在Linux操作系统中,用户没有办法跟内核直接交流,内核能够控制硬件的操作,并且向外提供系统调用接口,而在系统调用之上,可以有公用函数库,可以直接被应用程序调用,同时也可以有我们的shell。


shell的概念很广泛,它并不是Kernel的一部分,shell本身是一个用C程序编写的程序,它可以作为一种命令语言或一种程序设计语言,是一种脚本语言,根据语法和执行方面不同,其解释器也不同,常用的有bash、sh、csh、ksh等,习惯上将它们成为一种shell,因此,我们平时说Linux中有多少种shell其实指的就是其中存在几种shell脚本解释器。我们需要了解的是,用户可以通过shell来向Kernel输入命令,然后shell解释器会将我们输入的命令与内核通信,让内核理解我们需要做些什么。


我们的Linux系统中存在多种shell,我们可以在/etc/shells文件中查看到系统中可用的shell:


Linux默认shell—bash shell的优点_第1张图片


那么我们使用的shell是哪一个呢?其实用户在登录的时候,系统会给我们安排一个shell来工作,是如何安排的呢?是根据/etc/passwd中已经设置好的每个用户的默认shell:






这三个用户的shell都是/bin/bash,这也是Linux的默认shell,一般在新增一个用户的时候,默认使用的就是Linux的默认shell——bash。


既然Linux的默认shell是bash,那我们就来说说bash shell的优点吧。


1、命令记忆能力(history)


我们经命令行界面或者terminal中输入命令的时候,经常会需要重复输入前面已经输入的命令,这个时候我们往往不会重新输入该命令,特别是当命令比较冗长的时候,我们会选择使用向上或者向下快捷键来寻找我们之前执行过的命令,特别是在刚开机的时候我们还是能够找到我们以前开机时输入的命令。这是因为bash具有命令记忆能力。其实我们在当前用户的主文件下会有一个.bash_history文件,这个文件中就存储着我们之前输入的命令,注意一下,当前登录这一次所输入的命令其实是暂存在内存中的,只有在退出登录的时候才会将内存中的命令记录存储到.bash_history文件中。我们可以查看一下这个文件:



Linux默认shell—bash shell的优点_第2张图片

这是我昨天运行另外一个程序时候输入的命令。怎么样,这个功能帮我们省了不少麻烦吧。

2、命令和文件补全功能([Tab]键的功能)


bash的内置命令和外置命令是在太多了,紧靠我们小小容量的脑袋比较难以记得那么全面,不用担心,我们有时候只需要记个大概,bash会帮助我们来补全的,包括文件名bash也会帮我们补全。例如我现在需要更换一个文件的权限,要使用chmod命令,但是我只是大概记得这个命令是chm什么的,怎么办,先输入chm,然后按下[Tab]键,会自动补全。但是假如我们只依稀记得ch,而ch为前缀的命令那么多,bash不知道我们要的是哪一个,没关系,我们在按一次[Tab]键,它会列出所有以ch开头的命令,我们就可以以此为参考了。文件名也是如此。[Tab]键简直就是我们的记忆存储器嘛。

3、命令别名设置功能(alias)


记得在学习C/C++的时候宏和typedef,它们可以帮助我们来给其它的代码取一个别名,有时候,特别是在使用类中的成员的时候名字会特别长,每次都写得这么全会使得代码很长从而导致程序的可读性大大降低,于是我们经常会给其取另外一个比较简短别名,在用到其的地方只有用该别名代替,编译器会自动识别到这个别名代表这什么。

在bash中也有类似这种功能,可以给一条命令取一个别名,我们先来看看系统中已经存在哪些别名了,我们使用alias命令来查看系统中已经存在的别名:

Linux默认shell—bash shell的优点_第3张图片

其中画线的部分是我设置的别名,将ls -al命令取名为lm,然后我们输入lm的时候,shell解释器会将其视为ls -al了。取别名的格式如下:
alias lm 'ls -al'

发现与上图中格式一样的啊。

4、程序脚本(bash script)


有时候经常会重复输入重复的一段命令,像是先进入到某个目录,执行某个文件,每次都需要执行两条命令来完成,在bash中,我们可以将平时管理系统常需要执行的连续命令写成一个文件,然后通过交互的方式进行主机的检测工作,也可以通过shell提供的环境变量及相关命令来进行设计,这样子,这个文件几乎就成了一段小程序了,并且具有非常强大的功能哟。


5、通配符


前面说到[Tab]键会帮助我们记忆命令和文件名,帮助我们补充。有时候我们我们执行的对象不知一个,而是文件名满足某种约定的文件,像是我们需要显式以a开头的文件名的文件,我们就可以输入命令 ls -al a*。一起其它的通配符都能够在bash中使用。

6、作业控制、前台、后台控制

在《鸟哥的Linux私房菜》第17章有详细的解说。可以帮助我们更好地控制Linux执行过程。

我们直到在命令行界面中,输入好一个命令之后,我们是通过Enter键来执行该命令,但是有时候我们命令比较长,想使用两行来输入比较方便,或者想Enter暂时不要执行命令该怎么办呢?这个时候我们可以通过一个转义字符'\'来键Enter键转义,使其暂时不具备执行的性质。注意转义字符‘\’与Enter之间没有任何空格哦。

最后,我们需要明白一下什么是bash的内置命令和外部命令。内置命令是bash的基本命令,而外部命令是是扩展Linux功能的一些命令,像是vim等,是另外一些软件所提供的命令。我们可以通过type命令来查看一个命令的是否属于 bash的内置命令。



可以看到,vim是vim程序的命令,而cd是一个shell命令。

你可能感兴趣的:(Linux)