【Linux 10】环境变量

文章目录

  • 🌈 Ⅰ 命令行参数
    • ⭐ 1. main 函数的参数
    • ⭐ 2. main 函数参数的意义
    • ⭐ 3. 查看 argv 数组的内容
    • ⭐ 4. 命令行参数结论
    • ⭐ 5. 为什么要有命令行参数
    • ⭐ 6. 命令行参数传递由谁执行
  • 🌈 Ⅱ 环境变量基本概念
    • ⭐ 1. 常见环境变量
  • 🌈 Ⅲ 查看环境变量
  • 🌈 Ⅳ 配置环境变量
    • ⭐ 1. 将程序放入系统路径 (临时)
    • ⭐ 2. 往系统路径列表中添加新路径 (临时)
    • ⭐ 3. 往系统路径列表中添加新路径 (永久)
  • 🌈 Ⅴ 环境变量相关命令
    • ⭐ 1. echo 显示某个环境变量的值
    • ⭐ 2. export 设置一个新的环境变量
    • ⭐ 3. env 显示所有的环境变量
    • ⭐ 4. unset 清除环境变量

🌈 Ⅰ 命令行参数

⭐ 1. main 函数的参数

  • 在有些地方可能看到 main 函数会像下面这样带着形参,这些参数可带可不带。
int main(int argc, char* argv[])

⭐ 2. main 函数参数的意义

  1. char* argv[]:指针数组,数组中的每个元素都指向一个字符串。
  2. int argc:argv 数组中的元素个数。

⭐ 3. 查看 argv 数组的内容

  • 使用如下代码查看 argv 数组中的内容。
#include <stdio.h>
#include <unistd.h>int main(int argc, char* argv[])
{for (int i = 0; i < argc; i++)printf("argv[%d]: %s\n",i, argv[i]);                                                         return 0;
}

在这里插入图片描述

⭐ 4. 命令行参数结论

  • 在命令行输入的叫做命令行字符串
  • argc 用来记录在命令行中输入的参数个数。
  • argv 用来记录在命令行中输入的每个参数,会将命令行字符串中的空格替换成 \0,然后以参数的形式传递给 main 函数,argv 数组以 NULL 结尾
  • 一般情况下,0 号位置存的都是程序的路径 + 名称,后面的 -a -b 这些选项就是和该进程匹配的选项

在这里插入图片描述

⭐ 5. 为什么要有命令行参数

  • 命令行参数本质是交给程序不同的选项,用来定制不同的程序功能
  • 通过如下代码查看如何通过使用不同选项实现不同功能,此处只演示一个选项的情况。
#include <stdio.h>
#include <unistd.h>
#include <string.h>int main(int argc, char* argv[])
{if (argc != 2){printf("%s 的可用选项 -[a,b,c,d]\n", argv[0]);return 1;}                                                        if (0 == strcmp(argv[1], "-a"))			// 输入的选项是 -aprintf("功能1\n");else if (0 == strcmp(argv[1], "-b"))	// 输入的选项是 -bprintf("功能2\n");else if (0 == strcmp(argv[1], "-c"))	// 输入的选项是 -cprintf("功能3\n");else if (0 == strcmp(argv[1], "-d"))	// 输入的选项是 -dprintf("功能4\n");	return 0;
}

在这里插入图片描述

  • 通过上述示例,能够理解清楚 Linux 中的其他指令 (如: ls -l) 大致是如何实现子功能的。

⭐ 6. 命令行参数传递由谁执行

  • 父进程 bash,在命令行中启动的程序,都会变成进程,这些进程都是 bash 的子进程。

🌈 Ⅱ 环境变量基本概念

  • 环境变量一般是指在操作系统中用来指定操作系统运行环境的一些参数
  • Linux 中的很多指令在命令行中不需要输入路径就可以执行,而我们自己编写的可执行程序不带 ./ 就无法执行,原因就在于没有给自己的可执行程序配置环境变量。
  • 在 Linux 中,存在一些全局的设置,告诉命令行解释器,应该去哪些路径下寻找可执行程序,这就是环境变量的作用。

在这里插入图片描述

⭐ 1. 常见环境变量

  1. PATH:指定命令的搜索路径。
  2. HOME:指定用户的主工作目录 (即用户登录到 Linux 系统中时的默认目录)。
  3. SHELL:当前的 shell,它的值通常位 /bin/bash

🌈 Ⅲ 查看环境变量

指令

echo $环境变量名 

示例

  • 系统中的很多配置,在登录 Linux 系统的时候,已经被加载到了 bash 进程 (内存) 中。
  • bash 在执行命令的时候,需要先找到命令,下图的所有路径就是 bash 在执行命令时默认的搜索路径。
  • 如果在下面的所有路径中没有找到你想要的指令,就会报 command not found,如果找到了就会加载并运行该指令。

在这里插入图片描述

🌈 Ⅳ 配置环境变量

  • 让我自己写的可执行程序变得和系统指令一样有尊严,不需要带 ./ 一样能直接执行。

