一說到命令行,我們真正指的是 shell。shell 就是一個程序,它接受從鍵盤輸入的命令, 然后把命令傳遞給操作系統去執行。幾乎所有的 Linux 發行版都提供一個名為 bash 的 來自 GNU 項目的 shell 程序。“bash” 是 “Bourne Again SHell” 的首字母縮寫, 所指的是這樣一個事實,bash 是最初 Unix 上由 Steve Bourne 寫成 shell 程序 sh 的增強版。
## 終端仿真器
當使用圖形用戶界面時,我們需要另一個和 shell 交互的叫做終端仿真器的程序。 如果我們瀏覽一下桌面菜單,可能會找到一個。雖然在菜單里它可能都 被簡單地稱為 “terminal”,但是 KDE 用的是 konsole , 而 GNOME 則使用 gnome-terminal。 還有其他一些終端仿真器可供 Linux 使用,但基本上,它們都完成同樣的事情, 讓我們能訪問 shell。也許,你可能會因為附加的一系列花俏功能而喜歡上某個終端。
## 第一次按鍵
好,開始吧。啟動終端仿真器!一旦它運行起來,我們應該看到一行像這樣的文字:
~~~
[me@linuxbox ~]$
~~~
這叫做 shell 提示符,無論何時當 shell 準備好了去接受輸入時,它就會出現。然而, 它可能會以各種各樣的面孔顯示,這則取決于不同的 Linux 發行版, 它通常包括你的用戶名@主機名,緊接著當前工作目錄(稍后會有更多介紹)和一個美元符號。
如果提示符的最后一個字符是“#”, 而不是“$”, 那么這個終端會話就有超級用戶權限。 這意味著,我們或者是以 root 用戶的身份登錄,或者是我們選擇的終端仿真器提供超級用戶(管理員)權限。
假定到目前為止,所有事情都進行順利,那我們試著鍵入字符吧。在提示符下敲入 一些像下面一樣的亂七八糟的字符:
~~~
[me@linuxbox ~]$ kaekfjaeifj
~~~
因為這個命令沒有任何意義,所以 shell 會提示錯誤信息,并讓我們再試一下:
~~~
bash: kaekfjaeifj: command not found
[me@linuxbox ~]$
~~~
## 命令歷史
如果按下上箭頭按鍵,我們會看到剛才輸入的命令“kaekfjaeifj”重新出現在提示符之后。 這就叫做命令歷史。許多 Linux 發行版默認保存最后輸入的500個命令。 按下下箭頭按鍵,先前輸入的命令就消失了。
## 移動光標
可借助上箭頭按鍵,來獲得上次輸入的命令。現在試著使用左右箭頭按鍵。 看一下怎樣把光標定位到命令行的任意位置?通過使用箭頭按鍵,使編輯命令變得輕松些。
## 關于鼠標和光標
雖然,shell 是和鍵盤打交道的,但你也可以在終端仿真器里使用鼠標。X 窗口系統 (使 GUI 工作的底層引擎)內建了一種機制,支持快速拷貝和粘貼技巧。 如果你按下鼠標左鍵,沿著文本拖動鼠標(或者雙擊一個單詞)高亮了一些文本, 那么這些高亮的文本就被拷貝到了一個由 X 管理的緩沖區里面。然后按下鼠標中鍵, 這些文本就被粘貼到光標所在的位置。試試看。
> 注意: 不要在一個終端窗口里使用 Ctrl-c 和 Ctrl-v 快捷鍵來執行拷貝和粘貼操作。 它們不起作用。對于 shell 來說,這兩個控制代碼有著不同的含義,它們在早于 Microsoft Windows (定義復制粘貼的含義)許多年之前就賦予了不同的意義。
你的圖形桌面環境(像 KDE 或 GNOME),努力想和 Windows 一樣,可能會把它的聚焦策略 設置成“單擊聚焦”。這意味著,為了讓窗口聚焦(變成活動窗口)你需要單擊它。 這與“聚焦跟隨著鼠標”的傳統 X 行為不同,傳統 X 行為是指只要把鼠標移動到一個窗口的上方。 它能接受輸入, 但是直到你單擊窗口之前它都不會成為前端窗口。 設置聚焦策略為“聚焦跟隨著鼠標”,可以使拷貝和粘貼更方便易用。嘗試一下。 我想如果你試了一下你會喜歡上它的。你能在窗口管理器的配置程序中找到這個設置。
## 試試運行一些簡單命令
現在,我們學習了怎樣輸入命令,那我們執行一些簡單的命令吧。第一個命令是 date。 這個命令顯示系統當前時間和日期。
~~~
[me@linuxbox ~]$ date
Thu Oct 25 13:51:54 EDT 2007
~~~
一個相關聯的命令,cal,它默認顯示當前月份的日歷。
~~~
[me@linuxbox ~]$ cal
October 2007
Su Mo Tu We Th Fr Sa
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
~~~
查看磁盤剩余空間的數量,輸入 df:
~~~
[me@linuxbox ~]$ df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda2 15115452 5012392 9949716 34% /
/dev/sda5 59631908 26545424 30008432 47% /home
/dev/sda1 147764 17370 122765 13% /boot
tmpfs 256856 0 256856 0% /dev/shm
~~~
同樣地,顯示空閑內存的數量,輸入命令 free。
~~~
[me@linuxbox ~]$ free
total used free shared buffers cached
Mem: 2059676 846456 1213220 0
44028 360568
-/+ buffers/cache: 441860 1617816
Swap: 1042428 0 1042428
~~~
## 結束終端會話
我們可以通過關閉終端仿真器窗口,或者是在 shell 提示符下輸入 exit 命令來終止一個終端會話:
~~~
[me@linuxbox ~]$ exit
~~~
## 幕后控制臺
即使終端仿真器沒有運行,在后臺仍然有幾個終端會話運行著。它們叫做虛擬終端 或者是虛擬控制臺。在大多數 Linux 發行版中,這些終端會話都可以通過按下 Ctrl-Alt-F1 到 Ctrl-Alt-F6 訪問。當一個會話被訪問的時候, 它會顯示登錄提示框,我們需要輸入用戶名和密碼。要從一個虛擬控制臺轉換到另一個, 按下 Alt 和 F1-F6(中的一個)。返回圖形桌面,按下 Alt-F7。
## 拓展閱讀
* 想了解更多關于 Steve Bourne 的故事,Bourne Shell 之父,讀一下這篇文章:
[http://en.wikipedia.org/wiki/Steve_Bourne](http://en.wikipedia.org/wiki/Steve_Bourne)
* 這是一篇關于在計算機領域里,shells 概念的文章:
[http://en.wikipedia.org/wiki/Shell_(computing)](http://en.wikipedia.org/wiki/Shell_(computing))
- 第一章:引言
- 第二章:什么是shell
- 第三章:文件系統中跳轉
- 第四章:研究操作系統
- 第五章:操作文件和目錄
- 第六章:使用命令
- 第七章:重定向
- 第八章:從shell眼中看世界
- 第九章:鍵盤高級操作技巧
- 第十章:權限
- 第十一章:進程
- 第十二章:shell環境
- 第十三章:VI簡介
- 第十四章:自定制shell提示符
- 第十五章:軟件包管理
- 第十六章:存儲媒介
- 第十七章:網絡系統
- 第十八章:查找文件
- 第十九章:歸檔和備份
- 第二十章:正則表達式
- 第二十一章:文本處理
- 第二十二章:格式化輸出
- 第二十三章:打印
- 第二十四章:編譯程序
- 第二十五章:編寫第一個shell腳本
- 第二十六章:啟動一個項目
- 第二十七章:自頂向下設計
- 第二十八章:流程控制 if分支結構
- 第二十九章:讀取鍵盤輸入
- 第三十章:流程控制 while/until 循環
- 第三十一章:疑難排解
- 第三十二章:流程控制 case分支
- 第三十三章:位置參數
- 第三十四章:流程控制 for循環
- 第三十五章:字符串和數字
- 第三十六章:數組
- 第三十七章:奇珍異寶