此文编写参照韦东山老师的视频教程和百问网的wiki教程
1、什么是shell?
shell是一个命令解析器,是用来解析命令的,或者说它是一个程序,它是我们和linux系统交互的一种工具,当我们在终端输入一系列的字符串时,shell会接收它们,并且再终端显示出来,当按回车键的时候,此时shell就会解析这些字符串,并且会去寻找和字符串对应的程序,最后执行程序,那么问题来了,要去哪里寻找呢?它会到一个默认的路径去寻找,那么这个默认路径又是由什么所决定的呢?它是由环境变量所决定的。那么问题又来了什么又是环境变量呢?
2、什么是环境变量?
PATH说简单点就是一个字符串变量,当输入命令的时候系统会去查找PATH里面记录的路径。比如在根目录/下可以输入命令ls,在/usr目录下也可以输入ls,但其实ls这个命令根本不在这个两个目录下,事实上当你输入命令的时候Linux会去/bin,/usr/bin,/sbin等目录下面去找你此时输入的命令,而PATH的值恰恰就是/bin:/sbin:/usr/bin:……。其中的冒号使目录与目录之间隔开。
补充说明:ps是用来报告程序执行状况的指令,
-a 显示所有终端机下执行的程序,除了阶段作业领导者之外。
a 显示现行终端机下的所有程序,包括其他用户的程序。
-A 显示所有程序。
如此处输入pwd这个字符串,按下回车后,那么就会将pwd发送给shell这个应用程序,然后shell就会去解析这个字符串,并且会去PATH里面记录的路径里找对应的执行程序,这个执行程序也就是命令,到找到后,就执行这个程序或者说是命令。上面表示pwd是在bin目录下的。
3、怎么设置环境变量?
以在PATH中添加/home/book目录为例:
2.1 永久设置之方法1,对所有用户都有效:
修改/etc/environment,比如:sudo gedit /etc/environment,然后添加下行:
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/book"
然后重启系统或重新登录。
2.2 永久设置之方法2,只对当前用户有效:
修改~/.bashrc,在行尾添加或修改:
export PATH=$PATH:/home/book
然后重启系统或重新登录。
2.3 临时设置:
在终端执行以下命令,这只对当前终端有效:
export PATH=$PATH:/home/book
command not found的原因:
- PATH所确定的目录中无此程序
- 它不是可执行的程序
此处运行的结果显然是原因1,那么我们可以设置下环境变量,此时需要通过export命令来设置
export:设置或显示环境变量。
语法:export [-fnp][变量名称]=[变量设置值]
补充说明:在shell中执行程序时,shell会提供一组环境变量。export可新增,修改或删除环境变量,供后续执行的程序使用。export的效力仅及于该此登陆操作。
参 数:
-f 代表[变量名称]中为函数名称。
-n 删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中。
-p 列出所有的shell赋予程序的环境变量。
所以我们下面设置一下环境变量
4、补充
上面我们说到在shell里面输入字符串按下回车之后回到PATH指定的目录查找对应的程序,然后执行程序,其实这是片面的,我们可以在shell里面用绝对路径或者相对路径指定要找的程序。同样是上面一个例子。
这里并没有去设置环境变量,但是也是达到了去设置环境变量的效果。