溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

怎么設(shè)置與查看Linux系統(tǒng)中的環(huán)境變量

發(fā)布時間:2021-10-22 16:22:57 來源:億速云 閱讀:262 作者:小新 欄目:系統(tǒng)運維

這篇文章主要介紹了怎么設(shè)置與查看Linux系統(tǒng)中的環(huán)境變量,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

環(huán)境變量

環(huán)境變量是以鍵值對的形式實現(xiàn)的,是在整個系統(tǒng)范圍內(nèi)都可用的變量,并由所有派生的子進(jìn)程和 Shell  繼承。而環(huán)境變量的名稱是區(qū)分大小寫的,且通常以大寫的形式命名 ( MYVAR1, MYVAR2... )

單個值的環(huán)境變量看起來是這樣的:

KEY=value1

如果你想要將多個值賦予環(huán)境變量,則通常用冒號 ( : ) 作為分隔符。每一對鍵值對最終看起來是這樣子的:

KEY=value1:value2:value3

如果要賦予環(huán)境變量的值包含空格,則需要使用引號:

KEY="value with spaces"

Shell變量

Shell 變量是專門用于設(shè)置或定義它們的 Shell 中的變量。每個 Shell ,例如 zsh 和 bash ,都有一組自己內(nèi)部的 Shell  變量。它們通常用于跟蹤臨時數(shù)據(jù),比如當(dāng)前工作目錄,而用法則與環(huán)境變量相同。

如果你想讓 Shell 變量作為全局變量使用,可以使用 export 指令:

$ export MYVAR=lxlinux.net $ echo $MYVAR lxlinux.net $ env | grep MYVAR MYVAR=lxlinux.net

常見的環(huán)境變量與 Shell 變量

一些環(huán)境變量和 Shell 變量是非常有用的,并且經(jīng)常會被引用。以下是一些常見的,你以后可能會遇到的環(huán)境變量:

變量名含義
TERM這指定運行 Shell 時要模擬的終端類型??梢葬槍Σ煌牟僮餍枨竽M不同的硬件終端。不過,你通常不需要管這個變量。
USER當(dāng)前登錄的用戶
PWD當(dāng)前的工作目錄
OLDPWD上一個工作目錄,這個變量由 Shell 保存,以便通過執(zhí)行 cd - 切換回上一個工作目錄。
LS_COLORS這定義了 ls 指令的顏色輸出代碼,用于向 ls 指令添加顏色輸出。這通常用于區(qū)分不同的文件類型并使用戶對文件類型等信息一目了然。
MAIL當(dāng)前用戶郵箱的路徑
PATH系統(tǒng)在查找指令時會檢查的目錄列表。當(dāng)用戶輸入一個指令時,系統(tǒng)將按此目錄列表的順序檢查目錄,以尋找相應(yīng)的可執(zhí)行文件。
LANG當(dāng)前的語言和本地化設(shè)置,包括字符編碼。
HOME當(dāng)前用戶的主目錄
_上一個被執(zhí)行的指令

除了以上這些環(huán)境變量,你也可能會經(jīng)常遇到以下這些 Shell 變量:

變量名含義
BASHOPTS執(zhí)行 bash 時所啟用的選項列表,這對于確定 Shell 環(huán)境是否按照預(yù)期的方式運行很有幫助。
BASH_VERSION人類可讀格式的正在執(zhí)行的 bash 版本
BASH_VERSINFO機器可讀格式的正在執(zhí)行的 bash 版本
COLUMNS用于設(shè)置繪制到屏幕上的輸出信息的寬的列數(shù)
DIRSTACKpushd 和 popd 命令可用的目錄堆棧。
HISTFILESIZE存儲到文件中的命令歷史記錄的行數(shù)。默認(rèn)為 ~/.bash_history 文件的行數(shù)。
HISTSIZE內(nèi)存中允許存儲的命令歷史記錄的行數(shù),即 histroy 命令所能打印出來的行數(shù)。
HOSTNAME計算機的主機名
IFS內(nèi)部字段分隔符,用于分隔命令行上的輸入。默認(rèn)以空格作為分隔符。
PS1定義主命令提示符。這用于定義啟動 Shell 會話時命令提示符的外觀。而 PS2 用于聲明跨越多行的命令的命令提示符。
SHELLOPTS可以用 set 命令設(shè)置的 Shell 選項。
UID當(dāng)前用戶的 UID (用戶 ID)

