【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"))			// 输入的选项是 -a
		printf("功能1\n");
	else if (0 == strcmp(argv[1], "-b"))	// 输入的选项是 -b
		printf("功能2\n");
	else if (0 == strcmp(argv[1], "-c"))	// 输入的选项是 -c
		printf("功能3\n");
	else if (0 == strcmp(argv[1], "-d"))	// 输入的选项是 -d
		printf("功能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 设置的环境变量。

示例

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode_876(链表的中间结点)

//双指针//时间复杂度O(n) 空间复杂度O(1)public ListNode middleNode(ListNode head) {ListNode slowhead,fast head;while (fast!null && fast.next!null){slow slow.next;fast fast.next.next;}return slow;} 1->2->3->4->5->null 快指针移动两个…

9款免费云服务器,最长永久免费使用

随着云计算技术的快速发展&#xff0c;越来越多的企业和个人开始选择使用云服务器。云服务器提供了灵活、可扩展且易于管理的资源&#xff0c;使得用户可以根据需求随时调整计算能力。本文将分享9款免费云服务器&#xff0c;其中最长可永久免费使用&#xff0c;为用户提供了更多…

flutter官方案例context_menus

1&#xff1a;根据项目中的案例进行部署 2&#xff1a;运行查看有什么用&#xff0c;可不可以直接复制粘贴 案例地址 https://github.com/flutter/samples/tree/main/context_menus案例展示方法 直接把这个文件夹中的文件复制到lib文件夹中 3&#xff0c;19&#xff0c;4的fl…

HTML常用的图片标签和超链接标签

目录 一.常用的图片标签和超链接标签&#xff1a; 1.超链接标签&#xff1a; 前言: 超链接的使用&#xff1a; target属性: 1)鼠标样式&#xff1a; 2)颜色及下划线: 总结: 2.图片标签&#xff1a; 前言: img的使用: 设置图片&#xff1a; 1.设置宽度和高度: 2.HTM…

内网渗透之黄金票据的制作

1、黄金票据是用来留后门的也叫做未知权限&#xff0c;前提条件是你已经拿到了域控的最高权限 一、开始之前我们先来了解一下kerberos Kerberos是一种由MIT&#xff08;麻省理工大学&#xff09;提出的一种网络身份验证协议。它旨在通过使用密钥加密技术为客户端/服务器应…

基于muduo网络库实现的集群聊天服务器

目录 项目内容开发环境安装说明技术介绍项目目录数据库设计项目介绍启动服务器启动客户端注册账号登录成功一对一聊天业务创建群聊业务加入群聊业务群聊业务添加好友业务离线消息存储业务 特殊说明 &#xff01;&#xff01;&#xff01;项目是照着腾讯课堂施磊老师的视频学习&…

【QT+QGIS跨平台编译】054:【exiv2lib_int+Qt跨平台编译】(一套代码、一套框架,跨平台编译)

点击查看专栏目录 文章目录 一、exiv2lib_int介绍二、文件下载三、文件分析四、pro文件五、编译实践一、exiv2lib_int介绍 exiv2lib_int是 exiv2 这个开源的图像元数据库中的一个组件。 Exiv2是一个开源的C++库,用于读取、编辑和写入图片和视频文件的元数据。它可以处理各种类…

01-XML-04XML处理

XML处理 DOM DOM解析要求解析器将整个XML文件全部加载到内存中&#xff0c;生成一个Document对象。 优点&#xff1a;元素和元素之间保留结构&#xff0c;关系&#xff0c;可以针对元素进行增删改查操作。 缺点&#xff1a;如果XML文件过大&#xff0c;可能会导致内存溢出。SA…

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

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

Go 源码之 gin 框架

Go 源码之 gin 框架 go源码之gin - Jxy 博客 一、总结 gin.New()初始化一个实例&#xff1a;gin.engine&#xff0c;该实例实现了http.Handler接口。实现了ServeHTTP方法 注册路由、注册中间件&#xff0c;调用addRoute将路由和中间件注册到 methodTree 前缀树&#xff08;节…

AR-Net网络(图像篡改检测)

AR-Net网络 摘要AbstractAR-Net1. 文献摘要2. 研究背景3. 创新点4. AR-Net 网络架构5. 实验6. 结论总结 摘要 AR-Net使用自适应注意力机制来融合位置和通道维度的特征&#xff0c;使网络能够充分利用不同维度的被篡改特征&#xff0c;此外&#xff0c;AR-Net 改进了预测掩模&a…

【Web and HTTP,HTTP概况,HTTP连接,持久HTTP,用户-服务器状态:cookie】

文章目录 Web and HTTPHTTP概况HTTP:超文本传输协议使用TCP&#xff1a;HTTP是无状态的 HTTP连接非持久HTTP持久HTTP响应时间模型 持久HTTP非持久HTTP的缺点&#xff1a;持久HTTP提交表单输入 用户-服务器状态&#xff1a;cookie Web and HTTP Web页&#xff1a;由一些对象组成…

智慧校园管理系统

一、项目介绍 1.1 项目简介 智慧校园管理系统&#xff1a;主要是以年级、班级为单位&#xff0c;进行老师和学生信息记录和统计功能。项目采用前后端分离架构思想&#xff0c;前端采用HTMLCSSVUE来实现页面效果展示&#xff0c;后端采用SpringBootMybatisPlus框架实现数据存储…

v3-admin-vite 改造自动路由,view页面自解释Meta

需求 v3-admin-vite是一款不错的后端管理模板&#xff0c;主要是pany一直都在维护&#xff0c;最近将后台管理也进行了升级&#xff0c;顺便完成一直没时间解决的小痛痒&#xff1a; 在不使用后端动态管理的情况下。我不希望单独维护一份路由定义&#xff0c;我希望页面是自解…

鸿蒙手机cordova-plugin-camera不能拍照和图片不显示问题

鸿蒙手机cordova-plugin-camera不能拍照和图片不显示问题 一、运行环境 1、硬件 手机型号&#xff1a;NOVA 7 系统&#xff1a;HarmonyOS版本 4.0.0 2、软件 android SDK platforms&#xff1a;14.0(API Level 34)、13.0&#xff08;API Level 33&#xff09; SDK Build-T…

【踩坑】荣耀系统Android8.0 system目录Read-only file system

本来以为直接把Charles证书改成系统证书格式&#xff0c;然后通过mt管理器root之后移动到系统证书目录就行了&#xff0c;结果访问baidu仍然显示网络错误&#xff0c;折腾一晚上。后来直接安装为用户证书&#xff0c;与系统证书冲突。 手机型号&#xff1a;荣耀v10 EMUI&…

win10 安装kubectl,配置config连接k8s集群

安装kubectl 按照官方文档安装&#xff1a;https://kubernetes.io/docs/tasks/tools/install-kubectl-windows/ curl安装 &#xff08;1&#xff09;下载curl安装压缩包: curl for Windows &#xff08;2&#xff09;配置环境变量&#xff1a; 用户变量&#xff1a; Path变…

牛客NC92 最长公共子序列(二)【中等 动态规划 Java,Go,PHP】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/6d29638c85bb4ffd80c020fe244baf11 思路 https://blog.csdn.net/qq_36544411/article/details/120021203 思路 动态规划法&#xff0c; 我们以dp[i][j]表示在s1中以第i个元素结尾&#xff0c;s2中以第j个元素结…

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…

开关恒流源简介

目录 工作原理 设计要点 应用场景 初步想法&#xff0c;为参加活动先占贴&#xff08;带家人出去玩没时间搞~~&#xff09;&#xff0c;后面优化 开关恒流源是一种基于开关电源技术的恒流输出电源设备。它采用开关管进行高速的开关动作&#xff0c;通过控制开关管的导通和截…