Linux环境变量剖析

一、什么是环境变量

概念:环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数,是在操作系统中一个具有特定名字的对象,它包含了一个或多个应用程序所将使用到的信息,总结就是环境变量存储了执行程序/命令要用到的信息。

如何理解环境:用户一般通过shell跟内核通信,对于linux系统,具体的shell就是bash,从而就有了bash环境,在bash环境中就会有很多默认的环境变量,例如PATH,环境中储粮有环境变量还有自定义变量。

如何理解变量:变量就是可以随意给其赋值的一个存储单元,其作用要么是被赋值要么是被读取值。

  • 二、常见的环境变量

2.1 PATH

作用:PATH包含了指定命令的搜索路径,指定操作系统需要使用到的可执行程序的位置。

思考:

1.为什么执行命令名 ls 不用加 "./",但执行自己编译链接生成的可执行程性程序要"./"。

  • 原因是在系统PATH环境变量里面存储了很多条路径,当运行命令时会逐个在路径下找该命令,而ls,cd等指令已经被存储进PATH环境变量,故而无需加“ ./ ”,对于自己的可执行程序,并没有添加到环境变量中,所以需加“ ./ ”是通过相对路径指定在当前目录下才能被bash找到并运行

2.如何查看命令的路径?

  • ls为例,通过which lswhereis ls可查看ls命令路径

3.如何查看PATH环境变量?

  • 通过echo $PATH可查看PATH环境变量

4.如何让自己的程序执行时不用加“ ./ ”

1)将程序拷贝到/user/bin目录下,不推荐
   sudo cp -f myproc /user/bin
 2)用export将程序的路径添加到环境变量
   export PATH=$PATH:/home/yxy/mycodes
   意思是新的PATH=旧的PATH + 要添加的路径(/home/yxy/mycodes),这样当你运行你的程序时不用加“ ./ ”也可以让bash找到
 注意:当前所做的工作只是修改这变量,只对当前的shell有效,即使清空了也没事,重新登录后PATH会被恢复成原始态

2.2 HOME

作用: 存放当前用户的主工作目录(也称家目录)
演示:通过echo $HOME查看HOME变量

可以看到:在普通用户时HOME变量显示的是当前用户的主工作目录,当切换为root账号时HOME变量显示的是root用户的主工作目录

2.3 SHELL

作用: 查看用户使用的是哪种命令行解释器
演示:通过echo $SHELL查看SHELL变量

可以看到:用户使用的Shell解释器名称是bash

三、查看与设置变量

  • shell变量(局部变量):只在命令行设定(没有export)的变量叫局部变量,局部变量只在本进程(bash)内有效
  • 环境变量(全局变量):环境变量对创建它的Shell及其派生出来的子进程都有效,也即是说环境变量可以继承,从当前shell脚本执行的任何应用程序都会继承这个变量

如何设置局部变量: 通过 变量名=变量值 语句设定,如 MYVAL=100,注意=号之间不能有空格,否则shell会把变量名当成命令,变量名应该用大写字母
如何设置环境变量: 通过 export 变量名=变量值 语句设定,如 export MYVAL=100
查看变量:
  1. env 指令可以查看所有环境变量
  2. set 指令显示本地定义的shell变量和环境变量
清除环境变量: 通过 unset 变量名 语句设定,如 unset MYVAL
 

四、如何理解命令行带参本质

命令带参的本质: 是给main函数传递不同的参数使之执行不同的功能,main函数的参数分两种:命令行参数和环境变量,命令行参数使得main函数可以执行不同的功能,而系统会给所有进程传递环境变量

该代码编译链接生成myproc可执行程序:

注:./myproc运行可执行程序与执行ls,cd等命令本质是一样的,可通过将将程序的路径添加到环境变量则运行myproc时可不加“ ./ ”

由此得出argv指针数组的布局:

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

envp数组:储存系统的环境变量信息,由系统提供,布局和argv指针数组一致
一个程序来说明:

结论:
  当程序跑起来变成了进程,该进程可获得环境变量 -> 也就是说:环境变量是一个系统级别的全局变量,bash之下的所有进程都可以获取
  为何系统级环境变量配置文件/etc/profile,/etc/environment中的声明的环境变量可以被所有进程访问到?是因为这些文件都是被init进程处理的, 而init进程是所有进程的祖先进程,这也就验证了子进程会继承父进程的环境变量,也可以理解为环境变量具有全局属性
 

