【环境变量】基本概念理解 | 查看环境变量echo | PATH的应用和修改

目录

前言

基本概念&理解

注意的点

查看环境变量方法

PATH环境变量 

PTAH应用系统指令 

PTAH应用用户程序

命令行的修改(内存级)

配置文件的修改 

windows环境变量 


大家天天开心🙂

  • bash进程的流程。
  • 环境变量在系统指令和用户程序的应用。
  • 环境变量修改(命令行&配置文件的修改)理解。

前言

明确

  • Linux当中70%以上的命令程序都是用C语言写的
  • 执行命令程序和运行自己写的程序没有任何区别
  • 自己程序运行必须要带路径(绝对/相对都可)
  • 系统指令可带可不带(带不要瞎带)
  • 环境变量具有全局特性是可以被子进程看到的

  • ​​​​​​​无论是全局变量还是局部变量,子进程的代码是继承父进程的,数据是拷贝的(子进程和父进程的数据是相互独立的)
  • 进程的独立性:父进程的数据是可以被子进程看到&访问(修改❌),子进程的数据是不能被父进程看到。
  • 每个用户启动都会有一个单独的bash进程,bash单独给这个用户形成命令行参数表和环境变量表。以及配置文件都是每个用户都有一份。互相独立,不影响。
  • 每开启一个终端就会有1个bash进程。
  • 一个用户也可以有多个bash进程。

回顾上篇博文

  • 登录Linux系统
  • 创建bash进程
  • 在命令行中输入参数
  • bash进程获取参数的路径&可执行程序
  1. 可执行程序是用户自己写(自己带路径)
  2. 可执行程序是系统指令(在bash进程的上下文环境变量中找)
  • 创建子进程
  • bash并把【命令行参数表】传给子进程main函数(传参)
  • 子进程接着执行自己的代码

产生这样一个问题:为什么我们自己的程序运行启动的时候需要带路径,但是系统的命令程序可带可不带路径❓

回答:在Linux当中,存在一些全局变量的设置(环境变量),告诉命令行解释器(bash进程),应该去那些路径底下去寻找这些可执行程序。

☞综下:ls不用带路径,因为ls所在的路径在环境变量当中。

基本概念&理解

概念&特性

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

整体理解

  • 登录Linux系统的时候,OS就把系统配置已经加载到了bash进程的上下文中(内存),系统配置就包括环境变量。
  • 当用户在命令行解释器中输入系统命令的时候,bash进程就拿到了命令行参数,根据环境变量,找到指令的可执行程序和路径,并创建指令的子进程。
  • (bash进程会根据$PATH在自己内存的上下文 配置信息中的 各种环境变量中找到对应的环境变量,并在此环境变量中找到对应的指令程序的路径和可执行程序)。

环境变量的作用
  • bash在执行命令的时候,需要先找到命令。因为要把命令所对应的二进制文件加载到内存中。
  • bash的上下文的环境变量中维护了一批指令的路径。
  • 默认这批指令的路径是bash创建子进程的搜索路径。
  1. 找到了就加载并运行
  2. 没找到就commend not fund
  • 注意❗:系统中有很多配置,在我们登录Linux系统的时候,已经被加载到了bash进程中(内存中)
  • 注意❗:有部分指令程序&路径就在bash进程数据内部,不在环境变量PATH中,不受环境变量的影响。(后面讲)
  • 注意❗每个用户都一套的环境变量是从bash进程中拷贝的。修改A用户底下的环境变量并不会影响B用户底下的环境变量。

其中PATH就是一个典型的环境变量,☞PATH下面我们以PATH来讲解环境变量。

注意的点

  • 注意❗:系统中有很多配置,在我们登录Linux系统的时候,已经被加载到了bash进程中(内存中)。
  • 注意❗:有部分指令程序&路径就在bash进程数据内部,不在环境变量PATH中,不受环境变量的影响。(后面讲)。
  • 注意❗每个用户都一套的环境变量是从bash进程中拷贝的。修改A用户底下的环境变量并不会影响B用户底下的环境变量。

关于在修改环境变量中:

  • 不维护在bash进程的配置文件中的环境变量中的指令路径,是不受环境变量修改的影响,随时可用。
  • 命令行中修改用户A的环境变量,是不会影响到bash进程/用户B进程/OS中的配置文件中的环境变量,只会影响当前用户当前进程,重启就没了。
  • 配置文件中修改用户A的环境变量,也不是会影响bash进程/用户B进程/OS中的配置文件的环境变量,会影响当前用户当前进程和当前用户A中配置文件,重启也会影响。
  • 关键点:在重启,用户&用户,用户进程&用户进程。

