Linux 环境变量的增删改

写在前面:

本文章旨在总结备份、方便以后查询,由于是个人总结,如有不对,欢迎指正;另外,内容大部分来自网络、书籍、和各类手册,如若侵权请告知,马上删帖致歉。


目录

  • shell 和 bash
  • 获取当前环境变量
  • 设置环境变量
    • 临时环境变量
      • export 命令
      • set 命令
    • 永久环境变量
      • 系统级
      • 用户级
  • 删除环境变量
  • 更新环境变量
  • 常用环境变量
  • 参考


首发及后期更新将于 https://arachnid.cc/Linux-environment-variables 上,此处仅作二次备份。


shell 和 bash

在计算机科学中,shell 俗称壳(用来区别于核,核是指 “内核”),shell 是指 “提供使用者使用界面” 的软件(命令解析器)。它类似于 DOS 下的 command.com 和后来的 cmd.exe。它接收用户命令,然后调用相应的应用程序。

在很多并不正式的场合,这两个名词表达的意思相同,即命令解释器。但从严格的意义上讲,命令行是指供用户输入命令的界面,其本身只是接受输入,然后把命令传递给命令解释器,后者就是 shell,从本质上讲,shell 是一个程序,它在用户和操作系统之间提供了一个面向行的可交互接口,用户在命令行中输入命令,运行在后台的 shell 把命令转换成指令代码发送给操作系统。shell 并非只有命令行这一种形式,例如 GNOME、KDE 等图形界面也是 shell,不过它们是 GUI shell,都是为了解决人机交互的问题。

目前在 Linux 环境下有几种不同类型的 shell,常用的有 Bourne Shell(sh)、Bourne Again Shell(bash)、Z Shell(zsh)、C Shell(csh)、tcsh(csh 的扩展)、Korn Shell(ksh)、pdksh(ksh 的扩展)。不同的 Shell 提供不同的语法和特性。

bash 相当于 shell 中的某个,shell 的范围更广。bash 的全称是 Bourne Again Shell。


获取当前环境变量

  • echo $varname 命令输出当前指定的环境变量的值

    使用 echo 命令可以输出指定的环境变量的值,例如:echo $PATH,该命令会输出当前用户的 PATH 环境变量值。如果你想查看其他环境变量,只需要将上述命令中的 PATH 替换为其他环境变量即可。

  • export 命令显示当前系统定义的所有环境变量

  • printenv / env 命令查看所有已定义环境变量或指定的环境变量

    printenvenv 都可以输出所有已定义的环境变量及其对应的值。printenv 命令也可以单独输出当前指定的环境变量的值,例如:printenv SHELL,该命令会输出已定义的 SHELL 环境变量值。而 env 命令,可以使用 env | grep VARIABLE_NAME,查看对应的 VARIABLE_NAME 环境变量值。

note:PATH 变量定义了运行命令的查找路径,以冒号 : 分割不同的路径,使用 export 定义的时候可加双引号也可不加。


设置环境变量

临时环境变量

export 命令

export 命令也可用于设置环境变量。

在 shell 中执行程序时,shell 会提供一组环境变量。export 可新增,修改或删除环境变量,供后续执行的程序使用。export 的效力仅限于该次登陆操作。

set 命令

set 命令作用主要是显示系统中已经存在的 shell 变量,以及设置 shell 变量的新变量值。使用 set 更改 shell 特性时,符号 “+” 和 “-” 的作用分别是打开和关闭指定的模式。set 命令不能够定义新的 shell 变量。

具体可看:https://www.gnu.org/software/bash/manual/html_node/The-Set-Builtin.html


永久环境变量

系统级

  1. /etc/environment :系统在登录时读取的第一个文件,用于为所有进程设置环境变量。系统使用此文件时并不是执行此文件中的命令,而是根据 KEY=VALUE 模式的代码,对 KEY 赋值以 VALUE,因此文件中如果要定义 PATH 环境变量,只需加入类似如 PATH=$PATH:/xxx/bin 的代码即可。

  2. /etc/profile :是系统登录时执行的第二个文件,可以用于设定针对全系统所有用户的环境变量,并从 /etc/profile.d 目录的配置文件中搜集 shell 的设置;这个文件,是任何用户登陆操作系统以后都会读取的文件(如果用户的 shell 是 csh 、tcsh 、zsh ,则不会读取此文件)。该文件一般是调用 /etc/bash.bashrc 文件。

  3. /etc/bash.bashrc :系统级的 bashrc 文件,为每一个运行 bash shell 的用户执行此文件。此文件会在用户每次打开 bash shell 时执行一次;因此,如果你想让每个使用 bash 的用户每新开一个 bash 和每次登陆都执行某些操作,或者给他们定义一些新的环境变量,就可以在这个里面设置。

note:

  • 生效时间:使用相同的用户打开新的终端时生效,或者手动更新环境变量生效(见更新环境变量)

  • 生效期限:永久有效

  • 生效范围:所有用户


用户级

  1. ~/.profile: 是对应当前登录用户的 profile 文件,用于定制当前用户的个人工作环境。每个用户都可使用该文件输入专用于自己使用的 shell 信息,当用户登录时,该文件仅仅执行一次。默认情况下,会设置一些环境变量,执行用户的 .bashrc 文件。

  2. ~/.bashrc: 是对应当前登录用户的 bash 初始化文件,当用户每次打开 bash shell 时,系统都会执行此文件一次。通常设置环境变量修改这个文件。

note:

  • 生效时间:使用相同的用户打开新的终端时生效,或者手动更新环境变量生效(见更新环境变量)
  • 生效期限:永久有效
  • 生效范围:仅对当前用户有效

总结:

环境变量的分类可以简单的分成用户级别的环境变量以及系统级别的环境变量。

系统级别环境变量定义文件:/etc/bash.bashrc(部分系统为:/etc/bashrc)、/etc/profile(部分系统为:/etc/bash_profile)、/etc/environment

