【Linux】环境变量

目录

一、什么是环境变量:

1、系统命令搜索路径(PATH):

2、HOME:

3、SHELL:

4、添加环境变量:

二、通过代码获取环境变量:

三、主函数参数:

argc表:

envp表:

内建命令:


一、什么是环境变量:

Windows下的环境变量查看:

环境变量是指在操作系统中用来指定操作系统运行环境的一些参数,环境变量是系统提供的name=value的变量,不同环境变量有不同的用途,通常具有全局属性。在Linux中,可以使用env(实际上是environment的简写)指令来进行当前环境变量的查看:

接下来介绍几个重要的:

1、系统命令搜索路径(PATH):

我们前面说过我们执行的指令事实上也是一个个写好的程序,但是为什么执行指令的时候不需要带路径,而执行自己的程序的时候就必须要带路径呢,这是因为当执行一个程序的时候,会先在PATH里面的路径下查看该程序是否在这些路径下,每个路径之间用冒号分割开,用指令:echo $PATH可以查看该环境下的路径

如果在PATH中就不需要在执行程序前面加上路径,比如我们的指令:

我们的指令的路径/usr/bin/就在PATH后面找得到就不需要加路径

但是像我们自己写的程序就在PATH中找不到,这个时候就需要带上路径,如果不带上就会有not found ,证明bash它在PATH中找了但是找不到

那么如何增加PATH中的路径呢?

如下:PATH=$PATH:你要加的路径,(注意,这里要加$PATH:   如果不加就会全部覆盖掉,也很好理解$PATH:就是把之前的写上去用冒号分割开,再在后面加上新的路径)

然后就加好了,加好后在新的路径下的程序也就可以不用带路径了,因为这里的环境变量是内存级的,所以重新登录一下就会变成默认的PATH

如果一不小心给PATH全部覆盖了也不要紧,重新登录一下shell就会变成默认的PATH

2、HOME:

指定用户的主工作目录,即用户登录到Linux系统中的默认所处目录,也是只执行cd指令后跳转的目录

3、SHELL:

查看当前是哪种命令行解释器,我们所执行的各种命令都是由命令行解释器进行解释的,如下,我这的是bash

接下来就简单讲下剩余的环境:

如上:

HISTSIZE:这个是bash帮我们记录的前1000行指令

PWD:这个就是当前所处路径

LOGNAME:表示当前用户的登录名。用于存储用户登录系统的用户名信息。在大多数情况下,LOGNAME的值与当前登录的用户名相同

上面这个很长的是ls的配色方案

这个是表示当前SSH会话的终端设备文件路径。当用户通过SSH连接到远程服务器时,SSH客户端会为该连接创建一个虚拟终端设备,SSH_TTY环境变量就记录了这个虚拟终端设备的路径‌,

如下:在一个bash中就可以像下左的方式进行像右边的bash中输入

4、添加环境变量:

环境变量与本地变量

本地变量,在命令行中正常定义的变量就是本地变量,如下的inta,在环境变量里是看不到的

如果想变成环境变量就需要通过export导入到环境变量中:

这样,inta就能够被子进程共享,如果想在环境变量中删除就使用unset 环境变量名

环境变量具有全局属性,能够被所有子进程共享,本地变量不会被继承, 只会在bash中被使用

二、通过代码获取环境变量:

getenv()函数:

在如上函数就在stdlib.h的库函数中,在代码中的使用:

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

编译后就进行运行就可以直接打印出对应的环境变量

这个就可以自己基于环境变量PWD实现pwd这个指令:

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

这样运行程序就是直接打印当前目录,再根据之前学过的:将这个程序放到PATH环境中对应的路径下面,就可以实现pwd指令了

还有判断root账号的做任何事也是可以基于环境变量中的USER进行判断的

三、主函数参数:

在Linux中:对于main函数来说,它的括号里面是可以带参数的,其中可以带三个参数:

1、int argc:这个就是传入程序中的元素个数,一共有几个字符串就初始化argc为几

2、char* argv[]这是一个指针数组,这个指针数组的个数就是argc个

3、char* envp[]环境变量表,环境变量全局性就是指main函数可以通过此参数获取到环境变量表的信息

4、上述的两个表的最后一个都是NULL,所以在判断的时候可以直接argv[i]即可

argc表:

这个存储就是把命令行字符串以空格分开,然后依次将argv里面的指针指向对应的字符,这样就可以实现那些命令行字符后面的选项了,本质上是同一个指令,根据不同的选项进而执行不同的功能

这样在运行的时候就可以在后面带选项了

这样就可以根据选项实现不同的功能了:

这样就能够实现类似于我们之前的指令加选项例如:ls -a,ls -l等等

envp表:

envp也是类似于kv结构的,这样也可以用打印argv的方式打印这张表看看:

