linux修改sudo环境变量 linux 改环境变量_linux


文章目录

  • 1.什么是环境变量?
  • 2.如何列出环境变量?
  • 3.如何打印环境变量?
  • 4.如何设置环境变量?
  • 4.1 export
  • 4.2 配置文件
  • 修改配置文件
  • 注意点
  • 4.3 编写脚本放至 /etc/profile.d 目录
  • 5.如何删除环境变量?
  • 6.常用环境变量
  • 7.login shell 与 non-login shells 是什么?
  • 8.小结
  • 参考文献


1.什么是环境变量?

环境变量是特定环境中的变量。例如,操作系统中的每个用户都有自己的环境,一个管理员用户拥有与其他用户不同的环境。

你可能会声明一个只有你的用户需要的环境变量(例如一个秘密令牌),不需要暴露给其他用户。

下面是 Linux 环境变量的一些例子:

USER - 这指的是当前登录的用户。
HOME - 这显示了当前用户的主目录。
SHELL - 这存储了当前用户的 shell 路径,如 bash 或 zsh。
LANG - 这个变量指向当前的语言 /locales 设置。
MAIL - 这显示了当前用户的邮件存储的位置。

这些环境变量根据当前的用户会话而变化。

2.如何列出环境变量?

用于显示为当前会话定义的所有环境变量的命令是 env、printenv 或 export。

env
...
USER=lvlv
PWD=/home/lvlv/test
HOME=/home/lvlv
SSH_CLIENT=10.250.63.43 58291 22
XDG_DATA_DIRS=/usr/local/share:/usr/share:/var/lib/snapd/desktop
LC_ADDRESS=zh_CN.UTF-8
LC_NUMERIC=zh_CN.UTF-8
SSH_TTY=/dev/pts/1
MAIL=/var/mail/lvlv
TERM=xterm
SHELL=/bin/bash
...

当然你也可以使用 printenv 或 export -p 列出所有环境变量。

3.如何打印环境变量?

有两种方法可以打印已经定义的环境变量:

printenv VARIABLE_NAME
echo $VARIABLE_NAME

比如打印环境变量 SHELL 的值。

printenv SHELL
/bin/bash

# 或
echo $SHELL
/bin/bash

4.如何设置环境变量?

Linux 设置环境变量有很多方法,总地来说可以分为三种。

一种是使用 export 命令,一种是修改配置文件,最后一种是添加设置环境变量的脚本,放到 /etc/profile.d 目录供 /etc/profile 调用。

4.1 export

使用 export 命令创建用户级临时环境变量,该方式只对当前 Shell 会话有效,退出 Shell 再次进入,环境变量将丢失。

例如将 /home/xxxx/bin 添加到 PATH 中。

export PATH=$PATH:/home/xxxx/bin

这条命令可以直接在 Shell 中执行,也可以放在脚本中,但放在脚本中需要使用 source 或点(.)来执行脚本。

修改后可以使用如下命令查看是否修改成功,如果输出的 PATH 中含有 /home/xxxx/bin 则表明修改成功。

export | grep PATH

echo $PATH

printenv PATH

4.2 配置文件

修改配置文件可以设置环境变量,永久生效。按照环境变量的作用域,可分为系统级和用户级配置文件。

系统级配置文件:
	/etc/environment
	/etc/profile
	/etc/bashrc

用户级配置文件:
	~/.profile
	~/.bash_profile 或 ~./bash_login
	~/.bashrc

修改配置文件

  1. 在 /etc/environment 中设置。

/etc/environment 是系统级配置文件,用于设置全局的环境变量,对所有用户和进程都生效,会在系统启动时被加载。

/etc/environment 文件的格式是简单的键值对,每行一个环境变量的设置。

VARIABLE_NAME=value
ANOTHER_VARIABLE=another_value

注意,/etc/environment 一般需要管理员权限才可修改。如果是普通用户,可尝试使用 sudo 对其进行编辑,如 sudo vim /etc/environment

如果是在 /etc/environment 中新增环境变量,因为只是键值对,所以不能通过 source 或点(.)执行 /etc/environment 创建新的环境变量,只能更改已有环境变量的值。

