Linux中《环境变量》详细介绍

目录

环境变量

基本概念

  • 环境变量(environment variables)**⼀般是指在操作系统中⽤来指定操作系统运⾏环境的⼀些参数。
  • 如:我们在编写C/C++代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪⾥,但是照样可以链接成功,⽣成可执⾏程序,原因就是有相关环境变量帮助编译器进⾏查找。
  • 环境变量通常具有某些特殊⽤途,还有在系统当中通常具有全局特性。

命令行参数

查看环境变量方法

echo $NAME//NAME:你的环境变量名称
env//查看全部的环境便变量


为什么系统的命令不带"./",运行我们自己的代码要带"./"?

1.要运行一个变量,首先要找到它!我们自己的程序有"./",所以系统可以找到,倒是系统的命令呢?没错,就是环境变量的作用,环境变量里的PATH记录了一些指定的路径,系统默认会在指定的路径下查找,也就是说,PATH是系统中搜索指令的默认搜索路径。


如何理解环境变量?从存储的角度。

当用户登陆时,操作系统会给用户创建一个bash进程,bash进程会从操作系统的配置文件中读环境变量信息,并在bash内部创建一张环境变量表,一个指针数组的样子。

同时bash进程内部也会维护一张命令行参数表,用户输入命令后,是bash先拿到,bash先把命令行的一串字符,以空格为分隔符进行切分,把切分的内容放到一个字符数组中,利用PATH环境变量,找到对应的指令,进行执行。

环境变量是从哪里来的呢?

从系统的配置文件里来的!!!

还有什么方法可以不⽤带路径,直接就可以运行呢?

把当前路径添加到环境变量中,或者把程序移动到环境变量的搜索路径中。

常见环境变量

  • PATH : 指定命令的搜索路径。
  • HOME : 指定⽤⼾的主⼯作⽬录(即⽤⼾登陆到Linux系统中时,默认的⽬录)。
  • SHELL : 当前Shell,它的值通常是/bin/bash。

和环境变量相关的命令

export :添加环境变量
unset + 名称:取消环境变量
echo $名称:显示一个环境变量
env:显示所有的环境变量
set:显示所有的环境变量和本能环境变量

获取环境变量

子进程可以继承父进程传给子进程的环境变量。

getenv(const char* name):获取某个环境变量的内容

环境变量被子进程继承,有什么好处呢?

这样的好处就是,子进程可以根据一些环境变量的值进行一些个性化操作。

environ:全局变量

libc中定义的全局变量environ指向环境变量表,environ没有包含在任何头⽂件中,所以在使⽤时 要⽤extern声明。

每个程序都会收到⼀张环境表,环境表是⼀个字符指针数组,每个指针指向⼀个以'\0'结尾的环境字符串。

理解环境变量的特性

  • 环境变量具有全局特性。
  • 在命令行中定义本地变量,本地变量不会被子进程继承,只能在bash内部使用,同时env也看不到本地变量,se既可以看到本地变量,也可以看到环境变量。

为什么export明明是一个子进程,竟然能够将环境变量写入到父进程中?

注意:export是内建命令(built_in command),不需要创建子进程,而是让bash自己亲自执行,bash自己调用函数或者系统调用完成。

相关推荐
ajassi20008 小时前
AI语音智能体开发日记(十八)智能体服务器xiaozhi-esp32-server源码部署指南
运维·服务器·人工智能·ai·ai编程
‎ദ്ദിᵔ.˛.ᵔ₎8 小时前
linux 进程信号(下)
linux·运维·服务器
skywalk81638 小时前
在FreeBSD系统的linux仿真环境下安装和使用kiro 这个亚马逊的AI agent
linux·人工智能·freebsd·kiro
Mikko78 小时前
Linux 磁盘满了但 du 找不到?LVM 扩容 df 不变?fstab 写错开不了机?三台真机实测磁盘排查
linux·运维·centos
蓝胖的四次元口袋8 小时前
Jenkins知识梳理(2)
运维·jenkins
yumgpkpm8 小时前
Acceldata ODP 3.3.6.4 vs CDP Private Cloud Base 7.3.2 对比
大数据·运维·服务器·hadoop·华为·zookeeper·hbase
Madison-No78 小时前
多语言聊天大模型--测试报告
linux·git·python·selenium·jmeter·自动化·postman
Liuqy-059 小时前
特殊进程——孤儿、僵尸、守护进程
linux·运维·服务器
流浪0019 小时前
Linux系统篇47——线程(十二) POSIX 信号量与环形队列,把判空判满提前到访问之前
linux·操作系统·线程·信号量·环形队列
咖丨喱9 小时前
【MMC Core + hc16 Host(WiFi SDIO 如何落到控制器)】
linux