查看 Shell 變量與環(huán)境變量

在 Linux 系統(tǒng)中,有以下幾種命令可以讓你查看環(huán)境變量:

env — 該命令可以讓你在自定義的環(huán)境中運行程序,并且不需要改變當(dāng)前的環(huán)境。當(dāng)不帶參數(shù)使用 env 命令時,它會打印出當(dāng)前的環(huán)境變量列表。

printenv — 可以打印出所有的或者指定的環(huán)境變量。

set — 該命令可以設(shè)置或者刪除 Shell 變量。當(dāng)不帶參數(shù)使用 set 命令時,它將打印出包括環(huán)境變量與 Shell 變量在內(nèi)的所有變量以及  Shell 函數(shù)的列表。

默認(rèn)狀態(tài)下,env 和 printenv 的功能是完全相同的:

$ printenv  SSH_CONNECTION=10.0.2.2 37182 10.0.2.15 22 LESSCLOSE=/usr/bin/lesspipe %s %s LANG=C.UTF-8 XDG_SESSION_ID=5 USER=alvin MYVAR=lxlinux.net PWD=/home/alvin HOME=/home/alvin SSH_CLIENT=10.0.2.2 37182 22 XDG_DATA_DIRS=/usr/local/share:/usr/share:/var/lib/snapd/desktop SSH_TTY=/dev/pts/0 MAIL=/var/mail/alvin TERM=xterm-256color SHELL=/bin/bash SHLVL=1 LOGNAME=alvin XDG_RUNTIME_DIR=/run/user/1000 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin LESSOPEN=| /usr/bin/lesspipe %s _=/usr/bin/printenv

只有在更具體的功能上才能體現(xiàn)出 env 命令與 printenv 命令的區(qū)別。例如,使用 printenv命令,你可以請求單個變量的值:

$ printenv SHELL /bin/bash $ printenv HOME /home/alvin $ printenv MYVAR lxlinux.net

env 命令可通過將一組變量傳遞給命令來修改程序運行的環(huán)境:

env MYVAR=lxlinux.net command_to_run command_options

printenv 與 env 命令只能打印出環(huán)境變量,而如果你想打印出所有變量或者 Shell 函數(shù)的列表,你可以使用 set 指令。

$ set BASH=/bin/bash BASHOPTS=checkwinsize:cmdhist:complete_fullquote:expand_aliases:extglob:extquote:force_fignore:histappend:interactive_comments:login_shell:progcomp:promptvars:sourcepath BASH_ALIASES=() BASH_ARGC=() BASH_ARGV=() BASH_CMDS=() BASH_COMPLETION_VERSINFO=([0]="2" [1]="8") BASH_LINENO=() BASH_SOURCE=() BASH_VERSINFO=([0]="4" [1]="4" [2]="20" [3]="1" [4]="release" [5]="x86_64-pc-linux-gnu") BASH_VERSION='4.4.20(1)-release' COLUMNS=140 DIRSTACK=() EUID=1000 GROUPS=() HISTCONTROL=ignoreboth HISTFILE=/home/alvin/.bash_history HISTFILESIZE=2000 HISTSIZE=1000 HOME=/home/alvin HOSTNAME=ubuntu-bionic HOSTTYPE=x86_64 IFS=$' \t\n' LANG=C.UTF-8 LESSCLOSE='/usr/bin/lesspipe %s %s' LESSOPEN='| /usr/bin/lesspipe %s' LINES=35 LOGNAME=alvin .....

該命令將顯示一個包含所有變量的大列表,因此你可能會希望將輸出傳遞給 less 命令。