查看环境变量方法

  1. Linux系统登录
  2. bash进程启动,OS把配置信息加载到bash进程上下文中
  3. 输入指令echo信息
  4. bash在环境变量中找到的指令程序的路径运行(echo的程序&路劲就在bash数据段内部,不在环境变量中)
  5. 创建echo指令的子进程
  6. bash把命令行参数给echo子进程,子进程执行
  • PATH中有很多路径,这些路径以冒号:为分隔符分割,划分了路径的区域。
echo $NAME //NAME:你的环境变量名称
echo $PATH //打印环境变量PATH的内容

PATH环境变量 

  • 如果我们执行我们的系统指令程序,在命令行中不需要输入指令,因为bash进程会到环境变量中找到指令的路径从而找到指令的可执行程序。
  • 如果我们执行用户程序,环境变量中没有维护,所以我们需要在命令行输入时带上路径,以便于bash进程找到可执行程序。

综下所述:PATH环境变量是Linux环境变量中搜索可执行程序的默认路径,也是which在PATH中的搜索路径。 

PTAH应用系统指令 

  • PATH环境变量是具有全局特性的。
  • PATH变量里面保存了指令的路径。
  • 系统中有很多配置,在我们登录Linux系统的时候,已经被加载到了bash进程中(内存中),其中包括环境变量PATH。
  • bash在执行命令的时候,需要先找到命令。因为要把命令所对应的二进制文件加载到内存中。
  • bash的上下文的环境变量中维护了一批指令的路径。
  • 默认这批指令的路径是bash创建子进程的搜索路径。
  1. 找到了就加载并运行
  2. 没找到就commend not fund

PTAH应用用户程序

❓关于我们的用户程序能否和系统指令一样呢。也不用带路径就可以运行。

修改PATH环境变量:

  • 命令行修改
  • 配置文件修改

关于命令行&配置文件修改的理解(关键在重启和不同的用户)

  • 命令行中修改用户A的环境变量,是不会影响到bash进程/用户B进程/OS中的配置文件中的环境变量,只会影响当前用户当前进程,重启就没了。
  • 配置文件中修改用户A的环境变量,也不是会影响bash进程/用户B进程/OS中的配置文件的环境变量,会影响当前用户当前进程和当前用户A中配置文件,重启也会影响。
  • 命令行解释器就是bash进程

命令行的修改(内存级)

想要在运行用户程序的时候不在加上程序路径,有两种方法

  1. 拷贝用户的可执行程序到环境变量的指定路径底下
  2. 添加用户的可执行程序的路径到环境变量中

❗注意以下:操作都是内存级别的,默认我们查到的环境变量都是内存级。内存级别的修改只是暂时的,如果我们重启Linux操作系统,那么环境变量依旧是以前的没有修改的,又会把配置文件没有任何修改的重新加载到内存中。


【方法1】
  • 安装:sudo cp 用户程序  /usr/bin/    
  • 删除:sudo rm /usr/bin/a.out
  • 将用户程序安装到bash的环境变量中环境变量中的指定路径下。
  • 不建议拷贝用户程序到环境变量中,污染指令集。
  • 这些操作本质上都是在OS中安装卸载(内存级别)。在环境变量中指定路径下的拷贝和删除用户的可执行程序。

【方法2】

  • PARH=路径(路径会覆盖以前的全部路径)
  • PATH=以前的所有路径+新添加的路径
  • PATH=$PTAH:新添加的路径(简写)
  • 把指定路径添加到环境变量里,而不是直接让新路径把环境变量覆盖了。
  • 关于覆盖:有部分指令程序&路径就在bash进程数据内部,不在环境变量PATH中,不受环境变量的影响,即便覆盖也可以运行。

【方法1】

安装:sudo cp 用户程序  /usr/bin/    
删除:sudo rm /usr/bin/a.out


【方法2】

PARH=路径(路径会覆盖以前的全部路径)
PATH=以前的所有路径+新添加的路径
PATH=$PTAH:新添加的路径(简写)

配置文件的修改 

问题又出现了,想要让修改的内容永久有效怎么办?

  • 最开始的环境变量不是在内存中,而是在磁盘系统的对应的配置文件中。
  1. 登录Linux操作系统的时,磁盘中的配置文件会加载到内存的OS中。
  2. OS会创建一个bash进程。
  3. bash进程会读取内存中OS的配置文件。
  4. bash进程会把配置文件的环境变量拷贝一份到自己的进程数据中。
  • 每个进程使用的环境变量都是 bash/用户 内部的数据。(不同的用户使用的是自己/home/xxx的配置文件,每个用户都有一套)
  • 每次登录都要重新读取 bash/用户自己底下 配置文件。

