事實(shí)是上,您可以不懂任何 shell ,就能使用 Linux 。您啟動(dòng)系統(tǒng)后可以直接進(jìn)入 X Window ,最后在 X Window 下關(guān)機(jī)。 我堅(jiān)信,用 Linux 而不懂 shell ,就象開車只會(huì)用頭檔(first gear)一樣。當(dāng)然,最初看起來,直接而簡(jiǎn)單,在大多數(shù)情況下都管用。但速度慢,而且無(wú)法真正體驗(yàn)駕駛的樂趣。
對(duì),命令行很有趣。就象用一大堆收集到的積木,竟可以完成許多意想不到的創(chuàng)舉,一些極其復(fù)雜的工作,只需幾行命令就可以解決。這是因?yàn)椋?Unix 中,shell 可不是簡(jiǎn)單的命令解釋器(典型的有 Windows 中的 DOS ),而是一個(gè)全功能的編程環(huán)境。 這并不意味著 shell 非常容易學(xué)通,您知道,好事多磨,這還是要花點(diǎn)工夫的。;-) 但請(qǐng)相信我,這絕對(duì)值得。您在很短時(shí)間內(nèi),就能被一大幫門外漢吹捧為 Unix wizard(奇才) 。*grin*
在八十年代初期,產(chǎn)生了一個(gè) Unix 的圖形子系統(tǒng)-- the X Window System 。九十年代早期,為了更好地實(shí)現(xiàn)基于 Intel 的 Unix 類系統(tǒng)上(如FreeBSD、NetBSD、Linux)的應(yīng)用,產(chǎn)生了一個(gè)系統(tǒng)分支-- XFree86 。
X Window 中一個(gè)很大的好處是可以運(yùn)行多個(gè)虛擬(virtual)終端。甚至在 X Window 下就有這么個(gè)應(yīng)用程序--'xterm'。您將發(fā)現(xiàn)'xterm'和'virtual terminal'在很多情況下都是一樣的。有的地方說'打開一個(gè) xterm',其實(shí)您不是非要用'xterm'程序,其他的終端模擬器(terminal emulator),如 rxvt、konsole、aterm、eterm、wterm 等等,一樣有效。
當(dāng)您登入系統(tǒng)或打開一個(gè) xterm 窗口,首先看到的是提示符(prompt)。Red Hat Linux 的標(biāo)準(zhǔn)提示符包括了您的用戶名、登入的主機(jī)名(沒有設(shè)置的話,是'localhost')、當(dāng)前所在的目錄(working directory)、提示符號(hào):
[tom@belbo tom]$
我以用戶名'tom'登入名為'belbo'的主機(jī),當(dāng)前在我的 home 目錄--'/home/tom'中。'root'的提示符:
順帶指出,當(dāng)您敲 ENTER 時(shí),光標(biāo)(cursor)在哪里并不要緊,因?yàn)?shell 總是會(huì)整行地讀取。
基本的命令有:'ls'(list directory ,列出目錄內(nèi)容)、'cp'(copy ,復(fù)制)、'mv'(move / rename ,移動(dòng)/重命名),'cd '(change directory ,改變目錄),這些命令后面都可以跟上一幫可選項(xiàng),這方面 man page 有詳細(xì)的介紹(man ls, man mv 等等)。 在您動(dòng)身前往 shell 領(lǐng)地前,這里有幾個(gè)術(shù)語(yǔ)(terminology)的簡(jiǎn)短說明。命令可能帶一些可選項(xiàng)(options)、參數(shù)(arguments):
mv -i file dir
其中'-i'是命令'mv'的一個(gè)可選項(xiàng),而'file'和'dir'則是參數(shù)。所有可選項(xiàng)在該命令的 man page 都中有詳細(xì)的介紹(此例中用 man mv),而參數(shù)則由您提供??蛇x項(xiàng)決定命令如何工作,而參數(shù)則用于確定命令作用的目標(biāo)。
到目前為止,介紹得有點(diǎn)象許多人厭惡輕視的 DOS shell ,但伴隨著下面的介紹,您將會(huì)有新的體驗(yàn)。
l CTRL k>:刪除從光標(biāo)到行尾的部分 l CTRL u>:刪除從光標(biāo)到行首的部分 l ALT d>:刪除從光標(biāo)到當(dāng)前單詞結(jié)尾的部分 l CTRL w>:刪除從光標(biāo)到當(dāng)前單詞開頭的部分 l CTRL a>:將光標(biāo)移到行首 l CTRL e>:將光標(biāo)移到行尾 l ALT a>:將光標(biāo)移到當(dāng)前單詞頭部 l ALT e>:將光標(biāo)移到當(dāng)前單詞尾部 l CTRL y>:插入最近刪除的單詞 l !$>:重復(fù)前一個(gè)命令最后的參數(shù)。
例如:您用命令 mkdir peter/pan/documents/tinkerbell 新建了一個(gè)目錄,現(xiàn)在您向用命令'cd'進(jìn)入該目錄,您可以用 cd !$,shell 將把前一個(gè)命令'mkdir'的參數(shù)添加到現(xiàn)在的'cd'后面。
Red Hat Linux 帶有不少快捷方式,其中一部分是 bash 原來就有的,而還有一些則是為您預(yù)先設(shè)置的(在后面您將看到如何設(shè)置)。
由于 home 目錄是每位用戶的活動(dòng)中心,許多 Unix 對(duì)此有特殊的快捷方式。
'~'就是您的 home 目錄的簡(jiǎn)寫形式。我們假設(shè)您在其他目錄,想把一個(gè)名為'sometext'的文件復(fù)制到您 home 目錄下的 'docs'子目錄中。除了輸入:
cp sometext /home/myusername/docs
您還可以用簡(jiǎn)寫:
cp sometext ~/docs
理論上,這也可以應(yīng)用在命令'cd'上。無(wú)論當(dāng)前路徑在哪里,cd ~ 將回到您的 home 目錄。其實(shí)還可以簡(jiǎn)化,只要鍵入 cd ,就可以返回 home 目錄了。
Red Hat Linux 為您提供了一些預(yù)先設(shè)置的快捷方式(稱為'別名',aliases),比如:
l ll :將執(zhí)行'ls -l -k'(以長(zhǎng)格式列出目錄內(nèi)容,包括一些文件屬性,并以 KB 而不是 byte 為單位顯示文件大?。? l ls :將執(zhí)行'ls -F --color=auto'(列出目錄內(nèi)容,加上文件類型標(biāo)識(shí),并使用顏色)
這將被讀為:除了以'6.bak'結(jié)尾的文件,刪除其他所有以'.bak'結(jié)尾的文件。您必須將取反號(hào)(negation sign)與取反字符(這里是 6)放到括號(hào)中,不然的話,shell 會(huì)將驚嘆號(hào)(exclamation mark)解釋成歷史記錄替換的開始(the beginning of a history substitution)。取反號(hào)在本篇介紹的所有匹配模式中都有效。
l .bash_history :記錄了您以前輸入的命令, l .bash_logout :當(dāng)您退出 shell 時(shí),要執(zhí)行的命令, l .bash_profile :當(dāng)您登入 shell 時(shí),要執(zhí)行的命令, l .bashrc :每次打開新的 shell 時(shí),要執(zhí)行的命令。
#!/bin/bash # # This file echoes a bunch of color codes to the # terminal to demonstrate what's available. Each # line is the color code of one forground color, # out of 17 (default + 16 escapes), followed by a # test use of that color on all nine background # colors (default + 8 escapes). # T='gYw' # The test text echo -e "\n 40m 41m 42m 43m\ 44m 45m 46m 47m"; for FGs in ' m' ' 1m' ' 30m' '1;30m' ' 31m' '1;31m' ' 32m' \ '1;32m' ' 33m' '1;33m' ' 34m' '1;34m' ' 35m' '1;35m' \ ' 36m' '1;36m' ' 37m' '1;37m'; do FG=${FGs// /} echo -en " $FGs \033[$FG $T " for BG in 40m 41m 42m 43m 44m 45m 46m 47m; do echo -en "$EINS \033[$FG\033[$BG $T \033[0m"; done echo; done echo
您可以用'alias'在命令行快速地創(chuàng)建別名,或?qū)⒚罘诺礁髯缘?~/.bashrc',或放到系統(tǒng)級(jí)的'/etc/profile.d/alias.sh'中(而在 Mandrake Linux 8 以前的版本里,用的是'/etc/bashrc')。要?jiǎng)h除一個(gè)別名,只要輸入:unalias alias 。運(yùn)行 alias 將列出您系統(tǒng)中所有定義的別名。
如果看一下'~/.bashrc'和'/etc/profile.d/alias.sh',您會(huì)發(fā)現(xiàn)系統(tǒng)已經(jīng)定義了一些別名。您可以為同一個(gè)命令定義多個(gè)別名。當(dāng)然,您得先確認(rèn)別名與其他程序名不同,比如象 alias rm='ls -l' 這樣的就不能工作。您可以在命令行輸入這些快捷方式,測(cè)試一下。如果 shell 找不到相同名稱的命令,那您就可以將其用作別名了。
以下別名可能有用(不要忘了引號(hào)!) :
l alias rpmq='rpm -qa | grep' :現(xiàn)在 rpmq string 就將列出所有名稱中含有 string 的已安裝 RPM 包, l alias ls='ls -ho --color | more' :ls 將以彩色分頁(yè)方式列出文件,文件大小以 KB為單位, l alias use='du --max-depth=1 | sort -n | more' :use 將子目錄按大小排好,并以分頁(yè)方式列出,
function apros() { apropos $1 | egrep -v '(3|\(n\)'; }
定義了一個(gè)新命令,稱為'apros'。apros name 將先執(zhí)行'apropos name'(即在 man page 中搜索命令),然后將得到的輸出送到管道(|),接著用'egrep'過濾,排除第'3'和第'n'章節(jié)的 man page ,這個(gè)命令可能沒什么大用處,但可以整理'apropos'命令的輸出。