[Linux]环境变量

news2024/11/20 6:32:38

目录

基本概念

常见的环境变量

PATH测试

HOME测试

SHELL测试

和环境变量相关的命令

main函数的三个参数

环境变量的组织方式

通过代码如何获取环境变量

通过系统调用获取或设置环境变量

基本概念

  • 环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数

如:我们在编写C/C++代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪里,但是照样可以链接成功,生成可执行程序,原因就是有相关环境变量帮助编译器进行查找。

  • 环境变量通常具有某些特殊用途,还有在系统当中通常具有全局特性,可以被子进程继承下去.

常见的环境变量

  • PATH : 指定命令的搜索路径

  • HOME : 指定用户的主工作目录(即用户登陆到Linux系统中时,默认的目录)

  • SHELL : 当前Shell,它的值通常是/bin/bash。

如何查看环境变量

查看环境变量方法
echo $NAME //NAME:你的环境变量名称

PATH测试

为什么我们运行自己的程序需要指定路径,而使用指令时(如ls等)却不需要?

 PATH指定了命令的搜索路径:

        环境变量PATH内包含了数条路径(以进行分割),当我们运行程序时,如果我们没有指明路径,系统会自动从左往右在PATH里的路径下寻找,找到了该程序就能直接运行了。

如何让自己的程序能直接运行?不支持c++程序,只支持c程序

这里提供两种方法:

  • 方法一:将自己的程序导入到PATH下的路径中

sudo cp hello /usr/bin

        我们将hello程序拷贝到了PATH环境变量中的一条路径下。当我们直接运行该程序时,系统就能找到该程序了。

  • 方法二: 将程序的当前路径放入PATH中

    这里需要用到export操作

    • export: 设置一个新的环境变量

export PATH=$PATH:当前路径

 直接运行成功:

注意点:

  1. export是设置一个新的环境变量,我们这里相当于覆盖原有的PATH,因此设置时要带上PATH本来就有的路径(即$PATH),后面再跟上我们要添加的路径,不然会造成很多指令的失效,因为PATH中的路径没了,系统找不到指令了。

  2. 发生上面的问题时,我们重启我们的Xshell即可,因为在我们的家目录中有环境变量的配置文件,每次启动时都会自动将对应的环境变量导入到bash的上下文中。

  3. 对单一用户生效的永久性变量(用户级),在用户主目录”~”下的隐藏文件 “.bash_profile”中添加自己想要的环境变量。

  4. 临时有效的环境变量(只对当前shell有效),直接使用export指令添加。

HOME测试

用户的主工作目录(即用户登陆到Linux系统中时,默认的目录):

cd ~命令 //返回家目录(与HOME中记录的家目录相同)   

SHELL测试

        我们在Linux操作系统当中所敲的各种命令,实际上需要由命令行解释器进行解释,而在Linux当中有许多种命令行解释器(例如bash等),我们可以通过查看环境变量SHELL来知道自己当前所用的命令行解释器的种类。

和环境变量相关的命令

  • echo: 显示某个环境变量值

  • export: 设置一个新的环境变量

  • env: 显示所有环境变量

常用的几个环境变量整理:

PATH指定命令的搜索路径
HOME指定用户的主工作目录
HISTSIZE保存历史命令记录的条数
LOGNAME当前用户的登录名
HOSTNAME指主机的名称
SHELL用户当前用的哪种shell
MAIL指当前用户的邮件存放目录
PS1命令提示符,root用户是#,普通用户是$
PS2附属提示符,默认是“>”
SECONDS从当前shell开始运行所过去的秒数
  • set: 显示本地定义的shell变量和环境变量

本地定义的shell变量,env无法显示.

  • unset: 清除环境变量

本地定义的shell变量:

环境变量:

main函数的三个参数

int main(int argc,char* argv[],char* env[])
{ }

 main函数的前两个参数:

  1 #include<stdio.h>
  2 int main(int argc,char* argv[])
  3 {
  4   for(int i=0;i<argc;++i)
  5   {
  6     printf("argv[%d]=%s\n",i,argv[i]);                                          
  7   }
  8   return 0;
  9 }

 通过上面,我们可以很清楚的看到,argv[0]中是我们要运行的程序,后面则是跟上了我们添加的选项。

main函数的第三个参数:

#include <stdio.h>
int main(int argc, char *argv[], char *env[])
{
 int i = 0;
 for(; env[i]; i++){
 printf("%s\n", env[i]);
 }
 return 0;
}

