🚀什么是环境变量🚀
在c/C++当中,根据不同程序的需要,我们需要为该程序定义某些变量int _data
,double _price
;
这些变量本质上就是一段内存空间,用来存储程序需要的值或数据;
而在OS中,OS本身在运行当中也需要一些必要的值或者数据,所以在OS当中也会存在一些变量用来存储这些所谓必要的值或者数据参数;
本质上来说环境变量(environment variables)一般是指操作系统中指定操作系统运行环境的一些参数;
一般常见的环境变量有:
PATH
指定命令的搜索路径;HOME
指定用户的主工作目录(即用户登陆到Linux系统当中时的默认路径);SHELL
当前Shell,它的值通常为/bin/bash
;
不同的环境变量有着不同的功能;
🚀查看环境变量🚀
在Linux当中可以使用env
命令打印所有的环境变量;
查看环境变量一般的方式是利用echo
命令将环境变量进行打印;
语法:
echo $NAME
- 其中:
NAME
指环境变量名echo
命令在Linux中的作用为:用于显示消息或输出其他命令的结果;
其中若是使用echo
打印环境变量时必须使用$
符,否则将会直接将环境变量名当作字符串进行打印;
$ echo PATH PATH $ echo $PATH /usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/_user/.local/bin:/home/_user/bin
🕹️和环境变量有关的命令🕹️
echo
:显示某个环境变量值;export
:设置一个新的环境变量;env
:显示所有环境变量;unset
:清除环境变量;set
:显示本地定义的shell变量和环境变量;
🚀PATH环境变量🚀
存在一个程序mytest
:
其主要的作用为打印hello world
;
std::cout << "hello world"<< std::endl ;
$ /usr/bin/ls Makefile mytest test.cpp $ ls Makefile mytest test.cpp $ ./mytest hello world $ mytest -bash: mytest: command not found
已知ls
本身就是一个程序,且该程序存在于路径usr/bin/ls
;
在该程序中运行了两个程序:mytest
与ls
,分别为用户(我)创建的程序mytest
与OS中自带的命令程序ls
;
但是在使这两个程序运行时的方式并不同,在运行用户的程序时必须使用相对路径或者绝对路径从而运行程序,而在使用OS自身的程序时对路径的需求却可有可无;
很显然这个原因是因为:
本质上的原因是因为在OS当中,无论是运行什么程序都需要保证首先得找到这个程序(即拥有这个程序的路径)才能将该程序进行运行;
而例如
ls
之类的这样的命令,OS默认是可以直接找到它的,因为这些命令的所在位置都位于环境变量PATH
当中;
- 使用
echo
打印环境变量$PATH
:
$ echo $PATH /usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/_user/.local/bin:/home/_user/bin
- 从打印出来的结果中可以发现,
PATH
环境变量以/.../..
作为路径,:
作为分隔符; - 使用
which
找到ls
命令所在路径:which
命令将在PATH
环境变量中寻找某个指令的地址;
$ which ls alias ls='ls --color=auto' /usr/bin/ls
ls
的所在路径正是在PATH
环境变量当中;
当在Linux命令行上输入对应的命令时,OS将会在PATH
环境变量中寻找该命令的地址;
顺序为从左至右且以:
作分隔符;/usr/local/bin
,/usr/bin
,/usr/local/sbin
…
🕹️设置PATH环境变量🕹️
若是想使自己的程序设置成类似于ls
命令;
可以使用两种方式:
- 将文件移至
PATH
环境变量的任意路径当中:
由于PATH
环境变量中所存储的命令或者文件都是以路径的形式进行存储;
所以可以将需要的文件添加至PATH
环境变量中的任意路径;
但是实际上这种方式一般是不可取的:
虽然以这种方式可以达到预期的效果:使得自己的程序能像命令一样直接运行
但是对应的有很大的副作用;
由于
PATH
环境变量内的文件是OS预先设置好的,由于这种操作在Linux当中相当于将自己写的命令安装至OS中;所以如果贸然的将自己的程序添加至路径当中可能会出现污染命令池;
- 使用
export
命令将程序加入PATH
环境变量:
语法:
export PATH=$PATH:程序路径
- 使用
pwd
查看可执行程序所在路径以及使用echo
命令打印当前PATH
环境变量:
$ pwd /home/_user/Begin/my_-linux/Pro23/Environment1201/T1201 $ echo $PATH /usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/_user/.local/bin:/home/_user/bin
- 使用
export
将路径加入到PATH
环境变量后再对PATH
环境变量进行打印:
export PATH=$PATH:/home/_user/Begin/my_-linux/Pro23/Environment1201/T1201 # 设置 $ echo $PATH # 打印 /usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/_user/.local/bin:/home/_user/bin:/home/_user/Begin/my_-linux/Pro23/Environment1201/T1201
- 此时多了一个
/home/_user/Begin/my_-linux/Pro23/Environment1201/T1201
的路径;
不带路径直接运行该程序:
$ mytest hello world
- 同时使用
which
也可以在$PATH
环境变量中找到该程序:
$ which mytest ~/Begin/my_-linux/Pro23/Environment1201/T1201/mytest
- 同时这种方式在测试设置
$PATH
环境变量较为安全;
因为在不改配置文件的前提下只使用命令行的模式(类似于export
)的方式对环境变量进行修改时,修改效果只在当前对话当中;
当重新登陆该会话时环境变量将恢复:
$ echo $PATH /usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/_user/.local/bin:/home/_user/bin
🚀HOME环境变量🚀
HOME
环境变量即为指定用户的主工作目录(即用户登陆到Linux系统当中时的默认路径);
实际上不同的用户使用echo
对HOME
环境变量进行打印时所得到的结果是不同的:
#------_user用户下------ $ echo $HOME /home/_user #------root用户下------ # echo $HOME /root
『 Linux 』环境变量(下)https://developer.aliyun.com/article/1424466