一、基本概念二、获取和更改环境变量

命令:env。可以获取系统中全部的环境变量。

可以看见环境变量是特别多的,理解几个重要的。

USER=csj

解释:当前登入的用户名。

PATH=/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/csj/.local/bin:/home/csj/bin

解释:可执行文件的目录路径列表。

HOME=/home/csj

解释:用户登入目录路径(也就是家目录)。

PWD=/home/csj

解释:当前工作目录。

当我们登陆普通用户的时侯和登陆root用户的时侯,pwd如何就晓得我们在那个目录下?

登陆的时侯:

linux查看桌面环境变量_linux显示所有环境变量_linux系统变量查看

就这样不同用户登入的时侯,它的家目录都是确定好的。

三、PATH环境变量

命令echo$PATH查看PATH环境变量。

以逗号分割。

PATH环境变量是一个十分重要的环境变量。

它用于指定操作系统在执行命令时搜索可执行文件的目录路径列表。

例如ls命令,它不在当前的工作目录下,并且我们可以直接使用呢?诱因就是ls是环境变量/usr/bin下的一个可执行文件。

在windows系统中也是一样的,环境变量也是有大作用的,例如我们可以将QQ的路径添加到PATH环境变量中,使用cmd命令也可以打开QQ。

也是一样,在cmd运行框中,尽管qq的路径不在该路径下,而且一样可以运行,这就是PATH环境变量的作用,由此可见,PATH环境变量是具有全局性的。

运行可执行程序,须要加上./,表明在当前路径下,我们可以将该可执行程序路径加入到PATH中去,就可以实现直接使用可执行程序。

添加路径到PATH中去,命令:PATH

PATH:路径。

linux系统变量查看_linux显示所有环境变量_linux查看桌面环境变量

还可以PATH=“”,将PATH直接置为空。注意这儿所有更改PATH的做法都是临时性的,它是在显存中实现的,当你重启xshell后,环境变量又会重置(由于.bash_profile文件并没有更改)。

可以发觉,PATH置为空以后,好多命令是难以运行的,而且pwd却可以运行,这与前面说的内建命令有关!

四、环境变量的三种获取方法通过代码怎么获取环境变量①命令行第三个参数

main函数的前两个参数称作命令行参数,那main函数还有第三个参数吗?虽然是有的,称作环境变量参数。

intmain(intargc,char*argv[],char*env[])

复制代码

#includeintmain(intargc,char*argv[],char*env[]){inti=0;for(;env[i];i++){printf(“%sn”,env[i]);}return0;}

复制代码

通过main函数第三个参数,同样可以得到环境变量。

②通过第三方变量environ获取

#includeintmain(){externchar**environ;inti=0;for(;environ[i];i++){printf(“%sn”,environ[i]);}return0;}

复制代码

通过系统调用获取或设置环境变量③getenv访问特定的环境变量

#include#includeintmain(){printf(“%sn”,getenv(“PATH”));printf(“%sn”,getenv(“SHELL”));return0;}

复制代码

五、配置文件

系统启动我们的程序的时侯,可以选择给我们的进程(main)提供两张表:命令行参数表和环境变量表。

命令行启动的进程都是shell/bash的子进程,子进程的命令行参数和环境变量是父进程传给我们的!

例如我们可以使用fork创建子进程:

#include#includeintmain(){pid_tid=fork();if(id==0){externchar**environ;inti=0;for(;environ[i];i++){printf(“%d:%sn”,i,environ[i]);}}return0;}

复制代码

再度验证了环境变量具有全局性!!!

那shell/bash的进程的命令行参数和环境变量又从那里来呢?

linux系统变量查看_linux查看桌面环境变量_linux显示所有环境变量

在用户的家目录~下有一个文件隐藏文件:.bash_profile。

环境变量的信息就是以脚本配置文件的方式存在在.bash_profile中的。

总结:每一次登陆的时侯,bash进程就会读取该文件中的内容linux入门,产生自己的环境变量信息!

六、本地变量vs环境变量

我们是可以自己定义环境变量的,和环境变量的格式一样,右侧小写,中间等于,右侧为变量值。

例如:MYENV_109=hellolinux!

尽管echo可以显示出内容,并且似乎我们的程序是读取不到该环境变量linux查看桌面环境变量linux查看桌面环境变量,环境变量表中并没有添加上该环境变量。

这样的环境变量称作本地变量。

要将本地变量导出到环境变量表中去,使用命令export+本地变量。

这样即使导出到了环境变量表中,而且这是在显存中的,它是临时性的,当我们重新登陆后,该环境变量又不在了。

刚才我们说了,环境变量表信息是从文件.bash_profile中来的linux命令chm,须要永久保存我们自己定义的环境变量,就须要更改该文件的内容。

在该文件中导出自己定义的环境变量,须要促使环境变量生效,须要重新登陆一下,致使bash重新读取该文件。

总结:

本地变量:只在bash进程内部有效,不会被单进程承继下去。

环境变量:通过让所有的子进程承继的形式,实现自身的全局性!

这儿就有个问题了,本地变量使用echo可以显示下来,并且我们自己写的程序,也就是bash的子进程,就无法看见本地变量。

echo同样是bash创建的子进程啊,说了本地变量只能在bash进程内部有效哇,和子进程无关哒,好奇怪哦。

虽然这儿就是我们下边要说的!!!

七、常规命令和内建命令

linux命令分类:

①常规命令,shellfork创建出的子进程。

②内建命令,shell命令行的一个函数,其实可以直接读取shell内部定义的本地变量咯。

其实echo就是一个内建命令!!!

Tagged:
Author

这篇优质的内容由TA贡献而来

刘遄

《Linux就该这么学》书籍作者,RHCA认证架构师,教育学(计算机专业硕士)。

发表回复