Linux环境变量

环境变量

  • 一.基本概念
  • 二.常见的环境变量
    • 1.PATH:指令搜索路径
    • 2.HOME: 指定用户的主工作目录
    • 3.SHELL:当前Shell,它的值通常是/bin/bash
  • 三.查看环境变量的方法
  • 四.命令行参数
  • 五.环境变量增加和删除
  • 六.本地变量

一个问题:我们在写一段代码并编译成可执行程序后,想要执行它需要加./,而在使用ls,pwd等指令时却不需要加当前路径,这是怎么回事呢?这就要提到环境变量了。

一.基本概念

环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数如:我们在编写C/C++代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪里,但是照样可以链接成功,生成可执行程序,原因就是有相关环境变量帮助编译器进行查找。环境变量通常具有某些特殊用途,还有在系统当中通常具有全局特性。

二.常见的环境变量

1.PATH:指令搜索路径

查看PATH

在这里插入图片描述

它的内容是由一串路径+冒号+另一串路径+冒号+…。它用冒号作为分割符,定义出了许多路径。那么像ls,pwd这些指令在执行时就会在PATH里挨个寻找路径,执行正确的路径;而我们自己的可执行程序的路径并不在定义里,所以需要加./。

我们也可以将自己的可执行程序的路径添加到PATH里。

在这里插入图片描述

2.HOME: 指定用户的主工作目录

查看HOME

在这里插入图片描述

刚登陆xshell时的目录所处的目录是/home/chz,为什么当一个用户登陆时会自动到它的家目录里呢?这是因为当你登陆xshell时,xshell会自动识别用户,然后填充该用户的HOME变量。

3.SHELL:当前Shell,它的值通常是/bin/bash

查看SHELL

在这里插入图片描述

通过$SHELL可以看到当前shell的可执行程序。

三.查看环境变量的方法

通过指令查看
在这里插入图片描述
在这里插入图片描述

通过系统接口查看

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

四.命令行参数

一个小知识:main函数可以带参

在这里插入图片描述

第一个参数是整形,第二个参数是指针数组。argc代表argv里的元素个数。接下来打印出来看看。

在这里插入图片描述

在这里插入图片描述

main函数在用户层面上看是入口函数,但实际上main函数并不是第一个被调用的函数,它会先被其他函数调用,而argc,argv就是传的参。在我们看来我们输入的是./mycmd-a但bash实际上是以空格为分隔符直接解释成了"./mycmd" "-a"两个字符串。再把字串的个数存入argc,每个子串的首地址保存在argv里。将字符串打散这一过程就是命令行解析。

为什么要这么做,看一段代码

在这里插入图片描述

在这里插入图片描述

所以命令行参数有一个重要功能就是为指令提供多个选项。

main函数只有这两个参数吗

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

我们直接遍历env[]也可以获得全部的环境变量。并且我们可以发现这里的环境变量与env指令里的环境变量一模一样,所以其实我们写的程序的环境变量是继承于父进程的。这也是为什么环境变量具有全局性。

结论:我们所运行的进程,都是子进程,bash本身在启动的时候,会从操作系统的配置文件中读取环境变量信息,子进程会继承父进程交给我的环境变量!

五.环境变量增加和删除

增加

在这里插入图片描述

在这里插入图片描述

同时在这里也可以通过执行自己写的子程序发现子程序里的环境变量也有了MY_VALUE,进而进一步验证了环境变量是由父进程里继承而来的。

删除

在这里插入图片描述

六.本地变量

本地变量就是我们可以直接在命令行里定义的变量

在这里插入图片描述

查看

set可以查看所有变量包括环境变量和本地变量

在这里插入图片描述

在这里插入图片描述

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

又一个问题:既然本地变量不能被子进程继承,那么我们为什么可以使用echo将它打印出来呢?这其实是因为echo不需要创建子进程。

在这里插入图片描述

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

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

相关文章

Kotlin~Bridge桥接模式

概念 抽象和现实之间搭建桥梁,分离实现和抽象。 抽象(What)实现(How)用户可见系统正常工作的底层代码产品付款方式定义数据类型的类。处理数据存储和检索的类 角色介绍 Abstraction:抽象 定义抽象接口&…

一起创建Vue脚手架吧

目录 一、安装Vue CLI1.1 配置 npm 淘宝镜像1.2 全局安装1.3 验证是否成功 二、创建vue_test项目2.1 cmd进入桌面2.2 创建项目2.3 运行项目2.4 查看效果 三、脚手架结构分析3.1 文件目录结构分析3.2 vscode终端打开项目 一、安装Vue CLI CLI:command-line interface…

日常BUG——微信小程序提交代码报错

😜作 者:是江迪呀✒️本文关键词:日常BUG、BUG、问题分析☀️每日 一言 :存在错误说明你在进步! 一、问题描述 在使用微信小程序开发工具进行提交代码时,报出如下错误: Invalid a…

5、flink任务中可以使用哪些转换算子(Transformation)

1、什么是Flink中的转换算子 在使用 Flink DataStream API 开发流式计算任务时,可以将一个或多个 DataStream 转换成新的 DataStream,在应用程序中可以将多个数据转换算子合并成一个复杂的数据流拓扑图。 2、常用的转换算子 Flink提供了功能各异的转换算…

msvcp140.dll丢失的解决方法,如何预防msvcp140.dll丢失

在电脑操作系统中经常会弹出类似msvcp140.dll丢失的错误提示窗口,导致软件无法正常运行。为什么会出现msvcp140.dll丢失的情况呢?出现这种情况应该如何解决呢?小编有三种解决方法分享给大家。 一.msvcp140.dll丢失的原因 1.安装过程中受损:在…

Elasticsearch 查询之Function Score Query