⭐ 1. 将程序放入系统路径 (临时)

  • 将自己写的程序随便拷贝到某个系统自带的环境变量目录中,相当于将自己写的程序安装到了 Linux 系统里。但是,不推荐将自己的可执行程序放到系统的可执行程序路径中
  • 该方法为内存级,不会永久保留配置,下次登录 Linux 系统时就会恢复原样。

在这里插入图片描述

⭐ 2. 往系统路径列表中添加新路径 (临时)

PATH=$PATH:自己写的程序路径
  • 将自己写的程序的路径添加到系统路径列表中,在任意目录执行自己的可执行程序时,就会自动在系统路径中寻找对应路径下的程序。
  • 该方法为内存级,不会永久保留配置,下次登录 Linux 系统时就会恢复原样。

在这里插入图片描述

⭐ 3. 往系统路径列表中添加新路径 (永久)

  • 上述两种配置环境变量的方法都属于内存级的,在下次登录 Linux 中就会恢复原样。

1. 解释系统环境变量为何能永久存在

  • 最开始的环境变量不在内存中,而是在系统的对应配置文件中。
  • 系统在登录 Linux 时,会先创建 bash 进程,bash 进程间就会读取这些配置文件,然后将配置文件中的环境变量在 bash 进程中拷贝一份。
  • 也就是说,将系统的配置文件改了,才能让自己的程序路径永久存在于环境变量的路径列表中。

2. 将程序路径写入配置文件

  • 在用户根目录中,有一个隐藏的 .bash_profile 文件,只需要将自己程序的所在路径添加到该文件中然后再重新登录 Linux 系统即可。

在这里插入图片描述

在这里插入图片描述

🌈 Ⅴ 环境变量相关命令

⭐ 1. echo 显示某个环境变量的值

指令echo $环境变量名

示例

在这里插入图片描述

⭐ 2. export 设置一个新的环境变量

指令export THIS_IS_MY_ENV=你的环境变量名

功能:自定义一个内存级的环境变量。

示例:创建一个名为 helloworld 的环境变量。

在这里插入图片描述

⭐ 3. env 显示所有的环境变量

功能:显示所有的环境变量,以及每个环境变量所对应的路径列表。

示例

在这里插入图片描述

⭐ 4. unset 清除环境变量

指令unset THIS_IS_MY_ENV

功能:清除所有通过 export 设置的环境变量。

示例

在这里插入图片描述

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

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

相关文章

macOS Catalina for mac (macos 10.15系统)v10.15.7正式版

macOS Catalina是苹果公司专为麦金塔电脑推出的桌面操作系统&#xff0c;是macOS的第16个主要版本。它继承了苹果一贯的优雅与高效&#xff0c;不仅引入了分割视图和侧边栏&#xff0c;还带来了全新的音乐和播客应用&#xff0c;极大地提升了用户体验。在隐私保护和安全性方面&…

【Laravel】07 快速套用一个网站模板

【Laravel】07 快速套用一个网站模板 1. 新增post表2.补充 &#xff1a;生成Model、Controller、迁移文件3. 使用php artisan tinker4. 网站模板下载 课程地址 1. 新增post表 在Model中创建Post (base) ➜ example-app php artisan make:model Post Model created successfu…

练习3-2 计算符号函数的值

对于任一整数n&#xff0c;符号函数sign(n)的定义如下&#xff1a; 请编写程序计算该函数对任一输入整数的值。 输入格式: 输入在一行中给出整数n。 输出格式: 在一行中按照格式“sign(n) 函数值”输出该整数n对应的函数值。 输入样例1: 10 输出样例1: sign(10) 1 输入样例…

pytest--python的一种测试框架--pytest常用断言类型

一、pytest常用断言类型 等于: 不等于&#xff1a;&#xff01; 大于&#xff1a;> 小于&#xff1a;< 属于&#xff1a;in 不属于&#xff1a;not in 大于等于&#xff1a;> 小于等于&#xff1a;< 是&#xff1a;is 不是&#xff1a;is not def test_two():ass…

Java_21 完成一半题目

完成一半题目 有 N 位扣友参加了微软与力扣举办了「以扣会友」线下活动。主办方提供了 2*N 道题目&#xff0c;整型数组 questions 中每个数字对应了每道题目所涉及的知识点类型。 若每位扣友选择不同的一题&#xff0c;请返回被选的 N 道题目至少包含多少种知识点类型。 示例…

【Spring Boot 源码学习】ConditionEvaluationReport 日志记录上下文初始化器

《Spring Boot 源码学习系列》 ConditionEvaluationReport 日志记录上下文初始化器 一、引言二、往期内容三、主要内容3.1 源码初识3.2 ConditionEvaluationReport 监听器3.3 onApplicationEvent 方法3.4 条件评估报告的打印展示 四、总结 一、引言 上篇博文《共享 MetadataRe…

cuda cudnn pytorch 的下载方法(anaconda)

