Linux 第十七章

2024-04-30 17:04
文章标签 linux 第十七章

本文主要是介绍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可以查看环境变量和本地变量

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

这篇关于Linux 第十七章的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/949424

相关文章

Linux之systemV共享内存方式

《Linux之systemV共享内存方式》:本文主要介绍Linux之systemV共享内存方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、工作原理二、系统调用接口1、申请共享内存(一)key的获取(二)共享内存的申请2、将共享内存段连接到进程地址空间3、将

快速修复一个Panic的Linux内核的技巧

《快速修复一个Panic的Linux内核的技巧》Linux系统中运行了不当的mkinitcpio操作导致内核文件不能正常工作,重启的时候,内核启动中止于Panic状态,该怎么解决这个问题呢?下面我们就... 感谢China编程(www.chinasem.cn)网友 鸢一雨音 的投稿写这篇文章是有原因的。为了配置完

Linux命令之firewalld的用法

《Linux命令之firewalld的用法》:本文主要介绍Linux命令之firewalld的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux命令之firewalld1、程序包2、启动firewalld3、配置文件4、firewalld规则定义的九大

Linux之计划任务和调度命令at/cron详解

《Linux之计划任务和调度命令at/cron详解》:本文主要介绍Linux之计划任务和调度命令at/cron的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux计划任务和调度命令at/cron一、计划任务二、命令{at}介绍三、命令语法及功能 :at

Linux下如何使用C++获取硬件信息

《Linux下如何使用C++获取硬件信息》这篇文章主要为大家详细介绍了如何使用C++实现获取CPU,主板,磁盘,BIOS信息等硬件信息,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录方法获取CPU信息:读取"/proc/cpuinfo"文件获取磁盘信息:读取"/proc/diskstats"文

Linux内核参数配置与验证详细指南

《Linux内核参数配置与验证详细指南》在Linux系统运维和性能优化中,内核参数(sysctl)的配置至关重要,本文主要来聊聊如何配置与验证这些Linux内核参数,希望对大家有一定的帮助... 目录1. 引言2. 内核参数的作用3. 如何设置内核参数3.1 临时设置(重启失效)3.2 永久设置(重启仍生效

kali linux 无法登录root的问题及解决方法

《kalilinux无法登录root的问题及解决方法》:本文主要介绍kalilinux无法登录root的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,... 目录kali linux 无法登录root1、问题描述1.1、本地登录root1.2、ssh远程登录root2、

Linux ls命令操作详解

《Linuxls命令操作详解》通过ls命令,我们可以查看指定目录下的文件和子目录,并结合不同的选项获取详细的文件信息,如权限、大小、修改时间等,:本文主要介绍Linuxls命令详解,需要的朋友可... 目录1. 命令简介2. 命令的基本语法和用法2.1 语法格式2.2 使用示例2.2.1 列出当前目录下的文

Linux中的计划任务(crontab)使用方式

《Linux中的计划任务(crontab)使用方式》:本文主要介绍Linux中的计划任务(crontab)使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、前言1、linux的起源与发展2、什么是计划任务(crontab)二、crontab基础1、cro

Linux换行符的使用方法详解

《Linux换行符的使用方法详解》本文介绍了Linux中常用的换行符LF及其在文件中的表示,展示了如何使用sed命令替换换行符,并列举了与换行符处理相关的Linux命令,通过代码讲解的非常详细,需要的... 目录简介检测文件中的换行符使用 cat -A 查看换行符使用 od -c 检查字符换行符格式转换将