Unix的輕巧“約取而實得”

在經過上機操作實踐以及掌握Unix系統相關的基礎知識之後,可以說已跨進了邁向成功的門檻。接着要登堂入室,繼續專進,就必須更加深入的瞭解Unix 基本命令的功能、使用並掌握一些必備的技巧。這一輪學習會有一定難度,需要強烈的求知慾和進取心作爲源動力,因爲只有“不滿足纔是向上的車輪”;同時也需要注重學習方法,善用前人總結的“約取而實得”的經驗,巧學精進,迎難攻解,從而達到再上臺階之成效。 
 
                                 一、文件系統的相關命令
 
     佛教《百喻經》中有一則三重樓的喻裏,說有一個財主,見到他的鄰居蓋房子,三層樓蓋得很漂亮,他也要蓋這樣的三層樓房子。見工匠在做地基,他就說不要地基,要直接蓋第三層樓,因爲第三層最高最漂亮。我們都會覺得這個財主很可笑,但在學習知識的過程中,我們可別老想着第三層而忽視打好地基噢!
     文件系統相關的命令是操作Unix系統的基礎,在《Unix操作系統的入門與基礎》一文中我們曾使用過其中的部分命令,下面就再來仔細學習這些命令的使用,繼續打好今後蓋“三層樓”的“地基”吧。
     (一)目錄管理
     我們可以通過使用mkdir、rmdir與cd命令來創建、刪除目錄以及改變工作目錄,並通過ls命令列表顯示目錄內容,以達到對目錄的有效管理。
     (1)mkdir命令的功能是創建目錄,並且可同時創建多個目錄,格式如下:
         mkdir [-p] directory-name(s)
參數p代表在建立指定目錄時,如果其父目錄不存在,則一同創建。
  [例] 
    mkdir dir1 dir2 dir3   //在當前目錄下建立目錄dir1、dir2、dir3 
    mkdir dir1/dir4       //在當前目錄下的dir1子目錄中創建目錄dir4
    mkdir –p dir6/dir7    //在當前目錄下,由於不存在dir6目錄,則先自動創建目錄dir6,
              //然後創建其子目錄dir7
 
     (2)rmdir命令的功能是刪除目錄,但其只能刪除空目錄(即目錄中不包含文件),故此命令一般較少使用,在後文中會介紹一個更爲常用的刪除目錄命令。rmdir命令的格式如下:
         rmdir directory-name(s)
 
     (3)在進行處理文件等的操作過程中難免需要在不同的目錄下工作,這時cd命令就能派上用場了。cd命令的功能是改變當前的工作目錄,它的命令格式如下:
         cd [directory-name]
cd後面的目錄可以是絕對路徑,也可以是相對路徑。如果cd後面不跟路徑名,則是回到用戶的主目錄。如果大家對此處的一些概念不甚熟悉的話,請參見《Unix操作系統的入門與基礎》文中的介紹,此處就不再贅述了。下面來看幾個例子:
         cd dir1      //進入當前目錄中的dir1子目錄
         cd ..       //進入上級目錄,即把工作目錄改變成當前目錄的父目錄
         cd ../zcl     //回到父目錄,同時再進入zcl子目錄中
         (注:上述三個命令的路徑都爲相對路徑)
         cd /home/anray  //把工作目錄改變成根目錄中的home目錄下的anray子目錄
    (注:此處路徑爲絕對路徑)
     此外,使用pwd 命令可以查看當前的工作目錄,它顯示的是當前工作目錄所處的絕對路徑。
     (4)ls命令的功能是列表顯示指定目錄中文件及子目錄的信息(其實在Unix系統中目錄本身也被視爲一個文件,但是爲了照顧習慣的思維,在敘述時仍然將其區分爲文件與目錄兩類),缺省輸出順序爲縱向按字符順序排列。它常用的命令格式如下:
         ls [-altFR] [directory-name]
參數a代表顯示所有類型的文件,包括文件名以“.”爲第一個字符的隱藏文件。參數t代表按文件最後修改時間的順序依次排列文件,參數R將會列出指定目錄下以及其所有子目錄中的文件,使用參數F將會在列表中的每一個目錄後面加上“/”,在每個可執行文件後面加上“*”。參數l代表長列表顯示目錄內容,即列出文件的類型、訪問權限、擁有者、文件大小、修改時間及名稱等詳細信息。下面將介紹一下長列表顯示中的信息的含義,“ls –l”命令的使用如下圖所示。
 
  在上圖長列表顯示文件信息的每一行中,
 
 
第一列 第1個字符表示文件的類型;
第2-4個字符表示文件所有者對此文件的訪問權限;
第5-7個字符表示用戶組對此文件的訪問權限;
第8-10個字符表示其他用戶對此文件的訪問權限; 
第二列 文件的鏈接數 
第三列 文件的所有者 
第四列 文件的用戶組名 
第五列 文件所佔的字節數 
第六至八列 文件上一次的修改時間 
第九列 文件名 
注:此表格中的一些概念在下文會有詳細介紹,這裏只需先了解一下即可 

 
     (二)文件管理
     1、文件的創建、編輯與刪除
     Unix系統中可以使用touch命令來創建新文件,它的命令格式如下:
          touch filename(s)
但要指出,touch命令最常用的功能並不是創建文件,而是改變指定文件(或目錄)的最後訪問時間和修改時間。它的命令格式如下:
    touch [-am] [mmddhhmm[yy]] filename(s)