程序中用其他方式获取环境变量:

 1. 可通过第三方变量environ获取:通过 extern char **environ ,libc中定义的全局变量environ指向环境变量表

	 extern char **environ;//第三方变量for(int i=0;environ[i];i++){printf("environ[i]:%s\n",environ[i]);//environ[i]是不同的环境变量}

2.通过getenv(“变量名”)获取变量的内容

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

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

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

相关文章

APIGEE:用于API代理的CI / CD管道

在本文中&#xff0c;我们将看到如何为APIGEE API代理创建CI / CD管道。 我已经参考了APIGEE社区上同一主题的几篇文章。 这些给了一些关于如何为API代理设置CI / CD管道的想法。 这是我用来设置CI / CD的工具。 詹金斯 节点 蜂胶 新人 APIGEE管理API 确保已创建APIGEE边…

01_3基带传输的常用码型和码间串扰

第十七讲 基带传输的常用码型和码间串扰 第一节 基带传输的常用码型 一、数字基带信号的编码规则 基带传输对信号的要求&#xff08;即独立又有联系&#xff09; 对传输码型的要求&#xff1a;原始消息码必须编成适合于信道传输用的码型&#xff08;码型的选择&#xff09; …

移动通信考前预习_第1章_无线通信系统概述

下周考试&#xff0c;开始预习。 第一章为概念&#xff0c;直接copyPPT。 第1章 无线通信系统概述 一、移动通信发展 1、第一代 80年代——模拟通信时代&#xff08;1G&#xff09; 典型系统&#xff1a;AMPS系统&#xff08;先进移动电话系统&#xff09;、TACS系统&#…

java 调试 工具_Java调试器–权威的工具列表

java 调试 工具Java调试是一个复杂的空间。 调试器的类型很多&#xff0c;工具也很多。 在此页面中&#xff0c;我们将介绍7种类型的调试器之间的区别&#xff0c;并查看每个类别中的主要工具&#xff0c;以帮助您为正确的工作选择正确的工具。 以下是我们介绍的调试器类型&a…

移动通信考前预习_第2章_蜂窝技术

一、蜂窝的概念 1、系统级的概念&#xff1a;用许多小功率的发射机&#xff08;小覆盖区&#xff09;来代替单个的大功率发射机&#xff08;大覆盖区&#xff09;&#xff0c;每个小覆盖区只提供服务范围内的一小部分覆盖。 2、不需要做技术上的重大修改&#xff0c;没有增加额…

移动通信蜂窝原理例题整理

目的很功利&#xff1a;会做题。 So~~上题&#xff01;&#xff01;&#xff01; 1、求波长和天线长度。 不接地天线长度是半波长整数倍&#xff0c;接地是1/4波长整数倍&#xff08;地面镜像效应&#xff09;。 2、大区制小区制概念理解 举例&#xff1a;30个双向信道 1、大…

spss三次指数平滑_17 统计学:SPSS基础

内容目录为什么要学习SPSSspss发展史spss操作界面spss基本使用方式SPSS的常用操作数据管理spss制作图表使用spss进行描述统计分析1.为什么要学习SPSS统计分析软件是数据分析的主要工具统计设计完成后&#xff0c;完整的分析过程包括数据的搜集数据的整理数据的分析结果的报告统…

outlook邮箱邮件内容乱码_VBA:Outlook和Excel综合运用

很多企业公司使用微软OUTLOOK作为公司邮箱进行业务往来。 我们经常需要将一些表格数据也展示给收件人&#xff0c;但是又不需要将整个工作簿添加为附件&#xff0c;那么最好的方法就是复制指定单元格区域内容然后粘贴进新邮件界面内就可以了。 偶尔写一个邮件&#xff0c;这样做…

JDK 9、10和11中的安全性增强

缩短JDK发布周期的原因之一是有可能推出更快的安全错误修复和增强功能。 在本文中&#xff0c;我们将简要回顾一下最新JDK版本中引入的主要安全增强功能。 由于这些增强功能中的大多数与TLS相关&#xff0c;因此必须了解TLS握手过程&#xff0c;如下图所示&#xff1a; JDK 9 …

三星q90r如何升级系统_看尚电视强制升级风行系统,如何安装第三方软件?

