Linux 第十七章

🐶博主主页:@ᰔᩚ. 一怀明月ꦿ 

❤️‍🔥专栏系列:线性代数,C初学者入门训练,题解C,C的使用文章,「初学」C++,linux

🔥座右铭:“不要等到什么都没有了,才下定决心去做”

🚀🚀🚀大家觉不错的话,就恳求大家点点关注,点点小爱心,指点指点🚀🚀🚀

目录

查看环境变量的另一种方法

本地环境变量

本地环境变量

第三种方法访问环境变量

本地变量vs环境变量

linux命令的分类 

设置环境变量和取消环境变量


查看环境变量的另一种方法

系统启动我们程序的时候,可以选择我们的进程(main)

提供两张表:

1.命令行参数表 

2.环境变量表

查看当前所有的环境变量,通过环境变量表

#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<unistd.h>
int main(int argc,char* argv[],char* env[])//char* env[]也是一个指针数组,用于存储当前所有进程环境变量的字符串
{int i=0;for(;env[i];i++){printf("pid:%d,env[%d]:%s\n",getpid(),i,env[i]);}return 0;
}[BCH@hcss-ecs-6176 10_21]$ ./mytest
pid:4824,env[0]:XDG_SESSION_ID=661
pid:4824,env[1]:HOSTNAME=hcss-ecs-6176
pid:4824,env[2]:SHELL=/bin/bash
pid:4824,env[3]:TERM=xterm
pid:4824,env[4]:HISTSIZE=10000
pid:4824,env[5]:SSH_CLIENT=124.114.148.162 22478 22
pid:4824,env[6]:SSH_TTY=/dev/pts/0
pid:4824,env[7]:USER=BCH
pid:4824,env[8]:LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:
pid:4824,env[9]:PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
pid:4824,env[10]:MAIL=/var/spool/mail/root
pid:4824,env[11]:PWD=/home/BCH/10_21
pid:4824,env[12]:LANG=zh_CN.UTF-8
pid:4824,env[13]:HISTCONTROL=ignoredups
pid:4824,env[14]:HOME=/home/BCH
pid:4824,env[15]:SHLVL=2
pid:4824,env[16]:LOGNAME=BCH
pid:4824,env[17]:SSH_CONNECTION=124.114.148.162 22478 192.168.0.7 22
pid:4824,env[18]:LESSOPEN=||/usr/bin/lesspipe.sh %s
pid:4824,env[19]:XDG_RUNTIME_DIR=/run/user/0
pid:4824,env[20]:HISTTIMEFORMAT=%F %T BCH 
pid:4824,env[21]:_=./mytest
pid:4824,env[22]:OLDPWD=/home/BCH

本地环境变量

命令行启动的进程都是shell/bash的子进程,子进程的命令行参数和环境变量,是父进程bash给我们传递的!父进程的环境命令行参数和环境变量又从哪来了?

我们直接更改的是bash进程内部的环境变量信息!

每一次重新登陆,都会给我们形成新的bash解释器并且新的bash解释器自动从 读取形成自己的环境变量信息!

bash父进程的环境变量信息又从哪里来?

环境变量信息是以脚本配置文件的形式存在的!

每一次登录的时候,你的bash进程都会读取.bash_profile(在家目录下)

-rw-r--r--   1 BCH  BCH    193 11月 25 2021 .bash_profile

配置文件中的内容,为我们bash进程形成一张环境量表信息

本地环境变量

除了存在系统变量,自己也可以添加自己的环境变量(本地变量)

[BCH@hcss-ecs-6176 ~]$ MYENV_109=hellolinux
[BCH@hcss-ecs-6176 ~]$ echo $MYENV_109
hellolinux
[BCH@hcss-ecs-6176 ~]$ env | grep MYENV_109//但是通过env查询当前的环境变量并没有MYENV_109
[BCH@hcss-ecs-6176 ~]$

通过命令行export把本地变量暂时添加到系统变量里

[BCH@hcss-ecs-6176 10_21]$ export MYENY_109
[BCH@hcss-ecs-6176 10_21]$ ./mytest | grep MYENV_109//通过main传参能够查到MYENV_109
pid:6294,env[19]:MYENV_109=hellolinux
[BCH@hcss-ecs-6176 10_21]$ env | grep MYENV_109//通过env能够查到MYENV_109
MYENV_109=hellolinux

在命令行export的时候也可以创建本地变量暂时添加到系统变量里,因为是暂时写到系统变量,shell一旦退出,下次再在登录时,自己添加的环境变量就不存在了(根本原因是我们自己添加的环境变量在内存中)

如果想要将自己添加的环境变量保存在.bash_profile配置文件中

[BCH@hcss-ecs-6176 10_21]$ env | grep MYENV_10_21
MYENV_10_21=the_day_is_very_conflused,in10_21

