Linux下的环境变量

目录

  • 一、环境变量是什么?
  • 二、常见的环境变量
  • 三、查看环境变量的方法
  • 四、和环境变量相关的命令
  • 五、命令行参数
  • 五、环境变量通常是具有全局属性的

一、环境变量是什么?

环境变量通俗来说就是一种存储系统和应用程序运行需要的配置信息的方式。可以把环境变量想象成一个全局的“记事本”,里面记录着一些重要的键值对。这些键值对中的键表示某个特定的配置项,而值则是该配置项的具体取值。

在计算机中,我们有很多需要配置的地方,比如程序的路径、系统的默认语言、数据库的连接参数等等。使用环境变量,我们可以将这些配置信息以键值对的形式保存起来,并且可以在系统中的任何地方访问和使用它们。

所以环境变量就是系统提供的一组 KEY:VAKUE形式的变量,不同的环境变量有不同的用途,环境变量通常具有全局属性。

二、常见的环境变量

PATH:Linux系统的指令搜索路径
在这里插入图片描述

HOME:
在这里插入图片描述
SHELL:
在这里插入图片描述
可以通过指令env查看系统所有的环境变量。
在这里插入图片描述

不知道大家有没有发现我们在运行自己编写的代码生成的可执行程序的时候,需要指明路径./mytest运行,而输入指令(指令也是可执行程序)运行的时候却可以不用输入路径,这是为什么呢?
原因正是在于PATH环境变量的作用,PATH是指令的搜索路径,当我们在输入指令运行的时候系统会自动根据PATH保存的路径逐一查找,找到指令对应的这个可执行程序就运行,如果PATH的所有路径都找不到你所输入的指令对应的可执行程序,那么就会提示该命令找不到。

当前mytest命令并不存在于PATH中的任一路径下,所以在PATH中是找不到该命令的,没办法运行。
在这里插入图片描述
如何让我们的可执行程序也像指令那样运行呢?可以把我们的可执行程序添加到环境变量表中就可以了。如何操作?
需要用到export命令,把mytest的路径添加到环境变量PATH中。

指令:export PATH=$PATH:自己程序的路径

原来的 PATH:
在这里插入图片描述
修改后的 PATH:
在这里插入图片描述
添加后就能像指令那样运行我们自己写的可执行程序了:
在这里插入图片描述

三、查看环境变量的方法

echo $NAME
//NAME:你的环境变量名称

四、和环境变量相关的命令

  1. echo: 显示某个环境变量值
  2. export: 设置一个新的环境变量
  3. env: 显示所有环境变量
  4. unset: 清除环境变量
  5. set: 显示本地定义的shell变量和环境变量

五、命令行参数

main函数也是函数,也是被别的函数调用的,并且main函数也是可以带参数的,平时我们的main函数一般都不带参数,但是main函数是可以带参数的。main函数可以带三个参数,原型如下:
在这里插入图片描述
三个参数分别是什么意思呢?
第一个参数argc:代表我们输入命令时以空格为间隔的字符串的数目,例如我们在执行ls命令时,只输入ls命令则argc=1,如果ls命令携带选项,例如ls -a -b,则argc=3,以此类推。

第二个参数agrv:argv是一个指针数组,里面存放的值是一个一个的char类型,每一个char指向一个字符串,这些字符串按顺序排列就是命令行输入的以空格分隔的字符串,例如 ls -a -l,则argv[0]指向"ls",argv[1]指向"-a",argv[2]指向"-l"。

第三个参数env:env也是一个指针数组,数组里面的指针分别指向对应下标的环境变量。

为什么要有命令行参数?
为指令,工具,软件等提供命令行选项的支持。我们可以通过命令行参数传入指令的各种选项,使得同一个指令运行出不一样的结果。

在这里插入图片描述
在这里插入图片描述
运行时携带不同的选项会输出不同的结果。

我i们也可以通过我们的程序打印环境变量表的内容。
在这里插入图片描述

在这里插入图片描述
可以看出,通过第三个命令行参数打印出来的环境变量表和env命令的环境变量表是一摸一样的。

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

除此之外,还可以利用getenv()函数和第三方变量environ获取环境变量。

getenv:
在这里插入图片描述

environ:

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

int main(int argc, char *argv[])
{extern char **environ;int i = 0;for(; environ[i]; i++){printf("%s\n", environ[i]);}return 0;
}

所以在我们运行我们的程序时,会传入两张核心向量表:
1、命令行参数表。
2、环境变量表。

五、环境变量通常是具有全局属性的

