Linux 环境变量提示和技巧
环境变量的存在是为了增强和标准化 Linux 系统上的 shell 环境。系统会为您设置标准环境变量,但您也可以设置自己的环境变量,或者根据需要随意更改默认环境变量。
[ 免费下载:高级 Linux 命令备忘单。]
env
从命令开始
如果要查看环境变量,请使用该env
命令并在输出的最左侧查找全大写的单词。这些是您的环境变量,它们的值位于右侧:
$ env
LS_COLORS=(long output)
LANG=en_US.UTF-8
HISTCONTROL=ignoredups
HOSTNAME=rhel8t
XDG_SESSION_ID=5
USER=khess
SELINUX_ROLE_REQUESTED=
PWD=/home/khess
HOME=/home/khess
SSH_CLIENT=192.168.1.94 53911 22
SELINUX_LEVEL_REQUESTED= XDG_DATA_DIRS=/home/khess/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share:/usr/share
SSH_TTY=/dev/pts/1
MAIL=/var/spool/mail/khess
TERM=xterm-256color
SHELL=/bin/bash SELINUX_USE_CURRENT_RANGE=
SHLVL=1
LOGNAME=khess
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus
XDG_RUNTIME_DIR=/run/user/1000 PATH=/home/khess/.local/bin:/home/khess/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/opt/bin
HISTSIZE=1000
LESSOPEN=||/usr/bin/lesspipe.sh %s _=/usr/bin/env
LS_COLORS
由于变量的输出太长,我省略了它。请在您的系统上尝试此命令,查看完整输出。
设置了许多环境变量,然后从文件/etc/profile
和/etc/bashrc
文件中导出。其中有一行内容/etc/profile
:
export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL
要对所有新帐户的环境变量进行永久更改,请转到您的/etc/skel
文件(例如),然后.bashrc
更改已存在的变量或输入新变量。当您创建新用户时,这些/etc/skel
文件将被复制到新用户的主目录中。
探索壳层级(SHLVL
)
要调用单个环境变量的值,请输入以下命令,以SHLVL
(Shell Level)为例:
$ echo $SHLVL 1
此变量根据您打开的子 shell 数量而变化。例如,输入bash
两次,然后再次发出命令:
$ bash
$ bash echo $SHLVL 3
三级 shell 意味着您处于两个子 shell 深度,因此输入exit
两次即可返回到常规 shell。
[想要试用 Red Hat Enterprise Linux?立即免费 下载。]
操纵PATH
变量
该PATH
变量包含执行命令和脚本的搜索路径。要查看您的PATH
,请输入:
$ echo $PATH /home/khess/.local/bin:/home/khess/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin
通过输入以下命令来临时更改您的PATH
添加/opt/bin
:
$ PATH=$PATH:/opt/bin
$ echo $PATH /home/khess/.local/bin:/home/khess/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/opt/bin
此更改对于当前会话来说是临时的。它不是永久的,因为它没有输入到文件中.bashrc
。要使更改永久生效,请将命令输入PATH=$PATH:/opt/bin
到您的主目录的.bashrc
文件中。
执行此操作时,您将PATH
通过将目录附加到当前PATH
变量来创建新变量$PATH
。冒号 ( :
) 分隔PATH
条目。
解开$USER
、$PWD
和$LOGNAME
我曾经有一个理论,但我认为这个理论已经被我自己驳斥了。我的理论是,命令pwd
和可能只是分别读取和回显 shell 变量和或的whoami
内容。令我惊讶的是,在查看源代码后,它们并没有这样做。也许我应该重写它们来做到这一点。没有理由添加多个库和近 400 行 C 代码来显示工作目录。您只需读取并将其回显到屏幕 (stdout) 即可。对于或也是如此。$PWD
$USER
$LOGNAME
$PWD
whoami
$USER
$LOGNAME
如果您想亲自查看源代码,可以在GitHub和其他地方找到。如果您发现这些程序(或其他程序)确实使用了 shell 变量,我很想知道。诚然,我不太擅长阅读 C 源代码,所以它们很可能使用 shell 变量,而我却不知道。从我读到的和能理解的内容来看,它们似乎没有使用 shell 变量。
玩$SHELL
游戏
在最后一个环境变量概述中,我想向您展示变量如何$SHELL
派上用场。您不必停留在默认 shell 中,默认 shell 可能是 Bash。您可以进入系统上安装的任何 shell 并在其中工作。要找出系统上安装了哪些 shell,请使用以下命令:
$ cat /etc/shells /bin/sh /bin/bash /usr/bin/sh /usr/bin/bash
所有这些实际上都是 Bash,所以不要激动。如果你够幸运的话,你还可能看到/bin/tcsh
、/bin/csh
、/bin/mksh
、/bin/ksh
和的条目/bin/rksh
。
如果您愿意,您可以使用其中任何一种 shell,并在每种 shell 中执行不同的操作。但是,假设您是 Solaris 管理员,并且想要使用 Korn shell。您可以/bin/ksh
使用以下chsh
命令将默认 shell 更改为:
$ chsh Changing shell for khess. New shell [/bin/bash]: /bin/ksh Password: Shell changed.
现在,如果您输入 echo $SHELL
,响应将是/bin/bash
,因此您必须注销并重新登录才能看到更改。注销并重新登录后,您将收到不同的响应echo $SHELL
。
您可以进入其他 shell 并echo $SHELL
报告 您当前的 shell 和$SHLVL
,这将使您了解您处于多少个 shell 深度。
设置您自己的环境变量
您可以在每个会话的命令行上设置自己的变量,也可以将它们放入文件~/.bashrc
或~/.profile
您用于默认 shell 的任何启动文件中,以使它们永久存在。在命令行上,输入您的环境变量及其值,就像您之前更改变量时所做的那样PATH
。
总结
Shell 或环境变量对用户、系统管理员和程序员都很有帮助。它们在命令行和脚本中都很有用。多年来,我将它们用于许多不同的目的,尽管其中一些可能有点不合常规,但它们一直有效,现在仍然有效。创建您自己的变量或使用系统和已安装应用程序提供给您的变量。它们确实可以丰富您的 Linux 用户体验。
关于变量和 shell,顺便提一下,是否有人认为使用 JSON 编程的人只能使用 Bourne Shell?请讨论。