在 FreeBSD 中,很多日常的工作是在一個叫做 shell
的文字介面中完成的。
Shell 的主要工作就是從輸入中收到命令並執行它們。
許多 shell 也有內建一些有助於日常工作的指令,
像是檔案管理、檔案比對、命令列編輯、指令巨集以及環境變數等。
FreeBSD 有內附了幾個 shell,像是 sh
,
Bourne Shell,以及 tcsh
,改良版的 C-shell。
還有許多其他的 shell 可以從 FreeBSD Ports Collection
中取得,像是 zsh
以及 bash
等。
您用哪個 shell 呢? 其實每個人的喜好都不一樣。
如果您是一個 C 程式設計師,那對於使用像是 tcsh
這種 C-like 的 shell 可能會感到相當愉快。 如果你是從 Linux
跳過來的,或者您是一個 UNIX® 新手,那您也許會想要用
bash
來當作文字介面。
每一個 shell 都有自已獨特之處,至於這些特點能不能配合您的工作環境?
那就是您選擇 shell 的重點了。
檔名自動補齊就是常見的 shell 功能。
首先輸入指令或檔案的前幾個字母,這時通常您只需要按下 Tab
鍵,接下來 shell 就會自動把指令或是檔案名稱剩餘的部份補齊。
假設您有兩個檔案分別叫作 foobar
及
foo.bar
。 現在要刪掉
foo.bar
,那麼可以輸入:
rm fo[Tab].[Tab]
Shell 會印出這個: rm foo[嗶].bar
。
[嗶] 是 console 的響鈴,這嗶的一聲是 shell
在告訴我說它沒有辦法完全自動補齊檔名,因為有不只一個檔名符合條件。
foobar
和 foo.bar
都是
fo
開頭的檔名,不過它至少可以補齊到 foo
。
如果您接著輸入 .
然後再按 Tab
一次,那 shell 就能夠替您把剩下的檔名填滿了。
Shell 的另一項特點是使用了環境變數。 環境變數是以變數與鍵值(variable/key)的對應關係儲存於 shell 的環境空間中,任何由 shell 所產生的程序都可以讀取此空間, 因此這個空間儲存了許多程序的設定組態。 在此附上 一份常見環境變數與其涵義的列表:
變數 | 詳細說明 |
---|---|
USER | 目前登入的使用者名稱。 |
PATH | 以冒號(:)隔開的目錄列表,用以搜尋執行檔的路徑。 |
DISPLAY | 若存在這個環境變數,則代表 X11 連結顯示器的網路名稱。 |
SHELL | 目前使用的 shell。 |
TERM | 使用者終端機的名稱,能藉由此變數判斷終端機的能力。 |
TERMCAP | Database entry of the terminal escape codes to perform various terminal functions. |
OSTYPE | 作業系統的種類,如:FreeBSD。 |
MACHTYPE | 目前系統所用的 CPU 架構。 |
EDITOR | 使用者偏好的文字編輯器。 |
PAGER | 使用者偏好的文字分頁器(text pager)。 |
MANPATH | 以冒號(:)隔開的目錄列表,用以搜尋 manual pages 的路徑。 |
在不同的 shell 底下設定環境變數的方式也有所不同。
舉例來說,在 C-Style 的 shell 底下,像是
tcsh
和 csh
,你必須使用
setenv
來設定環境變數。
但在 Bourne shells 底下,像是 sh
和
bash
,你則必須使用
export
來設定你所使用的環境變數。
再舉個例子來說,若要設定或是修改
EDITOR
這個環境變數,在 csh
或
tcsh
下設定 EDITOR
這個環境變數為
/usr/local/bin/emacs
的指令是:
%
setenv EDITOR /usr/local/bin/emacs
在 Bourne shells 下則是:
%
export EDITOR="/usr/local/bin/emacs"
大多數的 shell 都支援使用者在命令列中將
$
字元放在變數之前,以取得環境變數的值。
舉例來說,echo $TERM
會
顯示出 $TERM
的設定值,這是因為 shell 取得了
$TERM
的設定值,
並將其傳給 echo
顯示出來。
Shell 中有某些特別的字元是來表示特殊的資料,我們將其稱作
meta-characters。 其中最常見的是
*
字元,他代表了檔名中的任意字元。
這些特殊字元可以用在檔名展開(filename globbing)上,舉例來說,輸入
echo *
會和輸入
ls
得到幾乎相同的結果,這是因為 shell 會將所有符合
*
字元的檔案傳到命令列上,再由
echo
顯示出來。
為了避免 shell 轉譯這些特殊字元,我們可以在這些特殊字元前放一個反斜線
(\
) 字元使他們跳脫(escape) shell 的轉譯。舉例來說,
echo $TERM
會印出你目前設定的終端機格式,
echo \$TERM
則會直接印出 $TERM
這幾個字。
變更 shell 最簡單的方法就是透過 chsh
命令。
執行 chsh
將會呼叫環境變數中 EDITOR
指定的文字編輯器。 如果沒有設定,則預設是 vi
。
請依照需求去修改 “Shell:” 的值。
你也可以透過 chsh
的參數 -s
,
這可以直接設定你的 shell 而不需要透過任何文字編輯器。 例如,
假設想把所用的 shell 改為 bash
,
可以透過下列的方式:
%
chsh -s /usr/local/bin/bash
你所使用的 shell 必須 列於
/etc/shells
裡頭。 如果是由
Ports Collection 來裝 shell,
那這個步驟已經完成了。 但若是手動安裝了一個 shell,
那麼就必須為新安裝的 shell 進行設定。
舉例來說,若手動安裝了 bash
並將它置於
/usr/local/bin
底下,你還得:
#
echo "/usr/local/bin/bash" >> /etc/shells
然後再重新執行 chsh
。
本文及其他文件,可由此下載: ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/。
若有 FreeBSD 方面疑問,請先閱讀
FreeBSD 相關文件,如不能解決的話,再洽詢
<questions@FreeBSD.org>。
關於本文件的問題,請洽詢
<doc@FreeBSD.org>。