【Linux】环境变量
1.下令行参数https://i-blog.csdnimg.cn/direct/63759e1ff96c42e3b24f1469a08c08ed.png
https://i-blog.csdnimg.cn/direct/8af9f9e51e124cc887bdd4fdceb4b547.png
https://i-blog.csdnimg.cn/direct/883701d1a5be46c0851fdfb46613ec9d.png
[*]往下令行输入的字符串,被 bash 进程以空格分割成各种下令行参数。bash 进程创建一张下令行参数表(argv),用来支持选项功能 。
[*]main 函数的参数 argv(下令行参数表),是步调实现差别子功能的方法。
[*]输入的指令同样支持选项功能(指令,大部分都是C写的)
2.环境变量:PATH
[*]环境变量一般是指在操作系统中用来指定操作系统运行环境的一些参数。
[*]我们在编写C/C++代码在链接的时候,不知道我们链接的动态静态库在哪里,但是照样可以链接成功,生成可实行步调,缘故起因就是有相关环境变量帮助编译器进行查找。
[*]环境变量通常具有某些特殊用途,另有在系统当中通常具有全局特性。
https://i-blog.csdnimg.cn/direct/d7b7c63fb84d443e9f6ed4149e8fa784.png
[*]要实行一个步调时,系统必须要先找到该步调。我们写的步调必要带上当前路径:./
[*]实行系统下令不必要带上./是因为系统中存在环境变量,帮助系统找到目标二进制文件(可实行步调)
[*]不推荐将二进制文件拷贝到 usr/bin 路径下。
题目:实行系统下令时,系统为什么会在 usr/bin 路径下查找?
答案:存在环境变量:PATH。环境变量 PATH 中的内容含有多个路径,系统会在这些路径中搜刮指令。
https://i-blog.csdnimg.cn/direct/7f93fb78e19e40f4b6dd437b8270dcf7.png
https://i-blog.csdnimg.cn/direct/a1c2ec42c9e547718026929c0f9b31c4.png
https://i-blog.csdnimg.cn/direct/b9920f424e7c4e23b2a4d7a144a82495.png
用户登入时,系统创建 bash 进程,bash 会读取系统配置文件(.bashrc 和 .bash_profile)中的关于环境变量的内容,在 bash 进程内部构成一张环境变量表(指针数组,指向字符串),同时 bash 还可以接收用户的指令,创建下令行参数表。bash 有两张表(下令行参数表,环境变量表)
https://i-blog.csdnimg.cn/direct/34b1ded26c664b14a8df35fc2d0ff4cb.png
总结:
[*]假如 Linux 系统有10个用户登入时:系统会创建10个bash进程,每一个 bash 进程,都存在下令行参数表和环境变量表。
[*]用户登入时,系统创建 bash 进程,bash 进程读取系统配置文件,在 bash 进程内部创建环境变量表。当在下令行输入下令(比方:ls -a -l),先做下令行剖析获得下令行参数表,在表中获取可实行文件的步调名,再取指定的环境变量 PATH 中查找,找到就运行,没找到就报错。
[*]指令的查找操作是由 bash 进程亲身查找的。
3.其它环境变量
查看环境变量方法:echo $环境变量名
环境变量名:
[*]HOME:用户家目录(cd ~ 能被实行的缘故起因:进程 bash 剖析下令行,创建下令行参数表,其中的 ~ 去匹配环境变量表中的 HOME)
[*]SHELL:当前Shell的版本,通常是/bin/bash。
[*]USER:当前用户。
[*]LOGNAME:登入用户。
[*]HISTSIZE:能保存历史下令的总条数。
[*]HOSTNAME:主机名。
[*]SSH_TTY:终端装备号。
[*]PWD:当前工作路径。
[*]OLDPWD:上一次的工作路径(cd - 能被实行的缘故起因:进程 bash 剖析下令行,创建下令行参数表,其中的 - 去匹配环境变量表中的 OLDPWD)
[*]环境变量被 bash 直接利用,间接被用户利用。
[*]su:提权,USER和LOGNAME没有被修改。
[*]su -:切换为 root 用户,USER和LOGNAME被修改。
4.获得环境变量的方法
1.下令操作
[*]env:查看全部的环境变量。
[*]echo $环境变量名:打印环境变量名所对应的内容。
[*]export 环境变量名=环境变量内容:导入环境变量,可以利用 env 下令查看。
[*]unset 环境变量名:删除环境变量。
[*]set 变量名:显示本地定义的 shell 变量/环境变量。
2.代码操作
[*]main 函数参数char* env[],获取环境变量。
https://i-blog.csdnimg.cn/direct/5c47a12cfffa44e4ad5214d957378bbf.png
main 函数实在不是步调的入口,main 函数被 _start 函数调用,内部记载了 main 函数参数的个数 arg_count,通过 arg_count 调用差别参数数量的 main 函数。
[*]char* getenv(const char* name):根据环境变量名,返回环境变量的内容。
https://i-blog.csdnimg.cn/direct/46e1fc198d1b401194d7c26997bdcea4.png
1. 环境变量被子进程所继承,可以通过环境变量做个性化操作。
2. 环境变量对子进程来说是共享的,但倘若子进程修改环境变量会发生写时拷贝。
比方:写一个步调,只有我能实行,即便是 root 用户都无法实行。
https://i-blog.csdnimg.cn/direct/1c8b129159844e20972ddeee4d69a94f.png
[*]全局变量:extern char** environ(二级指针,指向环境变量表)获取环境变量。
https://i-blog.csdnimg.cn/direct/402352bed6914245b6d08e874112f0a7.png
https://i-blog.csdnimg.cn/direct/52e8bfac07fc4f128418e9e0b099a549.png
environ 没有包含在任何头文件中,以是在利用时要用 extern 声明。
5.理解环境变量的特性
[*]环境变量的全局特性,可以被子孙进程继承。
https://i-blog.csdnimg.cn/direct/1bf0061df87c4ecaa3d3ab5e6763e7ac.png
6.本地变量
[*]set:查看环境变量和本地变量。
[*]unset 本地变量:删除本地变量。
https://i-blog.csdnimg.cn/direct/8c188f8ac934404b99b6a09fbd4682f6.png
bash 设置本地变量的缘故起因:
[*]Shell 是一种脚本语言,必要本地变量支持。
bash i=0; while [ $i -le 10 ]; do echo $i; let i++; done
留意:本地变量不会被子进程所继承,只能在 bash 进程内部利用。
[*]一些本地变量具有特殊用途。
PS1='[\u@\h \W]\$ ':打印下令行。
https://i-blog.csdnimg.cn/direct/03736306db4949b5b443d199d7fded5e.png PS2='> ':续行。
https://i-blog.csdnimg.cn/direct/dd2154adc81b4071b97a882ff846a6e1.png
1.内建下令
export 本地变量:将本地变量变为环境变量。
https://i-blog.csdnimg.cn/direct/edabcf8a747844259cf64dac79ed274c.png
2.Shell脚本
https://i-blog.csdnimg.cn/direct/b9377ff9a1c449ac9f2898e8faa64dbb.png
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]