如下打印出来的这张表和我们env指令出来的环境变量是一模一样的

事实上:进程在运行的时候,不要认为就是将程序加载到内存,而是当程序变成进程在启动的时候,一定要有人调用main函数,给main函数把这两张表传进来,一张叫做命令行参数表(argc),一张叫做环境变量表(envp)

environ变量是一个char**类型的变量,其中存放着系统的全局变量,可以通过对environ输出来输出系统的全局变量,因为environ是一个外部的全局变量,所以在使用时需要用extern声明一下

可通过如下代码来拿到环境变量的数据,这样就不需要main函数中的参数了

内建命令:

命令有两批命令:

常规命令:通过创建子进程完成的,比如pwd,ls

内建命令:bash不创建子进程,而是由自己亲自执行,类似于bash调用自己的函数或者是系统提供的函数,如echo,cd

所以有结论:bash里面的指令并不都是bash的子进程

我们实现内建命令cd来理解内建命令:

这里需要使用unistd.h文件下的chdir函数,进行操作,chdir函数就是修改目录,int chdir(const char *path),这里的path可以是绝对目录或者相对目录,然后功能就是改变当前的工作目录,修改为path

如上所示:通过传过来的第二个参数作为新路径,然后直接用chdir(argv[1])来拿到这个新路径更改这里的sleep是为了方便观察

如上所示,这就是首先程序启动后,观察该进程的pid,然后找到该进程所在的路径,这里是/home/silence/ZT,接着改到根目录下,这样的话过30秒后进行查看,就可以看到目录被修改了

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

28.<Spring博客系统④(使用MD5摘要算法对数据库密码进行加密)>

密码算法简介 1.对称加密算法&#xff1a;加密和解密算法一样 2.非对称加密算法&#xff1a;公钥加密、私钥解密 3.摘要算法&#xff1a;不能解密&#xff0c;不可逆 简单介绍了解一下&#xff1a; 一、对称密码算法 是指加密秘钥和解密秘钥相同的密码算法. 常见的对称密码算法…

如何用GPT-4o解读视频

OpenAI在去年推出的GPT-4V已经支持了多模态识别&#xff0c;但一直仅限于图片输入&#xff0c;不支持视频。相比之下&#xff0c;Google的Gemini早已支持视频识别。最近&#xff0c;我司业务场景中出现了一个需要识别视频的需求&#xff0c;而我们只采购了GPT-4o模型。这就引发…

计算机毕业设计Python美食推荐系统 美团爬虫 美食可视化 机器学习 深度学习 混合神经网络推荐算法 Hadoop Spark 人工智能 大数据毕业设计

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

华为HCIP——MSTP/RSTP与STP的兼容性

一、MSTP/RSTP与STP的兼容性的原理&#xff1a; 1.BPDU版本号识别&#xff1a;运行MSTP/RSTP协议的交换机会根据收到的BPDU&#xff08;Bridge Protocol Data Unit&#xff0c;桥协议数据单元&#xff09;版本号信息自动判断与之相连的交换机的运行模式。如果收到的是STP BPDU…

vim配置 --> 在创建的普通用户下

在目录/etc/ 下面&#xff0c;有个名为vimrc 的文件&#xff0c;这是系统中公共的vim配置文件对所有用户都有效 我们现在创建一个普通用户 dm 创建好以后&#xff0c;我们退出重新链接 再切换到普通用户下 再输入密码&#xff08;是不显示的&#xff0c;输入完后&#xff0c;…

Vue通过file控件上传文件到Node服务器

功能&#xff1a; 多文件同步上传、拖动上传、实时上传进度条、上传前的删除文件、原生file控件的美化 搁置的功能: 取消上传(上传过程中取消,即取消网络请求abort)、上传文件夹、大文件切片、以及很多限制条件未处理(重复上传、文件格式。。。) bug: 文件总大小(。。。竟然从d…

VScode学习前端-01

小问题合集&#xff1a; vscode按&#xff01;有时候没反应&#xff0c;有时候出来&#xff0c;是因为------>必须在英文状态下输入&#xff01; 把鼠标放在函数、变量等上面&#xff0c;会自动弹出提示&#xff0c;但挡住视线&#xff0c;有点不习惯。 打开file->pre…

Qwen2.5-3B-Instruct-GGUF部署

注册账号&#xff1a; 魔搭社区 等一会&#xff1a; 部署好了&#xff1a; 立即使用&#xff1a; 您部署的服务提供OpenAI API接口&#xff0c;可通过OpenAI SDK进行调用。请确保您的服务处于正常运行状态&#xff0c;并预先安装OpenAI SDK: pip install openai 在本地新建…

数据库管理-第262期 崖山:知其不可而为之(20241116)

