【linux】linux中的环境变量

一、环境变量的基本概念

环境变量是系统提供的一组name = value形式的变量,不同的环境变量有不同的用户,通常具有全局属性。

二、常见环境变量
1、PATH : 指定命令的搜索路径。

路径之间用分号(:)分隔。
为什么有些指令可以直接执行,不需要带路径,而我们的二进制程序需要带路径才能执行呢?

将我们的程序所在路径加入环境变量PATH中,export PATH=$PATH:当前程序所在路径。
注意:等于号(=)左右两边不能有空格。

这样就可以用mycmd来执行我们的二进制程序了,不需添加额外的路径。
注意:当我们关闭Xshell后重新启动时,之前的修改就没有了,即上述命令仅在当前会话中生效。

2、HOME : 指定用户的主工作目录(即用户登陆到Linux系统中时,默认的目录)。
普通用户:

超级用户:

~ 和 HOME 指向的是同一个位置。
3、SHELL : 当前Shell,它的值通常是/bin/bash。

三、和环境变量相关的命令

1、echo:显示某个环境变量值

2、export:设置一个新的环境变量

3、env:显示所有的环境变量

4、unset:清除环境变量

原本在箭头处的环境变量不存在了。

5、set:显示本地定义的shell变量和环境变量

仅展示部分截图。

四、环境变量的组织方式


每个程序都会收到一张环境变量表,环境变量表是一个字符指针数组,每个指针指向一个以'\0'结尾的环境字符串。
五、如何通过代码获取环境变量
1、命令行参数

为什么要有命令行参数呢?
为指令、工具、软件等提供命令行选项的支持。


两张核心向量表:
1)命令行参数表:char *argv\[\](argc为表中字符串的个数)
2)环境变量表:char *env\[\]
2、通过第三方变量environ获取

全局变量environ指向环境变量表,environ没有包含在任何头文件中,所以在使用时要用extern声明。
3、通过系统调用获取指定的环境变量


六、环境变量通常是具有全局属性的

我们所运行的进程都是子进程,bash本身在启动的时候,会从操作系统的配置文件中读取环境变量的信息,子进程会继承父进程的环境变量。

显而易见,子进程继承了父进程的环境变量。

七、本地变量和内建命令

**1、本地变量:**只会在本bash内部有效,不会被继承。

添加export子进程就会继承父进程的环境变量,不添加export就不会被子进程继承。

2、两批命令:

1)常规命令:通过创建子进程完成的。eg: ls, env

2)内建命令:bash不创建子进程,而是由自己亲自执行,类似于bash调用了自己写的,或者系统提供的函数。eg: cd , echo, export

相关推荐
杨云龙UP7 小时前
MySQL 数据库常用备份工具对比:mysqldump、mydumper 与 XtraBackup
linux·运维·服务器·数据库·mysql·dba·备份恢复
风曦Kisaki9 小时前
Kubernetes(K8s)笔记Day06: 持久化存储(emptyDir,hostPath,NFS),PV 和 PVC,StorageClass存储类
linux·运维·笔记·云原生·容器·kubernetes
_艾伦 耶格尔.9 小时前
基础I/O
linux
fb_1234512 小时前
Linux磁盘分区从入门到实操:MBR_GPT全解析+分区工具实战指南
java·linux·gpt
深念Y12 小时前
随身WiFi设备记录
linux·嵌入式·无线·射频·随身wifi·zte
柒号华仔13 小时前
【LINUX】Linux从闹钟到高精度定时器的实现
linux
深爱水瓶 血影S狂风16 小时前
函数调用过程探究
linux·运维·服务器
酷可达拉斯16 小时前
Linux操作系统-磁盘空间使用率100%如何处理?
linux·运维·服务器·云计算·bash
AIgorithmGEEK17 小时前
Linux 权限管理:从「Permission Denied」到「畅行无阻」
linux·权限·chmod·粘滞位·umask·文件权限的构成
BullSmall17 小时前
scanoss-engine 本地最简部署 & 扫描命令(Linux/Anolis OS)
linux·运维·服务器