第三部分:3---环境变量

目录

什么是环境变量?

PATH环境变量:

临时修改环境变量PATH:

HOME环境变量:

可能使用环境变量的场景:

进程和环境变量的关系:

环境变量相关操作:

代码获取环境变量:

主函数传参获取环境变量:

通过C语言指针获取环境变量:

本地变量和环境变量的区别:

Linux命令分类:

取消环境变量:

查看环境变量:


什么是环境变量?

  • 环境变量是一个全局变量,系统中存在大量的环境变量,存在新式是以键值对的方式存在。

  • 每一个环境变量都有特殊功能,用于完成特定的系统功能。

  • 环境变量可以被系统中运行的任何进程访问。

  • 环境变量可以存储:目录路径、文件路径、系统信息、临时标志或状态等等。

PATH环境变量:

  • 执行一个命令,需要先找到他的可执行程序在哪,也就是要找到可执行程序的目录。

  • 系统命令可以直接调用,不指明目录,是因为他的目录存储在PATH中。

echo $PATH //打印PATH路径

  • PATH的本质就是一个由目录组成的字符串列表,各目录之间使用冒号分隔(Linux)。当输入一个命令时,操作系统会按照PATH变量中定义的目录顺序依次搜索对应路径,查询命令对应的可执行程序。找到就执行,找不到就报错。

临时修改环境变量PATH:

  • 这种修改适用于其他所有环境变量,且只会持续到当前终端会话结束。

  • 这种修改是对内存中当前会话的环境变量进行修改,并不会影响系统配置文件或其他会话中的 PATH 变量。

PATH=$PATH:new path
//将一个目录添加到环境变量
//$PATH表示之前的目录字符串列表,如果不加$PATH就会直接使用new path覆盖原来的PATH

  • 如果想要删除PATH中的某个目录,可以直接将去掉该目录的PATH覆盖原PATH。

HOME环境变量:

  • HOME环境变量存储当前用户主目录的路径。

  • 用户登陆时,从/etc/passwd 文件读取用户的主目录路径,赋值给HOME环境变量。

  • 用户登陆成功后,调用 "cd $HOME" 命令进入用户的主目录路径。

echo $HOME //查看HOME环境变量

可能使用环境变量的场景:

  • 身份认证,限定部分用户可以使用程序的部分功能。

  • 首先getenv获取USER环境变量的值,得到操作系统的当前用户的用户名。

  • 然后和可使用功能的用户列表做对比,当前用户在列表中,就可以使用功能,否则不行。

进程和环境变量的关系:

  • 命令行启动的进程,他们的父进程都是bash / shell。这些进程的环境变量是由bash / shell传递过来的。

  • 父进程的环境变量是从用户主目录中的.bash_profile文件中读取到的。当用户登录后,系统会自动从.bash_profile文件读取配置信息,将值填充到bash的环境变量表中。

环境变量相关操作:

echo $环境变量 //显示环境变量的变量值。
export 环境变量 //添加一个自己的环境变量到bash,使用env可以查看。并没有直接写入到配置文件,而是在bash的上下文中存储。如果想要写到配置文件,使用vim打开.bash_profile文件,将这句话添加到配置文件即可。
env //显示所有的环境变量。
unset //清楚环境变量。
set //显示本地定义的shell变量和环境变量。

代码获取环境变量:

char* getenv(const char* name); //通过环境变量名称获取环境变量,使用要包含头文件<stdlib.h>。
printf("PATH: %s",getenv("PATH"));//获取PATH环境变量

主函数传参获取环境变量:

int main(int argc,char* argv[])
{for(int i=0;argv[i];i++){printf("%d : %s",i,argv[i]);}
}

通过C语言指针获取环境变量:

  • 通过C语言自动设置好的全局变量,可以在main函数不接受参数的情况下访问环境变量表( char* argv[] )。

extern char** environ; //指向argv[]的指针。
for(int i=0;environ[i];i++) //环境变量表的最后一个元素为nullptr
{printf("environ[%d] : %s",i,environ[i]);
}

本地变量和环境变量的区别:

  • 将本地变量使用export声明后,本地变量提升为环境变量。

MY_BIANLIANG=100 //直接在命令行声明,属于本地变量。等于号两边不要带空格。
export MY_BIANLIANG //使用export声明后,提升为环境变量
  • 本地变量只会在bash进程有效,不会被子进程继承。

  • 环境变量可以被所有子进程继承,来实现他的“ 全局性 ”。

