1. 程式人生 > 實用技巧 >Linux重要的環境變數

Linux重要的環境變數

1.Linux 系統執行命令的4個步驟

第 1 步:判斷使用者是否以絕對路徑或相對路徑的方式輸入命令(如/bin/ls),如果是的話則直接執行。
第 2 步:Linux 系統檢查使用者輸入的命令是否為“別名命令”,即用一個自定義的命令名稱來替換原本的命令名稱。
可以用alias 命令來建立一個屬於自己的命令別名,格式為“alias 別名=命令”。若要取消一個命令別名,則是用unalias 命令,格式為“unalias 別名”。
舉例:使用rm 命令刪除檔案時,Linux 系統都會要求我們再確認是否執行刪除操作,其實這就是Linux 系統為了防止使用者誤刪除檔案而特意設定的rm 別名命令,接下來我們把它取消掉:

[root@Centos test]# ll
total 12
-rw-r--r--. 1 root root 122 Aug  4 16:58 a.txt
-rw-r--r--. 1 root root  53 Aug  5 16:00 error.txt
-rw-r--r--. 1 root root  43 Aug  5 15:50 readme.txt
[root@Centos test]# 
[root@Centos test]# rm readme.txt 
rm: remove regular file ‘readme.txt’? y
[root@Centos test]# 
[root@Centos test]# alias 
rm alias rm='rm -i' [root@Centos test]# unalias rm [root@Centos test]# [root@Centos test]# rm error.txt [root@Centos test]# ll total 4 -rw-r--r--. 1 root root 122 Aug 4 16:58 a.txt

第 3 步:Bash 直譯器判斷使用者輸入的是內部命令還是外部命令。內部命令是直譯器內部的指令,會被直接執行;而使用者在絕大部分時間輸入的是外部命令,這些命令交由步驟4 繼續處理。可以使用“type 命令名稱”來判斷使用者輸入的命令是內部命令還是外部命令。

第 4 步:系統在多個路徑中查詢使用者輸入的命令檔案,而定義這些路徑的變數叫作PATH,可以簡單地把它理解成是“直譯器的小助手”,作用是告訴Bash 直譯器待執行的命令可能存放的位置,然後Bash 直譯器就會乖乖地在這些位置中逐個查詢。PATH 是由多個路徑值組成的變數,每個路徑值之間用冒號間隔,對這些路徑的增加和刪除操作將影響到Bash 直譯器對Linux 命令的查詢。

[root@Centos ~]# echo $PATH /usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin 
[root@
Centos ~]# PATH=$PATH:/root/bin /usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/root/bin

這裡有比較經典的問題:“為什麼不能將當前目錄(.)新增到PATH 中呢? ” 原因是,儘管可以將當前目錄(.)新增到PATH 變數中,從而在某些情況下可以讓使用者免去輸入命令所在路徑的麻煩。但是,如果黑客在比較常用的公共目錄/tmp 中存放了一個與ls 或cd 命令同名的木馬檔案,而使用者又恰巧在公共目錄中執行了這些命令,那麼就極有可能中招了。所以,作為一名態度謹慎、有經驗的運維人員,在接手了一臺Linux 系統後一定會在執行命令前先檢查PATH 變數中是否有可疑的目錄

最重要的10 個環境變數

Linux 作為一個多使用者多工的作業系統,能夠為每個使用者提供獨立的、合適的工作執行環境,因此,一個相同的變數會因為使用者身份的不同而具有不同的值。

舉例:檢視HOME 變數在不同使用者身份下都有哪些值

[root@Centos test]# echo $HOME
/root
[root@Centos test]# su - centos
Last login: Thu Jul 30 02:21:51 CST 2020 on :0
[centos@Centos ~]$ echo $HOME
/home/centos

實變數是由固定的變數名與使用者或系統設定的變數值兩部分組成的,我們完全可以自行建立變數,來滿足工作需求。

舉例:

[root@Centos test]# mkdir work
[root@Centos test]# WORKDIR=/root/test/work
[root@Centos test]# cd $WORKDIR
[root@Centos work]# pwd
/root/test/work

但是,這樣的變數不具有全域性性,作用範圍也有限,預設情況下不能被其他使用者使用。如果工作需要,可以使用export 命令將其提升為全域性變數,這樣其他使用者也就可以使用它了:

[root@Centos workdir]# su centos
[centos@Centos ~]$ cd $WORKDIR
[centos@Centos ~]$ pwd
/home/centos
[centos@Centos ~]$ exit
logout
[root@Centos work]# export WORKDIR
[root@Centos workdir]# su centos
[centos@Centos work]$ cd $WORKDIR
bash: cd: /root/test/work: Permission denied
[centos@Centos work]$ cd /root/test/work/
bash: cd: /root/test/work/: Permission denied