如果想立即生效,需要退出当前终端会话并重新打开一个新的终端窗口或会话。

  1. 在 /etc/profile 中添加环境变量,对所有用户永久生效。

/etc/profile 是系统级配置文件,对所有用户有效,用于设置环境信息。

当用户登录时,该文件的内容被执行,以设置系统范围的环境变量和执行全局初始化操作,并执行 /etc/profile.d 目录下的所有可执行文件来配置环境信息。

export PATH=$PATH:[new directory]

注意,与 /etc/environment 一样,一般需要管理员权限才可修改。如果是普通用户,可尝试使用 sudo 对其进行编辑,如 sudo vim /etc/profile

  1. 在 /etc/bashrc 文件添加环境变量,对所有用户永久生效。

/etc/bashrc 是系统级配置文件,对所有用户有效,用于配置 Bash Shell。当用户打开 Bash Shell 时,该文件的内容被执行。

export PATH=$PATH:[new directory]

注意,与 /etc/environment 一样,一般需要管理员权限才可修改。如果是普通用户,可尝试使用 sudo 对其进行编辑,如 sudo vim /etc/bashrc

  1. 在 ~/.profile 中添加环境变量,只对当前用户永久有效。

~/.profile 是用户的个人配置文件,用于在登录时设置用户的环境变量和执行个人初始化脚本。当用户登录时,系统会自动执行 ~/.profile 文件中的内容,以设置个人的环境变量和执行个人初始化操作。

export PATH=$PATH:[new directory]
  1. 在 ~/.bash_profile 或 ~./bash_login 中添加环境变量,只对当前用户永久有效。

~/.bash_profile 和 ~/.bash_login 类似于 ~/.profile,但它主要是 Bash Shell 用户的配置。当用户登录时,系统会自动执行 ~/.bash_profile 文件中的内容,以设置个人的环境变量和执行个人初始化操作。

如果存在 ~/.bash_profile 文件,则系统通常会首先执行 ~/.bash_profile,而不是 ~/.bash_login。因此,如果您希望配置用户级别的环境变量,请考虑使用 ~/.bash_profile 文件而不是 ~/.bash_login。

export PATH=$PATH:[new directory]
  1. 在 ~/.bashrc 中添加环境变量,只对当前用户永久有效。

~/.bashrc 用于在每次启动 Bash Shell 时设置用户的环境变量和执行个人初始化脚本。与 ~/.profile 和 ~/.bash_profile 不同, ~/.bashrc 在每个 Shell 会话中都会被执行,而不仅仅是登录时。

export PATH=$PATH:[new directory]

注意点

~/.bash_profile 通常会显式调用 ~/.bashrc,而 ~/.bashrc 一般会显式调用 /etc/bashrc。

如果没有 ~/.bash_profile,系统会读取 ~/.profile。 ~/.profile 一般会读取 ~/.bashrc。

bashrc 中的 rc 是 Run Commands 的首字母缩写,表示执行命令,用于设置 Bash Shell 的执行环境。

类似地,其他Shell也可以使用类似的命名约定。例如,zsh Shell 的初始化文件是 zshrc,csh Shell 的初始化文件是 cshrc。这些文件都包含了用户自定义的别名、函数、环境变量以及其他Shell相关的设置。

修改配置文件后,要想修改文件后马上生效需要使用 source 或点(.)执行配置文件中的命令,不然只能在下次重新登录时才能生效。

source /etc/profile
source /etc/bashrc
source ~/.profile
source ~/.bash_profile
source ~/.bashrc

# 或
. /etc/profile
. /etc/bashrc
. ~/.profile
. ~/.bash_profile
. ~/.bashrc

用户家目录下的配置文件名以点号开始,在 Linux 中为隐藏文件,使用命令ls -a可查看。

4.3 编写脚本放至 /etc/profile.d 目录

/etc/profile.d 是一个目录,包含了一系列脚本文件。每个脚本文件都会在 /etc/profile 中被遍历执行。

因为 /etc/profile 在用户登录时会自动被系统执行,所以 /etc/profile.d 目录中的脚本也会被自动执行。

profile.d 目录中的脚本可以帮助将全局的配置任务分解为单独的文件,以便更好地组织和维护配置。这样的配置不会影响到 /etc/profile 文件本身,而是通过这些脚本进行扩展。

