当前位置: 首页 > news >正文

Linux的环境变量

一、什么是环境变量

        在运行命令时,我们会发现,运行自己写的命令时,需要写出命令的路径,而系统的命令则不需要。而在写命令路径时,也会使用到相对路径,而当前工作目录也不需要我们手动去设置。这些都涉及到Linux的环境变量。

        通过printenv指令就可以获得当前Linux操作系统的环境变量,这里就一些常见的环境变量进行介绍:

  • USER        用户名,当使用whoami时,输出的就是这个字段的内容
  • HOME       当前用户的家目录,当使用cd ~指令时,就会跳转到HOME所指向的目录
  • PWD          当前工作目录,当使用pwd指令时,输出的就是这个字段的内容
  • PATH         系统查找命令的路径,如果运行指令但是没有命令的路径,操作系统就会在PATH字段中所保存的路径中查找要运行的指令。因此,如果能把自己写的指令所在路径放入PATH,就可以在运行时不写路径
  • SHELL       当前使用的shell程序
  • LANG         当前系统的语言和字符集设置

        那么什么是环境变量呢?环境变量就是操作系统或运行中的程序用来存储配置信息和系统参数的一种键值对,本质上是一个字符串数组,char**。需要注意的是,当fork子进程时,子进程只会继承父进程的环境变量,而并不能反过来影响父进程的环境变量。

二、如何设置环境变量

        当我们直接在命令行输入test=123456,再使用printenv后,并不能在其中找到test这个字段,但是,当我们使用echo $test以后,就会输出123456,这说明test=123456确实被记录下来了,我们称其为局部变量,仅仅在创建其的进程中使用。

        而要将内容放进环境变量中,需要使用export命令,export test=123456,这样再printenv就可以在环境变量中找到test=123456。

        还需要注意的是,export环境变量时采取的是覆盖的方式,也就是说如果你输入export PATH=/home/test,此时,PATH字段的内容就只有/home/test,那么操作系统就无法直接执行一些系统指令。如果要添加路径,最好使用PATH = &PATH:/home/test。其中$PATH就是PATH的内容。如果要删除,则比较麻烦,大概思路就是查找删除覆盖,这里就不具体实现了。另外,如果是要删除一个环境变量整体,则需要unset指令,例如: unset test。

        另外,只使用export并不能永久性的改变系统的环境变量,所以如果前面改变了PATH路径,并不用太过惊慌,重启以后就好了。如果要持久性的改变,就需要修改~/.bashrc文件,export想要添加的环境变量,这里只能针对用户自己,如果要对所有用户生效,则需要一定的权限,不建议这样操作。

三、补充

        main可以接收来自命令行的参数,例如:int main(int argc, char *argv[], char *envp[]),就能接收命令行例如:ls -a -l,那么argc就等于3,argv[0]="ls",argv[1]="-a",argv[2]="-l"。而envp就是用来接收父进程的环境变量。

        而接收环境变量还有两个方法,分别是:

  1. 使用全局变量 extern char **environ;
  2. 使用标准库函数getenv()

        下面的两种方法使用起来更方便,如果是要传递给子进程专门的环境变量,最好还是使用exec系列的函数调用。

http://www.dtcms.com/a/357551.html

相关文章:

  • 10迁移TiDB数据库数据到GaussDB
  • Java实现PDF表格转换为CSV
  • 消失的数字
  • RAG 系统核心:深入理解向量相似度匹配与文本向量化
  • Python中将py程序打包成exe可执行文件并封装环境以及本地依赖+单个exe和文件目录两种状态(亲测可用建议收藏)
  • docker 下载镜像报错
  • [HFCTF2020]EasyLogin
  • 日本IT|C++相关面试及问答技巧分享
  • STM32项目分享:基于单片机的自行车测速系统设计
  • Win11 压缩实测:Win11 的压缩软件的最佳配置和使用方式
  • 网站酷炫换皮肤?——PC 端 H5 换肤方案实战分享
  • WebGIS开发智慧校园(8)地图控件
  • A股大盘数据-20250829 分析
  • 03.《交换的底层逻辑:从基础到应用》
  • vue3中安装tailwindcss
  • ​​字节跳动重磅开源 Seed-OSS 大模型系列,12T tokens训练,原生支持512K长上下文​
  • python 2025/7/28
  • 【完整源码+数据集+部署教程】工地建筑进度监测系统源码和数据集:改进yolo11-SDI
  • 【笔记】扩散模型(一二)U-ViT|Diffusion with Transformer
  • 智慧园区系统:基于Java微服务架构与全栈信创国产化的数字化赋能平台
  • 人工智能一些基础概念与应用场景学习笔记
  • C++基础(③反转字符串(字符串 + 双指针))
  • solidity地址、智能合约、交易概念
  • Pointer--Learing MOOC-C语言第九周指针
  • 鸿蒙地址选择库(ArkTs UI)
  • Idea2025.2 MybatisX插件失效问题
  • Suno-API - OpenI
  • 【计算机网络】前端基础知识Cookie、localStorage、sessionStorage 以及 Token
  • 04.《VLAN基础与配置实践指南》
  • 掌握 Linux 文件权限:chown 命令深度解析与实践