数据库管理262期 2024-11-16 数据库管理-第262期 崖山&#xff1a;知其不可而为之&#xff08;20241116&#xff09;1 崖山之名2 绝地反击3 不止崖山总结 数据库管理-第262期 崖山&#xff1a;知其不可而为之&#xff08;20241116&#xff09; 作者&#xff1a;胖头鱼的鱼缸&am…

C语言:指针的变量运算及数组指针

1、指针的变量运算 指针变量保存的是地址&#xff0c;二地址本质上是一个整数&#xff0c;所以指针变量可以进行部分运算&#xff0c;列如加法减法、比较等&#xff0c;请看下面的代码&#xff1a; 1. #include <stdio.h> 2. 3. int main(){ 4. int a 10, *pa &a…

【高德地图】基本使用教程(玩转地图)(vue2+vue3)

简介 带大家一步步实现地图显示特定位置&#xff0c;或定位到当前位置。并且拖拽地图界面能够查询出指定位置周边的信息。通过关键字搜索周边信息。 本教程适合初学者。 一、获取使用高德api的key 打开高德开发平台&#xff0c;登录后&#xff0c;鼠标覆盖右上角头像&#…

统信UOS开发接口DTK

DTK(Development ToolKit)是基于 Qt 开发的简单且实用的通用开发框架。提供丰富的开发接口与支持工具,能有效提升开发效率。 文章目录 一、简介DTK 常见模块介绍概述二、框架创建开发环境准备使用 cmake三、常见模块窗口和对话框一、简介 DTK 常见模块介绍 概述 DTK(Dev…

转轮数组(C语言实现)

题目介绍 方法一我们可以先把数字1 2 3 4逆转一下&#xff0c;第二步我们可以逆转一下5 6 7&#xff0c; 最后整体逆置一下就会变成上面的数字。 void reverse(int* nums, int begin, int end) {while (begin < end){int tmp nums[begin];nums[begin] nums[end];nums[en…

云端弹性计算公式有哪些内容?

云端弹性计算公式有哪些内容&#xff1f;云端弹性计算公式涵盖资源分配、性能监控、自动伸缩及积分计算等方面。资源分配依据虚拟机配置和实际需求动态调整&#xff1b;性能监控实时监控CPU、内存等关键指标&#xff1b;自动伸缩根据预设阈值自动调整虚拟机数量&#xff1b;积分…

openGauss常见问题与故障处理(四)

4.数据库故障定位手段&#xff1a; 数据库故障定位手段通常有如下三种类&#xff1a; 提到“种类”&#xff0c;这里给大家举一个模拟场景中肖荏盖反向的小故事 对于初学者入门的学习&#xff0c;一些理论不容易理解或记住&#xff0c;所以本节课程【创新】采用了【正、反对比…

《Structure-from-Motion Revisited》论文解析——COLMAP

一、论文简介 这篇论文的标题是《Structure-from-Motion Revisited》&#xff0c;作者是Johannes L. Schnberger和Jan-Michael Frahm&#xff0c;分别来自北卡罗来纳大学教堂山分校和苏黎世联邦理工学院。这篇论文主要讨论了一种新的增量式结构从运动&#xff08;Structure-fro…

渑池县中药材产业党委莅临河南广宇企业管理集团有限公司参观交流

11月14日&#xff0c;渑池县人大副主任、工商联主席杨航率县中药材产业党委代表团一行13人&#xff0c;莅临河南广宇集团参观交流。河南广宇集团总经理王峰、副总经理王培等领导热情接待并陪同参观、座谈。 代表团一行首先参观了集团旗下郑州美信中医院&#xff08;庚贤堂中医药…

Cherno OpenGL(18 ~ 24)

混合 默认情况下 OpenGL 不执行任何混合&#xff0c;它只需要你们渲染的东西&#xff0c;然后把它渲染成不透明的东西。 之前我们渲染了红色方块&#xff0c;在它上面我们以某种形式渲染了一个半透明的蓝色方块&#xff08;不透明的蓝色方块会直接覆盖红色方块&#xff09;&am…

HashMap源码分析下

HashMap 环境 JDK11 HashMap是用哈希表结构&#xff08;链表散列&#xff1a;数组链表&#xff09;实现&#xff0c;结合数组和链表的优点。扩容时当链表长度超过 6 时&#xff0c;链表转换为红黑树。 public class HashMap<K,V> extends AbstractMap<K,V>impleme…

【Golang】——Gin 框架简介与安装

文章目录 1. Gin 框架概述1.1 什么是 Gin 框架&#xff1f;1.2 为什么选择 Gin&#xff1f;1.3 使用场景 2. 安装 Go 与 Gin 框架2.1 安装 Go 语言环境2.2 初始化 Go 项目2.3 安装 Gin 框架 3. 编写第一个 Gin 应用3.1 Gin 最小化示例代码代码解读3.2 运行程序3.3 测试服务 4. …