最近,看尚电视强制升级系统,不论界面UI还是操作方式都与之前有所不同,就连就简单的下载第三方软件,很多用户表示升级之后处处碰壁,那么今天小编就来和大家讲一下升级之后所遇到的问题,方便大家及时熟悉新系统。1、如何安装第三方软件这次看尚电视升级后,安装第三方软件的方式与…

移动通信考前预习_第4章_全球移动系统(GSM)

课件例题 例&#xff1a; 现GSM系统有10MHz的频段&#xff0c;如果采用434\times343的频率复用&#xff0c;试求出这个系统里基站的频点配置。若改成333\times333的频率复用&#xff0c;那么情况又是如何&#xff1f; 练习&#xff1a; 现GSM系统有6MHz的频段&#xff0c;如果…

Github常用搜索指令(毕设资料搜索必备)

1、language&#xff1a;限制语言 2、in&#xff1a;根据某个关键词来进行检索 关键词name项目名称description项目描述readme项目帮助文档语法&#xff1a;需要检索的内容 in:name或description或reademe 组合使用&#xff1a;加逗号即可 3、根据starts或fork关键词查找 单…

dev分支和master是什么_天天用Git,分支开发你怎么弄的?

来源| juejin.im/post/6844903635533594632Git 是目前最流行的源代码管理工具。为规范开发&#xff0c;保持代码提交记录以及 git 分支结构清晰&#xff0c;方便后续维护&#xff0c;现规范git的相关操作。分支命名1、master 分支master 为主分支&#xff0c;也是用于部署生产环…

gradle ant_区分基于Ant目标的Gradle任务

gradle ant在我的博客文章《 从Ant Build演变Gradle构建&#xff1a;导入Ant构建文件》中 &#xff0c;我演示了如何使用Gradle内置的基于AntBuilder的Ant支持在Gradle构建中导入Ant目标。 然后&#xff0c;可以将这些Ant目标作为Gradle任务进行访问&#xff0c;并与Gradle构建…

labview求n阶乘的和_求极限方法总结

函数的极限第一步&#xff1a;判断极限类型1、 型常用方法&#xff1a;①洛必达法则 ②等价无穷小代换 ③泰勒公式2、 型常用方法&#xff1a;①洛必达法则②分子分母同除以分子和分母各项中最高阶的无穷大③基本极限&#xff1a; 当nm时&#xff0c;极限等于 ,当n&#xff1c;…

uniapp怎么引入css_CSS 三种基础选择器

本节我们来学习 CSS 中的选择器&#xff0c;选择器是 CSS 里面一个很重要的概念&#xff0c;HTML 中的所有标签样式&#xff0c;都是通过不同的 CSS 选择器进行控制的。我们只需要通过选择器&#xff0c;就可以对不同的 HTML 标签进行选择&#xff0c;并指定各种样式声明。在 C…

万网绑定二级域名_Hexo+yilia主题网站绑定个性域名

上篇我们已经成功部署了自己的博客网站&#xff0c;初始化的网站看上去似乎少了些内容(高端大气上档次的设置)。接下来我们就进一步完善我们的博客网站(孟繁胜游)。绑定个性域名当你打开github给你设定的固定域名时&#xff0c;是不是感觉low极了。主要是github给你的域名在你注…

javafx 自定义控件_JavaFX自定义控件– Nest Thermostat第1部分

javafx 自定义控件几周前&#xff0c;由于Hendrik Ebbers的出色文章 &#xff0c;我决定花一些时间观看有关JavaFX的JavaOne讨论。 我不得不说我已经学到了很多东西&#xff0c;只是看这些视频&#xff08;即使我还没有完成&#xff09;&#xff01; Gerrit的“使用力&#xf…

不等号属于不等式吗_考研专业课备考时,仅仅多刷几遍目标院校的期末考试题就够吗?...

考研专业课备考时&#xff0c;仅仅多刷几遍目标院校的期末考试题就够吗&#xff1f;也许这要看各专业情况&#xff0c;部分专业的考研题和本科生的期末考试题难度类似&#xff0c;比如说人文社科类的专业&#xff0c;这也是我的猜测情况。大部分专业的专业课题目难度&#xff0…

使用Spring Boot和H2可以完全工作的原型

我们确实在弹簧上使用了很多h2&#xff0c;特别是对于单元测试。 但是&#xff0c;我们可能希望拥有一个功能齐全的原型来显示数据&#xff0c;而不是进行单元测试。 H2是最理想的选择&#xff0c;它在spring上运行良好&#xff0c;与大多数数据库都具有良好的语法兼容性&…