此命令中,若指定文件不存在,則創建之;若已存在,則將指定文件的訪問時間和修改時間按參數的要求進行改變。參數a代表只改變訪問時間,參數m代表只改變修改時間。參數mmddhhmm[yy]中每隔兩位分別表示“月日時分[年]”,用戶可利用此參數指定欲設置的時間,若不帶此參數,則會自動使用系統當前的默認時間。
  [例] 在當前目錄下創建新文件document:
          touch document
       將剛創建的文件document的訪問與修改時間改爲2005年10月1日0時0分:
     touch -am 1001000005 document
 
  大家可不要小視touch命令的此項作用,在軟件的實際開發中,有時它還會與企業的客戶關係管理策略或企業經濟效益密切關聯。倘若你所在企業的開發團隊協作精神好,工作效率高,或者是改進了相關技術與流程,使原與客戶合同中約定的項目完成日期大大提前,爲了屏蔽用戶知情,避免節外生枝,該命令就派上大用場了。這事我知你知即可,彼此只能心照不宣噢!
     文件創建好之後就需要對此文件的內容進行相應的編輯了,在Unix系統中最常使用的編輯工具是vi,在後文中會有專門的章節進行詳細介紹,此處先行略過。
     在使用Unix系統一段時間?螅蠹銥贍芑岱⑾治募空誑燜僭黽櫻渲械囊徊糠治募贍芤丫淶黴保蚴敲揮辛聳褂眉壑擔饈本陀Ω眉笆崩胷m命令將此類文件刪除了。rm命令的功能是刪除文件或目錄,它的命令格式如下:
          rm [-i] filename(s)
      或  rm –r[i] directory-name(s)
使用參數i的目的是給大家一次“買後悔藥”的機會。由於Unix系統中的文件一旦刪除將極難恢復,因此在刪除文件之前一定要慎重。而參數i的作用是在刪除文件之前進行逐一詢問提醒,是否確實要刪除此文件。如果輸入y則刪除文件,若輸入其他字符,文件則會被保留。使用了帶參數r的rm命令可用來刪除一個目錄以及其所有子目錄,此時不必受刪除目錄必須爲空目錄的條件限制,因此也就更具危險性,大家在使用前應當慎之又慎。
  [例]
        rm doc1 doc2 doc3   // 直接刪除文件doc1、doc2、doc3 
        rm –i doc1 doc2 doc3  //在刪除文件doc1、doc2、doc3時,每刪除一個之前先作提示
        rm -ri dir1      //刪除目錄dir1以及其中所含的所有文件與子目錄,刪除前先作提示
 
     2、文件的查看
     常用的查看文本文件的命令有cat、more、head、tail等,下面將逐一進行介紹。
     (1)cat命令可以在屏幕上顯示出文本文件的內容,它的命令格式如下:
          cat filename(s)
不過cat最常見的用法是配合重定向符來清空文件以及將幾個文件合併成爲一個文件。重定向符的詳細用法請參見本文第二章節的內容。
  [例] 
        cat /dev/null > doc.txt  //清空文件doc.txt,/dev/null代表空設備文件(記住使用即可)
        cat < doc1.txt >> doc2.txt  //將doc1.txt中的內容保存在doc2.txt的尾部
     (2)使用cat命令查看文本文件時會有一個問題,就是它不會分屏顯示文件,這樣當文件的內容超出一屏時,除了最後一屏的內容之外,上面的內容都將是一閃而過。當然解決的辦法Unix也替我們想好了,就是使用more命令來查看此類文件。more命令的格式如下:
         more filename
more 命令將會以分頁的方式顯示文本文件內容。當每次將文件內容顯示在屏幕上時,如果內容超出一屏,則會在屏幕的左下部顯示“ --more--”,並且在其後面顯示百分比表示已顯示部分佔總內容的比例。此後按回車鍵則會下滾一行,按空格鍵則會下翻一屏,按“b”字母鍵可以返回上一屏,按“h”字母鍵可以獲得關於更多功能的幫助;使用“/”加上字符串可以查找指定字符串的內容信息,找到後可以按“n”字母鍵繼續搜索下一個符合要求的內容信息,按“q”字母鍵則可退出並返回Shell命令提示符狀態。
     (3)head & tail 命令
     head與tail命令的格式如下:
          head [-n] filename(s)
          tail [-n] filename(s)
head命令的功能是顯示一個或多個文件開頭n行的內容,tail命令的功能是顯示一個或多個文件最後n行的內容。若沒有指定參數n,則系統會默認顯示10行內容。
 
     (三)文件與目錄的訪問權限
     1、文件訪問權限簡介
  在Unix系統中每個文件(或目錄)都包含有一套權限,這些權限決定了誰能訪問該文件以及如何訪問該文件。通常文件有三種權限: 
權限 普通文件的權限 目錄的權限 
r 讀取文件內容 讀取文件名稱 
w 向文件寫入信息 建立和刪除文件,可以改變文件名等 
x 執行文件 使用該目錄中的文件 

 
     在Unix系統中有三種不同的用戶類型,分別是所有者(owner)、用戶組成員(group)、其他用戶(other)。所有者是指文件的創建者;用戶組成員是指由若干個用戶組成的組內成員;而除所有者、用戶組成員之外的訪問者,統稱爲其他用戶。所有者除擁有相關的訪問權限外,還有向另兩類用戶授權之權限。用戶組中的成員在同組內可以共享信息,通常某一類或某一項目中的用戶會被Unix系統管理員歸爲一個用戶組,每個用戶都被授予能訪問同組成員文件的權限。其他用戶在所有者的授權下可對文件有讀、寫或執行的權限。
     上文中我們曾提到使用“ls –l”命令來顯示文件的訪問權限。如圖中所示:
 
 
     以文件myfile1爲例:
  所有者 用戶組 其他用戶 
權限 rw- r-- r-- 
含義 可讀、可寫、不可執行 可讀、不可寫、不可執行 可讀、不可寫、不可執行 

 
     2、文件訪問權限的設置
     使用chmod命令可以修改文件的訪問權限,chmod命令的格式分爲兩種:
          格式1:chmod symbolic_mode file(s)
          格式2:chmod absolute_mode file(s)
  (1)格式1:符號模式(symbolic_mode)的命令格式如下:
          chmod who op permission(s) file(s)
  參數who表示用戶類型,它的內容爲以下一項或多項:
 
