1.What‘s the Shell?
想要和内核沟通就需要用到Shell,然后才可以让内核帮助我们完成各种任务.
- 命令行:指的是提供用户输入命令的界面,它本身只接受输入,然后把命令传给命令解释器。
- Shell是一个程序界面,它在用户和操作系统之间提供一个可交互的接口,用户在命令行中输入命令,运行在后台的的Shell把命令转换成指令代码发送给操作系统。
- 简单来说,用户、Shell、内核的关系如下图:
Shell将这些命令解释给内核,内核执行命令后返回给Shell,然后Shell将执行结果返回给用户.
在Linux中其实有很多的种Shell,不同的Shel提供不同的语法和特性。用户可以使用任何一种Shell,标准的Linux Shell是bash。在bash种,命令行以一个$符号作为提示符,表示用户可以输入命令了。如果以root身份执行命令,那么·Shell提示符将变成#符号。
2.Shell命令的分类
Linux操作系统命令可以分为两大类,一类是内部命令,就是内置在bash中的命令;另一类就是外部命令,即不是内置在bash中的命令。外部命令可以执行文件的方式存储在Linux文件系统中。有时候我i们需要知道一个命令是内部命令还是外部命令,因为在执行外部命令时可能需要给出完整的路径。
内置在Shell中的命令,比如cd 、 echo等都是内部命令;外部命令不在Shell命令中,而在/usr/bin和/usr/sbin等目录中。大多数的命令,例如ls和cat命令。内部和外部命令的关系如下图所示:
当我们在执行外部命令的时候,Shell需要在环境变量PATH注册的目录下执行外部命令。内部命令就不参考环境变量PATH了,因为Shell是内部命令。当执行没有注册过的命令时,结果会出错。但有一种方式不会出错,那就是通过绝对路径或者以”./“开头的相对路径指定的命令执行。
环境变量PATH
PATH只是环境变量中的一个。Shell处理的变量分为两类:一种是Shell变量,另一种就是这个环境变量了。
Shell变量又称本地变量,里面包括私有变量和用户变量,不同的类型的Shell有不同的私有变量,有自己的特色。不过变量仅由配置的Shell程序使用,子进程不会继承。
虽然子进程不会继承Shell变量来创建,通过export命令的参数指定一个变量,然后将其设置为由子进程继承的环境变量,并且将这个环境变量作为子进程启动应用程序的继承。总之,环境变量是通过引导Shell变量创建的。主要的几种环境变量如下:
变量名 | 说明 |
PATH | 命令索索路径 |
HOME | 定义提示 |
PSI | 定义提示 |
LANG | 语言提示 |
设置变量是有规则的,通过”变量名=值“的方式可以设置一个变量。当变量的值有空格时就需要使用双引号或者单引号括起来。如果你设置的这个变量需要其他的子程序里面运行,可以使用export命令让这个变量变成环境变量。使用”unset变量名称“的方式可以取消变量。
在你设置变量的时候,使用export可以实现。env命令可以显示设置的环境变量。
输入env命令后,在环境列表中的环境变量会生效。
在bash中,Shell变量PS1表示命令提示符,PS1的默认值为”\s-\v\$“.PS1值中的字符$对于普通用户显示为$,对于root用户来说显示为#。其实这个PS1也见过,就是[root@CentOS~]这样的设置。可以在PS1中使用主要符号如下表:
符号 | 说明 |
\s | Shell名称 |
\v | bash版本 |
\u | 用户名 |
\h | 读取第一个,之前的用户名 |
\w | 当前的工作目录 |
\H | 显示完整的主机名 |
\$ | 提示字符 |
\@ | 显示时间,格式为12小时(am/pm) |
环境变量可以帮助我们实现很多的功能,比如根目录的变换、提示符的显示等。一般情况下,Linux中使用大写字母来设置大写字母来设置的变量是系统需要的变量。这些就是有关环境变量的基础知识。