参考书籍:蔡德明_鸟哥的Linux私房菜
目录
[(2)查看系统有多少个可用的shells:Linux 预设就是使用 bash](#(2)查看系统有多少个可用的shells:Linux 预设就是使用 bash)
[(4)Bash shell的功能(/bin/bash)](#(4)Bash shell的功能(/bin/bash))
[(5)查询指令是否为Bash Shell内建命令:](#(5)查询指令是否为Bash Shell内建命令:)
1、硬件、kernel与Shell
用户透过shell输入指令,与Linux的kernel进行沟通,使得硬件按照指令正确工作
2、为何要学习文字接口的shell?
(1)图形化接口不一致性:X Window 与 web 接口的工具虽然看着简单明了,但只是一堆软件整合而成的应用程序,不同的配件版本所提供的接口也都不相同。
(2)各家文字shell基本一样,能够轻松适应。
(3)远程联机时文字传输速度更快。
(4)能够更好的管理自己的主机,shell 提供的数据流重导向以及管线命令大大提高管理系统的效率。
3、系统的合法shell与/etc/shells的功能
(1)shell的历史:
第一个流行的 shell 是由 Steven Bourne 发展出来的,为了纪念他所以就称为 Bourne shell ,或直接简称为****sh !
后来另一个广为 流传的 shell 是由柏克莱大学的 Bill Joy 设计依附于 BSD 版的 Unix 系统中的 shell ,这个 shell 的语法有点类似 C 语言,所以才得名为C shell ,简称为 csh !
(2)查看系统有多少个可用的shells :Linux 预设就是使用 bash
bash
sudo cat /etc/shells
- /bin/sh (已经被 /bin/bash 所取代)
- /bin/bash (就是 Linux 预设的 shell)
- /bin/tcsh (整合 C Shell ,提供更多的功能)
- /bin/csh (已经被 /bin/tcsh 所取代)
(为什么我们系统上合法的 shell 要写入 /etc/shells 这个文件啊? 这是因为系统某些服务在运作过程中,会去检查使用者能够使用的 shells ,而这些 shell 的查询就是藉由 /etc/shells 这个文件啰!)
(3)登录时系统的预设shell:
查看/etc/passwd文件内容,可以看到用户登陆时系统预设的shell
bash
cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
用户名:密码:UID(用户ID):GID(组ID):描述性信息:主目录:默认Shell
(4)Bash shell的功能(/bin/bash)
bash 是 GNU 计划中 重要的工具软件之一,目前也是 Linux distributions****的标准 shell 。 bash 主要兼容于 sh ,并且依 据一些使用者需求而加强的 shell 版本。
- **命令编修能力(history):**bash能够记忆使用过的指令。 (上下键)~/.bash_history中会记录前一次登入以前所执行过的指令,这一次的会暂存在内存中,注销系统后才会将本次登入的指令记录到~/.bash_history中。(默认会记录1000个)
- 命令与文件补全功能(tab键): 如果我想要知道我的环境当中所有以 c 为开头的指令呢?就按下『 c[tab][tab] 』
|-----------------------------------------------------------------|
| [Tab] 接在一串指令的第一个字的后面,则为命令补全; |
| [Tab] 接在一串指令的第二个字以后时,则为『文件补齐』! |
| 若安装 bash-completion 软件,则在某些指令后面使用 [tab] 按键时,可以进行『选项/参数的补齐』功能! |
- **命令别名设定功能(alias):**ls -al可以知道目录下所有文件以及属性,可以使用alias命令来创建bieming
bash
alias lm='ls -al'
lm
total 96
drwx------. 16 langxi langxi 4096 Dec 27 16:37 .
drwxr-xr-x. 4 root root 31 Jun 30 16:17 ..
- 工作控制(job control)、前景背景控制: 前、背景的控制可以让工作进行的更为顺利! 至于工作控制(jobs)的用途则更广, 可以让我们随时将工作丢到背景中执行!而不怕不小心使用了 [Ctrl] + c 来停掉该程序。
- 程序化脚本(shell scripts): 在 Linux 底下的 shell scripts 则发挥更为强大的功能,可以将你平时管理系统常需要下达的连续指令写成一个文件, 该文件并且 可以透过对谈交互式的方式来进行主机的侦测工作!也可以藉由 shell 提供的环境变量及相关指令来 进行设计,相当于一个小型的程序语言。
- 通配符(Wildcard): 除了完整的字符串之外, bash 还支持许多的通配符来帮助用户查询与指令下达。 例如:想知道 /usr/bin 底下有多少以****X 为开头的文件吗?使用:『 ls -l /usr/bin/X* 』就能够知道
(5)查询指令是否为Bash Shell内建命令:
为了方便 shell 的操作, 其实 bash 已经『内建』了很多指令了,例如上面提到的 cd , 还有例如 umask 等等的指令,都是内建在 bash 当中的。
利用 type 这个指令来观察某指令是否为Bash内建命令:
bash
[dmtsai@study ~]$ type [-tpa] name
选项与参数:
:不加任何选项与参数时,type 会显示出 name 是外部指令还是 bash 内建指令
-t :当加入 -t 参数时,type 会将 name 以底下这些字眼显示出他的意义:
file :表示为外部指令;
alias :表示该指令为命令别名所设定的名称;
builtin :表示该指令为 bash 内建的指令功能;
-p :如果后面接的 name 为外部指令时,才会显示完整文件名;
-a :会由 PATH 变量定义的路径中,将所有含 name 的指令都列出来,包含 alias
范例一:查询一下 ls 这个指令是否为 bash 内建?
type ls
ls is aliased to `ls --color=auto' # 未加任何参数,列出 ls 的最主要使用情况
type -t ls
alias # 仅列出 ls 执行时的依据
type -a ls
ls is aliased to `ls --color=auto' # 最先使用 aliase
ls is /usr/bin/ls # 还有找到外部指令在 /bin/ls
范例二:那么 cd 呢?
type cd
cd is a shell builtin # 看到了吗? cd 是 shell 内建指令
(6)指令的下达与快速编辑按钮
- shell环境的指令下达: 这个指令用途是将三个文件复制到 /root****这个目录下而已。不过,因为指令太长, 于是利用『 \[Enter] 』来将 [Enter] 这个按键『跳脱!』开来,让**[Enter]** **按键不再具有『开始执行』的功能!**好让指令可以继续在下一行输入。
bash
范例:如果指令串太长的话,如何使用两行来输出?
cp /var/spool/mail/root /etc/crontab \
> /etc/fstab /root
\ 仅跳脱紧接着的下一个字符,不能有空格,否则跳脱的是空格键
顺利跳脱 [Enter] 后,下一行最前面就会主动出现 > 的符号, 你可以继续输入指令啰!
也就是说,那个 > 是系统自动出现的,你不需要输入。
- 快速编辑按钮:当你所需要下达的指令特别长,或者是你输入了一串错误的指令时,你想要快速的将这串指令整个删除掉,一般来说,我们都是按下删除键的。 有没有其他的快速组合键可以协助呢?是有的!常见的有底下这些:
|-------------------------|---------------------------------------------------------|
| 组合键(移动/删除) | 功能与示范 |
| [ctrl]+u / [ctrl]+k | 分别是从光标处向前删除指令串 ([ctrl]+u) 及向后删除指令串 ([ctrl]+k) 。 |
| [ctrl]+a / [ctrl]+e | 分别是让光标移动到整个指令串的最前面 ([ctrl]+a) 或最后面 ([ctrl]+e)。 |
总之,当我们顺利的在终端机 (tty) 上面登入后, Linux 就会依据 /etc/passwd 文件的设定给我们一
个 shell ( 预设是 bash) ,然后我们就可以依据上面的指令下达方式来操作 shell , 之后,我们就可以透过 man 这个在线查询来查询指令的使用方式与参数说明, 很不错吧!那么我们就赶紧更进一步来操作 bash 这个好玩的东西啰!