如果想要修改的环境变量永久有效,那么就要修改 用户底下/bash 的配置文件中的环境变量,那么这些配置文件在哪里呢?

  • 每个用户(包括root)目录下 /home/xxxx 存在2个隐藏的配置文件
  •  .bash_profile 
  •  .bashrc
  • bash进程读取配置文件:文件操作fopen等(目前在命令行中查找环境变量都是内存级,存在bash的上下文中)
  • 修改配置文件中的环境:在.bash_profile里面加上可执行程序的路径即可
  • vim .bash_profile
  • 添加新的路径到.bash_profile旧的路径后面,以冒号:为分割
-rw-r--r--.  1 tangsiqi tangsiqi  193 Aug  2  2017 .bash_profile
-rw-r--r--.  1 tangsiqi tangsiqi  231 Aug  2  2017 .bashrc

【.bashrc】​​​​​​​

.bashrc是home目录下的一个shell文件,用于储存用户的个性化设置。 在bash每次启动时都会加载.bashrc文件中的内容,并根据内容定制当前bash的配置和环境。 

vim .bashrc

【.bash_profile】 

bash_profile 只对单一用户有效,文件存储位于 ~/.bash_profile ,该文件是一个用户级的设置,可以理解为某一个用户的 profile 目录下。 这个文件同样也可以用于配置环境变量和启动程序,但只针对单个用户有效。 和 profile 文件类似,bash_profile 也会在用户登录(login)时生效,也可以用于设置环境变理。 

vim .bash_profile

windows环境变量 

  • cls是清屏&dir 是查看目录 
  • 系统的配置文件&用户的配置文件
  • windows底下也是有命令行解释器的cwd

🙂感谢大家的阅读,若有错误和不足,欢迎指正。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/796110.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux网卡IP地址配置错误的影响

在Linux系统中,网络配置是保持系统顺畅运行的关键一环。正确配置网卡的IP地址对于确保网络通信的准确性和效率至关重要。然而,如果在这个过程中发生错误,可能会带来一系列问题。让我们一起探讨一下,如果Linux网卡的IP地址配置错误…

Python+Yolov8框选位置目标识别人数统计计数

程序示例精选 PythonYolov8框选位置目标识别人数统计计数 如需安装运行环境或远程调试,见文章底部个人QQ名片,由专业技术人员远程协助! 前言 这篇博客针对《PythonYolov8框选位置目标识别人数统计计数》编写代码,代码整洁&#…

测开——基础理论面试题整理

1. 测试流程 需求了解分析需求评审制定测试计划【包括测试人员、时间、每人负责的模块、测试的风险项以及预防】编写自动化测试用例 —— 测试评审【尽量丰富测试点】编写测试框架和脚本(若是功能测试 可省去这步骤)执行测试提交缺陷报告测试分析与评审…

Coursera上托福专项课程02:TOEFL Speaking and Writing Sections Skills Mastery 学习笔记

TOEFL Speaking and Writing Sections Skills Mastery Course Certificate 本文是学习 https://www.coursera.org/learn/toefl-speaking-writing-sections-skills-mastery 这门课的学习笔记,如有侵权,请联系删除。 文章目录 TOEFL Speaking and Writing…

docker-ce部署

目录 1. 更新软件包列表 2. 安装必要的软件包,以允许 apt 使用 HTTPS 3. 添加 Docker 的官方 GPG 密钥 4. 设置 Docker CE 的稳定存储库 5. 再次更新包索引以及安装 Docker CE 6. 验证 Docker CE 是否正确安装 7. 将当前用户添加到 docker 用户组,…

Linux之shell脚本编辑工具awk