u 文件所有者 
g 用戶組 
o 其他用戶 
a 所有用戶 

 
  參數op表示操作:
 
+ 表示要增加permission指定的權限 
- 表示要取消permission指定的權限 
= 設置爲permission指定的權限,並取消原設置權限 

 
  參數permission爲權限類型,它的內容爲以下一項或多項:
 
r 表示可讀 
w 表示可寫 
x 表示可執行 

 
  [例] 以上圖爲例,要爲myfile1的所有者增加執行權限,用戶組增加寫權限與執行權限,取消其他用戶的讀權限,使用命令如下:
          chmod u+x,g+wx,o-r myfile1   //爲不同用戶類型設置權限時用“,”分隔
 
  (2)格式2:絕對模式(absolute_mode)的命令格式如下:
          chmod xyz file(s)
參數x、y、z分別代表0-7的數字,用來表示所有者、用戶組、其他用戶對該文件的訪問權限。x、y、z所代表的0-7數字的含義如下:
 
Value permission 
7 r w x 
6 r w - 
5 r – x 
4 r - - 
3 - w x 
2 - w - 
1 - - x 
0 - - - 

 
  [例] 用絕對模式來完成符號模式中的例子:
          chmod 770 myfile1
 
     從對比中大家應該感受到,符號模式會更加直觀一些,而絕對模式的數字含義較難記憶,因此設置文件權限時推薦使用符號模式。
 
     (四)文件與目錄的移動複製
     在Window系統中,我們最熟悉的操作應該莫過於“Ctrl + C”、“Ctrl + V”、“Ctrl + X”了,因爲它爲我們節省了大量的時間,帶來了極大的便利。而在Unix系統中同樣爲我們準備了cp、mv命令,利用它們可以實現剪刀加糨糊的操作了:)
     1、移動或重命名文件(或目錄)
     利用mv命令可以將一個文件(或目錄)從一個目錄移到另一個目錄中,也可以用於重命名一個文件(或目錄)。mv命令的格式如下:
          mv [-i] source-file target-file
     或  mv [-i] source-directory target-directory
當target-file爲文件名時,則相當於文件重命名,target-directory同理。參數i代表在將文件移動到指定目錄中時,若已存在同名文件,則將詢問是否覆蓋已存在的文件,輸入y則覆蓋,輸入其他字符則中止移動,保留原文件。
  [例] 
          mv beans nuts   //將文件beans重命名爲nuts
     mv file1 file2 /tmp   //將文件 file1和file2移動到目錄/tmp中
              mv dir1 /export/home/anray  // 將目錄dir1包括其所有文件與子目錄都移動到目
                                                       // 錄/export/home/anray下
 
     2、複製文件(或目錄)
     利用cp命令可以將一個文件(或目錄)從一個目錄複製到另一個目錄中,命令格式如下:
          cp [-i] source-file(s) destination-directory
      或  cp –r[i] source-directory(s) destination-directory
參數i代表在將文件複製到指定目錄中時,若已存在同名文件,則將詢問是否覆蓋已存在的文件,輸入y則覆蓋,輸入其他字符則中止複製,保留原文件。當複製文件到指定目錄,或許會期望賦予此複製的文件不同於源文件的文件名,則只需將新文件名放在目標目錄名之後,用“/”隔開即可。當需要將一個目錄連同它的所有子目錄一起復制到目標目錄中時,可使用參數r。
  [例] 
      cp beans apple  //將文件beans複製到同目錄下並改文件名爲apple
      cp beans apple dir1 //同時複製兩個文件beans與apple到當前目錄下的子目錄dir1中
      cp apple dir2/orange  //將文件apple複製到當前目錄下的子目錄dir2中,並改名爲orange
      cp -r dir1 dir2       //將目錄dir1中的所有文件以及其所有子目錄複製到目錄dir2中
 
     (五)其它常用命令
     1、man命令
  man命令用於查看幫助信息,常用的命令格式有:
        man name
     或   man –k keyword
  [例] 
          man      //查看man的使用方法
          man ls    //查看ls命令的幫助信息
在查看幫助信息過程中,按回車鍵則會下滾一行,按空格鍵則會下翻一屏,按“b”字母鍵可以返回上一屏,使用“/”加上字符串可以查找指定字符串的內容信息,找到後可以按“n”字母鍵繼續搜索下一個符合要求的內容信息,按“q”字母鍵則可退出並返回Shell命令提示符狀態。
 
     2、clear命令
     clear命令的功能是清理屏幕,每次操作Unix系統時間長了,屏幕上的信息難免顯得有些凌亂,這時clear一下是不是覺得眼前一下子“清靜”了許多:)
 
     3、date命令
     date命令的功能是顯示系統時間,並可修改系統時間。date命令的格式如下:
         date [mmddhhmm[yy]]
