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

系统的环境变量

目录

基本概念

用途之一

环境变量表

命令行参数表

理解

更多的环境变量


基本概念

  • 环境变量(environmentvariables)⼀般是指在操作系统中⽤来指定操作系统运⾏环境的⼀些参数
  • 环境变量通常具有某些特殊⽤途,还有在系统当中通常具有全局特性

用途之一

我们看一个之前说到过的问题:

为什么直接敲指令可以直接运行,而我们自己写的程序却要写路径才能运行?

现象:


我们之前说只需要我们把自己的可执行文件放进/usr/bin/目录下就可以不带路径,但是为什么呢?

这是因为有环境变量。

有一个可执行文件,要运行它,必须要先找到它吧,我们带上路径就能执行,而不带却不能执行,但是系统中的指令却不用带就能执行,为什么?

系统中有一个名叫PATH的环境变量,帮助系统找到可执行的二进制文件!PATH中存着/usr/bin路径(当然不止这一个路径),系统会默认到PATH中的路径寻找输入的指令,如果查遍了PATH中的所有路径都没有查到输入的指令,那么就报错反馈给用户,如果查到了,执行即可!

查所有环境变量,指令:

env

是以名称=内容的形式存放的。

查某个环境变量内容,指令:

ehco $(需要查找的环境变量名)

可以将自己的可执行文件放到PATH路径中,但是我们也可以添加路径到PATH中,这样我们可以解决:

当我们把PATH路径全部修改掉,原来系统指令就执行不了了,但有些内命令能运行,这个内建命令我们后面讲:

我们修改后,不知道怎么恢复,可以直接退出重新登陆,即可恢复原样。

环境变量表

环境变量是怎么来的呢?怎么理解它?它是怎么被存储的?

我们登陆上去,bash从系统中的相关配置文件(shell脚本写的)读取,形成一张环境变量表(数组),也就是说系统中环境变量都在bash的这张环境变量表中!

如果同时登陆10个用户呢?也就是有10个bash,它们都会形成各自的环境变量表(从相关配置文件中读取的)。

环境变量表的存储:

将环境变量以字符串的形式存入环境变量表。

命令行参数表

除了环境变量表,其实还有一张命令行参数表!

在日常生活中,我们常常使用一些命令达不到我们的需求,所以指令一般都有一些参数来实现多功能的需求。

例:

理解:

在bash看来我们敲的一行行指令就是一个字符串,bash将这一个个命令参数切分,放入命令参数表中,通过表上的不同的命令参数执行不同的功能。

理解

直观的看命令行参数表:

命令行参数表其实就是个数组!(main函数最多有三个参数)

有这个命令参数表,我们可以将不同参数实现不同功能:

直观的看环境变量表:

环境变量表和命令行参数表一样是个数组!

综合理解:

我们一登陆,bash读取OS相关配置文件,填写形成环境变量表,当我们敲一个命令时,bash读取命令行,将命令行切分,填写形成命令行参数表,bash会在PATH环境变量的所有路径中,寻找这个指令,如果有,根据参数,运行这个多功能的指令!如果没有,报错给用户。也就是说bash会存在两张表。

有个问题:

这个myprocess进程是bash的子进程,我们说环境变量只是在bash中,怎么这个myprocess进程可以拿到呢?

我们开始讲概念的时候说过,环境变量是具有全局属性的,也就是说,bash中的环境变量表是被子进程继承的,别说子进程,哪怕是bash的孙子进程,曾孙进程也是继承的,具有全局特性!

理解:

我们以为程序的入口是main函数,其实,main函数上一层还有一个start函数,start函数调用main函数,只不过我们看不到start函数,只能看到main函数,所以才以为main函数是程序的入口。

main函数可以是0/1/3个参数,start将参数传入子进程main函数,也就是说start函数是将bash中的环境变量表,命令行参数表传入子进程main函数。

更多的环境变量

我们可以看到有很多个环境变量,现在我们来说说一些常见的。

HOME环境变量

我们可以看到当用户是root用户,HOME变量就是root的家目录,是普通用户,HOME变量就是普通用户的家目录,也就是说HOME变量存放的是当前用户的家目录。

其实就是因为有HOME变量才能迅速切换到当前用户的家目录。

SHELL环境变量

代表登陆时是用的哪个版本的bash。

USER环境变量

记录着是哪个谁登陆的。

HISTSIZE环境变量

我们知道我们可以查到我们输入的历史命令,但是只能查到最近的1000条,bash只会记录最近的1000条,因为默认情况下HISTSIZE设置成1000条。

存放着历史命令数量限制。

相关文章:

  • flink cdc 配置
  • 客户案例分享|运营商数智化经典案例 — XX运营商
  • Apache Flink的架构设计与运行流程说明
  • 电子电器架构 --- 人工智能、固态电池和先进自动驾驶功能等新兴技术的影响
  • IntelliJ IDEA 2024.3.1 for Mac 中文 Java开发工具
  • 织梦dedecms发布文章时取消自动生成关键字
  • 数据挖掘专栏介绍:用 Python + 大语言模型 (LLM) 重塑电商数据价值
  • 【Hive入门】Hive高级特性:视图与物化视图
  • C++——调用OpenCV和NVIDIA Video Codec SDK库实现使用GPU硬解码MP4视频文件
  • Go 1.25为什么要废除核心类型
  • 后验概率最大化(MAP)估计算法原理以及相具体的应用实例附C++代码示例
  • 设计模式 | 详解常用设计模式(六大设计原则,单例模式,工厂模式,建造者模式,代理模式)
  • 最新的30个Android Kotlin面试题
  • Python程序开发,麒麟系统模拟电脑打开文件实现
  • <c++>使用detectMultiScale的时候出现opencv.dll冲突
  • EtherCAT 分布式时钟(DC)补偿技术解析
  • 【今日半导体行业分析】2025年4月29日
  • Missashe考研日记-day30
  • 1.3 点云数据获取方式——ToF相机
  • windows如何使用cmd命令翻转屏幕
  • 俄外长:俄将在不损害伙伴关系前提下发展对美关系
  • 力箭二号火箭成功进行满载起竖试验,计划今年首飞发射轻舟飞船
  • 苏州一季度GDP为6095.68亿元,同比增长6%
  • 借助AI应用,自闭症人群开始有可能真正“读懂他人”
  • 《沙尘暴》:用贴近生活的影像和表演拍摄悬疑剧
  • 民航局:预计五一假期民航旅客运输量创同期历史新高,将加强价格管理