第三种方法访问环境变量

extern char **environ;//全局二级指针变量

[BCH@hcss-ecs-6176 10_21]$ cat test.c
#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<unistd.h>
//int main(int argc,char* argv[],char* env[])
int main()
{//int i=0;//for(;env[i];i++)//{//printf("pid:%d,env[%d]:%s\n",getpid(),i,env[i]);//}//return 0;//extern char** environ;int i=0;for(;environ[i];i++){printf("%d: %s\n",i,environ[i]);}
}

现在访问环境变量的方法有

getenv("环境变量”)/main传参/extern char** environ

本地变量vs环境变量

1)本地变量只在bash进程内部有效,不会被子进程继承

2)环境变量通过让所有的子进程继承的方式,实现自身的全局性

或则bash_profile配置文件自定义添加的环境变量

linux命令的分类 

1.常规命令,shell(bash) fork让子进程执行的
2.内建命令,shell(bash)命令行的一个函数,当然可以直接读取shell内部定义的本地变量

我们把PATH=“”,常规命令不能运行,而echo还能够运行
本地变量不能被子进程继承,但是可以被内建命令echo读取

export内建命令

设置环境变量和取消环境变量

[BCH@hcss-ecs-6176 10_21]$ HELLO=123456//设置本地
[BCH@hcss-ecs-6176 10_21]$ export HELLO=123456设置系统
[BCH@hcss-ecs-6176 10_21]$ env | grep HELLO
HELLO=123456
[BCH@hcss-ecs-6176 10_21]$ unset HELLO//取消
[BCH@hcss-ecs-6176 10_21]$ env | grep HELLO
[BCH@hcss-ecs-6176 10_21]$

注意:

env查看不到本地变量

echo可以查看本地变量

set可以查看环境变量和本地变量

 🌸🌸🌸如果大家还有不懂或者建议都可以发在评论区,我们共同探讨,共同学习,共同进步。谢谢大家! 🌸🌸🌸 

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

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

相关文章

刷机维修进阶教程-----VIVO机型 修复基带 更改参数 实例步骤操作解析

写到前面: 任何参数修改和刷写分区都有风险。严重会导致无基带 无信号等故障。操作前都需要谨慎,养成备份关键数据分区的习惯。以便出现问题可以恢复。不管是修复基带分区还是更改相关参数,在操作前都有可以恢复原分区数据与刷机救砖的能力在操作。今天以vivo机型来做演示。…

bun 换源 国内阿里源 npmmirror 加速下载

Github https://github.com/oven-sh/bun 版本号 bun 1.1.5 windows 安装 bun 如果本机有 nodejs 环境, 可以 npm install -g bun 安装 ( 官方把 exe 已经传到了 npm 仓库, 走的国内 npm 镜像, 下载速度会很快) 没有 nodejs, 可以用 powershell 脚本安装 具体操作 全局 …

力扣刷题 63.不同路径 II

题干 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish”&#xff09;。 现在考虑网格中有障碍物。那么从左上角到…

Pytorch GPU版本安装

一、背景 记录一下安装Pytorch GPU版本过程。 由于手残&#xff0c;卸载了电脑上的显卡驱动&#xff0c;现在我连显卡类型是啥都不知道了。 总体思路&#xff1a;安装显卡驱动->安装cuda->安装pytorch库 二、安装显卡驱动 2.1 查看本地显卡型号 通过「DirectX 诊断工具…

Leetcode 145:二叉树的后序遍历(迭代法)

给你一棵二叉树的根节点 root &#xff0c;返回其节点值的 后序遍历 。 思路&#xff1a; 迭代法的思路是&#xff0c;使用栈&#xff0c;一层一层的将树节点遍历入栈。 比如下面这个树&#xff0c;使用迭代法&#xff0c;1&#xff09;第一层&#xff0c;让根节点入栈。2&a…

顺序表??

1.引入&#xff1a;首先需要了解数据结构的作用&#xff1a;是计算机存储、组织数据的方式。就比如之前学的数组&#xff0c;就是一种基础的数据结构。通过数组&#xff0c;就可以去维护很多个同类型的数据&#xff0c;实现增加删除等的功能&#xff0c;这样就可以有效管理这些…

嵌入式学习63-C++

知识零碎&#xff1a; newmalloc friend 友元函数 …

微搭低代码入门01微搭底层能力介绍

目录 1 什么是应用2 有服务器和无服务器3 关系型数据库和文档型数据库4 云存储5 云函数6 静态网站托管总结 日常经常解答初学者的问题&#xff0c;问的最多的就是学习微搭&#xff0c;需要多久&#xff0c;要不要学习代码。有的初学者心比较急躁&#xff0c;总是希望一蹴而就&a…

边循环边删除List中的数据

