Linux系统编程:环境变量

发布时间 - 2025-06-26 00:00:00    点击率:

在linux系统编程中,环境变量的理解和使用是非常重要的。本文将详细探讨环境变量的相关问题,并提供相应的解决方案。

1. 环境变量

1.1 PATH引入

问题1: 我们平时使用的指令也是可执行程序,但为什么可以直接运行,而我们自己编译过的就需要加上./呢?

可执行程序是一个进程,也是一个文件。查找文件时必须提供路径。我们输入的指令程序路径被存储在操作系统可以默认查找的路径下,因此可以直接运行。但我们自己编译的程序位于当前目录下,并不在操作系统默认查找的路径下,所以需要使用相对路径查找。./code.c就是使用相对路径,告诉操作系统我的可执行程序在当前目录下,不用乱找了!

问题2: 操作系统默认查找的路径在哪里存储呢?

--> PATH环境变量中

操作系统默认搜索的路径存储在PATH环境变量中,我们可以通过echo $PATH查看PATH变量,其中:为分隔符。

我们平时使用的指令通常位于/usr/bin目录下。如果直接执行自己的程序,会出现"command not found",因为-bash命令行在默认的PATH路径下查找过了,没有找到。

问题3: 如果我想将自己的程序像指令一样使用,该如何做呢?

办法就是把我们自己的可执行程序放在默认查找路径中,有两种方法:

问题4: 如何添加PATH呢?

  1. PATH=.....: 这种方法是直接对PATH变量赋值,会覆盖掉原来的路径。但即使我们不小心使用了,问题也不大,因为我们的指令都是内存级文件,每次启动shell都会自动加载。

  2. PATH=$PATH:...: 这种方法是追加目录,也就是新增路径。

1.2 HOME和SHELL

  • HOME环境变量: 通常用于指定用户的主目录,也就是我们登录shell时默认所处的目录。我的默认用户目录就是ubuntu
  • SHELL变量: 存储命令行解释器的所在路径,也就是-bash的路径。

2. 查看所有环境变量的方法

2.1 命令行

2.2 系统调用接口

通过getenv获取指定环境变量。

2.2.1 第三方变量

第三方环境变量:extern char** environ(二级指针)

3. 如何通过环境变量理解权限

我们知道权限的对象是使用者,也就是usr。我们可以通过环境变量获取USER,来判断对应的权限。

4. 命令行参数

4.1 main函数的指令参数

我们的main函数是可以带参数的,因为它也是一个函数。

我们平时所使用的指令也是如此,诸如很多的选项就是这样执行的。

4.2 main函数的环境变量参数

main除了argcargv外还有环境变量参数-->env

结论-->两张向量表:

4.3 如何理解环境变量的全局性

我们知道了main函数的参数中是隐含了一张环境变量表的。我们的bash进程中也必然有环境变量表。而我们所使用的进程都是继承自bash,所以环境变量表也会被继承下去,每个进程中都可以使用,因此就相当于全局了。

根据前面的知识,如果是先创建了进程,然后再修改了环境变量,那么新创建的子进程必然会被继承下去(共享数据)。但如果创建了子进程然后修改了环境变量并不会影响父进程的环境变量,因为会发生写时拷贝。

4.4 本地变量和环境变量的区别

问题1: 什么是本地变量?

本地变量就是我们通常定义的普通局部变量,处于栈上的变量。

问题2: 和环境变量有什么区别?

本地变量存储在栈上,而环境变量存储在数据段,也就是全局变量区。

4.5 常规命令和内建命令

之前我们提到过,如果我们不小心将环境变量覆盖了,那么就会导致大部分的指令用不了,但并不是所有的指令都用不了!比如echopwdcd……因为它们是内建命令。

总结

环境变量表本质是一个二级指针。


# 环境变量  # linux  # 操作系统  # ai  # 区别  # 为什么  # bash  # echo  # extern  # 局部变量  # 全局变量  # 命令行参数  # char  # 指针  # 继承  # 接口  #   # 对象  # ubuntu  # 自己的  # 量表  # 命令行  # 可执行  # 都是  # 是一个  # 我们可以  # 可以直接  # 平时 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 香港服务器选型指南:免备案配置与高效建站方案解析  如何挑选优质建站一级代理提升网站排名?  如何快速生成专业多端适配建站电话?  如何在香港服务器上快速搭建免备案网站?  Laravel如何自定义错误页面(404, 500)?(代码示例)  java中使用zxing批量生成二维码立牌  如何快速登录WAP自助建站平台?  jQuery validate插件功能与用法详解  免费视频制作网站,更新又快又好的免费电影网站?  Laravel怎么返回JSON格式数据_Laravel API资源Response响应格式化【技巧】  HTML透明颜色代码怎么让图片透明_给img元素加透明色的技巧【方法】  大学网站设计制作软件有哪些,如何将网站制作成自己app?  Win11摄像头无法使用怎么办_Win11相机隐私权限开启教程【详解】  Laravel怎么实现验证码(Captcha)功能  Python正则表达式进阶教程_复杂匹配与分组替换解析  如何用西部建站助手快速创建专业网站?  在线教育网站制作平台,山西立德教育官网?  如何将凡科建站内容保存为本地文件?  Laravel如何处理和验证JSON类型的数据库字段  C#如何调用原生C++ COM对象详解  如何在万网ECS上快速搭建专属网站?  EditPlus中的正则表达式实战(5)  装修招标网站设计制作流程,装修招标流程?  如何在企业微信快速生成手机电脑官网?  如何快速打造个性化非模板自助建站?  php8.4header发送头信息失败怎么办_php8.4header函数问题解决【解答】  ChatGPT怎么生成Excel公式_ChatGPT公式生成方法【指南】  如何快速重置建站主机并恢复默认配置?  南京网站制作费用,南京远驱官方网站?  魔方云NAT建站如何实现端口转发?  Android Socket接口实现即时通讯实例代码  C语言设计一个闪闪的圣诞树  laravel怎么通过契约(Contracts)编程_laravel契约(Contracts)编程方法  微博html5版本怎么弄发语音微博_语音录制入口及时长限制操作【教程】  Laravel如何使用Gate和Policy进行授权?(权限控制)  微信小程序 五星评分(包括半颗星评分)实例代码  高防网站服务器:DDoS防御与BGP线路的AI智能防护方案  浏览器如何快速切换搜索引擎_在地址栏使用不同搜索引擎【搜索】  专业商城网站制作公司有哪些,pi商城官网是哪个?  如何用AI帮你把自己的生活经历写成一个有趣的故事?  如何解决hover在ie6中的兼容性问题  如何做网站制作流程,*游戏网站怎么搭建?  手机网站制作与建设方案,手机网站如何建设?  Laravel如何实现API速率限制?(Rate Limiting教程)  简历没回改:利用AI润色让你的文字更专业  php结合redis实现高并发下的抢购、秒杀功能的实例  网站制作壁纸教程视频,电脑壁纸网站?  Chrome浏览器标签页分组怎么用_谷歌浏览器整理标签页技巧【效率】  浅述节点的创建及常见功能的实现  Laravel如何使用Socialite实现第三方登录?(微信/GitHub示例)