linux笔记7--环境变量

文章目录

  • 1. 什么是环境变量
    • 情景导入
    • 问题延申
    • 环境变量的作用
    • 总之
  • 2. 环境变量的划分
  • 3. 用户和局部变量的设定
  • 4. 定义全局变量
  • 5. 注意
  • 6. 删除自己定义的全局变量、局部变量:
    • 问题
  • 7. printenv
  • 8. 问题残留
  • 9. 默认的环境变量
  • 10. 如何添加环境变量
  • 11. Linux中如何永久配置环境变量
    • 了解
    • 永久配置
  • 12. 入门期末作业:怎么修改全局环境变量(注意:不要把原本的环境变量删了,否则可能导致很多命令运行不了)
  • 13. 推荐

1. 什么是环境变量

情景导入

首先,Windows中:
命令打开cmd的两种方式:① win + R -> cmd -> 回车
                                           ② 左键单击开始菜单 -> 直接输入cmd (不用管在哪输入) -> 回车
命令打开calc-计算器(或notepad-记事本、mspaint-画图等)的三种方式
                                           ① 在cmd里输入calc -> 回车
                                           ② 左键单击开始菜单 -> 直接输入calc (不用管在哪输入) -> 回车
                                           ③ win + R -> calc -> 回车
进一步:
calc本质上是一个程序,它的位置在:
在这里插入图片描述
因此,上述对calc的操作本质上就是在C:\Windows\System32目录下双击打开计算器程序,这也是我们可以通过上述方式快速的打开这些程序的原因。

问题延申

问:为什么计算器程序明明在C:\Windows\System32目录下,可是我在任何目录都可以使用它(例如:C : \ Users \ 无妄 、E : \ 等) ?
在这里插入图片描述
在这里插入图片描述
答:因为这个程序的路径已经被写到了环境变量Path中。
注: C:\Windows\System32整个目录都被写入了Path中,意味着C:\Windows\System32这个路径下的所有文件和程序都可以在任何位置被访问。可以理解为办会员,假如我办了某家连锁酒店的会员,那么我在全球任何具有该酒店的地方都可以享受服务。

环境变量的作用

        作用:预约。相当于去餐厅吃饭前,先在手机上预约位置和菜品,到餐厅以后直接给服务员一下手机号或者名字,服务员就会直接带我们到指定位置。
        把内存类比为餐厅,把环境变量类比为服务员手里的单据。所以,虽然E盘中没有calc程序,但是由于我每次电脑一开机就已经在内存中给它预约过位置了,在环境变量里一找就能找到,因此,在任何地方都可以打开calc程序。
        很多软件都默认配置了环境变量,因为如果它们不配置环境变量,系统就找不到它在哪(产生报错:…不是内部或外部命令,也不是可运行的程序或批处理文件)。java、python等软件使用前需要手动配置环境变量,以便在任何地方都可以使用。

总之

        在用户需要时可以提供最好的服务,这就是环境变量。
        无论在全球任何地方,都给会员用户(提前预约过了,明确过需求了)提供环境变量里的服务,这就是环境变量的作用。

2. 环境变量的划分

        ① Windows:用户变量和系统变量。一台电脑上可能有多个用户,每个用户设置的变量可能都不相同。只能在当前用户下使用的变量称为用户变量;像calc这种软件,注销当前用户,换成另一个用户后照样可以使用,它们的相关环境变量称为系统变量。
        ② linux:全局变量和局部变量。全局变量是对整个系统或者会话可见的变量,像cd、ls(ls等命令本质上说也是一个程序)这种,在哪都可以使用;局部变量是在当前进程或者shell中可见的变量(set可以查看当前shell的局部变量–了解即可)
注:
        ① linux不同发行版的全局变量可能不同。
        ② 全局变量用的多。(此处的局部变量不同于编程的局部变量,编程时局部变量用的多)

3. 用户和局部变量的设定

定义:
变量名=“替代的内容”
echo $变量名

例如:
在这里插入图片描述

缺点:只能在当前shell使用
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4. 定义全局变量

定义:
export 变量名=“替代的内容”
echo $变量名

例如:
在这里插入图片描述