List边循环&#xff0c;边删除&#xff1b;这种一听感觉就像是会出问题一样&#xff0c;其实只要是删除特定数据&#xff0c;就不会出问题&#xff0c;你如果直接循环删除所有数据&#xff0c;那可能就会出问题了&#xff0c;比如&#xff1a; public static void main(String[…

一些优雅的监控运维技巧

准备工作 安装 sysstat sudo apt install sysstat查看某个进程的cpu情况 pidstst -u -p 256432查看某个进程的RAM情况 pidstst -r -p 256432查看某个进程的IO情况 pidstst -d -p 256432查看某个进程下的线程执行情况 pidstst -t -p 256432查看指定PID的进程对应的可执行文件…

C++协程库封装

操作系统&#xff1a;ubuntu20.04LTS 头文件&#xff1a;<ucontext.h> 什么是协程 协程可以看作轻量级线程&#xff0c;相比于线程&#xff0c;协程的调度完全由用户控制。可以理解为程序员可以暂停执行或恢复执行的函数。将每个线程看作是一个子程序&#xff0c;或者…

OpenCV如何实现背投(58)

返回:OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇&#xff1a;OpenCV直方图比较(57) 下一篇&#xff1a;OpenCV如何模板匹配(59) 目标 在本教程中&#xff0c;您将学习&#xff1a; 什么是背投以及它为什么有用如何使用 OpenCV 函数 cv::calcBackP…

蓝桥杯国赛填空题(弹珠堆放)

小蓝有 20230610 颗磁力弹珠&#xff0c;他对金字塔形状尤其感兴趣&#xff0c;如下图所示&#xff1a; 高度为 1 的金字塔需要 1 颗弹珠&#xff1b; 高度为 2 的金字塔需要 4 颗弹珠&#xff1b; 高度为 3 的金字塔需要 10 颗弹珠&#xff1b; 高度为 4 的金字塔需…

Python 语音识别系列-实战学习-语音识别特征提取

Python 语音识别系列-实战学习-语音识别特征提取 前言1.预加重、分帧和加窗2.提取特征3.可视化特征4.总结 前言 语音识别特征提取是语音处理中的一个重要环节&#xff0c;其主要任务是将连续的时域语音信号转换为连续的特征向量&#xff0c;以便于后续的语音识别和语音处理任务…

qt嵌入并控制外部程序

一、流程 1、调用Window接口模拟鼠标&#xff0c;键盘事件 POINT point; LPPOINT lpppoint &point; GetCursorPos(lpppoint);//获取鼠标位置 SetCursorPos(point.x, point.y);//设置鼠标位置//鼠标左键按下 mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, poi…

逻辑漏洞:初识水平越权与垂直越权

目录 1、什么是越权漏洞呢&#xff1f; 2、水平越权 3、垂直越权 4、burpsuite autorize插件 最近在学习逻辑漏洞的相关知识和技能&#xff0c;这里pikachu靶场作为演示进行学习一下&#xff1a; pikachu靶场&#xff1a;GitHub - zhuifengshaonianhanlu/pikachu: 一个好玩…

计算机服务器中了devicdata勒索病毒怎么办?Devicdata勒索病毒解密工具步骤

在这个网络飞速发展的时代&#xff0c;网络为企业的生产运营起到了关键性作用&#xff0c;利用网络可以开展各项工作业务&#xff0c;大大提高了企业生产效率与业务水平&#xff0c;在大家都为网络的便利感到欣慰时&#xff0c;网络数据安全问题&#xff0c;成为众多企业关心的…

模型智能体开发之metagpt-多智能体实践

参考&#xff1a; metagpt环境配置参考模型智能体开发之metagpt-单智能体实践 需求分析 之前有过单智能体的测试case&#xff0c;但是现实生活场景是很复杂的&#xff0c;所以单智能体远远不能满足我们的诉求&#xff0c;所以仍然还需要了解多智能体的实现。通过多个role对动…

02 spring-boot+mybatis+elementui 的登录,文件上传,增删改查的入门级项目

前言 主要是来自于 朋友的需求 项目概况 就是一个 学生信息的增删改查 然后 具体到业务这边 使用 mybatis xml 来配置的增删改查 后端这边 springboot mybatis mysql fastjson hutool 的一个基础的增删改查的学习项目, 简单容易上手 前端这边 node14 vue element…

贪吃蛇小游戏(c语言)

1.效果展示 屏幕录制 2024-04-28 205129 2.基本功能 • 贪吃蛇地图绘制 • 蛇吃食物的功能 &#xff08;上、下、左、右方键控制蛇的动作&#xff09; • 蛇撞墙死亡 • 蛇撞自身死亡 • 计算得分 • 蛇身加速、减速 • 暂停游戏 3.技术要点 C语言函数、枚举、结构…