比如编写一个设置环境变量的脚本放置 /etc/profile.d 目录,对所有用户永久有效。

# 这是设置环境变量的脚本 custom_env.sh
export PATH=$PATH:[new directory]

同样地,要想立即生效,需要执行 /etc/profile 或添加的脚本。

5.如何删除环境变量?

要删除环境变量,您可以使用不同的方法,具体取决于环境变量是在哪个范围内设置的(临时、用户级别、系统级别)。以下是删除环境变量的几种常见方法:

  1. 在当前会话中临时删除环境变量

在终端中使用 unset 命令可以在当前会话中临时删除一个环境变量。

unset VARIABLE_NAME
  1. 永久删除

要永久取消在配置文件中设置的环境变量,请转到该文件,然后删除包含变量定义的行。

6.常用环境变量

PATH
	决定了Shell到哪些目录中寻找命令或程序
HOME
	当前用户主目录
USER/LOGNAME
	当前登录用户名
SHELL
	当前用户使用的Shell
PWD
	当前工作目录的路径
EDITOR
	指定默认文本编辑器
LANG
	和语言相关的环境变量,使用多种语言的用户可以修改此环境变量
TERM
	指定终端类型,影响终端的显示和特性
MAIL
	当前用户的邮件存放目录
HISTSIZE
	保存历史命令记录的条数
HOSTNAME
	主机名称,许多应用程序如果要用到主机名的话,通常是从这个环境变量中来取得
PS1
	命令提示符,对于 root 用户是 #,对于普通用户是 $
PS2
	多行命令提示符的显示样式,默认是 >
PS3
	控制 select 命令的提示符
PS4
	控制 set -x 命令的跟踪输出格式
TMPDIR
	指定临时文件的目录路径
MANPATH
	指定 man 手册页的搜索路径
CFLAGS 和 CXXFLAGS
	用于指定编译C和C++程序时的编译器选项。
LDFLAGS
	用于指定链接器选项。
LD_LIBRARY_PATH
	指定共享库的搜索路径
JAVA_HOME
	指定Java安装的路径

7.login shell 与 non-login shells 是什么?

在Unix-like操作系统中,用户登录时打开的终端会话会运行一个登录Shell或非登录Shell。这两者之间有一些差异,主要是在启动时执行的初始化脚本和环境变量设置方面。

登录 Shell 是用户登录时运行的 Shell。它会执行用户的登录初始化文件(如 ~/.bash_profile、 ~/.bash_login、 ~/.profile等)来设置环境变量和执行用户定义的配置。通常,登录 Shell 会在用户登录时执行一次,以确保设置全局和用户特定的环境。

非登录Shell是在已经登录的终端会话中启动的Shell。这可以是用户在终端中输入bash或其他Shell命令时启动的Shell。非登录Shell不会执行登录初始化文件,而是执行 ~/.bashrc 等非登录初始化文件。它用于执行用户自定义的别名、函数、变量等设置。

对于Bash Shell,登录Shell和非登录Shell之间的区别可以总结如下:

  • 登录Shell会执行登录初始化文件,而非登录Shell不会。
  • 登录Shell在用户登录时执行一次,而非登录Shell在每次启动时执行。
  • 登录Shell用于设置全局和用户特定的环境,而非登录Shell用于定义别名、函数等。

需要注意的是,这些行为可能会根据不同的Shell和操作系统而有所不同。在编写Shell脚本和配置文件时,了解何时会执行登录Shell和非登录Shell非常重要,以确保正确设置环境变量和执行所需的初始化操作。

8.小结

Linux 环境变量配置有多种方法,我们可以根据自己的实际需要选择合适的方法配置环境变量。

比如需要设置系统级环境变量,可以修改 /etc/environment、/etc/profile 或 /etc/bashrc 文件,或编写脚本添加到 /etc/profile.d 目录。

如果需要设置用户级环境变量,可以修改 ~/.profile、 ~/.bash_profile 或 ~/.bashrc 文件。

如果只是临时创建一个环境变量,直接在命令行执行 export 命令即可。

如果您喜欢这篇文章,欢迎关注我的微信公众号“恋喵大鲤鱼”了解最新精彩内容。


参考文献

How to Set Environment Variables in Linux - nixCraft