华子目录 概念工作流程工作图流程(按行处理) awk程序执行方式1.通过命令行执行awk程序实例 2.awk命令调用脚本执行实例 3.直接使用awk脚本文件调用实例 awk命令的基本语法格式BEGIN模式与END模式实例awk的输出 记录和域(记录表示数据行&#…

【陈老板赠书活动 - 25期】- 《Effective Java》

陈老老老板🧙‍♂️ 👮‍♂️本文专栏:赠书活动专栏(为大家争取的福利,免费送书) 🤴本文简述:活就像海洋,只有意志坚强的人,才能到达彼岸。 👳‍♂️上一篇文章&#xff…

行人重识别项目 | 基于Pytorch实现ReID行人重识别算法

项目应用场景 面向行人重识别场景,项目具有轻量化 (训练的时候也只需要 2GB 的显存占用)、性能好 (只使用 softmax 损失就能够达到 Rank188.24%, mAP70.68%),另外提供友好的上手项目流程教程 项目效果: 项目流程 > 具体参见项目内README.…

利用Flutter混淆工具提高应用的反编译难度

在移动应用开发中,保护应用代码安全至关重要。Flutter 提供了简单易用的混淆工具,帮助开发者在构建 release 版本应用时有效保护代码。本文将介绍如何在 Flutter 应用中使用混淆,并提供了相关的操作步骤和注意事项。 📝 摘要 本…

第十四届蓝桥杯大赛软件赛省赛

第十四届蓝桥杯大赛软件赛省赛 2.日期统计 小蓝现在有一个长度为 100 的数组,数组中的每个元素的值都在 0 到 9 的范围之内。 数组中的元素从左至右如下所示: 5 6 8 6 9 1 6 1 2 4 9 1 9 8 2 3 6 4 7 7 5 9 5 0 3 8 7 5 8 1 5 8 6 1 8 3 0 3 7 9 2 7 …

【Linux】Linux C 编程

在 Windows 下编程首先就是安装对应的 IDE ,然后在 IDE 里面进行代码编写和编译,但是在 Linux 下,这两个部分是分开的,比如我们可以使用 vim 编辑器编写代码,然后用 gcc 编译器编译代码。Ubuntu 下有一些可以进行编程的…

03-JAVA设计模式-工厂模式详解

工厂模式 工厂设计模式是一种创建型设计模式,它提供了一种封装对象创建过程的机制,将对象的创建与使用分离。 这种设计模式允许我们在不修改客户端代码的情况下引入新的对象类型。 在Java中,工厂设计模式主要有三种形式:简单工厂…

2023-01-05(星期四)-恶意垃圾邮件导致agenttesla变体感染,可能是originlogger

前言 参考1 参考2 OriginLogger是一个开源的日志记录器,用于在应用程序中记录和管理日志信息。它提供了一种简单而灵活的方式来记录各种级别的日志,包括调试信息、警告和错误消息等。 AgentTesla病毒主要通过钓鱼邮件进行传播,钓鱼邮件内容多…

C语言解决汉诺塔问题

背景 首先带大家了解一下汉诺塔问题 汉诺塔是一个典型的函数递归问题,汉诺塔描述了这样的场景,有三个柱子,A,B,C,A柱为起始柱,在A柱上面有若干大小不同的盘子,最下面的最大,最上面的最小&#x…

Spring Cloud介绍

一、SpringCloud总体概述 Cloud Foundry Service Broker:通用service集成进入Cloud Foundry Cluster:服务集群 Consul:注册中心 Security:安全认证 Stream:消息队列 Stream App Starters:Spring Cloud Stre…

【WEEK6】 【DAY1】DQL查询数据-第一部分【中文版】

2024.4.1 Monday 目录 4.DQL查询数据(重点!)4.1.Data Query Language查询数据语言4.2.SELECT4.2.1.语法4.2.2.实践4.2.2.1.查询字段 SELECT 字段/* FROM 表查询全部的某某查询指定字段 4.2.2.2.给查询结果或者查询的这个表起别名&#xff08…

开源代码分享(17)-基于足球队训练算法(Football Team Training Algorithm,FTTA)的组合风速预测

参考文献: [1]Tian Z, Gai M. Football team training algorithm: A novel sport-inspired meta-heuristic optimization algorithm for global optimization[J]. Expert Systems with Applications, 2024, 245: 123088. 1.算法基本原理 足球队训练算法&#xff0…

【Redis】Redis 生产问题。如何确保缓存和数据库数据的一致性? 常见的缓存更新策略?

目录 缓存穿透 缓存穿透解决办法 缓存击穿 击穿解决办法? 缓存穿透和缓存击穿的区别? 缓存雪崩 雪崩解决办法? 如何确保缓存和数据库数据的一致性? 常见的缓存更新策略? 缓存穿透 定义:缓存穿透说…

Android APP加固利器:深入了解混淆算法与混淆配置

Android APP 加固是优化 APK 安全性的一种方法,常见的加固方式有混淆代码、加壳、数据加密、动态加载等。下面介绍一下 Android APP 加固的具体实现方式。 混淆代码 使用 ipaguard工具可以对代码进行混淆,使得反编译出来的代码很难阅读和理解&#xff…

阿里巴巴蔡崇信:中国AI追赶神速,制造业霸主地位无可撼动!

快科技4月5日讯,阿里巴巴集团创始人兼董事长蔡崇信近日就AI技术领域及全球制造业形势发表看法。他认为,尽管中国在AI技术方面与美国有一定差距,但中国的追赶速度非常快。 AI-321 | 专注于AI工具分享的网站 AI工具集 | 人工智能工具箱 | 全球…