Linux命令分类:

  • 内建命令:由Shell程序(如Bash、Zsh等)直接提供和解释执行;不需要启动新的进程,执行速度通常更快。常见的内建命令有 cd、echo、alias、export、set、history 等。

  • 外部命令:独立的可执行程序,当执行外部命令时,Shell会启动一个新的子进程来运行这个命令。常见的外部命令有 ls、grep、find、cp、mv、awk、sed 等。

取消环境变量:

unset MY_BIANLIANG

查看环境变量:

env //查看环境变量
set //查看包含环境变量的所有变量(包括本地变量)

 

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

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

相关文章

迭代器模式iterator

学习笔记&#xff0c;原文链接 https://refactoringguru.cn/design-patterns/iterator 不暴露集合底层表现形式 &#xff08;列表、 栈和树等&#xff09; 的情况下遍历集合中所有的元素

【Unity基础】如何选择Mono的.Net API版本

Edit -> Project Settings -> Player : Api Compatibility Level 在 Unity 的 Project Settings -> Player -> Other Settings 中&#xff0c;API Compatibility Level 设置决定了项目中使用的 .NET API 的兼容级别。Unity 提供了两种主要的 API 兼容级别选项&…

《论层次架构及其在软件系统中的应用》写作框架,软考高级系统架构设计师

论文真题 层次架构作为软件系统设计的一种基本模式&#xff0c;对于实现系统的模块化、可维护性和可扩展性具有至关重要的作用。在软件系统的构建过程中&#xff0c;采用层次架构不仅可以使系统结构更加清晰&#xff0c;还有助于提高开发效率和质量。因此&#xff0c;对层次架…

Jedis,SpringDataRedis

快速入门 导入依赖 <!--jedis--><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>3.7.0</version></dependency><!--单元测试--><dependency><groupId>org.ju…

秋招突击——算法练习——9/4——73-矩阵置零、54-螺旋矩阵、48-旋转图像、240-搜索二维矩阵II

文章目录 引言复习新作73-矩阵置零个人实现 54-螺旋矩阵个人实现参考实现 48-旋转图像个人实现参考实现 240-搜索二维矩阵II个人实现参考实现 总结 引言 秋招开展的不是很顺利&#xff0c;还是要继续准备&#xff0c;继续刷算法&#xff01;不断完善自己&#xff0c;希望能够找…

Vue实现自定义进度条占比功能 Vue自定义进度条功能

在不使用echarts等第三方插件的情况下,使用Vue实现自定义的进度条占比功能,并且是多数据可选循环的 预览图效果 首先看一下获取的后端返回的数据结构,其中每一组加起来等于 22 ,也就是说如果你自己算的话也是同理,根据 占比的数值 除以 总和 =的百分比再去渲染对应占比…

Linux连接阿里云服务器的一系列命令教程

**-p&#xff1a;**连同文件的属性一起复制过去&#xff0c;而非使用默认属性(备份常用)&#xff1b; **-d&#xff1a;**若来源档为连结档的属性(link file)&#xff0c;则复制连结档属性而非文件本身&#xff1b; **-r&#xff1a;**递归持续复制&#xff0c;用於目录的复制…

SpringBoot教程(十五) | SpringBoot集成RabbitMq(消息丢失、消息重复、消息顺序、消息顺序)

SpringBoot教程&#xff08;十五&#xff09; | SpringBoot集成RabbitMq&#xff08;消息丢失、消息重复、消息顺序、消息顺序&#xff09; RabbitMQ常见问题解决方案问题一&#xff1a;消息丢失的解决方案&#xff08;1&#xff09;生成者丢失消息丢失的情景解决方案1&#xf…

记一次Hiveserver2连接异常的解决-腾讯云-emr

原文阅读&#xff1a;【巨人肩膀社区博客分享】记一次Hiveserver2连接异常的解决-腾讯云-emr 离线任务跑的好好的&#xff0c;忽然有一天失败了&#xff0c;查看海豚上的任务执行日志发现是hiveserver2连接超时了。 查看监控发现了几个问题一个是GC变得频繁&#xff0c;另一个…

【LabVIEW学习篇 - 19】:人机界面交互设计03

文章目录 运行菜单主菜单右键快捷菜单 运行菜单 菜单是人机交互非常重要的一个途径&#xff0c;它的好处是把需要的操作隐藏起来&#xff0c;当用户需要的时候才激活&#xff0c;因此相对于把所有的操作以按钮的形式放在界面上&#xff0c;可以节省很大的空间。 菜单有两种&a…