缺点:并非对所有shell有效。(但是相对于刚刚的局部变量而言,此处在父shell设置的全局变量对所有子shell全部有效)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5. 注意

        自己定义局部变量、全局变量时一定要全部小写,而且单词之间必须要用下划线隔开–企业强制要求。只有系统级别的变量(当前系统自带的变量、例如,安装Java Mysql时配置的也是系统级别的变量,因为它要修改的PATH变量是系统自带的)才写成大写。

6. 删除自己定义的全局变量、局部变量:

unset + 变量名
例如:
在这里插入图片描述

问题

问:在子shell里删除父shell里的全局变量,操作完退出子shell以后,发现父shell里依然可以使用刚刚的全局变量,为什么?
在这里插入图片描述
答:因为我们是在一个子进程中删除了这个全局变量,这个操作只对子进程有效,对父进程没有影响。

7. printenv

printenv展示的内容相当于Windows里系统变量的内容。
在这里插入图片描述
printenv USER --了解环境变量USER
printenv HOME --了解环境变量HOME
注:
        用printenv查看全局变量,会发现全局变量的变量名全部是大写的,而且单词之间用下划线隔开(跟c语言定义全局变量一模一样–下划线命名法),这已经成为一个业界标准了。

echo $HOME --了解环境变量HOME $HOME可以代表/home/aria。例如,写ls /home/aria 时可以直接用 ls $HOME代替。

8. 问题残留

        用上述方法同时设置一个全局变量和局部变量,为什么printenv会显示全局变量,不显示局部变量?
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

我不确定是否是下面的原因:
        printenv作为一个外部命令,外部命令执行时会创建一个新的进程,ps -f又可以显示当前的进程,但是ps -f 看不到printenv相关信息。我觉得是因为ps -f报告的是系统当前的状态,可是printenv命令运行以后这个进程就会结束,因此用ps -f不会显示。
        至于为什么在终端输入hh="haha"和export hw=“helloWord”,但是printenv只打印后者,正是因为printenv在执行是会创建一个新的进程,也可以理解为一个新shell,hh="haha"作为局部环境变量只对当下的shell有效,在子shell里无效,而hw="helloWord"作为全局环境变量,在父子shell中都有效。因此printenv不显示hh=“haha”,却显示hw=“helloWord”。
在这里插入图片描述
在这里插入图片描述

9. 默认的环境变量

可以浏览器搜索关键字Bash shell环境变量(或者 Bash shell bourne)查看,常用的也就是HOME、PATH。

10. 如何添加环境变量

Windows: 右击‘此电脑’->属性->高级系统设置->环境变量->把我们想用的命令或者应用程序的绝对路径添加进去(通常会添加到Path里),这样我们就可以在cmd里直接访问它。–使用的是配置Path环境全局域变量的方式
Linux: PATH=$PATH:想用的命令或者应用程序的绝对路径 – 缺点:只对当前shell有效
例如:
在这里插入图片描述
echo $PATH 里的内容等同于Windows环境变量中Path中的内容。我们Linux中设置系统级别的变量,很多时候无非就是设置PATH路径。

command not found的三种原因:①命令输错了 ②命令没安装③命令安装后没放到环境变量PATH里(只有放到PATH路径下,命令才可以被直接调用)

11. Linux中如何永久配置环境变量

了解

        linux打开shell的时候,实际上是依靠启动文件来读取环境变量。linux一切皆文件,环境变量也是文件。开机的时候默认执行环境变量的文件,我们称之为启动文件。但是启动文件有好多个。
        启动文件的划分依据:通过登录shell的时候划分,你怎么登录shell的,它就去读取某一个文件。例如在Ubuntu Desktop图形界面中,直接点击终端就代表登录了;server界面里可能需要login。
在这里插入图片描述
在这里插入图片描述

Bash shell:
1.登录shell
2.非登录就打开shell
3.运行脚本非交互shell

可以参看下面两个博客:
Linux 登陆shell,交互shell以及环境变量读取顺序
用户登录到shell,执行的启动文件

        /etc/profile – 我们启动时最主要的一个文件。不同的发行版里该文件的内容可能也不同,所以我们想看某一个发行版上该怎么配置环境变量时,可以先用这个命令看看它代码咋写的(看bash.bashrc、profile.d等类似文件)。
bash.bashrc安装一些软件时可能会遇见,这是配置环境变量时的一个文件;还有一个是/etc/profile.d
        /etc/profile、/etc/bash.bashrc、/etc/profile.d/都属于登录shell时Ubuntu系统部分的内容。类似于Windows中Path路径里的内容。

_linux不同发行版的环境变量也可能不同。因此我们不需要了解这些东西,只需要知道怎么去改。对于用户而言,不需要去碰系统层级的东西(比如像etc里面的东西),不推荐去修改它,了解一下,知道怎么去查看不同发行版的就行。实际上我们在使用时,大多数发行版中的内容都是相通的。

永久配置

在这里插入图片描述
在这里插入图片描述
        不难发现.bashrc有很多我们熟悉的东西。因此在Ubuntu上配置时,只需要找到 ~/.bashrc 即可。有一些发行版可能是 ~/.bash_profile(CentOS) 或者 ~/.profile 或者 ~/.bash_login。这四个是最常见的,编辑它们得用vim。也就是说,我们只有找到这些文件去编辑它,才能真正的修改全局变量。
        如果CentOS系统中 ~/.bashrc 和 ~/.bash_profile 同时存在,会优先找 ~/.bashrc 具体原因可以参看centOS源码
        别名写到这些文件里也可以永久使用。

12. 入门期末作业:怎么修改全局环境变量(注意:不要把原本的环境变量删了,否则可能导致很多命令运行不了)

13. 推荐

frank的linux课教程 以上笔记全部来源于此

-----------------------------------未完待续...------------------------
---------------------------出现问题欢迎批评指正啊 ---------------------

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何分割3D模型

拆分 3D 模型进行打印可以解决许多问题。 你可以使用较小的 3D 打印机打印大型零件,你的零件不会出现太多翘曲,并且零件在清洁和后处理过程中更容易处理。 当然,你需要在打印后将 3D 打印部件粘合在一起,但对于那些无法使用大型 …

手机自动化测试笔记:1.appium的安装与使用

建议先安装前置的程序,同时建议使用anconda进行环境管理。 参考1: 深度学习笔记:1.anaconda安装-CSDN博客https://blog.csdn.net/weixin_42771529/article/details/139434840 参考2: 笔记:如何在pycharm中使用anaco…

【java计算机毕设】图书管理系统javaweb java MySQL springboot vue html maven送文档+ppt 代码源码计算机项目

1项目功能 【java计算机专业学长毕业设计分享】 智慧图书管理系统 Java SpringBoot vue HTML MySQL 前后端分离 2项目介绍 系统功能: 智慧图书管理系统包括管理员和用户两种角色。 管理员的功能包括在个人中心修改个人信息和密码,管理员功能模块管理管理…

第一百零二节 Java面向对象设计 - Java静态内部类

