1-1.shell是什么?
我个人认为,shell
就是一系列的 linux
指令的集合。
它是用户与系统之间交互的媒介。
它既是一种命令语言,又是一种解释性的编程语言。
Shell
相比 C
等语言的优势在于它是完全嵌入在 Linux
中的,不需要安装,编译。
学术话的定义如下:
Shell
可以是一个程序,提供一个与用户对话的环境。这个环境只有一个命令提示符,让用户从键盘输入命令,所以又称为命令行环境(command line interface
,简写为CLI
)。Shell
接收到用户输入的命令,将命令送入操作系统执行,并将结果返回给用户。Shell
也可以是一个命令解释器,解释用户输入的命令。它支持变量、条件判断、循环操作等语法,所以用户可以用Shell
命令写出各种小程序,又称为脚本script
。这些脚本都通过Shell
的解释执行,而不通过编译。Shell
还可以是一个工具箱,提供了各种小工具,供用户方便地使用操作系统的功能。
1-2.shell的种类
Bourne Shell
(/usr/bin/sh
或者/bin/sh
) 目前所有Shell
的祖先,被安装在几乎所有发源于Unix
的操作系统上。Bourne Again Shell
(/bin/bash
) 是sh
的一个进阶版本,比sh
更优秀,bash
是目前大多数Linux
发行版以及macOS
操作系统的默认Shell
。C Shell
(/usr/bin/csh
) 它的语法类似C
语言。K Shell
(/usr/bin/ksh
) 一般在收费的Unix
版本上比较多见。Z Shell
(/bin/zsh
) 它是一种比较新近的Shell
,集bash
、ksh
和tcsh
各家之大成。
1-3.全局变量
上述的 /usr/bin/
或者 /bin/
,都是系统设置的环境变量,可以利用 echo $PATH
来查看所有的环境变量。
包含 $PATH
的所有的全局变量如下:
BASHPID
:Bash
进程的进程ID
。EDITOR
:默认的文本编辑器。HOME
:用户的主目录。HOST
:当前主机的名称。LANG
:字符集以及语言编码,比如zh_CN.UTF-8
。PATH
:由冒号分开的目录列表,当输入可执行程序名后,会搜索这个目录列表。PWD
:当前工作目录。SHELL
:Shell
的名字。TERM
:终端类型名,即终端仿真器所用的协议。UID
:当前用户的ID
编号。USER
:当前用户的用户名。
全局变量是 Bash
环境自带的变量,进入 Shell
时已经定义好了,可以直接使用。它们通常是系统定义好的。
可直接在 Shell
中输入 env
,来查看所有的全局变量。
1-4.配置文件
全局变量一般都可以在配置文件中进行配置。bash
对应的是 .bash_profile
文件,而 zsh
对应的是 .zshrc
。
配置文件的目录一般都放在当前用户的 家
目录下。
譬如,macos
系统中对应的 家
目录即是 ~
或者 /users/your-user-name/
。
以 zsh
为例:
shell
vi ~/.zshrc
# 假设当前用户名为 jack,也可以使用这个:
vi /users/jack/.zshrc
TIP
- 在
~
目录下的配置文件是用户级别的配置。也就是说,只会对当前登录的用户起作用。如果切换了用户,新配置不会存在新用户的~
目录下,也就不会生效。 - 如果想对所有用户生效,要配置
/etc/
目录下的相关对应配置文件。如/etc/profile
、/etc/zshrc
等。