date命令後若無參數,則會顯示系統當前的默認時間。若要修改系統時間,則輸入參數的順序依次爲“月日時分年”。如要將當前系統時間修改爲2005年10月1日0時0分,則可使用如下命令:
         date 1001000005
 
  4、cal命令
  cal命令的功能是顯示日曆。
  [例1] 要查看2005年的全年日曆:
          cal 2005
  [例2] 要查看2005年5月份的日曆:
          cal 5 2005
 
                                    二、特殊字符的使用
 
     先說一個事例:一次有位朋友問我有沒有辦法把某英語輔導軟件中加密的數據搞到手,我想也沒想,立刻翻箱倒櫃去找出各種解密工具。大半個小時後,正在我毫無頭緒之際,這位朋友跑來說自己已搞掂了這個軟件的使用授權。問他,說只是給軟件作者打了個電話。由此想到Unix中的一些特殊字符,往往平時操作中不曾想到去用它,而是墨守成規地進行自己所熟悉的步驟,實際上是在用那些老笨的方法。如能想到並熟知Unix中特殊字符的功能及使用技巧,就會像我這位聰明的朋友一樣取得事半功倍的效果。
 
     (一)通配符的使用
     文件名是命令中最常見的參數,大家可能經常會碰到這樣的情況,就是僅知道文件名的一部分,或者是想同時引用多個具有相同擴展名或以相同字符串開頭的文件。Shell中提供了一套被稱作通配符的符號,它們能搜索、匹配併產生一個文件名列表,通配符包括“*”、“?”、“[]”。用戶執行以包含通配符的文件名爲參數的命令之後,Shell會自動去搜索匹配文件並返回所發現的一個文件名列表,然後Shell就會?謎廡┪募魑畹牟問恕?
星號“*”用於指代以特定字符串開始或結束的文件名,問號“?”代表文件名稱中的單一字符,即“*”可替代文件名中任意長度的字符串,而“?”只能替代一個字符。方括號“[]” 的作用是使用戶確定所需搜索的有效字符集,任何在“[]”裏的字符都將被匹配。此外,在“[]”中可使用“-”來指定一個字符集範圍,這樣就不必手動的一個個列出來了。
請看下面的例子:
     假設當前目錄下有8個文件doc1,doc2,doc3,docA,docB,docC,docD,document,分別對其進行如下操作:
         ls doc*  //顯示出doc1,doc2,doc3,docA,docB,docC,docD,document
         ls doc?  // 顯示出doc1,doc2,doc3,docA,docB,docC,docD
         ls doc[13AD]  // 顯示出doc1,doc3,docA,docD
         ls doc[A-C]    // 顯示出docA,docB,docC
         ls doc[1-8]  // 顯示出doc1,doc2,doc3
 
     (二)命令分隔符“;”的使用
     有時某些用戶可能想在一行中運行多個命令,那麼可以在這一行中輸入多個命令,命令間用“;”相隔,如:
         mkdir tmp; cp file1 tmp/file2; ls -l tmp
Unix會順序執行以上三條命令,要注意的是在命令間使用分隔符“;”,只代表命令執行的先後順序。
 
     (三)重定向符的使用
     用戶欲執行一個命令,當然是要先輸入此命令,系統默認的標準輸入設備是鍵盤,而執行命令後的結果通常顯示在系統默認的標準輸出設備顯示器上。但是, Unix系統具有重定向功能,即將標準輸出重定向則可將命令的處理結果存入指定的文件,而非顯示在屏幕上;將標準輸入重定向則可把指定的數據文件作爲輸入源,而非從鍵盤輸入數據。
重定向符如下:
 
<  從一個文件或設備重定向輸入 
>  重定向輸出到一個文件或設備,如文件不存在則創建該文件,如文件已存在則覆蓋該文件 
>>  重定向輸出到一個文件或設備,並將輸出信息追加到已存在文件的尾部 

 
  例如:
         cal 5 2005 > doc1.txt   //將2005年5月份的日曆保存在文件doc1.txt中
         cal 6 2005 >> doc1.txt  //將2005年6月份的日曆保存在文件doc1.txt尾部
                                 //此時文件doc1.txt中保存了5、6兩個月的日曆
         cat < doc1.txt > doc2.txt  //將doc1.txt作爲輸入源,把其中的內容保存在doc2.txt中
 
     (四)管道符“|”的使用
     有時可能會需要將一個命令的標準輸出發送給另一個命令使用,而非發送到一個目標文件,這時就需要使用Unix提供的管道符“|”在這兩個命令間架起一條連接管道。管道符“|”的作用就是從“|”左邊的命令接受輸出數據併發送給“|”右邊的命令作爲輸入數據。
  如:ls -l /etc | more 
管道符“|”的功能非常強大且很有用,利用它可以實現一些複雜的操作。在下一節關於信息查找命令部分,我們將會看到它的一些應用。
 
     (五)其它特殊字符
     美元符“$”是一個特殊操作符,當其置於變量名前面時,變量名會被變量值所代替。因此通常都是通過在變量名前加上“$”來引用該變量的值,“$”也常被稱爲變量取值符。
     Unix中可以使用三種引號符:
     (1)單引號(’ ’):功能是讓系統原樣輸出單引號中所含的內容。
     (2)雙引號(“ ”):雙引號中的字符串若含有通配符,則系統會先進行通配後再輸出;若含有變量取值符“$”,則系統會先進行變量取值後再輸出。
     (3)反引號(` `):反引號中所含的內容必須是一個命令,這樣它會先執行此命令,然後把命令執行的結果返回輸出。
     對於上述幾個特殊字符,在下文關於Shell腳本編程部分大家會看到具體的應用例子。此外,常見的特殊字符還有“.”代表用戶所在的當前目錄,“..”代表用戶所在的當前目錄的父目錄,“~”代表用戶登陸系統的主目錄。


 
