Linux 学习笔记(二)- Shell 初识
什么是 Shell
之前我一直混淆了几个概念:命令行、脚本、命令解释器、Shell。
从严格意义上讲,命令行指的是供用户输入命令的界面,其本身只是接受输入,然后把命令传递给命令解释器。后者就是 Shell。从本质上讲,Shell 是一个程序,它在用户和操作系统之间提供了一个面向行的可交互接口。用户在命令行中输入命令,运行在后台的 Shell 把命令转换成指令代码发送给操作系统。Shell 提供了很多高级特性,使得用户和操作系统间的交互变得简便和高效。
目前,在 Linux 环境下有几种不同类型的 Shell, 常用的有 Bourne Again Shell(BASH)、TCSH Shell、 Z-Shell 等。不同的 Shell 提供不尽相同的语法和特性,用户可以使用任何一种 Shell。在 Linux 上,BASH shell 是默认安装和使用的 Shell。
在 BASH 中,命令行以 $
为提示符,表示我们可以开始输入命令了,以 root 身份执行命令时,Shell 提示符号为 #
:
1 | ##[用户名@主机名 目录]提示符 命令 |
FYI:Linux 中命令和文件名都是区分大小写的。
小试牛刀
cd /
进入根目录
ls
列出文件和目录
cd home/
进入 /home 目录,home 目录中存放着系统中所有用户的主目录,主目录的名字就是用户名。
cd
不带任何参数的 cd 命令进入当前用户的主目录。用户主目录默认对其他用户关闭访问权限。
cd /etc/
进入 /etc/ 目录,这个目录存放着系统以及绝大部分应用软件的配置文件。
cat fstab
查看 fstab 文件,这个文件定义了各硬盘分区所挂载到的目录路径。(这里我有点儿懵)
命令行补全:Tab 键
有些命令并不是一个单词,亦或者文件名作为最常见的参数有的名字也很长不容易记住。BASH 提供了一种特性:命令行补全。例如我们输入 ss,然后点击 Tab 键,Shell 会把 ss 开头的命令打印出来,我们也可以继续按 Tab 键进行选择:
1 | $ ss<TAB> |
那对于输入文件名的时候,只需要输入前面几个字符,然后按 Tab 键,Shell 会自动把文件名补全,当然这得是对应目录里面存在这个文件,并且只有一个:
1 | [tommy@VM-0-13-centos ~]$ cd /etc/ |
如果以输入的字符开头的文件不止一个,Shell 会列出字符开头的文件列表:(我看有的书上说要按两次 Tab?)
1 | [tommy@VM-0-13-centos etc]$ cat b<TAB> |
FYI:系统命令本质上就是一些可执行文件,可以在 /usr/bin/ 目录下找到。从这种意义上讲,命令补全和文件名补全其实是一回事。
通配符:
*
“*” 用于匹配文件名中任意长度的字符串。
1 | [tommy@VM-0-13-centos etc]$ ls *.conf |
?
和“/*” 相类似的通配符是“?”。但和“/*” 匹配任意长度的字符串不同,“?” 只匹配一个字符。
1 | [tommy@VM-0-13-centos etc]$ ls host? |
[]
“[]”用于匹配所有出现在方括号内的字符。
例如,列出以 rp 开头而仅以 c 或 m 结尾的文件名或目录。
1 | [tommy@VM-0-13-centos etc]$ ls rp[cm] |
其他用法:ls text[1-3]
列出所有以 text 开头并以 1~3 中某个字符(包括1和3)结束的文件;也可以使用字母范围,在 ASCII 字符集中,A-Z 匹配所有大写字母:ls text[A-C]
。