我们所运行的进程都是bash的子进程,bash本身在启动的时候,会从操作系统的配置文件中读取环境变量的信息,子进程会继承父进程的环境变量,所以说环境变量是具有全局属性的。
那么该如何验证呢?
在这里插入图片描述
那么问题来了,前面说所有的指令运行都是bash在创建子进程运行的,那么输入cd指令为什么能够改变父进程bash的路径呢?cd命令不是要创建子进程执行吗?那么修改的应该是子进程本身的路径啊,为什么父进程bash的路径会被修改呢?
所以前面说的所有命令的执行都是通过创建子进程来运行的说法是片面的。

在Linux下存在两批命令:
1、常规命令,通过创建子进程运行的。
2、内建命令,bash不创建子进程,而是由bash本身亲自执行,类似于bash调用了自己写的函数或者系统提供的函数。

在这里插入图片描述
bash内部的实现就类似于上述图片这样,如果是某些内建命令就直接调用自己的函数或者是系统提供的函数,如果是常规命令就创建子进程执行。

本地变量:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

像这样直接定义的是本地变量,并不是环境变量,如果要把它定义为环境变量,必须在前面加上export关键字导出为环境变量才行。

在这里插入图片描述


本地变量,只会在本bash内部有效,不会被继承。

以上就是今天想要跟大家分享的全部内容啦,你学会了吗?如果感觉到有所收获,就点亮一下小心心,顺便点点关注的呗,后期还会持续更新Linux的相关内容哦,我们下期见!!!!!

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

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

相关文章

MySQL数据库基础

目标: 1.数据库操作:创建数据库,删除数据库 2.常用数据类型 3.表的操作:创建表,删除表 数据库操作 (1)显示数据库 show databases; (2)创建数据库 创建一个…

Playwright 和 Selenium 的区别是什么?

前言 最近有不少同学问到 Playwright 和 Selenium 的区别是什么? 有同学可能之前学过 selenium 了,再学一个 playwright 感觉有些多余,可能之前有项目已经是 selenium 写的了,换成 playwright 需要时间成本,并且可能有…

算法的时间复杂度和空间复杂度

目录 前言: ✨什么是数据结构? ✨ 什么是算法? ✨数据结构和算法的重要性 🍑算法的时间复杂度和空间复杂度 算法效率 🎉时间复杂度 2.1 时间复杂度的概念 2.2 大O的渐进表示法 🎉空间复杂度 前言&#xf…

Linux中安装jdk

Linux中安装jdk 操作步骤: 1、使用FinalShell自带的上传工具将jdk的二进制发布包上传到Linux 2、解压安装包,命令为tar -zxvf jdk-8u171-linux-x64.tar.gz -C/usr/local 3、配置环境变量,使用vim命令修改/etc/profile文件,在文件末尾加入如…

排序算法(九大)- C++实现