六、網絡通信相關命令 
 
  “功能性文盲”的概念是1965年聯合國教科文組織在伊朗德黑蘭召開的各國教育部長會議上首次提出的,它最初的含義是指未能獲得讀、寫及計算能力的人。時至今日,此概念的內涵已經發生了很大的變化。讀——不僅要讀印刷的文本,而如何快捷、有效地讀取互聯網上豐富的信息資源已成了現代人必備的才能;寫——不僅是以往習慣的“爬格子”,而且會借用計算機的“神手”,更要將自己的所思所想寫在網上,與全世界的人進行交流和互助;算——不僅需要覈算物質成本和產出,而且要節約時間與精力,把握生命的張弛節律,將積極有效的精力投到最有意義的活動中去。
    對於現代人來說,若離開了網絡,那就真要返回到“功能性文盲”狀態了。當然,Unix系統也離不開網絡,它的缺省網絡協議即爲當今網絡架構基礎的TCP/IP協議。TCP/IP協議由一系列協議組成,統稱TCP/IP協議族。TCP/IP協議是TCP/IP協議族中的基本協議,協議族常用協議有:
    (1)傳輸控制協議/互聯網絡協議(TCP/IP - Transmission Control Protocol/Internet Protocol)是協議族的基本協議。
    (2)用戶數據報協議(UDP - User Datagram Protocol)提供無連接的傳輸層協議,不保證傳輸的可靠性。
    (3)遠程登錄協議(telnet)定義了遠程登錄的標準。
    (4)文件傳輸協議(FTP - File Transfer Protocol)定義了不同系統間進行文件拷貝的標準。
  下面再介紹基於TCP/IP協議族的Unix系統的相關命令。
    
  1、Telnet命令
     前文中我們曾經使用過telnet命令,該命令的主要功能是在用戶使用的本地計算機上通過網絡登陸遠程Unix主機,把本地計算機當成遠程主機的一個仿真終端,而此處的網絡可以是任何採用了TCP/IP協議的網絡,如LAN、WAN、Internet等。在本地計算機上運行的telnet或下文將要介紹的ftp程序,實際上都是telnet/ftp的客戶端程序,它通過TCP/IP協議與遠程主機中的服務端程序相連。當用戶利用telnet完成與遠程Unix主機的連接後,就能像是在Unix主機終端上操作一樣了,不過此時用戶所能使用的功能和資源將取決於該系統所賦予用戶的使用權限。
  telnet的命令格式如下:
    telnet IP地址或域名 [端口號]
此處的IP地址或域名是指遠程Unix主機的IP地址或域名。當建立連接之後,將會出現信息提示用戶輸入登陸的用戶名及口令,正確輸入後就可以進入Unix系統了。 
 
     2、FTP命令
  FTP的主要功能是實現本地計算機與遠程主機之間的文件傳輸,它可以將遠程Unix系統上的一個或多個文件下載到本地計算機,也可以將本地計算機上的一個或多個文件上傳到遠程Unix系統上。
     FTP的命令格式如下:
          ftp IP地址或域名
此處的IP地址或域名是指遠程Unix主機的IP地址或域名。當建立連接之後,將會出現信息提示用戶輸入登陸的用戶名及口令,正確輸入後就會出現ftp提示符“ftp>”,我們就可以在此提示符後輸入ftp命令進行相關的操作了。
  FTP的常用命令及解釋列表如下:
 
ftp命令 解釋 
bin 設定以二進制模式傳輸文件 
asc 設定以ASCII模式傳輸文件(缺省值) 
pwd 列出當前所處的遠程主機目錄 
cd [directory] 改變所處的遠程目錄 
ls 顯示所處的遠程目錄的內容 
lcd [directory] 設定本地欲上傳或下載文件的目錄 
put file 將本地計算機中的文件上傳到遠程主機上 
get file 將遠程主機中的文件下載到本地計算機上 
mput files 將本地計算機中的多個文件上傳到遠程主機上 
mget files 將遠程主機中的多個文件下載到本地計算機上 
bye 退出ftp 

 
     下面是一次模擬的FTP登陸實例。假設遠程主機的IP地址爲198.4.30.25,現在要求將本地計算機系統/home/zcl中的文件Calculator.java上傳到遠程主機/newusers/zcl目錄中,同時將/newusers/zcl目錄中所有的文件下載到本地計算機目錄/home/zcl/down中。
 解:
        ftp 198.4.30.25
        Name: 
   Password:
   (輸入Unix用戶名及口令)
        ftp> asc
        ftp> lcd /home/zcl
        ftp> cd /newusers/zcl
        ftp> put Calculator.java
        ftp> bin
        ftp> lcd /home/zcl/down
        ftp> mget *
        ftp> bye
 
     說明: 
  當我們使用ftp時,可簡單地把文件分爲兩種基本類型:文本文件和二進制文件。文本文件也稱爲ASCII文件,其文件內容遵循ASCII的定義,其主要特徵是文件內容由若干行組成,可以使用操作系統的顯示、編輯命令來顯示和編輯ASCII文件的內容,它使用的傳輸模式是“asc”。二進制文件(Binary File)是指除ASCII文件以外的所有文件格式,它使用的傳輸模式是“bin”。需要注意的是,可以將ASCII文件按二進制模式傳輸,但決不能將二進制文件按ASCII模式傳輸,否則二進制文件的內容會遭到破壞而無法使用。
 
     3、用戶間通訊命令
     對於QQ、MSN這類聊天工具,大家應該是再熟悉不過了,那麼在Unix系統中能否進行此類的聊天操作呢?答案當然是肯定的。Unix提供了多種方式讓用戶相互通信,它允許以文本的方式給某個用戶或所有用戶傳遞信息,而信息來源可以是文本文件或直接由鍵盤輸入的內容。
    
  (1)使用write發送消息
     使用write命令可以向任何已登錄同一系統的另一位用戶發送消息,這時在對方用戶終端上就會自動顯示出信息,而對方也同樣可以使用write 命令來回復消息,這樣雙方之間就能互相通信了。
  write命令的格式如下:
    write user-name
此處user-name是將要與之通信的用戶名,可以使用who 命令來查看系統中已登陸的用戶名。輸入write命令後,即可進入發送消息狀態,這時就可以通過鍵盤輸入消息,回車即可向對方發送此條消息了。要想退出發送消息狀態,可以使用“Ctrl + d”退出write 命令回到shell。
 
     (2)使用talk進行雙方對話
     talk命令允許雙方實現類似於MSN、QQ這樣的實時對話,其命令格式如下:
          talk user-name 
