ubuntu学习-shell命令和PATH环境变量简单学习
一、shell是什么
shell就是一个应用程序,我们可以通过键盘、串口给它发送命令,回车后它就会去执行这些命令。
以ls -l
命令例:
-
接收键盘数据并回显
比如:我们使用键盘给shell程序发送字母l,它收到之后会在屏幕上显示出来
-
解析输入的字符串,寻找程序,执行程序:
a. shell会解析字符串,这些字符串用空格分为好几部分
第1部分就是程序名、命令名
其它部分是参数
b. shell回去寻找该程序,去哪里找?去PATH环境变量所指示的位置找(同样可以指定绝对路径、相对路径,shell就会直接去这些路径找到程序)
c. 找到程序后,会启动该程序,并传入参数
环境变量查询:
执行echo $PATH
命令,shell就是去以下逐个目录寻找程序
执行env
命令,可以看到环境变量和边境变量的值
二、设置环境变量
用一个应用程序来帮助学习。先创建一个hello.c文件,内容:
#include <stdio.h>
int main(int argc, char **argv)
{
if(argc >= 2)
printf("Hello,%s!\n",argv[1]);
else
printf("Hello,world!\n");
return 0;
}
将这个文件放到桌面上
打开终端,进入桌面
将hello.c文件编译为一个名为“hello”的可执行文件,gcc -o hello hello.c
此时直接输入hello
是无法执行的,
原因是在PATH环境变量路径中没有该程序,因此shell找不到该程序
如何执行该程序呢?有两种启动方法:
1.使用相对路径启动
在桌面的目录下输入./hello
直接执行该程序
2.使用绝对路径启动
在任意目录下输入/home/book/Desktop/hello
执行该程序
例如此程序执行
/home/book/Desktop/hello zhangsan
命令时是如何执行的呢?输入了两个参数,第一个参数:
/home/book/Desktop/hello
,第二个参数:zhangsan
此时:argc = 2 argv[0] = /home/book/Desktop/hello argv[1] = zhangsan
因此会执行:Hello,zhangsan!
但是这样启动每次都要输入相对路径或者绝对路径,要想在任何目录下输入一条指令就能够执行该程序,就需要将此程序添加到环境变量中,这时shell就能够自动找寻到这个程序并执行了。就像执行ls命令一样。有三种环境变量方法:
1.临时设置环境变量(只对当前终端有效)
hello文件在/home/book/Desktop路径下,因此在终端执行指令export PATH=$PATH:/home/book/Desktop
,之后在此终端直接输入hello就可以执行程序了
2.永久设置环境变量方法(只对当前用户有效)
修改~/.bashrc,在行尾添加或修改:export PATH=$PATH:/home/book/Desktop
执行指令gedit ~/.bashrc
,在bashrc的最后一行添加上述路径,保存关闭。然后重启系统或重新登陆即可。
此时就可以直接执行hello指令了
3.永久设置环境变量方法(对所有用户有效)
执行sudo gedit /etc/environment
并输入密码,在PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"的最后加上程序的路径,保存关闭。然后重启系统或重新登陆即可。
注:我们知道shell是echo $PATH的环境目录中去找寻程序,因此也可以不去配置环境变量,只是把hello程序复制到PATH下的一个目录即可
例如:把hello程序拷贝到环境变量中的一个路径/usr/local/bin,命名为hello2,在桌面路径下执行sudo cp hello /usr/local/bin/hello2
,输入密码。此时直接输入指令hello2即可执行hello程序