帮助文档
专业提供香港服务器、香港云服务器、香港高防服务器租用、香港云主机、台湾服务器、美国服务器、美国云服务器vps租用、韩国高防服务器租用、新加坡服务器、日本服务器租用 一站式全球网络解决方案提供商!专业运营维护IDC数据中心,提供高质量的服务器托管,服务器机房租用,服务器机柜租用,IDC机房机柜租用等服务,稳定、安全、高性能的云端计算服务,实时满足您的多样性业务需求。 香港大带宽稳定可靠,高级工程师提供基于服务器硬件、操作系统、网络、应用环境、安全的免费技术支持。
服务器资讯 / 香港服务器租用 / 香港VPS租用 / 香港云服务器 / 美国服务器租用 / 台湾服务器租用 / 日本服务器租用 / 官方公告 / 帮助文档
【Linux】环境变量
发布时间:2024-02-27 20:38:47   分类:帮助文档
【Linux】环境变量 大家好我是沐曦希💕 文章目录 一、基本概念二、常见的环境变量1.查看环境变量的方法 三、系统调用获取环境变量四、设置环境变量1.子进程继承2.PWD 五、命令行参数六、代码获取环境变量七、写在最后1.环境变量的组织方式 一、基本概念 环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数,是操作系统为了满足不同的应用场景预先在系统内预先设置的一大批全局变量。 如:我们在编写C/C++代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪里,但是照样可以链接成功,生成可执行程序,原因就是有相关环境变量帮助编译器进行查找。 环境变量通常具有某些特殊用途,还有在系统当中通常具有全局特性 要执行一个程序或者指令,需要先找到这个程序,就需要带上路径来找到该程序。可是不带路径要怎么找到该程序呢?就需要用到环境变量。 第一种方法 把文件拷贝到系统的默认路径下: 但是这种方式存在缺陷:我们的指令没有经过测试,尽量不要把代码安装在系统里,会污染系统指令池 之所以能够找到,是因为系统的环境变量,比如在编写代码的时候,在链接的时候,我们不知道所链接的动态静态库在哪里,但是可以链接成功,生成可执行程序,原因就是有相关环境变量帮助编译器进行查找。 使用su登录root用户,就是把root的环境变量等加载进来。 环境变量PATH 第二种方法 export PATH=$PATH:当前路径 在Linux下bash(命令行)是可以定义变量。这是Linux下的环境变量,对于Xshell登录的时候系统会默认把.bash_profile执行一次,把环境变量找到当前的shell当中,所以一旦启动成功会在内存里维护一个变量$PATH 而对于windows下的环境变量我们就非常熟悉了,比如之前配置的jdk的环境变量 二、常见的环境变量 PATH : 指定命令的搜索路径 HOME : 指定用户的主工作目录(即用户登陆到Linux系统中时,默认的目录) SHELL : 当前Shell,它的值通常是/bin/bash LOGNAME:当前登录的用户名 HOSTNAME:主机名 env(用于查看当前机器能用的所有环境变量) 1.查看环境变量的方法 第一种 使用env查看所有的环境变量 第二种 使用echo $NAME //NAME:你的环境变量名称 补充 history用于查看我们曾经全部使用过的命令 三、系统调用获取环境变量 我们可以通过代码来获取环境变量 1.getenv 以指令的形式获得环境变量 USER环境变量最大的意义就是可以标识当前使用Linux用户: 我们可以利用strcmp直接去判断是否为root用户: 以root用户运行该程序: 这很好解释了之前遇到的问题:如何知道当前没有权限去访问,直接被拒绝呢? 执行指令的时候,通过访问任何文件,文件上面有对应的拥有者和所属组,会根据环境变量user去进行对应,对身份进行认证,环境变量会在不同的应用场景被使用。 四、设置环境变量 echo: 显示某个环境变量值export: 设置一个新的环境变量env: 显示所有环境变量unset: 清除环境变量set: 显示本地定义的shell变量和环境变量 echo 设置了一个局部变量,echo可以获取到,但是env获取不到myval,因为myval不是环境变量。 可以采用export将myval设置成环境变量 export 用export将本地变量myval转换成环境变量: 1.子进程继承 在命令行上运行mytest时候,bash就是一个系统进程,mytest也会变成一个进程(通过fork创建父子进程),是bash的子进程。而环境变量具有全局属性的根本原因是会被子进程继承下去,因为环境变量定义给bash,而子进程会全部继承下去,这就被称为环境变量。所以环境变量具有全局性,而本地变量只会在当前进程(bash内)有效。 为什么会继承下去?为了不同的应用场景,让bash替我们寻找指令路径,例如:身份认证;有些子进程需要用到这些信息,确认当前用户的信息。 set set: 显示本地定义的shell变量和环境变量 unset 清除环境变量 取消环境变量需要一定的时间。 2.PWD 系统为什么知道我们当前的路径在哪里:如一开始学的ls,加上文件名就可以了,不需要加上路径,那ls为什么知道当前的路径是在哪里? 因为环境变量PWD记录着我们当前的路径,会随着我们路径改变而改变: 环境变量在bash中维护当前所处的路径,路径发生变化时,shell会调整环境变量的值,而运行ls是在创建子进程,而环境变量会被子进程继承,所以ls拿到了当前路径,所以ls不需要带上路径 实现pwd指令 #include #include #define MYPWD "PWD" int main() { char* myenv = getenv(MYPWD); if(NULL == myenv) { printf("%s:not found\n",MYPWD); return 1; } printf("%s\n",getenv(MYPWD)); return 0; } 五、命令行参数 main函数也存在命令行参数,最多有三个。 main函数也是被系统调用的,所以可以理解为main函数的参数由系统/父进程进行传参的。 直接make发现报错: 要对Makefile进行更改 再运行一次: 命令行参数实际上是把程序名和选项传递给argv(指针数组)的,选项多少就需要定义argv的大小。 参数的意义在于可以通过命令行选项控制使其结果不同: 六、代码获取环境变量 命令行第三个参数 其中char* argv[]是命令行参数,char* env[]是环境变量 通过第三方变量environ获取 (extern charenviron) 在进程的上下文中,获取环境变量的三种方式 1.getenv(推荐) 2.char* env[](在main函数作为参数) 3.extern char environ 七、写在最后 1.环境变量的组织方式 每个程序都会收到一张环境表,环境表是一个字符指针数组,每个指针指向一个以’\0’结尾的环境字符串。 当然啦,环境变量的知识不止这些,例如putenv也可以获取环境变量: 总结来说,环境变量本质就是操作系统给我们设置的一批全局变量,在计算机开机启动,加载图形化窗口或者登录给我们设置好的。 而对比Windows配置环境变量的原因就是找系统中对应的可执行程序的路径。
香港云服务器租用推荐
服务器租用资讯
·广东云服务有限公司怎么样
·广东云服务器怎么样
·广东锐讯网络有限公司怎么样
·广东佛山的蜗牛怎么那么大
·广东单位电话主机号怎么填写
·管家婆 花生壳怎么用
·官网域名过期要怎么办
·官网邮箱一般怎么命名
·官网网站被篡改怎么办
服务器租用推荐
·美国服务器租用
·台湾服务器租用
·香港云服务器租用
·香港裸金属服务器
·香港高防服务器租用
·香港服务器租用特价