當用戶向另一用戶發送對話請求,只有在對方同意接受對話請求,即對方也使用talk命令後,雙方的對話纔會建立。這時雙方終端上都會顯示“[connect established]”,這樣雙方就可以從鍵盤輸入文字,talk會把這些輸入顯示在對方的屏幕上,若任意一方按<Delete>鍵就會退出對話狀態。
 
  (3)使用wall進行廣播式消息傳送
     使用wall命令可以向所有用戶廣播通知信息,而所有登錄系統的用戶都可收到該消息。wall命令有以下幾種格式:
          wall
          wall filename
          wall “send a message to all the people!”
 
  (4)使用mesg允許或拒絕接收消息
     當一位用戶正在全身心的投入某項工作的時候,可能會不想被另外一位用戶用上述方式突然發送來的消息打斷思路,那麼就可使用mesg命令來設置是否允許接收由其它用戶發來的信息。mesg命令的格式如下:
          mesg –n
    或
     mesg -y
其中,y表示允許接收信息,n 表示拒絕接收信息。如果mesg後面沒有跟參數,則報告當前的許可狀態。
 
  4、其它命令
    
  (1)查看網上用戶信息
  使用finger命令可以顯示當前正在使用Unix系統的所有用戶信息,它的命令格式如下:
          finger [用戶名][@主機域名或ip地址]
  如:
          finger    //顯示當前正在使用Unix系統的所有用戶信息
          finger [email protected]  //查看主機198.4.30.26上用戶anray的信息
     此外,常用的顯示當前系統登陸用戶信息的命令還有:
          who     //可查看每個登陸用戶的IP地址
          w       //可查看每個登陸用戶的當前行爲
          who am i  //查看使用者自己的信息
 
     (2)查看網絡的相關信息
       hostname               //顯示主機名
       cat /etc/hostname.hme0    //顯示主機名
       cat /etc/hosts            //查看同一網段中存在的所有主機
       cat /etc/services          //查看當前系統所運行的所有程序的端口
       ping  主機IP地址      //檢測是否可以訪問某個主機
       netstat                 //列出系統中所有的網絡連接
       /usr/sbin/traceroute  主機IP地址  //顯示從本地到目標IP所經過的所有路由器
 
                            七、文本編輯器 vi 的使用簡介
 
     古希臘克里特島迷宮裏有一個牛頭人身的怪物米諾陶洛斯,如果不是美女公主阿里阿德涅贈送給英雄忒修斯一把魔劍,英勇的忒修斯還真奈何不了這牛頭人身的怪物。
     vi編輯器就是Unix系統賦予我們的魔劍,它是一款強有力的文本文件編輯工具。對初學者而言,常因其特殊的使用方法,而不得徑門而入;對已經在使用 vi 的操作者來說,也常因對 vi 的不夠熟悉與瞭解,而無法發揮出 vi 強大的編輯能力。以下將介紹vi 的基本使用方法。
     vi 提供了兩種操作模式:文本輸入模式和命令模式,前者用於文本輸入,後者用於輸入控制指令。要啓動vi進行文本操作,用戶可在Shell提示符後輸入如下命令:
          vi 文件名
如果該名稱的文件不存在,則系統會自動創建該文件。用戶進入vi編輯器後,便自動處於命令模式,此時鍵入的任何字符皆被視爲指令。此模式下可對文本進行刪除、替換、拷貝、移動等操作,而對文本進行操作的前提是輸入文本,那就先讓我們進入輸入模式吧。文本輸入模式的進入,有以下的指令可供使用:
 
a 將在光標所在位置之後插入文本 
A 將在光標所在行末插入文本 
i 將在光標所在位置之前插入文本 
I 將在光標所在行的第一個非空字符前插入文本 
o 將在光標所在行的下一行開始插入文本 
O 將在光標所在行的上一行開始插入文本 

 
  俗話說:“仙人打鼓時有差,腳步踏錯誰人無。”在輸入文本過程中,出現差錯在所難免,但在vi編輯器中可不像在Word中那樣能使用backspace或delete鍵來刪除差錯之處,而是首先應該按“ESC”鍵進入命令模式,然後可利用下面的指令移動光標位置進行準確定位:
 
k 上移一個字符 
j 下移一個字符 
h 左移一個字符 
l 右移一個字符 
行號G 光標移到該指點行(如1G表示光標移到第一行) 
G 光標移到文件結尾 

 
  接着就可以使用下述指令進行刪除或替換操作了:
 
x 刪除光標所在字符 
X 刪除光標所在的前一字符 
s 刪除光標所在的字符,並進入輸入模式 
dd 刪除光標所在行 
nd 刪除編輯器第n行的所有字符(n代表具體數字,下同) 
ndd 刪除從光標所在行開始往下的n行 
:n,md 刪除從指定的n到m行之間的所有字符(如::5,10d 將會刪除編輯器中從第5行開始至第10行的內容) 
D 刪除光標所在處到行尾的字符 
r 用跟在此指令之後的字符替換光標所在的字符(如:ra 是以 a 替換光標所在的字符) 
C 替換從光標到行尾的內容 
cc 替換整行的內容 

 
  “Ctrl + C”、“Ctrl + X”、“Ctrl + V”這幾個組合鍵對於Windows用戶來說是再熟悉不過了,在vi編輯器當然也具備了一般編輯的拷貝、移動、粘貼功能,下面就讓我們來試試吧!
 
