当前位置: 首页 > news >正文

阿里云 两个网站竞价推广和seo的区别

阿里云 两个网站,竞价推广和seo的区别,做U启的网站,老鸭窝网站正在建设中深入Linux系列之环境变量 那么在之前的内容中,我们已经介绍了我们Linux进程的一些关键属性,例如进程编号以及进程状态和进程优先级,那么本篇文章接介绍Linux的环境变量这一知识点,那么废话不多说,我们进入环境变量的讲…

深入Linux系列之环境变量

那么在之前的内容中,我们已经介绍了我们Linux进程的一些关键属性,例如进程编号以及进程状态和进程优先级,那么本篇文章接介绍Linux的环境变量这一知识点,那么废话不多说,我们进入环境变量的·讲解

1.引入

那么我们目前已经十分熟悉我们的Linux操作系统了,那么我们可以通过输入命令行的方式来与机器进行交互,在我之前的文章中我也介绍过,那么我们在终端输入的这一行一行的指令,那么这些指令的本质其实是在某个特定路径下的可执行文件,那么我们命令行解释器的工作则是首先获取用户键盘输入的指令,然后将其解析分为指令部分与参数部分,然后到特定的路径下去进行寻找匹配我们指令所对应的可执行文件,然后用fork系统调用函数来创建一个子进程来执行我们指令所对应的可执行文件。

想必我们刚才上文所说的我们指令的执行过程你已经很熟悉了,但是我们回看我们指令执行的过程,我们也许会有一个疑惑的点,那就是当我们用户输入一行指令的时候,那么我们命令行解释器获取完指令回到特定的路径下去搜索匹配,那么这里我们可能会产生一个疑问,那么就是我们用户自己输入的各个不同的指令,命令行解释器怎么知道该指令所对应的可执行文件具体在哪个位置,以及它究竟该在哪里去进行搜索?那么我们知道这些指令所对应的可执行文件是存放在我们的系统的特定路径下,也就是配置文件目录下,那么我们命令行解释器如果能够成功搜索匹配到对应的可执行文件,那么它一定得记住我们这些指令所在的可执行文件可能会出现在哪些位置,然后就到这些路径下依次去搜索就可以了。

那么没错,我们的思考是正确的,我们可以通过在终端输入一个指令来查看我们这些指令所在的路径,那么这个指令就是echo $PATH指令,那么它会展示出我们这些指令存放的各个路径,那么我们的命令行解释器就会依次进入各个路径进行搜索匹配直到找到对应的目标文件。
在这里插入图片描述

那么我们知道我们命令行解释器之所以能够获取到我们输入指令所在的可执行文件,会因为它本身有我们这些指令保存的各个不同的路径,从而只需要到这些路径中去依次进行搜索匹配即可,所以这就解释了,我们如果在终端自己随便输入一个不存在的指令,那么当命令行解释器搜寻完所有的配置文件之后,都查不到我们该指令的内容,那么它就会在终端打印我们的command not found,所以今天我们弄清楚命令行解释器执行我们指令的原理之后,我们知道它手上是有一个指令可能出现的所有位置的记录,那么我们如果要自己自定义一个指令,比如我们用c语言编写了一个mycommand的可执行文件,那么如果我们要想达到输入mycommand,那么我们的命令行解释器能够执行我们编译好的mycommand的可执行文件,那么我们就有两种策略:

第一种是我们将我们该可执行文件放到系统的配置文件目录中,因为我们知道我们命令行解释器会到这些路径下搜索,一旦找到,那么就会创建一个子进程来进行执行

第二种就是我们将我们该可执行文件所在的目录添加到我们的命令行解释器要进行指令的搜索路径当中,那么它也会从该目录下找到我们该文件然后执行,但是需要我们输入指令来export PATH=$PATH:/home/path添加。
在这里插入图片描述

2.环境变量

那么刚才所介绍这个指令的搜索路径我们这个信息也只是在我们环境变量中的冰山一角,那么铺垫了这么久,我们来正式介绍我们的环境变量,那么我们先回答我们环境变量是什么:

那么我们环境变量则是记录了我们当前进程的运行环境的信息。

那么这里所谓的运行环境,其中就包括我们当前在这个系统登录的是哪个用户以及包括我们上文说的指令的搜索路径PATH以及我们该进程所处的目录以及默认登录的家目录等信息,那么这都是在环境变量中的信息。

那么看到这,你可能会有一个疑问,那么就是我们记录一个进程的环境变量,那么至于记录这么多信息吗,那么我们进程运行不就操作系统对该进程创建一个task_struct结构体然后把它的内核数据加载到内存不就可以了吗,需要用到这么多信息吗?

那么对此我想说的是,环境变量之所以设计这些肯定有它的道理,比如我们环境变量会有当前登录的用户的信息,你看似这个好像跟进程的运行没有关系,但是我们知道我们在Linux操作系统有权限的问题,那么假如我们在我们该进程的代码里有向其他文件进行读取或者写入的操作,那么我们能不能进行读取或者写入,那么这就和用户所具有的权限有关,那么我们需要知道用户是谁以及对应的身份才能允许确定能不能执行该操作,所以我们要知道进程中没有用到某些环境变量里面的内容不代表它没有用。

那么我们了解到环境变量就是记录了进程运行有关的运行环境信息,那么我们可以用我们的env指令来查看我们的环境变量
在这里插入图片描述

那么知道了环境变量的概念之后,那么我们再来谈一下环境变量的特征,那么环境变量的第一个特征就是全局性,那么为什么这么说呢,那么我们知道我们没创建一个进程,那么我们该进程都会有一份对应的task_struct结构体以及对应的一份环境变量,那么我们task_struct结构体的也有一个字段envp来保存环境变量的地址。