前言 ES 的主查询评分模式分为两种,是信息检索领域的重要算法: TF-IDF 算法 和 BM25 算法。 Elasticsearch 从版本 5.0 开始引入了 BM25 算法作为默认的文档评分(relevance scoring)算法。在此之前,Elasticsearch 使…

sip网络号角喇叭 sip音柱 POE供电广播音箱 ip网络防水对讲终端 sip网络功放

SV-7042TP网络号角喇叭 一、描述 SV-7042TP是我司的一款SIP网络号角喇叭,具有10/100M以太网接口,内置有一个高品质扬声器,将网络音源通过自带的功放和喇叭输出播放,可达到功率30W。SV-7042TP作为SIP系统的播放终端,可…

【脚踢数据结构】常见树总结(图码结和版)

(꒪ꇴ꒪ ),Hello我是祐言QAQ我的博客主页:C/C语言,Linux基础,ARM开发板,软件配置等领域博主🌍快上🚘,一起学习,让我们成为一个强大的攻城狮!送给自己和读者的…

如何构造不包含字母和数字的webshell

利用不含字母与数字进行绕过 1.异或进行绕过 2.取反进行绕过 3.利用php语法绕过 利用不含字母与数字进行绕过 基本代码运行思路理解 <?php echo "A"^""; ?> 运行结果为! 我们可以看到&#xff0c;输出的结果是字符"!"。之所以会…

对比 VPN 与远程桌面软件,为什么远程桌面更优越

数字格局不断演变&#xff0c;我们的工作和连接方式也在不断变化。企业纷纷转向远程运营&#xff0c;有关推进向远程过渡的最佳技术的争论从未停止。争论的焦点通常是虚拟专用网络&#xff08;VPN&#xff09;和远程桌面软件。 长期以来&#xff0c;VPN 一直被用作访问公司网络…

【C++】函数指针

2023年8月18日&#xff0c;周五上午 今天在B站看Qt教学视频的时候遇到了 目录 语法和typedef或using结合我的总结 语法 返回类型 (*指针变量名)(参数列表)以下是一些示例来说明如何声明不同类型的函数指针&#xff1a; 声明一个不接受任何参数且返回void的函数指针&#xf…

【Flink】Flink窗口触发器

数据进入到窗口的时候,窗口是否触发后续的计算由窗口触发器决定,每种类型的窗口都有对应的窗口触发机制。WindowAssigner 默认的 Trigger通常可解决大多数的情况。我们通常使用方式如下,调用trigger()方法把我们想执行触发器传递进去: SingleOutputStreamOperator<Produ…

kubernetes--技术文档--基本概念--《10分钟快速了解》

官网主页&#xff1a; Kubernetes 什么是k8s Kubernetes 也称为 K8s&#xff0c;是用于自动部署、扩缩和管理容器化应用程序的开源系统。 它将组成应用程序的容器组合成逻辑单元&#xff0c;以便于管理和服务发现。Kubernetes 源自Google 15 年生产环境的运维经验&#xff0c…

《一个操作系统的实现》windows用vm安装CentOS——从bochs环境搭建到第一个demo跑通

vm安装CentOS虚拟机带有桌面的版本。su输入密码123456。更新yum -y update 。一般已经安装好后面这2个工具&#xff1a;yum install -y net-tools wget。看下ip地址ifconfig&#xff0c;然后本地终端连接ssh root192.168.249.132输入密码即可&#xff0c;主要是为了复制网址方便…

Netty+springboot开发即时通讯系统笔记(四)终

实时性 1.线程池多线程&#xff0c;把消息同步给其他端和对方用户&#xff0c;其中数据持久化往往是最浪费时间的操作&#xff0c;可以使用mq异步存储&#xff0c;因为其他业务不需要拿着整条数据&#xff0c;只需要这条数据的id进行操作。 2。消息校验前置&#xff0c;放在t…

Vim的插件管理器之Vundle

1、安装Vundle插件管理器 Vim可以安装插件&#xff0c;但是需要手动安装比较麻烦&#xff0c;Vim本身没有提供插件管理器&#xff0c;所以会有很多的第三方的插件管理器&#xff0c;有一个vim的插件叫做 “vim-easymotion”&#xff0c;在它的github的安装说明里有列出对于不同…

GRPC 学习记录

GRPC 安装 安装 grpcio、grpcio-tools、protobuf、 pip install grpcio -i https://pypi.tuna.tsinghua.edu.cn/simple pip install grpcio-tools -i https://pypi.tuna.tsinghua.edu.cn/simple pip install protobuf -i https://pypi.tuna.tsinghua.edu.cn/simple常用类型 p…

Minio知识点+linux下安装+面试总结

一 Minio简介 MinIO 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口&#xff0c;非常适合于存储大容量非结构化的数据&#xff0c;例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等&#xff0c;而一个对象文件可以是任意大小&…

msvcp110.dll是什么意思,msvcp110.dll丢失的解决方法

装好软件或游戏之后&#xff0c;一打开就跳出各种报错信息的情况小伙伴一定见过&#xff0c;其中缺少各种msvcp110.dll文件最常见。小伙伴们一定奇怪&#xff0c;用得好好的电脑&#xff0c;怎么会缺文件呢&#xff1f;为啥其他游戏/应用就没事呢&#xff1f;其实这些“丢失”的…

visual studio 2022配置

前提&#xff1a;我linux c 开发 一直在使用vscode 更新了个版本突然代码中的查找所用引用和变量修改名称不能用了&#xff0c;尝试了重新配置clang vc都不行&#xff0c;估计是插件问题&#xff0c;一怒之下改用visual studio 2022 为了同步2个IDE之间的差别&#xff0c;目前…