打印出的是我们的环境变量。

环境变量的组织方式

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

通过代码如何获取环境变量

  • 通过mian函数的第三个参数

上面已演示,不多赘述。

  • 通过第三方变量environ获取

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

#include <stdio.h>
int main()
{
    extern char** environ;
 	for(int i = 0;; environ[i]; i++)
    {
 		printf("%s\n", environ[i]);
 	}
    return 0;
}

通过系统调用获取或设置环境变量

  • putenv

  • getenv

 使用getenv函数获取环境变量PATH的值:

#include <stdio.h>
#include <stdlib.h>
int main()
{
 printf("%s\n", getenv("PATH"));
 return 0;
}

 

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

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

相关文章

FreeRTOS 系统内核控制函数

FreeRTOS 中有一些函数只供系统内核使用&#xff0c;用户应用程序一般不允许使用&#xff0c;这些 API 函数就是系统内核控制函数。 内核控制函数 顾名思义&#xff0c;内核控制函数就是 FreeRTOS 内核所使用的函数&#xff0c;一般情况下应用层程序不使用这些函数&#xff0…

6基于二阶锥规划的主动配电网最优潮流求解

matlab代码&#xff1a;基于二阶锥规划的主动配电网最优潮流求解 参考文献&#xff1a;主动配电网多源协同运行优化研究_乔珊 摘要&#xff1a;最优潮流研究在配 电网规划运行 中不可或缺 &#xff0c; 且在大量分布式能源接入 的主动配 电网环境下尤 为重要 。传统的启发式算…

设计师一定要知道这5个免费样机素材网

本期推荐5个设计师必备的样机素材网站&#xff0c;免费下载&#xff0c;建议收藏~ 1、菜鸟图库 https://www.sucai999.com/searchlist/3217----all-0-1.html?vNTYxMjky 网站有多种类型的设计素材&#xff0c;像平面、电商、UI、办公等素材这里面都能找到。样机素材分类清晰&…

GitHub“疯狂”求阿里内部开源这份10W字Java面试手册,竟遭拒绝

行业风向标&#xff0c;猎聘发布的数据报告显示&#xff1a; 相比以往&#xff0c;2023年企业招聘两大变化体现在&#xff1a;对人才各方面能力要求更高、对人岗的匹配性要求更细。不同规模的企业用人各有侧重&#xff0c;大中型企业更注重人的全面能力&#xff0c;小型企业更…

我写系列博客的缘由

我写系列博客的缘由 每个经历不是一帆风顺的人&#xff0c;都将深刻地体会到&#xff0c;少走弯路对一个人来说是多么重要。人的生存不是浪漫的幻想&#xff0c;而是建立在能立足于现实社会上&#xff0c;教育的真正意义&#xff0c;是培养你的认识水平、提升智慧&#xff0c;借…

JAVA语言-比较器Comparator

目录 一、什么是Comparator 二、Java compare方法和compareTo方法 三、java中Comparable和Comparator的区别 Comparator的例子 一、什么是Comparator Comparator 是javase中的接口&#xff0c;位于java.util包下。 数组工具类和集合工具类中提供的工具方法sort方法都给出…

Vector - CAPL - CAN x 总线信息获取

在CAN&CANFD测试中&#xff0c;我们经常需要获取到CAN总线的负载、错误帧、过载帧、发送错误等等CAN总线上面的信息&#xff0c;这些信息如此重要&#xff0c;但是如果真的要写代码去实现也是相当不易的&#xff0c;那我们该如何去获取到的呢&#xff1f;下面我们就来一起看…

系统集成作业——公司网络系统集成设计,总公司、分公司地跨两个不同城市。

一 实验需求 完成公司网络系统集成设计&#xff08;2000台电脑&#xff09;&#xff0c;总公司、分公司地跨两个不同城市 二实验分析 本次实验继续建立在实验三的基础之上&#xff0c;对其升级改造为地跨不同城市的总公司和分公司的大型局域网网建设。 实验三配置点击链接&…

经营软件公司五年,从外包到SaaS的踩坑笔记

文章目录摘要开公司的两个误区关于管理关于合作关于SaaS其他经验大和强是两码事。大不是目的&#xff0c;强才是。小步试错、慢慢迭代不要掉入流量陷阱摘要 经营公司已有五年&#xff0c;经历了三年的疫情停滞&#xff0c;现在正在转型为一家SaaS公司。虽然曾经迷茫过&#xf…