Learn OpenGL In Qt之着色器

竹杖芒鞋轻胜马,谁怕?一蓑烟雨任平生~ 公众号&#xff1a; C学习与探索 | 个人主页&#xff1a; rainInSunny | 个人专栏&#xff1a; Learn OpenGL In Qt 文章目录 写在前面GLSL变量输入输出顶点着色器片段着色器 Uniform更多属性 自己的着色器类 关注公众号&#xff1a;…

TCP通信实现

前言 TCP&#xff08;Transmission Control Protocol&#xff0c;传输控制协议&#xff09;是一种面向连接的、可靠的、基于流的通信协议。它是互联网协议栈&#xff08;TCP/IP&#xff09;中的核心协议之一&#xff0c;主要用于保证在计算机网络中可靠地传输数据。 TCP通信的基…

Android视频编辑:利用FFmpeg实现高级功能

在移动设备上进行视频编辑的需求日益增长&#xff0c;用户期望能够在智能手机或平板电脑上轻松地编辑视频&#xff0c;以满足社交媒体分享或个人存档的需求。Android平台因其广泛的用户基础和开放的生态系统&#xff0c;成为视频编辑应用的理想选择。FFmpeg&#xff0c;作为一个…

Leetcode面试经典150题-55.跳跃游戏

解法都在代码里&#xff0c;不懂就留言或者私信 class Solution {public boolean canJump(int[] nums) {/**如果就一个位置&#xff0c;你本来就在这&#xff0c;肯定可以跳到*/if(nums.length 1) {return true;}/**这个题的解题思路是遍历数组&#xff0c;如果当前位置不在之…

Golang | Leetcode Golang题解之第393题UTF-8编码验证

题目&#xff1a; 题解&#xff1a; const mask1, mask2 1 << 7, 1<<7 | 1<<6func getBytes(num int) int {if num&mask1 0 {return 1}n : 0for mask : mask1; num&mask ! 0; mask >> 1 {nif n > 4 {return -1}}if n > 2 {return n}r…

AI大模型零基础学习到精通:jieba分词用法及原理

2.jieba分词用法及原理 1.概述 上篇文章分析了自然语言处理&#xff0c;特别是中文处理中&#xff0c;分词的几个主要难点。为了解决这些难点&#xff0c;提出了基于字符串匹配的算法和基于统计的分词算法。针对当前的几种分词引擎&#xff0c;对其分词准确度和速度进行了评估…

实时监控视频接入到AS-VJ900拼接系统中,发现服务器的英伟达GPU 驱动状态不对 导致拼接后实时视频请求失败的问题解决

目录 一.问题背景 1.1拼接平台简介 1.2问题描述 二.问题解决过程 2.1查看拼接前视频流 2.2查看GPU驱动 2.3重新安装GPU驱动 2.3.1确认驱动版本 2.3.2卸载不正常驱动 2.3.3重新安装驱动 三.问题解决结果 3.1查看解决结果 3.2nvidia-smi的补充 一.问题背景 1.1拼接…

NLP基础及其代码-tokenizer

基础知识 NLP-分词器&#xff1a;SentencePiece【参考Chinese-LLaMA-Alpaca在通用中文语料上训练的20K中文词表并与原版LLaMA模型的32K词表进行合并的代码】_sentencepiece 中文训练-CSDN博客 【OpenLLM 008】大模型基础组件之分词器-万字长文全面解读LLM中的分词算法与分词器…

TCP通信三次握手、四次挥手

前言 前面我说到了&#xff0c;UDP通信的实现&#xff0c;但我们经常说UDP通信不可靠&#xff0c;是因为他只会接收和发送&#xff0c;并不会去验证对方收到没有&#xff0c;那么我们说TCP通信可靠&#xff0c;就是因为他会进行验证接收端是否能够接收和发送&#xff0c;并且只…

使用Python通过字节串或字节数组加载和保存PDF文档

处理PDF文件的可以直接读取和写入文件系统中的PDF文件&#xff0c;然而&#xff0c;通过字节串&#xff08;byte string&#xff09;或字节数组&#xff08;byte array&#xff09;来加载和保存PDF文档在某些情况下更高效。这种方法不仅可以提高数据处理的灵活性&#xff0c;允…