目录 基数排序 快速排序 Hoare版本(单趟) 快速排序优化 三数取中 小区间优化 挖坑法(单趟) 前后指针法(单趟) 非递归实现(快排) 归并排序 非递归实现(归并&am…

2、简单上手+el挂载点+v-xx(v-text、v-html、v-on、v-show、v-if、v-bind、v-for)

官网&#xff1a; vue3&#xff1a;https://cn.vuejs.org/ vue2&#xff1a;https://v2.cn.vuejs.org/v2/guide/ 简单上手&#xff1a; 流程&#xff1a; 导入开发版本的Vue.js <!--开发环境版本&#xff0c;包含了有帮助的命令行警告--> <script src"https…

单片机开发 esp8266

一、固件界面 二、项目介绍 固件名称&#xff1a;esp8266-universalboard v1.0 提供商&#xff1a; 半条虫(466814195) 下载&#xff1a;esp8266-universalboard.bin 源码地址&#xff1a;Gitlab

【Python】Pandas 简介,数据结构 Series、DataFrame 介绍,CSV 文件处理,JSON 文件处理

序号内容1【Python】Pandas 简介&#xff0c;数据结构 Series、DataFrame 介绍&#xff0c;CSV 文件处理&#xff0c;JSON 文件处理2【Python】Pandas 数据清洗操作&#xff0c;常用函数总结 文章目录 1. Pandas 简介2. Pandas 数据结构1. Series&#xff08;一维数据&#xff…

CISCO MDS 9148 SAN Switch 交换机命令配置方法:

前言 CISCO MDS 9148 SAN 交换机已经停产&#xff0c;但还是要掌握一下配置的方法&#xff1a; 升级款后面 9148S 或者 9100系列&#xff0c;但配置方式基本都差不多&#xff0c;掌握一个就好&#xff1a; 高性能和极具吸引力的价值 Cisco MDS 9148S 16G 多层光纤交换机是下…

基于Orangepi 3 lts 的云台相机

利用orangepi 3 lts 和arduino nano 制作了一个云台相机&#xff0c;可用于室内监控。 硬件&#xff1a; orangepi 3 ,arduino nano ,usb相机&#xff0c;180度舵机两个 WeChat_20230806213004 软件&#xff1a; 整体采用mqtt进行消息的中转。 相机采用python 利用opencv…

数据结构——二叉树

本章代码仓库&#xff1a;堆、二叉树链式结构 文章目录 &#x1f36d;1. 树&#x1f9c1;1.1 树的概念&#x1f9c1;1.2 树的结构 &#x1f36c;2. 二叉树&#x1f36b;2.1 二叉树的概念&#x1f36b;2.2 特殊的二叉树&#x1f36b;2.3 二叉树的性质&#x1f36b;2.4 二叉树的存…

IMV8.0

一、背景内容 经历了多个版本&#xff0c;基础内容在前面&#xff0c;可以使用之前的基础环境&#xff1a; v1&#xff1a; https://blog.csdn.net/wtt234/article/details/132139454 v2&#xff1a; https://blog.csdn.net/wtt234/article/details/132144907 v3&#xff1a; h…

Unity 中检测射线穿过的所有的物体

在开发中 有个需求&#xff0c;射线要检测所有穿过的物体。 代码如下&#xff1a; using UnityEngine;public class HitCollider : MonoBehaviour {public float raycastDistance Mathf.Infinity;// Update is called once per framevoid Update(){Ray ray Camera.main.Scre…

【Spring Boot】Thymeleaf模板引擎 — Thymeleaf页面布局

Thymeleaf页面布局 熟悉Thymeleaf的语法和表达式后&#xff0c;后面开发起来会更加得心应手。接下来好好研究一下Thymeleaf如何实现完整的Web系统页面布局。 1.引入代码片段 在模板中经常希望包含来自其他模板页面的内容&#xff0c;如页脚、页眉、菜单等。为了做到这一点&a…

以产品经理的角度去讲解原型图---会议OA项目

目录 一.前言 二.原型图 2.1 原型图是什么 3.1 原型图的作用 三.演示讲解 3.1 项目背景 3.2 项目介绍 3.2.1 会议管理&#xff08;会议的发起&#xff0c;通知&#xff09; 3.2.2 投票管理&#xff08;会议的流程重大决策记录&#xff09; 3.2.3 会议室管理 3.2.4 系统管…

使用Beautiful Soup等三种方式定制Jmeter测试脚本

目录 背景介绍 实现思路 把脚本数据读出&#xff0c;使用正则表达式&#xff08;re库&#xff09;匹配关键数据进行修改 把脚本数据读出&#xff0c;使用BeautifulSoup的xml解析功能解析后修改 通过Beautiful Soup Beautiful Soup 具体实现 使用string.Template字符替换…

Air32 | 合宙Air001单片机内部FLASH读写示例

Air32 | 合宙Air001单片机内部FLASH读写示例 代码已经通过测试&#xff0c;开发环境KEIL-MDK 5.36。 测试代码 void FLASH_RdWrTest(void) {uint32_t Address;uint32_t PageReadBuffer[FLASH_PAGE_SIZE >> 2];uint32_t PageWriteBuffer[FLASH_PAGE_SIZE >> 2];mem…

b站视频标题的获取(xpath、jsonpath的一个简单应用)

目录 1.目的2.代码的演示 注&#xff1a;该篇文章为本人原创&#xff0c;由于本人学习有限&#xff0c;若有错误或者笔误或者有问题&#xff0c;欢迎大家进行批评指正&#xff0c;谢谢。 1.目的 在b站大学上&#xff0c;为了更好的写笔记&#xff0c;本人根据学到的Python(即Py…

springboot家政服务管理系统java家务保姆资源 jsp源代码mysql

本项目为前几天收费帮学妹做的一个项目&#xff0c;Java EE JSP项目&#xff0c;在工作环境中基本使用不到&#xff0c;但是很多学校把这个当作编程入门的项目来做&#xff0c;故分享出本项目供初学者参考。 一、项目描述 springboot家政服务管理系统 系统1权限&#xff1a;管…

挑战Open AI!!!马斯克宣布成立xAI.

北京时间7月13日凌晨&#xff0c;马斯克在Twitter上宣布&#xff1a;“xAI正式成立&#xff0c;去了解现实。”马斯克表示&#xff0c;推出xAI的原因是想要“了解宇宙的真实本质”。Ghat GPT横空出世已有半年&#xff0c;国内外“百模大战”愈演愈烈&#xff0c;AI大模型的现状…