了解 BASH
管理整个计算机硬件的其实是操作系统的核心(kernel),这个核心是需要被保护的。所以使用者就只能通过shell来跟核心沟通,以让核心达到想要的工作。那么系统中有多少 shell?为什么要使用 bash等等?我们来简单了解下。
一、Bash shell 的功能
【1】命令编辑能力(history):base具有『记忆使用过的指令』功能,我们只需按『上下键』就可以找到前/后一个输入的指令,在很多distribution(Linux发行版)中,默认的指令记忆功能可以到达1000个。指令记录在用户家目录的 .bash_history中,需要注意的是,~/.bash_history记录的是前一次登入以前所执行过的指令,而至于这一次登入所执行的指令都被暂存在内存中,当你成功的注销系统后,该指令记忆才会记录到./bash_history中。这样最大的好处就是可以『查询曾经做过的举动』如此可以知道你执行步骤,那么就可以追踪你曾下达过的指令,以作为除错的重要流程。但如此一来被黑客入侵后,它们翻你曾经的指令,当好你的指令又跟系统有关(例如直接输入MySQL的密码在指令上面),那么就要合理的考虑这个问题了。
【2】命令与文件补全功能(|tab|键):[Tab]接在一串指令的第一个字后面,则为命令补全。[Tab]接在一串指令的第二个字以后时,则为『文件补全』。若安装bash-completion软件,则在某些指令后面使用[Tab]按键时,可以进行『选项/参数的补全』功能。
【3】命令别名设置功能(alias):通过:alias lm='ls -al' 意思就是lm指令效果与ls -al相同。
【4】工作控制、前景背景控制(job control,foreground,background):使用前、背景的控制可以让工作进行的更为顺利,工作控制(jobs)的用途则更广,可以让我们随时将工作丢到背景中执行,而不怕不小心使用了Ctrl+C来停掉程序。此外,也可以在单一登录的环境中,达到多任务的目的。
【5】程序化脚本(shell scripts):在 DOS年代还记得将一堆指令写在所谓的『批处理文件』,在Linux底下的shell scripts则发挥更为强大的功能,可以将你平时管理系统常需要下达的连续指令写成一个文件,该文件并且可以透过对谈交互式的方式来进行主机的侦测工作,也可以由 shell 提供的环境变量及相关指令来进行设计。
【6】通配符(Wildcard):除了完整的字符串之外,bash还支持许多的通配符来帮组用户查询与指令下达。例如,想知道/usr/bin底下有多少个以X开头的文件,使用:『ls -l /usr/bin/X*』等等通配符。
二、查询指令是否为Bash shell的内建命令:type
bash 的说明文件通过命令:man base 查看。这个说明文件里面还有其他说明文件。例如,cd 指令的说明就在 man page 内,然后直接输入man cd 时,会出现一堆指令的介绍。其实bash已经内建了很多指令,例如说道的 cd,还有umask等等指令,都是内建在 bash 当中的。同时,我们可以通过 type 指令来判断命令是否为 bash 所提供的指令。
范例一:查询一下 ls 这个指令是否为 bash 内建?
三、指令的下达与快速编辑按钮
范例:如果指令太长的话,如何使用两行来输出?
上面的指令用途是将是将三个文件复制到 /root 这个目录下而已。不过因为指令太长,于是就利用『\[Enter]』来将 [Enter] 这个按键『跳脱』开来,让 [Enter] 键『开始执行』的功能,好让指令可以继续在一行输入。需要注意的是,[Enter] 键是紧接着反斜杠(\)的,两者之间没有其他字符。因为 \ 仅跳脱『紧接着的下一个字符』而已。如果顺利跳脱下一行,则下一行最前面会总动出现 > 的符号,就可以继续输入指令。 当你所需下达的指令特别长,或者是你输入了一串错误的指令时,我们可以通过如下快捷键:
✔ [Ctrl]+u/[Ctrl]+k:分别使用光标出先前删除指令串([Ctrl]+u)及向后删除指令串([Ctrl]+k)
✔ [Ctrl]+a/[Ctrl]+e:分别是让光标移动到整个指令串的最前面([Ctrl]+a)或最后面([Ctrl]+e)