$ set | less

設(shè)置 Shell 變量與環(huán)境變量

Linux 系統(tǒng)中可以設(shè)置環(huán)境變量的命令有以下幾種:

set — 該命令可以設(shè)置或者取消設(shè)置 Shell 變量。當(dāng)不帶參數(shù)使用 set 命令時,它將打印出包括環(huán)境變量與 Shell 變量在內(nèi)的所有變量以及  Shell 函數(shù)的列表。

unset — 該命令可以刪除 Shell 變量以及環(huán)境變量。

export — 該命令可以設(shè)置環(huán)境變量。

為了更好地理解 Shell 變量和環(huán)境變量之間的區(qū)別,我們先從設(shè)置 Shell 變量開始講,然后再講環(huán)境變量。

先從在當(dāng)前會話中定義一個 Shell 變量開始:

$ MYVAR=lxlinux

你可以用 echo $MYVAR 來驗證變量是否已設(shè)置:

$ echo $MYVAR lxlinux

使用 printenv 命令檢驗該變量是否為環(huán)境變量:

$ printenv MYVAR

沒有輸出返回,這就意味著 MYVAR 變量并不是環(huán)境變量。

export 命令可以用來設(shè)置環(huán)境變量。要創(chuàng)建環(huán)境變量,只需用 export 命令將 Shell 變量導(dǎo)出為環(huán)境變量:

$ export MYVAR

你可以用以下語句檢驗:

$ printenv MYVAR lxlinux

當(dāng)然,你也可以只用一行代碼來設(shè)置環(huán)境變量:

$ export MYNEWVAR="My New Variable"

但是以這種方式創(chuàng)建的環(huán)境變量只能用于當(dāng)前會話,如果你打開一個新的 Shell 會話,或者退出登陸,所有的變量都將會丟失。

我們也可以將環(huán)境變量還原為 Shell 變量,或者將其完全刪除:

MYVAR 變量被定義為環(huán)境變量,我們可以通過輸入以下代碼將其還原為 Shell 變量:

$ export -n MYVAR

這樣,MYVAR 變量就不再是環(huán)境變量了,但依然還是 Shell 變量。

無論是 Shell 變量還是環(huán)境變量,想要完全刪除變量,都可以使用 unset 命令來刪除:

$ unset MYVAR

可以通過以下語句來驗證 MYVAR 變量已經(jīng)刪除:

$ echo $MYVAR

由于變量已經(jīng)刪除了,所以沒有任何返回。

環(huán)境變量的持久化

許多程序都需要使用環(huán)境變量來決定具體的執(zhí)行方式,但是,我們并不希望每次啟動新的 Shell  會話時都必須重新設(shè)置重要的變量,因此我們需要將重要的環(huán)境變量寫入配置文件中。

Shell 會話有不同的啟動方式,比如,連接到終端的交互式 Shell 與未連接到終端的非交互式 Shell,還有登錄式 Shell 與非登錄式  Shell, 而 bash Shell 會根據(jù)會話不同的啟動方式而讀取不同的配置文件。

但是,在大多數(shù) Linux 發(fā)行版中,當(dāng)你啟動一個新的 Shell 會話時,一般都會從以下文件中讀取環(huán)境變量:

/etc/environment — 使用此文件來設(shè)置系統(tǒng)范圍內(nèi)可用的環(huán)境變量。

/etc/profile — 每當(dāng) bash 登錄 Shell 時,都會加載此文件中設(shè)置的變量。

~/.bashrc — 每個用戶特定的 Shell 配置文件。例如, 如果你使用的是Bash,就可以在其中聲明變量。

如果要將新的環(huán)境變量加載到當(dāng)前的 Shell 會話中,可以使用source命令:

$ source ~/.bashrc

如果你想要設(shè)置環(huán)境變量,你就可以考慮將其添加到 /etc/profile 、/etc/bash.bashrc 或/etc/environment  文件中。

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“怎么設(shè)置與查看Linux系統(tǒng)中的環(huán)境變量”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI