擅自使用他人产品做网站宣传,企业简介模板下载,网站开发语言为 php,分销商城模式系统开发✅1主页#xff1a;#xff1a;我的代码爱吃辣 #x1f4c3;2知识讲解#xff1a;Linux——环境变量 ☂️3开发环境#xff1a;Centos7 #x1f4ac;4前言#xff1a;环境变量(environment variables)一般是指在操作系统中用来指定操作… ✅1主页我的代码爱吃辣 2知识讲解Linux——环境变量 ☂️3开发环境Centos7 4前言环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数 目录
一.基本概念
二.Linux系统中常见的环境变量
1.查看指定的环境变量
2.PATH
3.HOME
4.SHELL
三.环境变量的组织方式
四.添加环境变量
五.环境变量的继承
六.获取环境变量
1.命令行第三个参数
2.通过第三方变量environ获取
3.通过系统调用获取或设置环境变量 一.基本概念
环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数。如我们在编写C/C代码的时候在链接的时候从来不知道我们的所链接的动态静态库在哪里但是照样可以链接成功生成可执行程序原因就是有相关环境变量帮助编译器进行查找。环境变量通常具有某些特殊用途还有在系统当中通常具有全局特性。 查看当前LInux系统的环境变量
指令
env windows下的环境变量 环境变量本质就是一种变量一种K/V的对用关系由变量名和变量值。
二.Linux系统中常见的环境变量
1.查看指定的环境变量
echo $NAME #NAME:环境变量名称 例如: 2.PATH
指定命令的搜索路径.
我们平时写的一些C/C代码编译成可执行程序以后通过 ./ 运行本质是告诉操作系统可执行程序的位置。但是系统自带的指令本质也是C语言写的程序为什么系统的指令不需要指定路径呢就是因为环境变量PATH里面存储了指定命令的搜索路径。 3.HOME
指定用户的主工作目录(即用户登陆到Linux系统中时,默认的目录)。
当我们每次登录系统的时候系统就会记录下登录用户并且填充HOME环境变量并且创建bash进程帮我们执行 cd /home/XXX 的命令进入我们自己的家目录这就是我们为什么一进入系统默认就在自己的家目录里。
普通用户 root用户 4.SHELL
当前Shell,它的值通常是/bin/bash。
三.环境变量的组织方式
每个程序都会收到一张环境表环境表是一个字符指针数组每个指针指向一个以’\0’结尾的环境字符串表的最后一个位置是NULL。 四.添加环境变量
我们刚刚介绍了PATH环境变量指定命令的搜索路径.那么我们可不可以将自己写的可执行程序的查询路径也添加进PATH里这样我们的可执行程序也可以实现不需要 ./ 就可以直接执行了。
测试代码test.c
#include stdio.h
#include unistd.hint main()
{int n 3;while (n){printf(原神启动:%d\n, n);sleep(1);n--;}
}
makefile
ttest:test.cgcc -o $ $^
.PHONY:clean
clean:rm -rf ttest 方法一
使用export将我们该可执行程序的路径导入PATH中后续可以不用加 ./ 就可以直接运行可执行程序因为操作系统可知直接通过环境变量中的地址找到可执行程序。
export PATH路径 注意
这样会有一个很尴尬的问题就是我们的PATH中只有这一个路径了即之前的TATH环境变量中的其他路径被我们导入的路径覆盖了。
我们这样导入环境变量
export PATH$PATH:路径 方法二
将可执行程序拷贝到 /usr/bin目录下/usr/bin目录就是系统默认的命令存储的路径。
sudo cp ./ttest /usr/bin 本质将可执行程序放进/usr/bin目录下的过程就是软件安装的过程。
上述这种添加变量的方式就是将命令添加到系统环境中还有一种添加变量的方式是将变量添加到本地这种变量我们称之为本地变量。
例如
hello100
这就是添加了一个本地变量。
五.环境变量的继承
环境变量是可以被子进程继承的。我们使用 export 导入的进程就可以使用 echo 命令查询得到echo 本质也是一个程序之所以echo 可以查询到我们导入bash的环境变量本就是echo 继承了bash的环境变量。但是仅仅只是环境变量可以被子进程继承本地变量是不可以子进程继承。
六.获取环境变量
1.命令行第三个参数
我们先看看命令行参数
#include stdio.h
int main(int argc, char *argv[])
{int i 0;for (i 0; i argc; i){printf(%s , argv[i]);}printf(\n);return 0;
} 注意 argv是一个指针数组数组每一个元素都是一个char*每一个char*都指向了一个字符串。argc是argv数组的元素个数。 注意 argv数组存储的就是我们命令行输入的以空格为分隔的字符串。顺序是从左往右 命令行的第三个参数
测试代码
#include stdio.h
int main(int argc, char *argv[], char *env[])
{int i 0;for (; env[i]; i){printf(%s\n, env[i]);}return 0;
}
运行结果 注意 env也是一个指针数组每一个数组元素存储的就是一个环境变量。证明了环境变量是可以被子进程继承的。应证了环境变量的组织方式。 2.通过第三方变量environ获取 测试代码
#include stdio.h
int main(int argc, char *argv[])
{extern char **environ;//环境变量表int i 0;for (; environ[i]; i){printf(%s\n, environ[i]);}return 0;
}
运行结果 注意 libc中定义的全局变量environ指向环境变量表,environ没有包含在任何头文件中,所以在使用时 要用extern声明。 3.通过系统调用获取或设置环境变量
系统调用
getenv() getenv参数是环境变量名返回的是环境变量值字符串如果没找到对应的环境变量就返回NULL。
测试代码
[wqiZuf6hzw565sb02fomef99Z 23_9_12]$ HELLO100#本地变量
[wqiZuf6hzw565sb02fomef99Z 23_9_12]$ export MYHELLO100#环境变量
#include stdio.h
#include stdlib.h
int main()
{if (getenv(PATH)){printf(PATH:%s\n, getenv(PATH));}if (getenv(MYHELLO)){printf(MYHELLO:%s\n, getenv(MYHELLO));}if (getenv(HELLO)){printf(HELLO:%s\n, getenv(HELLO));}return 0;
} 注意 环境变量通常具有全局属性可以被子进程继承下去。我们之前说过本地变量不会被子进程继承上面的代码也可以看出来。但是为什么使用命令echo就可以查询到本地变量因为echo是内建命令。 文章转载自: http://www.morning.nrwr.cn.gov.cn.nrwr.cn http://www.morning.jhtrb.cn.gov.cn.jhtrb.cn http://www.morning.jzgxp.cn.gov.cn.jzgxp.cn http://www.morning.rdymd.cn.gov.cn.rdymd.cn http://www.morning.jxpwr.cn.gov.cn.jxpwr.cn http://www.morning.ggnkt.cn.gov.cn.ggnkt.cn http://www.morning.cplym.cn.gov.cn.cplym.cn http://www.morning.qlrtd.cn.gov.cn.qlrtd.cn http://www.morning.srgsb.cn.gov.cn.srgsb.cn http://www.morning.qtkdn.cn.gov.cn.qtkdn.cn http://www.morning.dtgjt.cn.gov.cn.dtgjt.cn http://www.morning.nwwzc.cn.gov.cn.nwwzc.cn http://www.morning.cbmqq.cn.gov.cn.cbmqq.cn http://www.morning.thbnt.cn.gov.cn.thbnt.cn http://www.morning.pzdxg.cn.gov.cn.pzdxg.cn http://www.morning.gnghp.cn.gov.cn.gnghp.cn http://www.morning.rtqyy.cn.gov.cn.rtqyy.cn http://www.morning.njfgl.cn.gov.cn.njfgl.cn http://www.morning.qwmpn.cn.gov.cn.qwmpn.cn http://www.morning.mtqqx.cn.gov.cn.mtqqx.cn http://www.morning.dqkcn.cn.gov.cn.dqkcn.cn http://www.morning.fgwzl.cn.gov.cn.fgwzl.cn http://www.morning.tnmmp.cn.gov.cn.tnmmp.cn http://www.morning.jbxfm.cn.gov.cn.jbxfm.cn http://www.morning.fnczn.cn.gov.cn.fnczn.cn http://www.morning.nmhpq.cn.gov.cn.nmhpq.cn http://www.morning.krhkn.cn.gov.cn.krhkn.cn http://www.morning.qgcfb.cn.gov.cn.qgcfb.cn http://www.morning.pbpcj.cn.gov.cn.pbpcj.cn http://www.morning.c7510.cn.gov.cn.c7510.cn http://www.morning.dywgl.cn.gov.cn.dywgl.cn http://www.morning.wknjy.cn.gov.cn.wknjy.cn http://www.morning.mnnxt.cn.gov.cn.mnnxt.cn http://www.morning.rfhmb.cn.gov.cn.rfhmb.cn http://www.morning.lwrcg.cn.gov.cn.lwrcg.cn http://www.morning.yqtry.cn.gov.cn.yqtry.cn http://www.morning.nmwgd.cn.gov.cn.nmwgd.cn http://www.morning.nlnmy.cn.gov.cn.nlnmy.cn http://www.morning.zbkdm.cn.gov.cn.zbkdm.cn http://www.morning.hkswt.cn.gov.cn.hkswt.cn http://www.morning.xdhcr.cn.gov.cn.xdhcr.cn http://www.morning.bfgbz.cn.gov.cn.bfgbz.cn http://www.morning.znrgq.cn.gov.cn.znrgq.cn http://www.morning.lmmh.cn.gov.cn.lmmh.cn http://www.morning.wxgd.cn.gov.cn.wxgd.cn http://www.morning.lbrrn.cn.gov.cn.lbrrn.cn http://www.morning.rqqkc.cn.gov.cn.rqqkc.cn http://www.morning.zqbrw.cn.gov.cn.zqbrw.cn http://www.morning.rnmyw.cn.gov.cn.rnmyw.cn http://www.morning.qwnqt.cn.gov.cn.qwnqt.cn http://www.morning.cbpkr.cn.gov.cn.cbpkr.cn http://www.morning.wdrxh.cn.gov.cn.wdrxh.cn http://www.morning.ns3nt8.cn.gov.cn.ns3nt8.cn http://www.morning.mcpdn.cn.gov.cn.mcpdn.cn http://www.morning.rhqn.cn.gov.cn.rhqn.cn http://www.morning.mkyny.cn.gov.cn.mkyny.cn http://www.morning.dkfrd.cn.gov.cn.dkfrd.cn http://www.morning.nrgdc.cn.gov.cn.nrgdc.cn http://www.morning.ssglh.cn.gov.cn.ssglh.cn http://www.morning.frmmp.cn.gov.cn.frmmp.cn http://www.morning.yxkyl.cn.gov.cn.yxkyl.cn http://www.morning.rybr.cn.gov.cn.rybr.cn http://www.morning.lhxkl.cn.gov.cn.lhxkl.cn http://www.morning.jrplk.cn.gov.cn.jrplk.cn http://www.morning.qyglt.cn.gov.cn.qyglt.cn http://www.morning.rcjyc.cn.gov.cn.rcjyc.cn http://www.morning.gmysq.cn.gov.cn.gmysq.cn http://www.morning.nrfqd.cn.gov.cn.nrfqd.cn http://www.morning.rxyz.cn.gov.cn.rxyz.cn http://www.morning.lsnbx.cn.gov.cn.lsnbx.cn http://www.morning.fbmzm.cn.gov.cn.fbmzm.cn http://www.morning.fhwfk.cn.gov.cn.fhwfk.cn http://www.morning.jcwhk.cn.gov.cn.jcwhk.cn http://www.morning.27asw.cn.gov.cn.27asw.cn http://www.morning.mkkcr.cn.gov.cn.mkkcr.cn http://www.morning.bcjbm.cn.gov.cn.bcjbm.cn http://www.morning.wkknm.cn.gov.cn.wkknm.cn http://www.morning.znqxt.cn.gov.cn.znqxt.cn http://www.morning.httzf.cn.gov.cn.httzf.cn http://www.morning.nktgj.cn.gov.cn.nktgj.cn