
- Unix/Linux 初學者指南
- Unix/Linux - 首頁
- Unix/Linux - 什麼是Linux?
- Unix/Linux - 入門
- Unix/Linux - 檔案管理
- Unix/Linux - 目錄
- Unix/Linux - 檔案許可權
- Unix/Linux - 環境
- Unix/Linux - 基本工具
- Unix/Linux - 管道與過濾器
- Unix/Linux - 程序
- Unix/Linux - 通訊
- Unix/Linux - vi 編輯器
- Unix/Linux Shell 程式設計
- Unix/Linux - Shell 指令碼
- Unix/Linux - 什麼是Shell?
- Unix/Linux - 使用變數
- Unix/Linux - 特殊變數
- Unix/Linux - 使用陣列
- Unix/Linux - 基本運算子
- Unix/Linux - 決策
- Unix/Linux - Shell 迴圈
- Unix/Linux - 迴圈控制
- Unix/Linux - Shell 替換
- Unix/Linux - 引號機制
- Unix/Linux - I/O 重定向
- Unix/Linux - Shell 函式
- Unix/Linux - 手冊頁幫助
- 高階 Unix/Linux
- Unix/Linux - 標準 I/O 流
- Unix/Linux - 檔案連結
- Unix/Linux - 正則表示式
- Unix/Linux - 檔案系統基礎
- Unix/Linux - 使用者管理
- Unix/Linux - 系統性能
- Unix/Linux - 系統日誌
- Unix/Linux - 訊號和陷阱
Unix/Linux - 環境
在本章中,我們將詳細討論 Unix 環境。一個重要的 Unix 概念是**環境**,它由環境變數定義。一些由系統設定,另一些由您設定,還有一些由 shell 或載入另一個程式的任何程式設定。
變數是一個字元字串,我們為其分配一個值。分配的值可以是數字、文字、檔名、裝置或任何其他型別的資料。
例如,首先我們設定一個變數 TEST,然後我們使用**echo**命令訪問其值:
$TEST="Unix Programming" $echo $TEST
它產生以下結果。
Unix Programming
請注意,環境變數在設定時不使用$符號,但在訪問它們時,我們使用$符號作為字首。這些變數保留其值,直到我們退出 shell。
當您登入系統時,shell 會經歷一個稱為**初始化**的階段來設定環境。這通常是一個兩步過程,涉及 shell 讀取以下檔案:
- /etc/profile
- .profile
過程如下:
shell 檢查檔案/etc/profile是否存在。
如果存在,shell 會讀取它。否則,將跳過此檔案。不會顯示任何錯誤訊息。
shell 檢查檔案.profile是否在您的主目錄中存在。您的主目錄是您登入後開始所在的目錄。
如果存在,shell 會讀取它;否則,shell 會跳過它。不會顯示任何錯誤訊息。
一旦這兩個檔案都被讀取,shell 就會顯示一個提示符:
$
這是您可以輸入命令以執行它們的提示符。
注意 - 此處詳細介紹的 shell 初始化過程適用於所有Bourne型別的 shell,但bash和ksh使用一些其他檔案。
.profile 檔案
檔案/etc/profile由您的 Unix 機器系統管理員維護,包含系統上所有使用者所需的 shell 初始化資訊。
檔案.profile由您控制。您可以將任意數量的 shell 自定義資訊新增到此檔案中。您需要配置的最小資訊集包括:
- 您正在使用的終端型別。
- 用於查詢命令的目錄列表。
- 影響終端外觀的一系列變數。
您可以檢查您主目錄中可用的.profile。使用 vi 編輯器開啟它,並檢查為您的環境設定的所有變數。
設定終端型別
通常,您正在使用的終端型別由login或getty程式自動配置。有時,自動配置過程會錯誤地猜測您的終端。
如果您的終端設定不正確,命令的輸出可能看起來很奇怪,或者您可能無法正確地與 shell 互動。
為了確保不會出現這種情況,大多數使用者以以下方式將其終端設定為最低公分母:
$TERM=vt100 $
設定 PATH
當您在命令提示符下鍵入任何命令時,shell 必須在執行命令之前找到該命令。
PATH 變數指定 shell 應該在其中查詢命令的位置。通常,Path 變數設定為如下所示:
$PATH=/bin:/usr/bin $
這裡,由冒號字元(:)分隔的每個單獨的條目都是目錄。如果您請求 shell 執行一個命令,並且它在 PATH 變數中給出的任何目錄中都找不到它,則會出現類似以下的訊息:
$hello hello: not found $
有一些變數如 PS1 和 PS2,將在下一節中討論。
PS1 和 PS2 變數
shell 顯示為命令提示符的字元儲存在變數 PS1 中。您可以將此變數更改為您想要的任何內容。一旦更改它,shell 將從那時起使用它。
例如,如果您發出以下命令:
$PS1='=>' => => =>
您的提示符將變為=>。要設定PS1的值以便顯示工作目錄,請發出以下命令:
=>PS1="[\u@\h \w]\$" [root@ip-72-167-112-17 /var/www/tutorialspoint/unix]$ [root@ip-72-167-112-17 /var/www/tutorialspoint/unix]$
此命令的結果是提示符顯示使用者的使用者名稱、機器的名稱(主機名)和工作目錄。
有相當多的轉義序列可以用作 PS1 的值引數;嘗試將自己限制在最關鍵的那些,以便提示符不會用資訊淹沒您。
序號 | 轉義序列和描述 |
---|---|
1 |
\t 當前時間,表示為 HH:MM:SS |
2 |
\d 當前日期,表示為星期幾 月份 日期 |
3 |
\n 換行符 |
4 |
\s 當前 shell 環境 |
5 |
\W 工作目錄 |
6 |
\w 工作目錄的完整路徑 |
7 |
\u 當前使用者的使用者名稱 |
8 |
\h 當前機器的主機名 |
9 |
\# 當前命令的命令編號。輸入新命令時增加 |
10 |
\$ 如果有效 UID 為 0(即,如果您以 root 身份登入),則以 # 字元結束提示符;否則,使用 $ 符號 |
您可以每次登入時自行進行更改,也可以透過將其新增到.profile檔案中使其自動在 PS1 中進行更改。
當您發出的命令不完整時,shell 將顯示一個輔助提示符並等待您完成命令並再次按Enter鍵。
預設的輔助提示符為>(大於號),但可以透過重新定義PS2 shell 變數來更改:
以下是使用預設輔助提示符的示例:
$ echo "this is a > test" this is a test $
以下示例使用自定義提示符重新定義了 PS2:
$ PS2="secondary prompt->" $ echo "this is a secondary prompt->test" this is a test $
環境變數
以下是重要環境變數的部分列表。這些變數的設定和訪問方式如下:
序號 | 變數和描述 |
---|---|
1 |
DISPLAY 包含X11程式預設應使用的顯示的識別符號。 |
2 |
HOME 指示當前使用者的 home 目錄:cd內建命令的預設引數。 |
3 |
IFS 指示擴充套件後由解析器用於單詞拆分的內部欄位分隔符。 |
4 |
LANG LANG 擴充套件到預設系統區域設定;LC_ALL 可用於覆蓋此設定。例如,如果其值為pt_BR,則語言設定為(巴西)葡萄牙語,區域設定為巴西。 |
5 |
LD_LIBRARY_PATH 具有動態連結器的 Unix 系統,包含一個冒號分隔的目錄列表,在 exec 後構建程序映像時,動態連結器應在其中搜索共享物件,然後在搜尋任何其他目錄之前。 |
6 |
PATH 指示命令的搜尋路徑。它是一個冒號分隔的目錄列表,shell 在其中查詢命令。 |
7 |
PWD 指示由 cd 命令設定的當前工作目錄。 |
8 |
RANDOM 每次引用時生成 0 到 32,767 之間的隨機整數。 |
9 |
SHLVL 每次啟動 bash 例項時遞增 1。此變數對於確定內建 exit 命令是否結束當前會話很有用。 |
10 |
TERM 指的是顯示型別。 |
11 |
TZ 指的是時區。它可以取 GMT、AST 等值。 |
12 |
UID 擴充套件到當前使用者的數字使用者 ID,在 shell 啟動時初始化。 |
以下是一個示例,顯示了一些環境變數:
$ echo $HOME /root ]$ echo $DISPLAY $ echo $TERM xterm $ echo $PATH /usr/local/bin:/bin:/usr/bin:/home/amrood/bin:/usr/local/bin $