文章目录 前言cuda查看当前可支持的最高cuda版本显卡驱动更新下载cuda cudnnpytorch配置虚拟环境创建虚拟环境激活虚拟环境 1.直接下载2.conda 下载(清华源&#xff0c;下载速度慢的看过来)添加清华镜像channel下载下载失败 下载失败解决办法1.浑水摸鱼&#xff0c;风浪越大鱼越…

五、Yocto集成QT5(基于Raspberrypi 4B)

Yocto集成QT5 本篇文章为基于raspberrypi 4B单板的yocto实战系列的第五篇文章&#xff1a; 一、yocto 编译raspberrypi 4B并启动 二、yocto 集成ros2(基于raspberrypi 4B) 三、Yocto创建自定义的layer和image 四、Yocto创建静态IP和VLAN 本章节实操代码请查看github仓库&…

数据可视化-Python

师从黑马程序员 Json的应用 Json的概念 Json的作用 Json格式数据转化 Python数据和Json数据的相互转化 注&#xff1a;把字典列表变为字符串用dumps,把字符串还原回字典或列表用loads import json#准备列表&#xff0c;列表内每一个元素都是字典&#xff0c;将其转化为Json …

python实战之常用内置模块

一. 数学计算模块(math) 二. 日期时间模块(datetime) 1. datetime类 datetime类的常用方法 2. date类 1. date类的常用方法 3. time类 4. 计算时间跨度类(timedelta) 5. 日期时间与字符串相互转换 1. 日期和时间格式控制符 三. 正则表达式模块(re) 正则表达式指预先定义好一个’…

CCF-CSP26<2022-06>-第1/2/3题

202206-1 归一化处理 题目&#xff1a;202206-1 题目分析&#xff1a; 给出了数学上归一化的数学公式&#xff0c;直接按照要求完成即可。 AC代码&#xff1a; #include <bits/stdc.h> using namespace std; int main() {int n;cin >> n;double a[n];double s…

吴恩达:现在做GPT-4智能体,或将提前达到GPT-5效果|钛媒体AGI

斯坦福大学客座教授吴恩达&#xff08;Andrew Ng&#xff09;© 林志佳 美国斯坦福大学教授吴恩达&#xff08;Andrew Ng&#xff09; 人工智能智能体&#xff08;AI Agents&#xff09;似乎将引领 AI 行业新的发展趋势。 近日红杉资本&#xff08;Sequoia&#xff09;在…

全面概述Gitee和GitHub生成/添加SSH公钥

前言 现如今将代码开源已经成为软件开发行业的一种趋势&#xff0c;而现在比较有名的代码托管平台有GItHub、Gitee、Gitlab等相关平台。而我们在使用代码托管平台最为常见的就是如何将自己本地的代码推送到远程托管平台中的仓库中&#xff0c;现如今各大托管平台基本上都提供了…

Mac m1 Flink的HelloWorld

首先在官方下载Downloads | Apache Flink 下载好压缩包后解压&#xff0c;得到Flink文件夹 进入&#xff1a;cd flink-1.19.0 ls 查看里面的文件&#xff1a; 执行启动集群 ./bin/start-cluster.sh 输出显示它已经成功地启动了集群&#xff0c;并且正在启动 standalonesessio…

云计算探索-剖析虚拟化技术

引言 虚拟化技术&#xff0c;作为现代信息技术架构的核心构成元素&#xff0c;以其独特的资源抽象与模拟机制&#xff0c;成功地瓦解了物理硬件与操作系统间的刚性连接&#xff0c;开创了一个资源共享、灵活调配的崭新天地。本文将详细解析虚拟化技术的内涵、发展历程、分类及特…

Kafka 学习之:基于 flask 框架通过具体案例详解生产消费者模型,这一篇文章就够了

文章目录 案例信息介绍后端异步处理请求和后端同步处理请求同步方式异步方式 环境文件目录配置.envrequirements.txt 完整代码ext.pyapp.pykafka_create_user.py 运行方式本地安装 kafka运行 app.py使用 postman 测试建立 http 长连接&#xff0c;等待后端处理结果发送 RAW DAT…

金三银四面试题(九):JVM常见面试题(3)

今天我们继续探讨常见的JVM面试题。这些问题不比之前的问题庞大&#xff0c;多用于面试中JVM部分的热身运动&#xff0c;开胃菜&#xff0c;但是大家已经要认真准备。 你能保证GC 执行吗&#xff1f; 不能&#xff0c;虽然你可以调用System.gc() 或者Runtime.gc()&#xff0c…

【MySQL】DQL-排序查询-语法&排序方式&注意事项&可cv例题语句

前言 大家好吖&#xff0c;欢迎来到 YY 滴MySQL系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C Linux的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY的…

【Linux】寿司线程池{单例模式之懒汉模式下的线程池}

文章目录 回顾单例模式0.多线程下的单例模式的意义1.什么是单例模式1.0设计模式1.1C单例模式的介绍及原理1.2拷贝构造和赋值重载的处理1.3if (nullptr ptr)&#xff0c;nullptr放在比较运算符的前面?1.4实现单例模式的方式 2.实现懒汉方式的单例模式2.1单线程的单例模式2.2多…

微信小程序(黑马优购:登录)

1.点击结算进行条件判断 user.js //数据 state: () >({ // address: {} address: JSON.parse(uni.getStorageSync(address) || {}), token: }), my-settle.vue computed: { ...mapGetters(m_cart,[checkedCount,total,checkedGoodsAmount]), …