yw 拷貝當前光標所在處的詞 
yy 拷貝當前光標所在行的所有字符 
P 在光標所在行的下一行粘貼 
:i,jcok 將第i行至第j行之間的文本拷貝到第k行之後(此處i、j、k分別代表不同的數字) 
:i,jmok 將第i行至第j行之間的文本移動到第k行之後(此處i、j、k分別代表不同的數字) 

 
  上列表中第4、5項如::10,20co30 將第10行至第20行的文本複製到第30行之後;:10,20mo30  將第10行至第20行的文本移動到第30行之後。
  在完成所有的編輯工作之後,大家可要記得存盤退出vi 編輯器。在命令模式下使用下述指令: 
 
:w 存盤 
:w newfile 存盤成新的文件 
:wq 存盤並退出vi 
:q 退出vi,若文件被修改過,則會被要求確認是否放棄修改的內容。 
:q! 不存盤並強行退出vi  

 
  下面再介紹一些較常使用的指令:
 
~ 改變大小寫 
u 取消上次操作,即復原執行上一指令前的內容 
/字符串 從當前行往下查找指定的字符串 
n 往下繼續查找下一個指定的字符串 
?字符串 從當前行往上查找指定的字符串 
N 往上繼續查找下一個指定的字符串 
:r file 將某文件的內容插入到光標位置 
J 將光標所在行與其下一行連接起來,即下一行文本移動至光標所在行的末尾 
:set nu 讓編輯器自動顯示出每一行的行號 
:set nonu 取消顯示每行前的行號 

 
  對以上所列指令用戶只有稔熟在心,才能熟練自如地使用vi編輯器。在此基礎之上,大家可以參考其它相關資料來掌握vi編輯器的一些更高級的指令。在後續關於Unix平臺上程序開發的介紹中,大家將更能感受到vi編輯器的重要性。
 
                                   八、環境變量及其它設置
 
     在中醫理論中,縱向叫‘脈’,橫向叫‘絡’,任督二脈正好是在人體的前後中心,前面是任脈,後面是督脈,是人體的子午線,因此在金庸的武俠小說裏,想要練成上乘的功夫,首先就是要打通任督二脈。環境變量就是Unix系統中的任督二脈,那就讓我們來打通它吧!
     在介紹環境變量之前,我們先來了解一下變量這個概念。變量顧名思義就是值會變化的量,在使用變量之前必須先進行定義,變量名可以是任何符合命令規則的字母、下劃線和數字的組合。對於爲變量賦值,在csh與bash中的操作方式會略有不同。在csh中爲變量賦值的格式如下:
          setenv variable value
  在bash中可以使用賦值操作符“=”來爲一個變量進行賦值,格式如下:
          variable=value
          export variable
注意在“=”的周圍不應該有任何的空格,使用export命令是爲了使此變量在所有嵌套的Shell中都有效。一旦爲一個變量賦值之後,就可以通過在變量名之前放置“$”來引用該變量的值了。如果想要查看某個變量的值,則可以使用echo命令,命令格式爲:
     echo $variable
  如在csh中鍵入如下命令,將當前系統的主機名賦值給變量WTO,並輸出變量WTO的值:
          setenv WTO `uname –n`
          echo $WTO
  在bash中的操作方式如下:
          WTO=` uname –n`
          export WTO
          echo $WTO
     變量的使用用途較廣,經常的用法是將其作爲某個命令的參數。如將某一經常用到的目錄路徑名賦值給一個變量,這樣就可以避免一遍又一遍地反覆敲入同樣的內容了。看下面一個例子,要將當前目錄中的文件myfile1、myfile2拷貝到目錄/home/anray/mydocument中,就可以使用如下的命令(以bash爲例):
          mydir=/home/anray/mydocument
          cp myfile1 $mydir
          cp myfile2 $mydir
如果想了解所有已定義的變量情況,則可以使用set命令。當用戶不再需要某一個變量時,可以用unset命令來刪除此變量,格式如下:
          unset variable
     值得注意的是,當前所定義變量的作用域範圍是當前正在使用的Shell環境,即一旦退出Shell後再次登錄,則此前所設置的所有變量都將失效。如果需要再次使用這些變量的話,都必須重新進行定義。
     要想使定義的變量在每次登入系統時都有效,則需將其定義成爲環境變量。環境變量可以用於定製用戶的工作環境,即使用環境變量可以保存用戶對系統進行設置的信息。環境變量被定義在“初始化文件”中,csh的初始化文件是.cshrc文件,bash的初始化文件是.bashrc(或.bash_profile,兩者等效)。在每次系統啓動時,系統會自動讀取初始化文件中的內容來配置相應的工作環境,常見的環境變量有HOME、PATH、SHELL等。HOME變量的值是用戶主目錄的路徑名。PATH變量的值包含了各種命令所在目錄的路徑名,路徑名之間用冒號隔開,當用戶執行某一命令時,系統就將會自動在這些目錄下查詢此命令並執行,若未查詢到則會提示命令沒有找到。SHELL變量的值代表了用戶登陸系統時默認的Shell環境。當然用戶也可以定義自己所需的環境變量,定義方法與普通變量定義相同,兩者的不同之處在於環境變量被定義在初始化文件中。通常在定義環境變量之後,需要重新進入系統纔會生效。如果想在不重啓系統的情況下立即使當前的配置生效,csh中可以使用如下的命令:
          source .cshrc
  bash中可以使用如下的命令:
     . .bashrc
  關於使用Java、Oracle、CVS、Tomcat等時應該定義的環境變量,計劃在後續的系列文章中陸續介紹,此處就先行略過。要想查看系統已定義的所有環境變量的情況,可以使用setenv命令。 
  下面我們再來介紹一下Unix系統中的一些其它設置。
    
  1、計劃任務的設置
     Unix系統允許在指定的時刻執行指定的任務,這一功能是靠cron進程來實現的。cron進程會檢查系統的計劃任務文件,並在指定的時間執行這些指定的操作。計劃任務文件內容格式如下:
      min     hour    day     month       day_of_week    command
      0-59    0-23    1-31    1-12        0-6(Sunday=0)        
   
