目录
基本概念
- 环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数
- 我们在写C/C++代码的时候,在链接的时候,从来不知道我们所链接的动态/静态库在哪里,但是照样可以链接成功,生成可执行程序,原因就是有相关环境变量帮助编译器进行查找。
- 环境变量通常具有某些特殊用途,还有在系统当中通常具有全局特性。
当写下面这个程序,并用make工具进行编译
[wjy@VM-24-9-centos 407test]$ cat myproc.c
#include <stdio.h>
#include <unistd.h>
int main()
{
int cnt=5;
while(cnt)
{
sleep(1);
printf("I am a cmd -> process!\n");
cnt--;
}
return 0;
}
[wjy@VM-24-9-centos 407test]$ cat makefile
myproc:myproc.c
gcc -o $@ $^ -std=c99
PHONY:
clean:
rm -f myproc
make编译之后,生成可执行文件
[wjy@VM-24-9-centos 407test]$ ll
total 20
-rw-rw-r-- 1 wjy wjy 68 Apr 7 16:18 makefile
-rwxrwxr-x 1 wjy wjy 8408 Apr 7 16:20 myproc
-rw-rw-r-- 1 wjy wjy 167 Apr 7 16:20 myproc.c
[wjy@VM-24-9-centos 407test]$ ./myproc
I am a cmd -> process!
I am a cmd -> process!
I am a cmd -> process!
I am a cmd -> process!
I am a cmd -> process!
在我们用make工具写一个命令执行文件时候,会生成一个文件,这个文件就是用来执行源程序文件的编译文件,然后想要链接将程序结果打印在屏幕上,我们会输入“./xxx”命令。这些命令,程序,工具等等都是一个可执行文件。那么在运行的时候,为何要“./”呢?
我们知道./就是当前路径,当输入./后,就会帮系统确认对应的程序在哪里。那么为何系统的命令不用带路径呢?
通常执行一个程序需要找到对应路径下的文件,但是系统的命令可以不带路径,系统的命令可以自己找到这条命令,那么系统是怎样找到这条命令呢?
这时因为环境变量--PATH的原因。
查看环境变量方法
echo $PATH//PATH:环境变量名称,还有很多环境变量
获取./对应的路径,也就是环境变量,需要输入下面命令。但是需要主义的是,PATH前面要加$符号,PATH就像(但不是)一个指针,指针解引用之后才能取到里面内容,所以PATH前面要加一个$符号。
这里所有路径都用一个冒号作为分隔符,分割出了多条路径。所以系统想通过PATH找到路径,它的查找规则就是,在PATH当中先找第一个,找不到就找第二个路径,找不到再找下一个,如果找到了,后续就不再找了,那么系统将它的可执行程序跑起来。
但是我们并不推荐去自己自定义环境变量,因为拷进去之后会污染系统的命令池,时间长了可能会发现为什么这条语句会有一个打印语句。
当我们要在系统中安装一个软件,安装的过程就是将软件的路径拷贝到特定的系统命令路径下,完成安装,所以安装的过程就是拷贝的过程。
所以PATH就是搜索路径,系统能够找到命令,就是通过PATH找到环境变量
[wjy@VM-24-9-centos 407test]$ echo $PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/wjy/.local/bin:/home/wjy/bin
环境变量的导入
如果就想用环境变量执行命令,该怎么把环境变量导入系统路径呢?
- export 导入
- 要