管理整个计算机硬件的其实是操作系统的内核(kernel),这个内核是需要被保护的,所以我们一般用户就只能通过shell来跟内核通信,以让内核达到我们所想要达到的工作。
我们必须要通过“Shell”将我们输入的命令与内核通信,好让内核可以控制硬件来准确无误地工作。
用户可以通过应用程序来指挥内核,让内核达成我们所需要的硬件任务,应用系统其实是在最外层,就如同鸡蛋的外壳一样,因此这个也就被称呼为shell。
其实shell的功能只是提供用户操作系统的一个接口,因此这个shell需要可以调用其他软件才好。只要能够操作应用程序的接口都能够被称为shell。狭义的shell指的是命令行方面的软件,包括bash等。
Linux默认就是使用bash。
为什么我们系统上合法的shell要写入/etc/shells 这个文件?这是因为系统某些服务在运行过程中,会去检查用户能够使用的shells ,而这些shell 的查询就是借助/etc/shells这个文件。
当我登录的时候系统就会给我一个shell让我来工作了。而这个登录取得的shell就记录在/etc/passwd 这个文件内。
在每一行的最后一个数据,就是你登录后可以取得的默认的shell。
bash shell 的功能
/bin/bash 是linux默认的shell。bash 主要的优点:
命令记忆能力(history)
它能记忆使用过的命令,命令记录在你的主文件夹内的.bash_history中。~/.bash_history 记录的是前一次登录以前所执行过的命令,而至于这一次登录所执行的命令都被暂存在临时内存中,当你成功注销系统后,该命令记忆才会记录到.bash_history当中。最大的好处就是可以查询曾经做过的操作。如此可以知道你的执行步骤,那么就可以追踪你曾执行过的命令,以作为排错工具。
命令别名设置功能(alias)
你在命令行输入alias就可以知道目前的命令别名有哪些了。也可以直接执行命令来设置别名。
alias ll='ls -al'
作业控制、前台、后台控制(job control, foreground, background)
作业控制,可以让我们随时将工作丢到后台中执行。而不怕不小心使用了[Ctrl+C] 来中断该进程。此外也可以在单一登录的环境中达到多任务的目的。
程序脚本(shell script)
通配符(Wildcard)
除了完整的字符串之外,bash还支持许多的通配符来帮助用户查询与命令执行。举例来说,想要知道/usr/bin 下面有多少以X为开头的文件吗?使用“ls -l /usr/bin/X*” 就知道了。
bash shell 的内置命令:type
type [-tpa] name
type: 不加任何参数时,type会显示出name是外部命令还是bash 内置命令
-t: 当加入-t 参数时,type会将name以下面这些字眼显示出它的意义:
file:表示为外部命令
alias: 表示该命令为命令别名所设置的名称;
builtin: 表示该命令为bash 内置的命令功能。
-p: 如果后面接的name为外部命令时,才会显示完整文件名;
-a: 会由PATH 变量定义的路径中,将所有含name 的命令都列出来,包含alias