Linux环境变量
????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ???????????????🎬慕斯主页:修仙—别有洞天?
? ?????????????????????????????????????????????????????????今日夜电波:HEART BEAT—YOASOBI
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 2:20━━━━━━?💟──────── 5:35
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ????🔄 ? ?? ? ? ? ?? ? ????
??????????????????????????????????????💗关注👍点赞🙌收藏您的每一次鼓励都是对我莫大的支持😍
目录
什么是环境变量?
????????环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数如:我们在编写C/C++代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪里,但是照样可以链接成功,生成可执行程序,原因就是有相关环境变量帮助编译器进行查找。环境变量通常具有某些特殊用途,还有在系统当中通常具有全局特性
????????常见的环境变量
PATH : 指定命令的搜索路径
HOME : 指定用户的主工作目录(即用户登陆到Linux系统中时,默认的目录)
SHELL : 当前Shell,它的值通常是/bin/bash。
如何查看环境变量?
????????env—查看全部环境变量
????????在Linux和Unix-like系统中,env是一个命令行实用程序,用于显示当前环境中所有的环境变量及其值。它不接受任何参数,而是直接输出当前环境中所有的环境变量。
????????echo +环境变量名
????????例如:如果我们想查看$PATH,则可以用echo $PATH 来用于查看指定命令的搜索路径。
[amazon@iZ7xvfrafhk3mf5qwrf2gxZ ~]$ echo $PATH
/usr/local/apache/bin:/usr/local/php/bin:/usr/local/mysql/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/amazon/.local/bin:/home/amazon/bin
????????在以上打印出来的环境变量$PATH中,以冒号作为分隔符,每一个冒号,后面都对应着一个路径。如:
/usr/local/apache/bin
:这是一个指向Apache服务器二进制文件的目录路径。Apache是一个流行的Web服务器软件,安装在大多数Linux和Unix-like系统上。/usr/local/php/bin
:这是一个指向PHP编程语言二进制文件的目录路径。PHP是一种流行的开源脚本语言,常用于开发动态网页和应用程序。/usr/local/mysql/bin
:这是一个指向MySQL数据库管理系统二进制文件的目录路径。MySQL是一种流行的开源关系型数据库管理系统,常用于存储和处理数据。/usr/local/bin
、/usr/bin
、/usr/local/sbin
、/usr/sbin
:这些都是标准的系统目录路径,包含了许多常用的工具和命令行程序。/home/amazon/.local/bin
、/home/amazon/bin
:这些都是个人用户的目录路径,通常包含了一些自定义的工具和命令行程序。
????????在使用$PATH
变量值时,系统会按照从左到右的顺序遍历目录中的二进制文件,并尝试运行第一个找到的匹配文件。因此,为了确保某个特定的命令可以正确地工作,你需要将其安装在$PATH
变量中的某个目录中,并确保该目录出现在$PATH
变量的前部。例如,如果你想在命令行中使用php,你可以在上述$PATH
变量值中添加/usr/local/php/bin
目录,并确保其出现在其他目录之前。
????????同理,如果要查看其他的环境变量也可用echo命令打印:
????????$PATH拓展
????????通过修改$PATH,使得程序不需要找到对应的路径即可运行,即: ./exe -> exe
export PATH=$PATH: 当前路径
????????通过以上代码将新的路径添加到$PATH环境变量中,使得系统可以自动找到对应的路径,而不需要自己再找路径,这也可以理解成“程序的安装”。
? PATH=$PATH:
是Linux和Unix系统中常用的命令行语法,它可以用来添加新的路径到当前用户的PATH
环境变量中。如果你直接使用PATH=路径将修改全部路径,会覆盖原有的$PATH路径。????????如果你想将新的路径添加到
PATH
中,可以在PATH
变量的末尾添加一个冒号(:
),然后再添加新的路径。例如:
export PATH=$PATH:/path/to/new/directory
????????在这个例子中,我们将新的路径
/path/to/new/directory
添加到了当前用户的PATH
环境变量中。这意味着系统现在会在新的路径中查找可执行文件。????????注意,如果你已经设置了
PATH
环境变量,你需要在~/.bash_profile文件中添加上述命令或者运行source ~/.bashrc
来使改变生效(实际上是修改了bash的脚本配置文件)。如果没有执行其中的语句,实际上只是临时的路径,在你的Linux重启后PATH环境变量会恢复原样(这是因为命令行启动的进程都是shell/bash的子进程,子进程的命令行参数和环境变量,是父进程bash给我们传递的)。如下:
如何获取环境变量?
????????getenv()获取指定环境变量的值
????????getenv()是C语言库函数,用于获取指定环境变量的值。它的原型如下:
char *getenv(const char *name);
????????参数name是要获取的环境变量名,函数返回值是一个字符串,表示环境变量的值。如果环境变量不存在,则返回NULL。
????????在C++中,可以通过std::getenv()函数来调用getenv()函数。其原型如下:
const char* getenv(const char* name);
????????参数name是要获取的环境变量名,函数返回值是一个字符串,表示环境变量的值。如果环境变量不存在,则返回NULL。
????????例如:如下为获取$USER的环境变量。
#include<stdlib.h>
#include<stdio.h>
#include<unistd.h>
int main()
{
char* ev=getenv("USER");
if(ev)
{
printf("%s\n",ev);
}
return 0;
}
????????通过命令行参数获取环境变量
????????我们知道main()实际上包涵三个参数,即:main(int argc,char*argv[],char * envp[]),其中,argc是一个整数,表示命令行参数的数量(不包括程序名称)。argv[]是一个指向字符数组的指针,数组中的每个元素都是一个命令行参数的地址。envp[]是一个指向字符数组的指针,数组中的每个元素都是一个环境变量的地址。
????????如下:打印全部环境变量
#include<stdlib.h>
#include<stdio.h>
#include<unistd.h>
int main(int argc,char*argv[],char * envp[])
{
int i=0;
for(;envp[i];i++)
{
printf("pid:%d,envp[%d]: %s\n",getpid(),i,envp[i]);
}
char* ev=getenv("USER");
return 0;
}
????????通过第三方变量environ来获取环境变量
????????environ是一个全局变量,它是以环境变量的方式存储在栈上的字典。当你通过putenv()或setenv()函数添加环境变量时,它们实际上是在修改environ。
????????environ是一个指向struct passwd类型的指针,其中struct passwd是一个结构体,用于描述用户账户信息。在struct passwd中,environ字段指向一个包含环境变量的链表。每个链表节点都是一个包含环境变量名和值的字符串。
????????由于environ是一个全局变量,因此你可以直接访问它来获取或设置环境变量。例如:
#include <stdio.h>
#include<unistd.h>
int main(int argc, char *argv[],char *envp[])
{
extern char **environ;
int i = 0;
for(; environ[i]; i++)
{
printf("pid:%d ,environ[%d]: %s\n",getpid(),i,environ[i]);
}
return 0;
}
如何设置环境变量?
????????在Linux中,export命令用于设置或显示环境变量。在shell中执行程序时,shell会提供一组环境变量。使用export命令可以新增,修改或删除环境变量,供后续执行的程序使用。
????????export命令的一般语法格式为:
export [-fnp][变量名称]=[变量设置值]
????????具体参数含义如下:
- -f 代表 [变量名称]中为函数名称。
- -n 删除指定的变量。需要注意的是,这里的删除并不真正移除这个变量,而是使其不会输出到后续指令的执行环境中。
- -p 列出所有的shell赋予程序的环境变量。
????????如下:
????????当然这只是临时修改的环境变量,当重启Linux系统后就不存在了,要想使其重启后仍然失效,你需要在~/.bash_profile文件中添加上述命令或者运行
source ~/.bashrc
来使改变生效。
????????如下命令打开脚本配置文件,并且修改:
vim ~/.bash_profile
set和unset
????????在 Linux 系统中,
set
和unset
是两个常用的命令,分别用于设置环境变量和删除环境变量。set
命令用于显示或设置 shell 的配置选项、命令别名、环境变量等。当它没有参数时,会显示当前 shell 的所有配置选项、命令别名和环境变量的信息。当它有参数时,可以设置相应的配置选项、命令别名或环境变量。
????????例如,要查看当前 shell 的所有环境变量,可以输入以下命令:
set
????????要设置一个名为 MY_VAR
的环境变量,并将其值设置为 Hello, World!
,可以输入以下命令:
set MY_VAR=Hello, World!
??unset
命令用于删除环境变量。当它没有参数时,会列出所有可用的环境变量。当它有参数时,会删除指定的环境变量。
????????例如,要查看当前 shell 中的所有环境变量,可以输入以下命令:
env
????????要删除名为 MY_VAR
的环境变量,可以输入以下命令:
unset MY_VAR
????????注意,删除环境变量可能会影响到正在运行的程序。因此,在使用
unset
命令时,应该谨慎考虑其影响范围。
?????????????????????感谢你耐心的看到这里?( ′・?・` )比心,如有哪里有错误请踢一脚作者o(╥﹏╥)o!?
????????????????????????????????? ? ? ?
????????????????????????????????????????????????????????????????????????给个三连再走嘛~??
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!