如何管理你的 Linux 環境變數

2019-05-29 23:41:00

Linux 使用者環境變數可以幫助你找到你需要的命令,無須了解系統如何設定的細節而完成大量工作。而這些設定來自哪裡和如何被修改它們是另一個話題。

在 Linux 系統上的使用者賬戶設定以多種方法簡化了系統的使用。你可以執行命令,而不需要知道它們的位置。你可以重新使用先前執行的命令,而不用發愁系統是如何追蹤到它們的。你可以檢視你的電子郵件,檢視手冊頁,並容易地回到你的家目錄,而不用管你在檔案系統中身在何方。並且,當需要的時候,你可以調整你的賬戶設定,以便其更符合你喜歡的方式。

Linux 環境設定來自一系列的檔案:一些是系統範圍(意味著它們影響所有使用者賬戶),一些是處於你的家目錄中的組態檔裡。系統範圍的設定在你登入時生效,而本地設定在其後生效,所以,你在你賬戶中作出的更改將覆蓋系統範圍設定。對於 bash 使用者,這些檔案包含這些系統檔案:

/etc/environment/etc/bash.bashrc/etc/profile

以及一些本地檔案:

~/.bashrc~/.profile # 如果有 ~/.bash_profile 或 ~/.bash_login 就不會讀此檔案~/.bash_profile~/.bash_login

你可以修改本地存在的四個檔案的任何一個,因為它們處於你的家目錄,並且它們是屬於你的。

檢視你的 Linux 環境設定

為檢視你的環境設定,使用 env 命令。你的輸出將可能與這相似:

$ envLS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.spf=00;36:SSH_CONNECTION=192.168.0.21 34975 192.168.0.11 22LESSCLOSE=/usr/bin/lesspipe %s %sLANG=en_US.UTF-8OLDPWD=/home/shsXDG_SESSION_ID=2253USER=shsPWD=/home/shsHOME=/home/shsSSH_CLIENT=192.168.0.21 34975 22XDG_DATA_DIRS=/usr/local/share:/usr/share:/var/lib/snapd/desktopSSH_TTY=/dev/pts/0MAIL=/var/mail/shsTERM=xtermSHELL=/bin/bashSHLVL=1LOGNAME=shsDBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/busXDG_RUNTIME_DIR=/run/user/1000PATH=/home/shs/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/binLESSOPEN=| /usr/bin/lesspipe %s_=/usr/bin/env

雖然你可能會看到大量的輸出,上面顯示的第一大部分用於在命令列上使用顏色標識各種檔案型別。當你看到類似 *.tar=01;31: 這樣的東西,這告訴你 tar 檔案將以紅色顯示在檔案列表中,然而 *.jpg=01;35: 告訴你 jpg 檔案將以紫色顯現出來。這些顏色旨在使它易於從一個檔案列表中分辨出某些檔案。你可以在《在 Linux 命令列中自定義你的顏色》處學習更多關於這些顏色的定義,和如何自定義它們。

當你更喜歡一種不加裝飾的顯示時,一種關閉顏色顯示的簡單方法是使用如下命令:

$ ls -l --color=never

這個命令可以簡單地轉換到一個別名:

$ alias ll2='ls -l --color=never'

你也可以使用 echo 命令來單獨地顯現某個設定。在這個命令中,我們顯示在歷史快取區中將被記憶命令的數量:

$ echo $HISTSIZE1000

如果你已經移動到某個位置,你在檔案系統中的最後位置會被記在這裡:

PWD=/home/shsOLDPWD=/tmp

作出更改

你可以使用一個像這樣的命令更改環境設定,但是,如果你希望保持這個設定,在你的 ~/.bashrc 檔案中新增一行程式碼,例如 HISTSIZE=1234

$ export HISTSIZE=1234

“export” 一個變數的本意是什麼

匯出一個環境變數可使設定用於你的 shell 和可能的子 shell。預設情況下,使用者定義的變數是原生的,並不被匯出到新的進程,例如,子 shell 和指令碼。export 命令使得環境變數可用在子進程中發揮功用。

新增和移除變數

你可以很容易地在命令列和子 shell 上建立新的變數,並使它們可用。然而,當你登出並再次回來時這些變數將消失,除非你也將它們新增到 ~/.bashrc 或一個類似的檔案中。

$ export MSG="Hello, World!"

如果你需要,你可以使用 unset 命令來消除一個變數:

$ unset MSG

如果變數是區域性定義的,你可以通過載入你的啟動檔案來簡單地將其設定回來。例如:

$ echo $MSGHello, World!$ unset $MSG$ echo $MSG$ . ~/.bashrc$ echo $MSGHello, World!

小結

使用者賬戶是用一組恰當的啟動檔案設立的,建立了一個有用的使用者環境,而個人使用者和系統管理員都可以通過編輯他們的個人設定檔案(對於使用者)或很多來自設定起源的檔案(對於系統管理員)來更改預設設定。