用户级别环境变量定义文件:~/.bashrc~/.profile(部分系统为:~/.bash_profile

另外在用户环境变量中,系统会首先读取 ~/.profile(或者 ~/.bash_profile)文件,如果没有该文件则读取 ~/.bash_login,根据这些文件中内容再去读取 ~/.bashrc

环境变量加载顺序:

/etc/enviroment –> /etc/profile –> /etc/bash.bashrc –> ~/.profile –> ~/.bashrc

tips:

一般在 /etc/profile.d/ 目录下创建一个自定义脚本会是修改环境变量的更好方法,这样无论你在一个终端中如何切换用户,环境变量依然存在。eg:

cat > /etc/profile.d/test.sh << EOF
export PATH=$PATH:/home/arachnid/mysql/bin
EOF

删除环境变量

如果是临时环境变量,或者是要临时删除一下环境变量,可以使用 unset 命令:unset VARIABLE_NAME;如果是要永久删除配置文件中的环境变量,需要去相应的配置文件中移除相关的配置项。


更新环境变量

eg:更新 /etc/profile 文件的环境变量

source /etc/profile

# or

. /etc/profile

常用环境变量

变量内容
DISPLAY如果你正在运行图形界面环境,那么这个变量就是你显示器的名字。通常,它是 “:0”, 意思是由 X 产生的第一个显示器。
EDITOR文本编辑器的名字。
SHELLshell 程序的名字。
HOME用户家目录。
LANG定义了字符集以及语言编码方式。
OLD_PWD先前的工作目录。
PAGER页输出程序的名字。这经常设置为 /usr/bin/less。
PATH由冒号分开的目录列表,当你输入可执行程序名后,会搜索这个目录列表。
PS1Prompt String 1. 这个定义了你的 shell 提示符的内容。随后我们可以看到,这个变量内容可以全面地定制。
PWD当前工作目录。
TERM终端类型名。类 Unix 的系统支持许多终端协议;这个变量设置你的终端仿真器所用的协议。
TZ指定你所在的时区。大多数类 Unix 的系统按照协调时间时 (UTC) 来维护计算机内部的时钟 ,然后应用一个由这个变量指定的偏差来显示本地时间。
USER你的用户名

参考

https://wiki.archlinux.org/title/Environment_variables

https://www.cnblogs.com/youyoui/p/10680329.html

http://rvdsd.top/2018/04/28/Linux/Linux环境变量/

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

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

相关文章

【Day1】【React学习笔记二】JSX基础

1 概念和本质 Babel官网 2 高频使用场景 2.1 JSX中使用JS表达式 2.2 JSX中实现列表渲染

LeetCode 面试题 17.08 —— 马戏团人塔

阅读目录 1. 题目2. 解题思路3. 代码实现 1. 题目 2. 解题思路 首先&#xff0c;我们对人的身高按照从小到大排序&#xff0c;特别注意&#xff0c;对于身高相等的人&#xff0c;要按照体重从高到低排序。这时候&#xff0c;序列已经满足了在上面的人要比下面的人矮一点&#…

输电线路的“天眼”:双目协同图像视频监测装置

在广袤的天地之间&#xff0c;纵横交错的输电线路如同血脉一般&#xff0c;为我们的生活输送着源源不断的电力。然而&#xff0c;这些“血脉”也常常面临着各种挑战&#xff0c;如外力破坏、恶劣天气等。为了守护这些重要的“生命线”&#xff0c;鼎信智慧研发了一款智能监控设…

类和对象【下】

本节博客主要围绕构造函数、static成员、友元、内部类、匿名对象等待关于“类和对象”这些细节性知识进行收尾&#xff0c;有需要借鉴即可 类和对象_下目录 1.再谈构造函数1.1初始化列表1.2意义 2.static成员2.1概念2.2特性2.3习题 3.友元3.1友元函数概念3.2友元函数的特性 4.内…

Blender笔记之基本操作

code review! —— 2024-04-27 杭州 Blender笔记…

pytest教程-27-分布式执行用例插件-pytest-xdist

上一小节我们学习了pytest随机执行用例插件-pytest-random-order&#xff0c;本小节我们讲解一下pytest分布式执行用例插件pytest-xdist。 前言 平常我们手工测试用例非常多时&#xff0c;比如有1千条用例&#xff0c;假设每个用例执行需要1分钟。如果一个测试人员执行需要10…

选择汽车制造业数据外发解决方案,核心在这三点

汽车制造业是我国国民经济发展的支柱产业之一&#xff0c;汽车制造行业景气度与宏观经济、居民收入水平和固定资产投资密切相关。汽车制造业产业链长&#xff0c;关联度高&#xff0c;汽车制造上游行业主要为钢铁、化工等行业&#xff0c;下游主要为个人消 费、基建、客运和军事…

Linux 常用命令分类

一、帮助命令 命令功能语法man求助man [命令]info求助info [命令]help求助[命令] --help 1.1、man 命令 按键功能空格向下翻页pagedown也就是fn ↓ \downarrow ↓向下翻页pageup向上翻页/string向下查找string这个字符串?string向上查找string这个字符串n,Nn表示继续, N表示…

PotatoPie 4.0 实验教程(26) —— FPGA实现摄像头图像拉普拉斯锐化

为什么要对图像进行拉普拉斯锐化 对图像进行拉普拉斯锐化的目的是增强图像的边缘和细节&#xff0c;使图像看起来更加清晰和锐利。这种技术常用于图像处理中&#xff0c;具体原因如下&#xff1a; 增强图像的边缘信息&#xff1a;拉普拉斯锐化可以突出图像中的边缘特征&#x…

Spring AOP(1)

AOP概述 AOP是Spring框架的第二大核心(第一大核心是IoC). 什么是AOP? 即Aspect Oriented Programming(面向切面编程) 什么是面向切面编程呢? 切面就是指某一类特定的问题, 所以AOP也可以叫做面向特定方法编程. 什么是面向特定方法编程呢?比如上一篇中讲到的拦截器, 就是…

windows无法启动Remote Desktop Services服务(位于本地计算机上) 错误2:系统找不到指定文件

在使用远程计算机时出现的错误&#xff0c;计算机在后台能正常打开&#xff0c;而无法使用远程连接&#xff0c;初步判定为远程服务问题&#xff0c;检查步骤如下&#xff1a; 一、检查计算机Remote Desktop Services服务 该服务是开启计算机远程时必要的服务&#xff0c;若该…

2024 年最好的免费数据恢复软件,您可以尝试的几个数据恢复软件

由于系统崩溃而丢失数据可能会给用户带来麻烦。我们将重要的宝贵数据和个人数据保存在我们的 PC、笔记本电脑和其他数字设备上。您可能会因分区丢失、意外删除文件和文件夹、格式化硬盘驱动器而丢失数据。数据丢失是不幸的&#xff0c;如果您不小心从系统中删除了文件或数据&am…

Vue3+Vite开发的项目进行加密打包

本文主要介绍Vue3+Vite开发的项目如何进行加密打包。 目录 一、vite简介二、混淆工具三、使用方法1. 安装插件:2. 配置插件:3. 运行构建:4. 自定义混淆选项:5. 排除文件:下面是Vue 3+Vite开发的项目进行加密打包的方法。 一、vite简介 Vite 是一个由 Evan You 创造的现代…

【Linux】进程信号 -- 详解

⚪前言 注意&#xff1a;进程间通信中的信号量跟下面要讲的信号没有任何关系。 一、从不同角度理解信号 1、生活角度的信号 你在网上买了很多件商品&#xff0c;在等待不同商品快递的到来。但即便快递没有到来&#xff0c;你也知道快递来临时&#xff0c;你该怎么处理快递&a…

Java设计模式 _结构型模式_桥接模式

一、桥接模式 1、桥接模式 桥接模式&#xff08;Bridge Pattern&#xff09;是一种结构型设计模式。用于把一个类中多个维度的抽象化与实现化解耦&#xff0c;使得二者可以独立变化。 2、实现思路 使用桥接模式&#xff0c;一定要找到这个类中两个变化的维度&#xff1a;如支…

基于Spring Boot的旅游管理系统设计与实现

基于Spring Boot的旅游管理系统设计与实现 开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/idea 系统部分展示 前台浏览管理界面图&#xff0c;通过内容列表可以获取网…

Git--多人协作

目录 一、多人协作一二、多人协作二三、 远程分⽀删除后&#xff0c;本地git branch -a依然能看到的解决办法 一、多人协作一 ⽬前&#xff0c;我们所完成的⼯作如下&#xff1a; 1.基本完成Git的所有本地库的相关操作&#xff0c;git基本操作&#xff0c;分⽀理解&#xff0c;…

适用于芯片行业的开发及管理工具:版本控制、持续集成、代码分析及项目管理工具介绍

3月28日-29日&#xff0c;2024国际集成电路展览会暨研讨会&#xff08;IIC Shanghai&#xff09;在上海成功举行。此次盛会汇聚了集成电路产业的众多领军企业&#xff0c;共同探寻和把握集成电路产业的发展脉络。 龙智携芯片研发及管理解决方案亮相展会&#xff0c;展示如何通…

遥感雷达波段的原理及应用

雷达波段是不同波长的组。每一种都有其独特的穿透地球表面的能力。它们还可以揭示环境的不同方面。 雷达频段在电磁频谱内具有特定的频率范围。这些波段由 L-、S-、C- 和 X-波段等字母表示。稍后会详细介绍这一点。 什么是合成孔径雷达&#xff1f; 合成孔径雷达 (SAR) 是一…

云原生Kubernetes: K8S 1.29版本 部署GitLab

目录 一、实验 1.环境 2.搭建NFS 3.K8S 1.29版本 部署Redis 4.K8S 1.29版本 部署Postgresql 5.K8S 1.29版本 部署GitLab 6.K8S 部署istio微服务 7.K8S 部署ingress应用路由 二、问题 1.K8S部署gitlab报错 2.gitlab创建失败 3.生成网关资源报错 4.安装istio 报错 …
最新文章