尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

操作系统环境变量

操作系统环境变量 一.环境变量的概念环境变量操作系统中用来指定操作系统运行环境的一些参数。如在C/C代码链接的过程中我们明明没有给编译器库的地址但它还是能找到这是因为有环境变量辅助编译器查找。二.命令行参数main函数有参数吗答案是可以有的像这个代码就是我们在命令行给main函数传递的参数其中变量argv用来储存参数值argc记录了所传参数的个数。那这是怎么做到的呢也就是说当我们输入命令后由bash来对该命令进行分割并创建命令行参数表当bash创建子进程执行代码时它可以将命令行参数表传过去这样main就得到了参数。三.认识一些环境变量环境变量到底有什么用呢认识PATH学完指令后我们知道所有的指令本质上都是可执行文件使用指令就是调用这些文件但我们可以发现调用ls、cd…这些指令时我们根本没有给bash这些文件的绝对路径那它是怎么调用的这是因为系统里有环境变量PATH的存在它保存了一些路径其中就有找到这些指令的路径。我们可以用echo $环境变量的形式查看环境变量的具体内容那这是不是意味着我们只要把某些路径加入进PATH中就可以让自己写的一些程序调用时不需要给路径没错。如果这样改的话我们会发现一些指令我们不能直接用了所以我们要做的应该是在原本的值上加上目标路径:认识其他我们可以用指令env来查看系统内的所有环境变量HOSTNANE保存了该系统的主机名SHELL默认登陆shell(命令行解释器)的路径HISTSIZE保留历史命令的最大个数我们可以用history查看我们在该系统下输入的历史命令其最大个数就取决于HISTSIZEOLDPWD上一个工作目录SSH_TTY当前用户说对应的终端USER表示当前有效用户名PATH记录一些路径是大部分指令可以不用路径的原因PWD当前工作目录HOME家目录路径LOGNAME表示用户登录时使用的用户名(一般都和USER一样)。四.获取环境变量环境变量怎么来怎么维护环境变量的值是由系统配置文件得来的这些文件储存在硬件中当我们以用户身份登录操作系统后OS会给我们一个bash它就会从系统配置文件中读取信息并给这些环境变量赋值并用字符串数组维护起来无论是环境变量表还是命令行参数表都是靠char**指针维护的都是以NULL结尾。环境变量相关命令echo $环境变量查看指定环境变量信息env查看所有环境变量export创造新的环境变量或修改已有环境变量unset 环境变量删除目标环境变量export代码中获取环境变量方法一main函数中其实可以有三个参数。第三个变量也是字符串数组可以接收父进程传来的环境变量。方法二函数getevn()可以获取指定环境变量的值我们可以用这种方法去完成某些特定工作如只让指定的人执行该代码。方法三在unistd.h文件中有全局变量char ** environ它保存着环境变量环境变量的特性环境变量具有全局性当bash创建子进程执行程序时它同时会把环境变量表的地址传给子进程当这个子进程再创建子进程时表的地址也会继续传递下去。但如果在这个体系中有进程修改了环境变量的值那么它就会进行写实拷贝(就像父子进程共用代码数据一样)只让该进程环境变量的值进行改变。那这样对export来说是否有些奇怪当我们使用export时就说明环境变量一定发生了改变但它不应该时bash创建子进程执行的吗要改变也是export对应的进程中的环境变量改变为什么bash中的环境变量会变这是因为export是bash的内建命令(built-in command)它不是bash创建子进程执行而是由bash自己执行。五.补充为什么main函数有不同的参数形式虽然我们总说main函数是程序的入口当但OS执行起来时这句话并不成立因为OS中是有函数会调用main函数的在Linux中这个函数叫_start在它调用main函数时OS会先扫描main有几个参数再通过_start中的不同分支调用main函数。本地变量在Linux中有本地变量的概念在命令行直接创建即可可以通过创建变量去完成某些工作。bash本身就是一种脚本编译器它很依赖本地变量。我们用指令set可以查看所有本地变量和环境变量。
返回列表