Linux 环境变量的增删改

server/2024/11/23 22:56:30/

写在前面:

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


目录

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


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


shell__bash_15">shellbash

在计算机科学中,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:

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

删除环境变量

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


更新环境变量

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

bash">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.ppmy.cn/server/20890.html

相关文章

docker容器技术篇:容器集群管理实战mesos+zookeeper+marathon(一)

容器集群管理实战mesoszookeepermarathon&#xff08;一&#xff09; mesos概述 1.1 Mesos是什么 Apache Mesos 是一个基于多资源调度的集群管理软件&#xff0c;提供了有效的、跨分布式应用或框架的资源隔离和共享&#xff0c;可以运行 Hadoop、Spark以及docker等。 1.2 为…

程序会自己抛出错误,干嘛还要写try catch?

抛出问题 以前一直困惑&#xff0c;在下面的代码中&#xff0c;进行try catch的意义是什么&#xff1f;js引擎不是会自己抛出错误吗&#xff1f;为什么还要多此一举手动捕获打印呢&#xff1f; const TodoListContainer () > {const [todos, setTodos] useState([]);use…

ArcGIS无法开始编辑TIN!开始编辑TIN显示灰色

ArcGIS无法开始编辑TIN&#xff01;开始编辑TIN显示灰色&#xff1f; 解决方案&#xff01; 1、确认自定义——扩展模块中空间分析、3D分析模块勾选。 2、确认以上后&#xff0c;还是不能编辑的话&#xff0c;我们可以调出 3D分析分析工具条&#xff0c;你就会发现。TIN编辑工…

等价类划分发案例

用等价类划分法设计如下案例, 同时编写测试用例 学生姓名: 2到6个汉字;登录密码: 长度大于等于6位,小于等于10位, 密码中只能出现数字或者英文字母或者下划线;两个自然数相除: 除数不能为0; 自然数解释: 自然数是全体非负整数组成的集合, 学生姓名 有效 张三 无效 张 张…

Docker之常见FAQ记录清单

一、前言 本文记录Docker使用过程中遇见的问题&#xff0c;供后续回顾参考。 关联资源&#xff1a;网络Docker博客、官方FAQ、文档、Docker 从入门到实践、中文社区、riptutorial 二、问题及处理记录 2.1、docker容器内没有vi,nano等编辑器 1&#xff09;如果宿主机本地有&a…

css文字和span在一行对不齐

1.需求背景 父盒子中有两个span&#xff0c;但是span中的文字对不齐。如下图&#xff0c;明显右边的文字偏高 处理后的效果&#xff08;已经对齐&#xff0c;图中标记的是基本的div结构&#xff09;&#xff1a; 2.该问题出现的原因&#xff1a; span1设置的高度比span2内…

eCognition 分类

目录 前言 一、阈值分类 1、创建自定义特征 2、查看对象特征值 3、阈值分类 3.1 新建类别(如果已有类别即跳过) 3.2、建立分类阈值规则 4、导出分类结果 5、附录:如果需要合并结果、按以下步骤 二、监督分类 1、方法1:利用classification算法(主要用于最邻近)…

IntelliJ IDEA个人可一直使用方法参考

IntelliJ IDEA使用方法 1.下载最新的 IDEA 2021.2.2 版本安装包 https://www.jetbrains.com/idea/download/ 2.先卸载老版本的 IDEA 3.安装新版本&#xff0c;进行激活—勾选 Evaluate for free, 点击 Evaluate&#xff0c; 先试用30天: 4.随便新建个Java工程&#xff0c;然后…