[轉自LINUXEDEN]shell入門絕佳!(一)
今天發現一些SHELL的好東西,覺得有必要發到我的BLOG上來。轉貼。
原文:
中譯本:吳曉光
整理: 北南南北
目錄
+++++++++++++++++++++++++++++++++++++++++++++++++++++
正文
+++++++++++++++++++++++++++++++++++++++++++++++++++++
版權資訊
本文的內容來源於 MUO 的 Basics 部分,其原始英文版可以從這裡獲得。中文版來自吳曉光的CMUO 。MUO 是 Mandrake Linux( )為使用者提供的入門手冊,其內容實用並且實時更新,非常適合初學者做入門參考。與常見的各種Linux教程不同,MUO介紹給Linux初學者的是學習Linux的方法而非對某個系統的描述,這對各種有著千差萬別的Linux發行版的學習尤為重要。
本文編譯整理時對相關章節做了相應的刪改處理,去掉了針對Mandrake Linux的部分內容。
前言
使用 Shell
以下將介紹並解釋基本的 shell 命令和機制。
第一篇:超級工具/Terminals,xterms 和 Shells
一、超級工具
您或許聽過這樣的論調:命令列(the mommand line)早就已經過時了,那東西神秘兮兮的,等等。有些人甚至覺得作業系統中應該沒有這些命令才好。
事實是上,您可以不懂任何 shell ,就能使用 Linux 。您啟動系統後可以直接進入 X Window ,最後在 X Window 下關機。
我堅信,用 Linux 而不懂 shell ,就象開車只會用頭檔(first gear)一樣。當然,最初看起來,直接而簡單,在大多數情況下都管用。但速度慢,而且無法真正體驗駕駛的樂趣。
對,命令列很有趣。就象用一大堆收集到的積木,竟可以完成許多意想不到的創舉,一些極其複雜的工作,只需幾行命令就可以解決。這是因為,在 Unix 中,shell 可不是簡單的命令直譯器(典型的有 Windows 中的 DOS ),而是一個全功能的程式設計環境。
這並不意味著 shell 非常容易學通,您知道,好事多磨,這還是要花點工夫的。;-) 但請相信我,這絕對值得。您在很短時間內,就能被一大幫門外漢吹捧為 Unix wizard(奇才) 。*grin*
二、為了說明 shell ,這裡需要一些背景知識。
1、Terminals, xterms 與 Shells
追溯到 Unix 誕生的那個年代,當時還沒有現在流行的"個人計算機"。被稱為計算機的機器,還是吞吐磁帶與 magnetic memory (用術語'core'來表示系統 memory)的龐然大物。DEC 公司(現在的 Compaq)推出的 PDP-11 ,體積小(被稱為 mini)而且價格底,在大學中引起了巨大的反響,很多學校直到那時才買得起一臺計算機(PDP-11 物美價廉,只有 10000$)。
這些機器的作業系統由組合語言、機器語言寫成,所以執行起來效率很高,但都無法移植(unportable)。每家計算機公司都給自己的機器配上獨有的作業系統,然後再銷售。
這種笨拙的作法很快就被人們意識到了,於是就開始興建一個可以在不同品牌機器上執行的作業系統。1969 年,Ken Thompson 開始寫後來成為 Unix 的第一行程式碼。(Thompson 曾經參加了一個專案:MULTICS,Unix 是與這有關的一個玩笑詞) 其實,Dennis Ritchie 為這個新的作業系統設計了一種新的程式語言-- C 語言後,事情才真正開始。
雖然 Unix 的效率不及原來的作業系統,但有三個突出的優點:可以任意移植到其他機器,其中的 C 語言大大簡化了程式設計,而且這些都 free 。很快,全美國的大學都忙著開始為機器安裝 Unix 。
2、終端(Terminals)
Unix 是可以在許多種機器上執行的作業系統,但人們又如何使用這些機器呢?他們是透過啞終端來連線到這些機器,也就是用鍵盤、顯示器及足夠的 electronics (電子元件)組成的機器與中央計算機(central computer)相連。在這些終端上,使用者可以敲字元(teletypy),這就是字串'tty'表示終端裝置檔案,和'getty'命令的名稱來歷。
您可能會問,現在這些東西都在哪兒。 這些終端的廠家無法達成一項最終標準,這導致每種牌子的終端都有各自的鍵盤佈局、各自的在螢幕上顯示字元的方法、傳送或接收什麼訊號表示什麼字元、控制程式碼等等。
為了避免這些混亂,就建立了一個含有所有不同終端特性的(capability)檔案,這就是'termcap'。用一個工具開啟'/etc/termcap'瞧瞧,可別嚇著了 ;-) 。
Linux 終端大多數用'vt100'或'linux'作為終端型別。
3、xterms
在八十年代初期,產生了一個 Unix 的圖形子系統-- the X Window System 。九十年代早期,為了更好地實現基於 Intel 的 Unix 類系統上(如FreeBSD、NetBSD、Linux)的應用,產生了一個系統分支-- XFree86 。
X Window 中一個很大的好處是可以執行多個虛擬(virtual)終端。甚至在 X Window 下就有這麼個應用程式--'xterm'。您將發現'xterm'和'virtual terminal'在很多情況下都是一樣的。有的地方說'開啟一個 xterm',其實您不是非要用'xterm'程式,其他的終端模擬器(terminal emulator),如 rxvt、konsole、aterm、eterm、wterm 等等,一樣有效。
終端模擬器(又稱為虛擬終端)透過偽(pseudo) tty 裝置-- pty 與系統相連,並且使用自己的顯示標準-- xterm 。這導致不同的終端模擬器可能在一些按鍵或程式上存在細小的差別,這取決於模擬器多大程度上遵守了'xterm'的顯示標準。
4、Shells
為了在終端中執行程式,需要 shell 。shell 是作業系統的一部分,用來與使用者打交道,並且可以用來協調各個命令。
第一個真正的 Unix shell -- 'sh',亦稱為'Bourne shell',誕生於 1975 年,作者是 Steve Bourne 。很快,出現了其他 shell ,如基於原始'Bourne shell'的'ksh'、'zsh',後者常用作專屬 Unixes 系統中的標準 shell ;也有一些從 C 語言中衍生出來的 shell ,如'csh'或'tcsh'。
在 Linux 中,標註的 shell 是'bash',即 the GNU Bourne-Again Shell (有點玩笑的味道……)。這個 shell 功能非常強大(甚至有人覺得太龐大了),壓縮的 man page 就有 50 KB 。
三、Shell 起步
首先,有一點小說明:在平常應用中,建議您不要用'root'帳號執行 shell ,如果您還是新手,這一點尤其要注意。作為普通使用者,不管您有意還是無意,都無法破壞系統;但如果是'root',那就不同了,只要敲幾個字母,就可能導致災難性後果。
當您登入系統或開啟一個 xterm 視窗,首先看到的是提示符(prompt)。Red Hat Linux 的標準提示符包括了您的使用者名稱、登入的主機名(沒有設定的話,是'localhost')、當前所在的目錄(working directory)、提示符號:[tom@belbo tom]$
我以使用者名稱'tom'登入名為'belbo'的主機,當前在我的 home 目錄--'/home/tom'中。'root'的提示符:[root@belbo root]#
除了不同的使用者名稱外,提示符號由'$'變成了'#'。根據 Bourne shell 的傳統,普通使用者的提示符以'$'結尾,而超級使用者用'#'。
提示符的每個部分都可以定製,您在後面將有更深的瞭解。
要執行命令的話,您只要在提示符後敲進命令,然後在按 [tom@belbo tom]$ whoami
tom
[tom@belbo tom]$
順帶指出,當您敲 ENTER 時,游標(cursor)在哪裡並不要緊,因為 shell 總是會整行地讀取。
基本的命令有:'ls'(list directory ,列出目錄內容)、'cp'(copy ,複製)、'mv'(move / rename ,移動/重新命名),'cd '(change directory ,改變目錄),這些命令後面都可以跟上一幫可選項,這方面 man page 有詳細的介紹(man ls, man mv 等等)。
在您動身前往 shell 領地前,這裡有幾個術語(terminology)的簡短說明。命令可能帶一些可選項(options)、引數(arguments):mv -i file dir
其中'-i'是命令'mv'的一個可選項,而'file'和'dir'則是引數。所有可選項在該命令的 man page 都中有詳細的介紹(此例中用 man mv),而引數則由您提供。可選項決定命令如何工作,而引數則用於確定命令作用的目標。
到目前為止,介紹得有點象許多人厭惡輕視的 DOS shell ,但伴隨著下面的介紹,您將會有新的體驗。
第二篇:自動補齊/命令列的歷史記錄/編輯命令列/可用的 Shell 快捷方式
Unix (及後繼者 Linux)在命令列下面誕生,因此,Unix 中的命令列有許多非常實用的功能。在本篇中,我們將來作一些瞭解。
一、自動補齊;
如何用'cd'(改變目錄,change directory)最快地從您當前所在的 home 目錄跳到'/usr/src/redhat/'呢?cd /u
這稱為'命令列自動補齊'(automatic command line completion),這在平常應用中是不可缺少的。讓我們仔細看看這個例子:cd /u
擴充套件成了 cd /usr/ ,很簡單吧。下面的cd /u
擴充套件為 cd /usr/src/ 。如果您只敲了cd /u
因此,
另外,碰到長檔名時就顯得特別方便。假設您要安裝一個名為'boomshakalakwhizbang-4.6.4.5-i586.rpm'的 RPM 包,您輸入 rpm -i boom
cd /u
將擴充套件成 cd /usr/src/linux ,並等待繼續。'/usr/src'中有兩個匹配的目錄:'/usr/src/linux-[...]'、'/usr/src/linux'。如何告訴 shell 您想要後面的那個呢?只要跟一個斜線(/ ,slash),就可以選擇後面的那個了。
假如您不確定是'/usr/src/linux/Documentation'還是'/usr/src/linux/documentation'。而您知道,Linux 是區分大小寫的。如果已經仔細讀過前面部分的話,您想到可以用:
cd /u
擴充套件成了'/usr/src/linux/drivers/',因此應該是'Documentation'(大寫的'D')。
這種補齊對命令也有效:[tom@belbo tom]$ gre
grecord grefer grep
[tom@belbo tom]$ gre
在這裡 shell 將列出所有以字串'gre'開頭的已知命令。
二、命令列的歷史記錄
透過按向上方向鍵,您可以向後遍歷近來在該控制檯下輸入的命令。用向下方向鍵可以向前遍歷。與 SHIFT 鍵連用的話,您還可以遍歷以往在該控制檯中的輸出。您也可以編輯舊的命令,然後再執行。
按
(reverse-i-search)`':. 敲入 'i'可能會變成:
(reverse-i-search)`i': isdnctrl hangup ippp0
如果您再按
編輯命令列
透過游標和功能鍵(Home、End 等鍵),您可以瀏覽並編輯命令列,如果您需要,還可以用鍵盤的快捷方式來完成一般的編輯:l
l
l
l
l
l
l
l
l
l :重複前一個命令最後的引數。
例如:您用命令 mkdir peter/pan/documents/tinkerbell 新建了一個目錄,現在您向用命令'cd'進入該目錄,您可以用 cd !$,shell 將把前一個命令'mkdir'的引數新增到現在的'cd'後面。
當您更深入瞭解Linux後,將看到這些快捷方式在其他應用程式下輸入時,有時也有效,比如,在瀏覽器中的輸入框中。
三、可用的 Shell 快捷方式
Red Hat Linux 帶有不少快捷方式,其中一部分是 bash 原來就有的,而還有一些則是為您預先設定的(在後面您將看到如何設定)。
由於 home 目錄是每位使用者的活動中心,許多 Unix 對此有特殊的快捷方式。
'~'就是您的 home 目錄的簡寫形式。我們假設您在其他目錄,想把一個名為'sometext'的檔案複製到您 home 目錄下的 'docs'子目錄中。除了輸入:cp sometext /home/myusername/docs
您還可以用簡寫:cp sometext ~/docs
理論上,這也可以應用在命令'cd'上。無論當前路徑在哪裡,cd ~ 將回到您的 home 目錄。其實還可以簡化,只要鍵入 cd ,就可以返回 home 目錄了。
Red Hat Linux 為您提供了一些預先設定的快捷方式(稱為'別名',aliases),比如:l ll :將執行'ls -l -k'(以長格式列出目錄內容,包括一些檔案屬性,並以 KB 而不是 byte 為單位顯示檔案大小)
l ls :將執行'ls -F --color=auto'(列出目錄內容,加上檔案型別標識,並使用顏色)
現在,您應該對 shell 及一些快捷方式有了進一步的瞭解,下面我們來看看除了應用一些簡單的命令,shell 還能作什麼。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/181629/viewspace-831180/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- [轉自LINUXEDEN]shell入門絕佳!(三)Linux
- [轉自LINUXEDEN]shell入門絕佳!(二)Linux
- linux新手入門――shell入門(轉)Linux
- shell入門--第一個shell指令碼指令碼
- shell入門基礎必備(轉)
- shell一文入門通
- Shell 入門系列 (一): 變數變數
- 宇宙第一 shell —— fish 入門
- aix_shell入門之一AI
- shell入門
- Mobx入門和較佳實踐
- shell入門系列
- Shell入門——shell特性、變數變數
- Fish shell 入門教程
- shell入門基礎
- Linux下的shell程式設計入門(轉)Linux程式設計
- 學BOM,此文是絕佳資料!
- Linux基礎入門(一)初識ShellLinux
- Shell從入門到精通
- Shell 程式設計入門程式設計
- shell程式設計入門程式設計
- Shell程式設計入門:Linux直譯器原理(轉)程式設計Linux
- Spring Shell入門介紹Spring
- csh shell程式設計入門程式設計
- shell程式設計入門指南程式設計
- 前端自動化-----gulp詳細入門(轉)前端
- Font Awesome 一套絕佳的圖示字型庫和CSS框架CSS框架
- shell求絕對值及一份不錯的shell資料
- Shell程式設計入門例項程式設計
- 絕佳的API設計祕訣 - DZone整合API
- 絕佳的API設計秘訣 - DZone整合API
- 奧美:11 個創造絕佳 UX 的方法UX
- 這裡是強化學習入門,的入門 | 絕對新手友好強化學習
- UNIX 系統操作入門(一)(轉)
- 《C#入門與提高》(一) (轉)C#
- 一個終端列印shell程式,可以自動退紙(轉)
- Shell入門:掌握Linux,OS X,Unix的Shell環境Linux
- 轉換金額大寫的SHELL程式(絕對透過驗證)(轉)