計劃任務文件由若干行組成,每行表示一個任務。每行由若干字段組成,字段間用空格分開。每行中字段分別代表:分、時、日、月、星期、要執行的命令。每個字段取值舉例:
 
各字段取值舉例 說明 
* 表示任何時間 
1,3,4 表示離散數字,即一系列點值 
1-5 表示從1到5,即一範圍 

 
  例如:
      30  0  *  *  *  /usr/tmp/a.txt
      0   7  *  1,3,6,8  1-5   /usr/tmp/makefile
第一行表示在每天的午夜0:30啓動/usr/tmp/a.txt文件運行,第二行表示每當1、3、6和8月的周1到週五,啓動/usr/tmp/makefile文件運行。
     計劃任務文件是不能直接通過vi等編輯工具進行修改的,要對計劃任務文件進行操作可使用crontab命令。crontab命令的常用格式如下:
 
crontab命令舉例 說明 
crontab -l 顯示計劃任務文件的內容 
crontab –e 編輯計劃任務文件的內容 
crontab myfile 用myfile文件內容覆蓋原計劃任務文件內容 
crontab -r 刪除現有的計劃任務文件 

 
     需要補充的是,crontab –e命令在默認情況下會使用編輯器ed來編輯計劃任務文件。此編輯器的操作非常煩瑣,因此最好是通過設置環境變量EDITOR來指定編輯器,方法如下:
          setenv EDITOR vi
此外,也可通過先將計劃任務文件的內容讀入某一臨時文件,編輯完成後再覆蓋原計劃任務文件的方式來修改計劃任務。
  [例] 在原計劃任務文件基礎上增加如下任務:每月1日凌晨3時運行/usr/tmp/run程序。
  解:
      (1) 運行 crontab -l > temp
      (2) 對temp文件進行編輯,追加下面一行:
           0  3  1  *  *  /usr/tmp/run
      (3) 運行 crontab temp
 
     2、別名的設置
     可以使用alias命令來爲一個命令創建一個別名,它的命令格式如下:
          alias alias-name value
比如,熟悉的DOS的用戶可能會一下子不習慣ls這個命令,那麼就可以使用如下的方法來爲ls命令取個別名:
          alias dir ls
此外,還可以用一個別名來代替一個命令及它的參數,這樣就可以簡化常用的操作命令以便使用。不過這時需要用單引號將命令及其參數括起來,如:
          alias dir ‘ls –l’
若想查看已定義的所有別名的別名表,則直接使用alias命令即可。當想刪除某個別名時,則可使用unalias命令,格式如下:
    unalias alias-name
 
     3、命令歷史設置
     在Unix系統中,history程序會自動保留用戶最近所使用過的命令。歷史表中的命令從1開始編號,上限爲所設置的保留個數,默認值是500。我們可以重設此保留個數,如:
          set history=30
上述操作設定命令歷史表長度爲 30,即可記載已執行過的30個命令,可通過使用history命令查看此30個命令記錄。使用“!n”命令可以執行歷史表中所記錄的第n個命令,“!!”則是重複執行前一個命令。
 
                                       九、Shell腳本編程
 
     在執行某個具體任務的時候,有時可能需要把幾個Unix命令結合起來一起使用。如果這樣的操作較爲頻繁,則可以考慮將這些命令放入一個文件中。那麼每次使用時只需執行此文件即可,這樣的文件就被稱爲腳本文件。
     我們先來看一個簡單的例子。首先使用vi創建一個名爲lsjava的文件,在文件中輸入如下內容:
     pwd
     cal
     date
     ls *.java
保存退出。由於默認情況下vi編輯器創建的文件僅有讀和寫權限,因此需要使用chmod命令來使腳本文件具備可執行權限,使用命令如下:
          chmod u+x lsjava
在shell提示符後輸入腳本文件名並回車,將可執行此腳本文件中的命令了,即先顯示當前所處的工作目錄,再顯示出日曆和日期,最後列表顯示出當前目錄下所有以“.java”爲後綴名的文件。這樣,腳本文件名就變成了一個新的shell命令。使用此種方法,我們就可以設計並創建自己的命令了。要補充說明的是,如果是在bash中,我們就無需更改腳本文件的權限,使用如下的命令格式即可執行此腳本文件:
           . lsjava    //此處的點號“.”表示執行
     像其它的Unix命令一樣,在命令行中調用一個腳本時,也可以在此腳本名後輸入參數。這樣在腳本文件中就可以接收來自命令行中的參數信息,並將此作爲腳本文件中某命令的參數。命令行中的參數通過使用“$”操作符和參數序號來引用,參數以“1”開始順續引用,第一個參數用$1來引用,第二個參數用$2來引用,以此類推。每次還可以引用多個參數,使用操作符“$*”即可表示引用所有的參數。此外,在腳本文件中,除了可以使用一系列的Unix系統命令外,還可以使用變量、算術表達式、條件選擇、循環控制等來共同完成相應的任務。腳本文件功能強大,在處理較大的任務或需要循環執行某一個命令時可節省大量的時間。由於此部分涉及到編碼,且內容較多,足可另寫一本書,且又是非Unix初級使用者所必須掌握的知識,故在此不再贅述,請感興趣的讀者查閱相關的書籍與資料。
 
     關於對Unix操作系統使用的基本介紹將就此告一段落。有智者曰:“人之知識,若登梯然,進一級則所見愈廣。”本系列拙文僅作引玉之磚、鋪路之石,若有關注與興趣者籍此登梯而上,所見愈廣,後能返得指教與輔導,則實爲筆者遂願之幸事!
 
發佈了2 篇原創文章 · 獲贊 1 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章