初识环境变量
初识环境变量
目录:
- 什么是环境变量
- 常见的环境变量
- Linux中与环境变量的有关的命令
- 如何获取环境变量
- 环境变量的特点
- 环境变量的作用
1.什么是环境变量
我们在Linux操作系统下,使用指令,比如
ls,pwd,cd等等,可以直接使用,但是我们编译完C/C++文件后产生的test可执行程序,我们却需要输入./test才能运行,我们加了一个路径才让程序跑起来,而平时的操作指令却不需要加路径,为什么?
- 这是环境变量中的
PATH在搞鬼
概念:环境变量(Environment Variables)是操作系统用于存储配置信息的变量,这些信息可以影响系统和应用程序的行为。
又比如我们在编译C/C++文件时,我们并没有输入动/静态库的位置,但还是编译成功,原因是有相关环境变量帮助编译器进行查找。
2.常见的环境变量
- PATH:指定操作系统查找可执行文件的目录列表。
- HOME:当前用户的主目录路径。
- USER:当前登录用户的用户名。
- SHELL:默认的命令行解释器(shell)路径。
- PWD:当前工作目录路径。
- LANG / LC_ALL:设置系统的默认语言和区域,影响应用程序的本地化显示。
- TEMP / TMP:系统临时文件存储路径,程序可在此创建临时文件。
3.Linux中与环境变量的有关的命令
-
export-
用途:设置一个新的环境变量或将一个本地变量变为环境变量,使其在当前 shell 会话的子进程中可用。
-
用法:
export VAR_NAME=valueexport PATH="$PATH:/new/path" #在PATH环境变量下新增路径,需要带上旧的PATH,不然PATH将只有新的路径 export MY_VAR="Hello"
本地变量是什么?
MY_VAR="Hello" #不加export,此时的MY_VAR就是本地变量 export MY_VAR="Hello" #MY_VAR此时是就是临时的环境变量(仅对当前会话有效) -
-
echo-
用途:显示环境变量的值。
-
用法:
echo $VAR_NAMEecho $PATH echo $USER
-
-
env-
用途:显示当前 shell 会话中的所有环境变量。也可以用于在临时设置环境变量的情况下执行一个命令。
-
用法:
env # 显示所有环境变量 env VAR=value command # 在特定环境变量设置下执行命令示例:
env PATH=/tmp ./myprogram
-
-
printenv-
用途:显示指定环境变量的值。如果不指定变量名,则显示所有环境变量。
-
用法:
printenv PATH printenv # 显示所有环境变量
-
-
set-
用途:显示所有 shell 变量,包括环境变量和本地变量。也可以用来设置本地变量(但不默认导出为环境变量)。
-
用法:
set # 显示所有变量 set VAR=value # 设置一个本地变量
-
-
unset-
用途:删除一个变量(环境变量或本地变量)。
-
用法:
unset VAR_NAMEunset MY_VAR
-
4.如何获取环境变量
-
使用 Shell 命令获取环境变量
-
从配置文件中获取
在 Linux 系统中,环境变量可以通过读取用户或系统配置文件获取,例如:
/etc/environment:全局环境变量配置文件,影响系统中的所有用户。~/.bashrc、~/.bash_profile、~/.profile:用户特定的配置文件,在用户登录时加载。
-
在编程语言中获取环境变量,这里只讨论C语言
-
通过系统调用获取–>
getenv#include <stdio.h> #include <stdlib.h> int main() {printf("%s\n", getenv("PATH"));return 0; } -
命令行第三个参数
#include <stdio.h> int main(int argc, char *argv[], char *envp[]) {int i = 0;for(; env[i]; i++){printf("%s\n", envp[i]);}return 0; }对于
main函数居然有三个参数,我是很震惊的,因为已经学了一年C/C++了,才知道。-
int argc(Argument Count):- 表示命令行参数的个数,包括程序本身的名称。
argc的值至少为 1,因为第一个参数是程序的名称。
例如,如果运行
./myprogram arg1 arg2,则argc的值为 3。 -
char *argv[](Argument Vector):- 一个字符串数组,包含所有命令行参数。
argv[0]是程序的名称或路径,argv[1]到argv[argc - 1]是用户传递的参数。argv的最后一个元素通常是一个空指针(NULL),表示参数列表的结束。
在前面的例子中,
argv[0]为./myprogram,argv[1]为arg1,argv[2]为arg2。 -
char *envp[](Environment Pointer):- 环境变量的字符串数组(通常不常见于标准 C,但在某些编译器和系统中支持)。
- 每个元素都是一个以等号
=分隔的字符串,形式为"KEY=VALUE"。 envp的最后一个元素通常是一个空指针(NULL),表示环境变量列表的结束。
通过
envp,程序可以直接访问调用它时的所有环境变量。需要注意的是,使用envp的main函数通常定义为int main(int argc, char *argv[], char *envp[])。
-
-
通过第三方变量environ获取
#include <stdio.h> int main(int argc, char *argv[]) {extern char **environ; //二级指针int i = 0;for(; environ[i]; i++){printf("%s\n", environ[i]);}return 0; }environ是一个特殊的全局变量,它指向环境变量的数组。environ没有包含在任何头文件中,所以在使用时 要用extern声明。- 在 Linux 和 Unix 系统中,
environ数组的最后一个元素为NULL,表示环境变量列表的结束。
-
5.环境变量的特点
-
继承性:父进程可以将其环境变量传递给子进程,子进程会继承父进程的环境变量副本。
本地变量:没有继承性
-
临时性:在命令行会话中设置的环境变量仅对当前会话有效。永久更改环境变量需要将其添加到系统或用户的环境配置文件中(如
.bashrc、.profile或 Windows 系统变量设置)。 -
大小写敏感:在 Linux 和 Unix 系统中,环境变量名称区分大小写,而在 Windows 中则不区分大小写。
6.环境变量的作用
-
配置应用程序:许多应用程序通过读取环境变量获取其配置参数,比如数据库连接信息、API 密钥、以及调试模式等设置。
-
设置系统路径:环境变量
PATH列出操作系统查找可执行程序的目录路径。系统在运行命令时,会按照PATH中定义的目录顺序查找对应的可执行文件。意味着当我们将
test加入到的绝对路径加入到PATH后,那么我们就可以直接使用test指令。 -
用户信息与系统设置:环境变量还存储当前用户的相关信息(如
HOME、USER等),以及系统的临时目录路径(如TEMP、TMP)。 -
传递配置信息:环境变量为父进程向子进程传递配置信息提供了一个简便的方式。在运行进程时,操作系统会将当前环境变量复制到该进程中,使进程能直接读取这些变量。
在使用
gcc编译程序时,环境变量主要起到配置应用程序和设置系统路径的作用。
相关文章:
初识环境变量
初识环境变量 目录: 什么是环境变量常见的环境变量Linux中与环境变量的有关的命令如何获取环境变量环境变量的特点环境变量的作用 1.什么是环境变量 我们在Linux操作系统下,使用指令,比如ls,pwd,cd等等,可以直接使用,…...
成像基础 -- 景深计算
景深计算 景深(Depth of Field, DOF)指的是在摄影中,能够清晰成像的物体前后距离的范围。景深的大小取决于多个因素,包括焦距、光圈值、物距以及相机感光元件的尺寸。 1. 景深的主要参数 焦距( f f f)&a…...
Git中从dev分支恢复master分支
问题 需要从dev分支恢复master分支。之前搞错远程地址了,把master分支搞乱了,现在需要从dev分支恢复代码到master分支。 步骤 git checkout dev # 切换到 dev 分支 git branch -D master # 删除本地 master 分支 git checko…...
12.5 Linux_进程间通信_信号灯
概述 什么是信号灯: 信号灯也称为信号量,代表的是一类资源,其值表示系统中该资源的数量。 主要用途是实现进程、线程的同步。 什么是P/V操作: P操作就是申请资源,V操作就是释放操作。 信号灯的种类: …...
Linux——cp-mv-rm命令
cp命令 复制文件 cp test01.txt test02.txt 复制文件夹 cp -r hsy01 hsy02 mv命令 移动文件/文件夹 rm命令 删除文件 rm test.txt 删除文件夹(目录 rm -r hsy01 通配符 * 匹配任意内容 注意* 位置 强制删除-f root超级管理员...
上升点列
题目描述 在一个二维平面内,给定 n 个整数点 (xi,yi),此外你还可以自由添加 k 个整数点。 你在自由添加 k 个点后,还需要从 nk 个点中选出若干个整数点并组成一个序列,使得序列中任意相邻两点间的欧几里得距离恰好为 1 而且…...
刷题 链表
面试经典150题 - 链表 141. 环形链表 class Solution { public:bool hasCycle(ListNode *head) {ListNode* slow head, *fast head;while (fast ! nullptr && fast->next ! nullptr) {slow slow->next;fast fast->next->next;if (slow fast) {return…...
SQL 语法学习指南
目录 前言1. SQL 的基本概念1.1 SQL 的作用1.2 SQL 的特点 2. SQL 的基础语法2.1 数据查询 - SELECT 语句2.2 数据插入 - INSERT 语句2.3 数据更新 - UPDATE 语句2.4 数据删除 - DELETE 语句 3. SQL 的进阶语法3.1 聚合函数3.2 表连接 - JOIN3.3 子查询 4. SQL 学习建议4.1 多实…...
低代码可视化-uniapp商城首页小程序-代码生成器
在设计一个小程序的首页时,包含轮播图、通知栏和商品列表这三个元素是非常常见且有效的布局方式。这样的设计既能够吸引用户的注意力,又能够高效地展示信息和商品。 轮播组件 小程序首页幻灯片通常位于小程序的顶部或显著位置,通过滑动屏幕可…...
Vue3 富文本:WangEditor
wangEditor 开源 Web 富文本编辑器,开箱即用,配置简单 wangEditor 1. 安装依赖包 npm install wangeditor/editor-for-vuenext --save 2. 在引用页面加入如下代码 <template><div style"border: 1px solid #ccc"><Toolbar …...
Unity实现自定义图集(四)
以下内容是根据Unity 2020.1.0f1版本进行编写的 在之前的篇章中已经把自定义图集在编辑器上的使用,以及运行时所需的信息都准备好了,接下来就是魔改UGUI的Image组件,使其能够像Image那样运行时如果引用的资源有打自定义图集,则加载对应自定义图集的Texture。 1、思路 …...
k8s-pod的管理及优化设置
Pod是Kubernetes(k8s)中最小的资源管理组件,也是最小化运行容器化应用的资源对象。以下是对Pod的详细介绍: 一、Pod的基本概念 定义:Pod是Kubernetes中可以创建和管理的最小单元,是资源对象模型中由用户创…...
软件测试面试题大全
什么是软件测试? 答案:软件测试是一系列活动,旨在评估软件产品的质量,并验证它是否满足规定的需求。它包括执行程序或系统以识别任何缺陷、问题或错误,并确保软件产品符合用户期望。 软件测试的目的是什么?…...
SQL第16课挑战题
1. 美国各州的缩写应始终用大写。更新所有美国地址,包括供应商状态(Vendors表中的vend_state)和顾客状态(customers表中的cust_state),使它们均为大写。 2. 第15课挑战题1要求将自己添加到customers表中,现在删除自己,…...
Python3 爬虫 中间人爬虫
中间人(Man-in-the-Middle,MITM)攻击是指攻击者与通信的两端分别创建独立的联系,并交换其所收到的数据,使通信的两端认为其正在通过一个私密的连接与对方直接对话,但事实上整个会话都被攻击者完全控制。在中…...
Leetcode 50. Pow ( x , n ) 快速幂、取模 C++实现
问题:Leetcode 50. Pow ( x , n ) 实现 pow(x, n) ,即计算 x 的整数 n 次幂函数。 算法: 具体实现流程如下: 代码: class Solution { public:double myPow(double x, int N) {double ans 1;long long n N;if (n <…...
Java SE vs Java EE 与 JVM vs JDK vs JRE
Java SE(Java Platform,Standard Edition): Java 平台标准版,Java 编程语言的基础,它包含了支持 Java 应用程序开发和运行的核心类库以及虚拟机等核心组件。Java SE 可以用于构建桌面应用程序或简单的服务器应用程序。…...
Linux YUM设置仓库优先级
1.安装yum-plugin-priorities优先级插件 yum install yum-plugin-priorities -y 2.设置仓库优先级 vim /etc/yum.repos.d/local.repo [local] namecentos7.5 baseurlfile:///mnt enable1 gpgcheck0 priority1 注释: priority1 #数字越小代表优先级越高ÿ…...
做一个不断更新的链接库
做一个不断更新的链接库 anaconda anaconda官方镜像源 anaconda清华镜像源 社区 CSDN CSDN-华为开发者空间 python开发库 股票爬虫 - akshare...
Ping32企业加密软件:保护数据安全
在数字化时代,数据安全已成为每个企业不可忽视的重要课题。无论是客户信息、财务报表,还是商业机密,数据的安全性直接关系到企业的声誉与运营。为了应对不断变化的安全威胁,选择一款可靠的企业加密软件尤为重要。在这里࿰…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...
边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...
.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...
Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...
PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...
MVC 数据库
MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...
高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...
多种风格导航菜单 HTML 实现(附源码)
下面我将为您展示 6 种不同风格的导航菜单实现,每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...
视觉slam十四讲实践部分记录——ch2、ch3
ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...