并且这里我们也可以验证我们的进程也会有自己的一份环境变量,那么我们这里就需要引入我们的命令行参数,那么我们知道我们自己用c语言编写一个代码的时候,我们都会先写头文件然后再main函数,最后return 0,但是我们的main函数我们一般自己写代码我们几乎从来不带参数但是我们看到过main函数带参数的情况,那么我们main函数我们知道它是一个程序的入口,但是本质上它其实也就是一个函数,那么既然是函数,那么它必定有返回值以及参数,那么我们在Windows下编写c语言或者c++的代码,那么我们没有main函数带参数的场景,但是在Linux平台下,由于我们是通过输入命令行来交互的,那么我们就有通过命令行传参,也就是命令行参数。

并且我们还一定要清楚,我们的程序的main函数不是所谓的第一个函数,那么我们在启动该进程之前会有一个程序的startup函数,那么它会调用我们该程序的main函数,所以我们的main函数是可以接收参数的,那么我们在终端输入我们的命令行,而我们的命令行由两部分组成,分别是指令部分以及参数部分,我们的指令部分在前,参数部分呢在后,那么我们命令行解释器会解析我们的指令部分以及参数部分,而这些指令数据本质上就是一个字符串。

那么我们main函数的参数列表有两种,第一种就是int main(int argc,char* argv[])
在这里插入图片描述
在这里插入图片描述

那么第一个参数就是指令的个数包括指令部分以及参数部分,比如ls -l,会被解析为“ls”和“-l”两部分,那么指令个数就是2,argc就是2,然后我们这两个字符串就会被保存到我们的指针数组里,也称之为参数列表里,那么我们当用c语言编写好一个mycode的函数,那么意味着我们可以向mycode进程传参,那么我们接下来也可以编写一个c语言代码来验证一下:

那么如图可以看到结果,但是这还跟我们想要看到的环境变量还没有联系,那么刚才只是铺垫,那么我们的main函数的参数列表除了刚才的那种形式,在我们的Linux平台还有第二种形式:

int main(int argc ,char* argv[],char* env[])

也就是说还有第三个参数,那么这第三个参数也是一个指针数组,那么看这个指针数组的名字你也知道了,那么这个指针数组就是我们的环境变量,那么没错我们不仅可以向我们的main函数传递我们的命令行参数还可以传递我们的环境变量,那么我们这个env函数的最后一个元素是以NULL结尾的,那么我们可以遍历我们的env数组来查看我们该进程的环境变量了,并且我们还可以有系统调用接口,getenv函数来得到特定属性的环境变量
在这里插入图片描述

那么这个char* env的存在就证明了,我们每一个进程都有自己的环境变量,而我们进程具体是怎么得到自己的环境变量,那么我们知道我们可以通过命令行传参的方式得到。

但是我们发现我们自己在Linux平台上自己写代码,我们的main函数是不加任何参数,那么我们运行这个程序也就相当于创建了一个进程,但是我们创建了一个进程也就意味着创建了对应的一份task_struct结构体以及自己的对应的一份环境变量,那么我们这里没有定义参数,那么我们这里进程是怎么生成自己一份的环境变量呢?

那么我们子进程的环境变量是继承于我们父进程的,并且修改了其中的部分属性,就像我们用fork函数创建子进程一样,那么我们子进程的task_struct结构体也是直接拷贝一份父进程的task_struct结构体然后修改其中的部分属性包括进程编号以及状态等,所以我们不必直接传参,那么在我们操作系统内核会帮组我们再创建子进程的时候,拷贝我们父进程的环境变量并且修改部分属性,所以我们说我们的环境变量具有全局性。

3.结语

那么这就是本篇关于环境变量的全部内容了,那么本篇文章围绕着环境变量讲述了环境变量是什么,有什么用,以及一些相关的指令,那么我的下一篇文章将是讲解我们的进程地址空间,我会持续更新,希望你能多多关注,希望本篇文章能够让你有所收获。
在这里插入图片描述

http://www.dinnco.com/news/19253.html

相关文章:

  • cn域名做网站高端seo服务
  • 制作系统重庆关键词优化平台
  • 网站轮播动态图如何做上海百度seo优化
  • 网站如何设置微信支付功能哪家培训机构学校好
  • 山西网站建设开发团队茶叶网络推广方案
  • 专业积分商城网站建设搜索引擎排名优化seo课后题
  • 支付网站建设费入什么科目搜索引擎推广方案
  • 海尔网站建设内容策划郑州网站营销推广
  • 网站优化是做什么的win7优化工具
  • 网站建设与管理 教材2021年最为成功的营销案例
  • wordpress做表格免费优化
  • 佛山专业网站建设深圳网络推广营销公司
  • 韩国美食做视频网站有哪些网站引流推广软件
  • 2012r2做网站seo三人行网站
  • 手机网站建设制作公司seo排名点击软件推荐
  • 邹城网站建设zc273500小说网站排名
  • 日用品网站模板体验式营销经典案例
  • 北京营销型网站建设品牌推广活动方案
  • 淘宝客是如何做网站与淘宝对接的百度关键词优化多少钱一年
  • 百度做网站骗人到哪里去投诉最近国际新闻大事20条
  • 百度推广 做网站seo优化关键词排名优化
  • banner免费设计网站搜索量最大的关键词
  • 聊城网站建设包括哪些百度知道小程序
  • 做网站待遇深圳seo优化服务
  • 去年做那些网站能致富郑州seo优化顾问热狗
  • 娱乐网站设计多少行业网站建站推广
  • 一般网站后台都是哪里做济南seo的排名优化
  • wordpress 评论显示头像优化公司结构
  • 想做个电影网站该怎么做十大免费网站推广平台有哪些
  • 做班级网站的素材个人网站首页设计