包装类,String,String的方法

针对八种基本数据类型相应的引用类型-----包装类。有了类的特点&#xff0c;就可以调用类中的方法 基本数据类型包装类booleanBoolean char CharacterbyteByteshortShortintIntegerlongLongfloatFloatdoubleDouble Byte---Double类的父类是Number 关系图 拆箱&#xff0c;装箱 …

如何微调Segment Anything Model

文章目录什么是SAM&#xff1f;什么是模型微调&#xff1f;为什么要微调模型&#xff1f;如何微调 Segment Anything 模型背景与架构创建自定义数据集输入数据预处理训练设置循环训练保存检查点并从中启动模型下游应用程序的微调随着 Meta 上周发布的 Segment Anything Model (…

DAY 33 shell编程 常用的文本命令

sort命令####排序 sort将文件的每一行作为一个单位相互比较&#xff0c;比较原则是从首字符向后依次按ASCII码进行比较&#xff0c;最后将它们按升序输出。&#xff08;以行为单位来排序输出&#xff09; sort [选项] 参数​cat file | sort 选项常用选项&#xff1a; 常用选…

计算机综合题汇总

(数学计算题) 把6个相同的球分到三个不同的学生身上,允许有的学生没有球,请问有多少种不同的方法? C(8,2)=28。 典型的插板问题,直接套公式,C(n+m-1,m-1)。6个球,本身5个空,有同学可以不分,再加3个空,共8个空;插入2个板。 (软件选择题) 软件质量保证是什么? A. 确保…

超外差收音机的制作-电子线路课程设计-实验课

超外差收音机的制作 一、原理部分&#xff1a; 超外差收音机&#xff1a;超外差式收音机是将接收到的不同频率的高频信号全部变成一个固定的中频信号进行放大&#xff0c;因而电路对各种电台信号的放大量基本是相同的&#xff0c;这样可以使中放电路具有优良的频率特性。 超…

Adobe考证

在数字化时代&#xff0c;Adobe软件已成为许多人工作和创造的必备工具。为了证明自己在使用Adobe软件方面的专业能力&#xff0c;许多人选择参加Adobe认证考试并获取Adobe认证证书。 本文将从以下几个方面介绍Adobe考证的相关内容...... 什么是Adobe认证考试&#xff1f; Ado…

我的面试八股(JAVA并发)

重点AQS以及几种锁的底层需要补充&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 程序计数器为什么是线程私有的? 程序计数器主要有下面两个作用&#xff1a; 字节码解释器通过改变程序计数器来依次读取指令&#xff0c;从而实现代码的流程控制&#xff0c…

VS Code配置C/C++开发环境

一、VS Code安装C/C++插件 二、配置MinGW 进入下载页面mingw-w64,找到winlibs-x86_64-mcf-seh-gcc-13.0.1-snapshot20230402-mingw-w64ucrt-11.0.0-r1.7z,点击下载。将文件放到自己想要放置的盘符下面,然后解压,将里面的mingw64目录剪切到最外层。 拷贝目录,将目录添加到…

【静态Web架构】静态站点生成器概述 Gatsby ,Hugo 和Jekyll对比

在本文中&#xff0c;您将看到三种最好的静态站点生成器的比较&#xff0c;它们的优点、缺点以及您应该使用它们的原因。网站统治着网络&#xff0c;无论是静态的还是动态的。虽然现在很多网站都是动态的&#xff0c;但是静态的仍然很受欢迎。事实上&#xff0c;静态网站的使用…

高频丙类谐振功率放大器【Multisim】【高频电子线路】

目录 一、实验目的与要求 二、实验仪器 三、实验内容与测试结果 1、观察输入、输出波形 2、观察不同工作状态下的集电极电流波形 3、测试负载特性 4、测试集电极调制特性 四、实验结果分析 五、参考资料 一、实验目的与要求 1、通过实验加深理解高频谐振功率放大器电路…

R -- 层次聚类和划分聚类

brief 聚类分析是一种数据归约技术&#xff0c;旨在揭漏一个数据集中观测值的子类。子类内部之间相似度最高&#xff0c;子类之间差异性最大。至于这个相似度是一个个性化的定义了&#xff0c;所以有很多聚类方法。 最常用的聚类方法包括层次聚类和划分聚类。 层次聚类&#…