Java面向对象设计 - Java静态内部类 静态成员类不是内部类 在另一个类的主体中定义的成员类可以声明为静态。 例子 以下代码声明了顶级类A和静态成员类B: class A {// Static member classpublic static class B {// Body for class B goes here} }注意 静态成…

# RocketMQ 实战:模拟电商网站场景综合案例(七)

RocketMQ 实战:模拟电商网站场景综合案例(七) 一、RocketMQ 实战:模拟电商网站场景综合案例–生成预订单流程分析1 二、RocketMQ 实战:模拟电商网站场景综合案例–生成预订单流程分析2 在 shop-order-service 工程模…

从VMware到华为云stack大规模迁移,利器出鞘!

近日,澳大利亚公司Computershare因为VMware政策调整“喜提”10-15倍账单,不得不选择将2.4万台虚机从VMware迁移到其他虚拟化平台。正如外媒所说,此次事件只是个开始。面对暴涨的成本,绝大部分企业已经开始着手寻找其替代方案。 迁…

新版FMEA在哪些行业或领域有广泛应用?

在这个充满变革与挑战的当下,新版FMEA(故障模式与影响分析)以其前瞻性的理念和实用的方法,正在众多行业中发挥着举足轻重的作用。它如同一把锐利的剑,助力企业精准识别并预防潜在风险,确保产品质量和流程的…

淘宝商品详情API接入指南

淘宝(包括天猫)的商品详情API并不直接对外开放给普通开发者。这些API主要用于淘宝平台内的应用、合作伙伴以及官方开发者。然而,如果你是一个商家,你可以使用淘宝提供的商家API来获取你的商品详情。 如果你是普通开发者&#xff…

新手grub 配置介绍

最近因为工作需要接触了grub,学到了一些相关知识,所以在这里写篇博客记录一下,有不对的部分欢迎指正。 目录 grub是什么? grub有哪些配置文件? 各配置文件区别 配置文件生成流程 配置文件有哪些内容?…

如何提高逻辑性?(小妙招)

在现代社会中,逻辑性是一种至关重要的思维能力。不论是在工作、学习还是生活中,逻辑清晰的人总能更好地解决问题和做出决策。然而,如何提高逻辑性却是许多人头疼的问题。本文将从六个方面详细探讨如何提升逻辑性,包括细心态度、逼…

【通过新能源汽车的智慧数字底盘技术看计算机的相关技术堆栈?以后是软硬结合的全能程序员的天下,取代全栈(前后端都会的全栈程序员)】

汽车的“智慧数字底盘”是一个综合性的技术平台,旨在提升车辆的性能、安全性和驾驶体验。它集成了多种先进的技术和系统,是全能程序员的必杀技! 1. 传感器技术 a. 激光雷达(LiDAR) 用于生成高分辨率的3D地图&#…

VUE2.7项目配置webpack打包-详细操作步骤

一、Webpack简介 Webpack是一个打包工具,可以把JS、CSS、Node Module、Coffeescrip、SCSS/LESS、图片等都打包在一起,因此,现在几乎所有的SPA项目、JS项目都会用到Webpack。 官网:https://webpack.js.org GitHub为https://git…

Desoutter电动拧紧扳手控制器维修看看这里

马头拧紧工具控制器作为现代工业生产中的重要设备,其稳定性和可靠性对于生产线的连续运行至关重要。然而,在使用过程中,由于各种原因,可能会出现马头电动拧紧控制器故障。【选择子锐机器人维修服务,您将享受以下优势和…

【递归、搜索与回溯】穷举vs暴搜vs深搜vs回溯vs剪枝

穷举vs暴搜vs深搜vs回溯vs剪枝 1.全排列2.子集 点赞👍👍收藏🌟🌟关注💖💖 你的支持是对我最大的鼓励,我们一起努力吧!😃😃 管他什么深搜、回溯还是剪枝,画出决…

部署LVS-DR模式(附带详细实验)

目录 一.数据包流向分析 二.DR模式特点 三.ARP问题及解决办法 四.实验部署 1.配置负载调度器(192.168.80.105) 1.1.安装并启用ipvsadm 1.2.配置虚拟IP地址(VIP:192.168.80.100) 1.3.调整 proc 响应参数 1.4.配…

【C#】pdf按页分割文件,以及分页合并,效果还不错,你值得拥有

欢迎来到《小5讲堂》 这是《C#》系列文章,每篇文章将以博主理解的角度展开讲解。 温馨提示:博主能力有限,理解水平有限,若有不对之处望指正! 目录 背景效果单页分割文件合并多页分割插件说明相关文章 背景 最近遇到一…

MySQL视图教程(02):重命名视图

MySQL 重命名视图 在 MySQL 中, ALTER VIEW 语句用于重命名一个数据库视图(View)。 MySQL 是一种常用的关系型数据库管理系统,提供了丰富的功能和操作来管理数据库中的数据和对象。其中,重命名视图是 MySQL 中的一种…

Kettle根据分类实现Excel文件拆分

将整理好的一份供应商付款明细Excel文件,按供应商拆分成多个Excel文件。 实现思路 本文我们首先将供应商付款明细表,按照“名称”拆分成多份Excel文件。拆分Excel文件打算用两个转换实现,一个用来将Excel数据读取到参数中,另外一…

HBuilder X运行项目到微信开发者工具调试和发布Uniapp小程序

1.下载和安装 HBuilderX hbuilder首页:https://www.dcloud.io/hbuilderx.html 下载hbuilder编辑器,选择对应的系统,Windows和mac正式版即可,下载后免安装直接点击即可使用。 打开HBuilder之后,它会要求你注册一个用户,然后才可以使用。 …

25岁学plc还来的急嘛?

当然来得及!25岁学习 PLC(可编程逻辑控制器)是完全可以的。我这里有一套plc入门教程,不仅包含了详细的视频讲解,项目实战。如果你渴望学习plc,不妨点个关注,给个评论222,私信22&…