举报网站平台怎么举报,网站打开404错误怎么解决,忘记网站后台登陆地址,池州网站建设怎么样目录
常见的环境变量
HOME
PWD
SHELL
HISTSIZE
环境变量相关的指令
echoenv
export
unset
本地变量
环境变量整体理解
程序现象_代码查看环境变量
整体理解
环境变量表
环境变量表的传递
环境变量表的查看
测试验证 少说废话#x1f197; 每个用户…目录
常见的环境变量
HOME
PWD
SHELL
HISTSIZE
环境变量相关的指令
echoenv
export
unset
本地变量
环境变量整体理解
程序现象_代码查看环境变量
整体理解
环境变量表
环境变量表的传递
环境变量表的查看
测试验证 少说废话 每个用户启动都会有一个单独的bash进程bash单独给这个用户形成命令行参数表和环境变量表。以及配置文件都是每个用户都有一份。互相独立不影响。每开启一个终端就会有1个bash进程。一个用户也可以有多个bash进程。 常见的环境变量 PATH : 指定命令的搜索路径。HOME : 指定用户的主工作目录(即用户登陆到Linux系统中时,默认的目录)。SHELL : 当前Shell,它的值通常是/bin/bash。环境变量都是大写❗查看环境变量echo $PATH❗ ☞我们再用echo看几个常见的环境变量吧当然除了以下环境变量还有很多环境变量。 HOME $HOME这个代码是一个环境变量它代表的是当前登录的用户的主文件夹的意思。HOME家目录所在的环境变量。为什么初次登录的路径不一样❓因为账户不同所以路径不一样。在登录时系统配置给不同的用户设置在家目录下的不同账户下路径就不一样。HOME就是用来维护每个用户的家目录路径的。 PWD OS怎么知道此刻当前用户所处的路径。OS中有一个会变化的环境变量会随着用户操作路径的变量动态的把当前路径记录在PWD的环境变量中。pwd 是“打印工作目录”的缩写。 pwd 命令是 Linux 系统管理员最常用的命令之一。 它适用于 Linux 和其他类似 UNIX 的操作系统是一个内置 shell 命令可在 Bash shell、korn、ksh 等上使用。 pwd 命令打印当前工作目录名称以及从根 (/) 开始的完整路径。 它也是一个环境变量。 SHELL Linux启动的时候OS会为用户创建一个命令行shell媒婆bash/sh、bash、csh、tcsh、ash实习生王婆/李婆....为用户提供命令行参数解释的服务。用户怎么知道当前使用的是哪种shell呢所以系统启动的时候从SHELL的环境变量中把该程序运行起来sh、bash、csh、tcsh、ash中的一个产生了一个命令行解释器。 HISTSIZE HISTSIZE historysize历史个数我们在命令行解释器输入参数时可以上下翻动查找我们的历史命令搜索证明我们曾经在命令行解释器输入的参数被LinuxOS记录下来了但是我们输入的历史指令很多不可能全部记录下来。HISTSIZE默认记录用户输入最新的历史命令的大小HISTSIZE值用于控制history命令输出历史记录数量HISTFILESIZE值控制.bash_history文件中存储历史记录数量。注意❗HISTSIZE不一定是从1开始记录的。 history指令查看历史记录的所有指令history | headhistory | wc -l 环境变量相关的指令 查看特点的环境变量 echo $环境变量❗查看全部的环境变量 envecho: 显示某个环境变量值export: 设置一个新的环境变量env: 显示所有环境变量unset: 清除环境变量取消内存级自定义环境变量set: 显示本地定义的shell变量和环境变量 系统当中用户所登录时的一些与登录相关/用户/路径程序相关的周边放在OS配置文件中的变量中设置的全局变量称为环境变量 echoenv
echo $NAME
env export
export THIS_IS_MY_ENVhellotsq
//注意两边没有空格
//自己定义的一个输入自己的环境变量
//同理这个只是在当前用户的环境变量中修改内存级
env | grep hellotsq
//查看 unset
[tangsiqilocalhost 7]$ unset THIS_IS_MY_ENV
[tangsiqilocalhost 7]$ env | grep hellotsq本地变量 直接在命令行中定义的不是环境变量但还是在当前用户的bash内部。每个用户都有一个bash进程bash里面就有配置文件中有环境变量。不是环境变量env看不到但是echo可以查看。 环境变量整体理解
程序现象_代码查看环境变量 在上面我们学习了用指令的方式 获取环境变量。当然我们也可以用代码程序的方式获取环境变量。 前提知识 环境变量默认在bash内部。环境变量也是默认可以被子进程拿到的拷贝父进程的。父进程的数据默认能被子进程看到并访问不能修改在C语言标准库中C语言会默认维护一个全局变量errno用来统计最近一次调C语言函数的一个错误信息❌系统OS也会存在一个全局变量叫environ类型是 char **二级指针。通过environ二级指针可以获取环境变量。man errno man environ 程序代码解释 environ[ i ]*(environi)因为environ是一个全局的外部变量所以切记使用前要用extern关键字进行声明然后在使用。unistd.h头文件中声明了这个变量所以也可以将unist.h进行include还是要声明。*environ是指向环境变量字符串的首元素地址。 #includestdio.h
#includestring.h
#includeunistd.h
int main()
{extern char** environ;for(int i0;environ[i];i){printf(env[%d]-%s\n,i,environ[i]);}return 0;
}整体理解
环境变量表 环境变量默认在bash内部。环境变量也是默认可以被子进程拿到的拷贝父进程的。父进程的数据默认能被子进程看到并访问不能修改。 ❓环境变量是怎么组织的 每个用户的bash在被OS启动的时候bash都会为当前用户维护一张表是指针数组char *env[ ] 指针数组里面的每个元素都是char *类型指向一个环境变量字符串的起始地址。环境变量字符串把字符串的首地址放到指针数组中形成了一张表环境变量表。注意❗最后还是要以NULL结尾。所以组织环境变量是用环境变量表组织的。所以exprot的本质就是把自定义的环境变量导入环境变量表中。 ❓bash运作的整个流程 LinuxOS启动bash启动当前用户下bash进程拿到命令行的参数形成命令行参数表。拿到可执行程序的名字到环境变量中去找路径和程序位置。字符串匹配根据程序所在路径创建子进程。 综上所述每个用户的bash启动的时候都会默认给当前用户的子进程形成两张表。 用户输入命令行argv[ ]命令行参数表。LinuxOS的配置文件中env[ ]环境变量表。bash通过各种方式把这两张表交给子进程。 【环境变量表】 【命令行参数表】
环境变量表的传递 命令行参数表和环境变量表交给子进程有两种方式 传参数子进程可以拷贝父进程的数据 上面验证过了拷贝这里验证下【传参】
#includestdio.h
#includestring.h
#includeunistd.h
int main(int argc,char* argv[],char* env[])
{for(int i0;env[i];i){printf(env[%d]-%s\n,i,env[i]);}return 0;
}环境变量表的查看 环境变量具有系统级的全局属性因为环境变量本身会被子进程继承下去。上面学习了部分查看变量变量内容的方法。 通过访问指针数组env指令echo指令getenv函数接口 getenv man getenv直接更具环境变量名拿到环境变量的内容、getenv仅仅只是获取一个环境变量的内容还有putenv后面自己实现bash会讲 #includestdio.h
#includestring.h
#includeunistd.h
#includestdlib.h
int main(int argc,char *argv[],char *env[])
{char *path getenv(PATH);if(path NULL)return 1;printf(path:%s\n,path);return 0;
}测试验证
感谢大家的阅读若有错误和不足欢迎指正。