1 / 64

第 21 章

第 21 章. 使用者環境. 本章大綱. 21-1 Shell 簡介 21-2 Shell 的各種功能 21-3 Shell 下的特殊字元 21-4 Shell 的環境變數與設定 21-5 .project、.plan 和.forward 設定檔. 前言. Shell 的功能在於搭起使用者與作業系統間的溝通橋樑 , 提供基本的操作介面 , 讓使用者得以下達各種指令 , 操作系統 , 產生彼此間的互動關係 , 因此我們可將 shell 看成是一種使用者環境。. 21 - 1 Shell 簡介.

Download Presentation

第 21 章

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第 21 章 使用者環境

  2. 本章大綱 • 21-1 Shell 簡介 • 21-2 Shell 的各種功能 • 21-3 Shell 下的特殊字元 • 21-4 Shell 的環境變數與設定 • 21-5 .project、.plan 和.forward 設定檔

  3. 前言 • Shell 的功能在於搭起使用者與作業系統間的溝通橋樑, 提供基本的操作介面, 讓使用者得以下達各種指令, 操作系統, 產生彼此間的互動關係, 因此我們可將 shell 看成是一種使用者環境。

  4. 21 - 1 Shell 簡介 • Shell 的原意是外殼, 用來形成物體外部的架構, 使整體具有輪廓而不致鬆垮變形。對作業系統而言, shell 負責使用者和作業系統兩者之間的溝通, 把使用者下達的指令解譯給系統去執行, 並將系統傳回的訊息再次解譯, 讓使用者瞭解其含意。所以 shell 除了可視為使用者環境之外, 也稱為指令解譯器。

  5. 21 - 1 Shell 簡介

  6. 種類繁多的 Shell • 每一種作業系統都有其特定的 shell, 例如: • MS DOS 的標準 shell 是 command.com。 • Windows 的 shell 是 explorer.exe。 • Unix 之類的作業系統, 其使用的 shell 各有不同。常見的 shell 有 Small Bourne Shell (ash)、Bourne Again Shell (bash/bash2)、Bourne Shell (bsh)、BSD C Shell (csh)、Korn Shell (ksh)、Enhanced C Shell (tcsh) 和 ZShell (zsh) 等。

  7. 種類繁多的 Shell • Bourne Shell 是最早被廣泛使用與標準化的 shell, 幾乎所有的 Unix 相容家族都支援它。BSD C Shell 由 Berkeley 大學開發, 特點是易於使用且交談能力強。Enhanced C Shell 提供指令列編輯功能、補全功能, 以及拼字檢查功能。 • Bourne Again Shell 衍生自 Bourne Shell, 融入 BSD C Shell 的特色, 新增工作控制、別名 (alias)、指令歷程 (history) 等功能。

  8. 種類繁多的 Shell • 隨著 shell 程式版本不斷更新, 各種不同的 shell 相互截長補短, 彼此間的差異就逐漸減少。本 Linux 發行版預設的 shell 是 bash, 而且也支援 ash、 ksh、tcsh 和 zsh。

  9. 檢視與更換 Shell • 各種 Unix 相容家族預設使用的 shell 不盡相同, 例如 BSD 通常都使用 csh, Linux 都使用 bash。不過多半都會提供其他的 shell 讓使用者更換。在更換 shell 之前, 先讓我們認識提示符號並瞭解目前正在使用何種 shell。

  10. 指令提示符號 • Shell 各自擁有其指令提示符號, 一般是在使用者目前的目錄加上 $、%、# 或 > 符號。以 cassia 帳號為例:

  11. 指令提示符號 • 我們來看看在不同的 shell 之下, 其提示符號有何不同 (提示符號可自行設定, 此處以預設值為例): • ksh:$ • bash 和 bash2:[cassia@free ~]$ • zsh:[cassia@free]~ % • tcsh:[cassia@free ~]$ • 提示符號的用處是告訴使用者現在可以下達指令, 同時也表示先前下達的指令已經完成, 或是已經被放到背景執行。

  12. 檢視預設的 Shell 種類 • 要檢視登入系統時預設是用哪一種 shell, 最簡單的方式是執行 echo指令, 詢問系統 SHELL 環境變數的值:

  13. 檢視預設的 Shell 種類 • 另外, 執行 finger指令查詢使用者資料, 也能看出該使用者預設的 shell:

  14. 更換 Shell • 不同的 shell 有不一樣的特性, 有些時候使用者可能希望依自己的習慣使用別的 shell。最簡單的方法就是直接執行該 shell 之名稱。若要回到原來的 shell, 則執行 exit指令:

  15. 更換 Shell

  16. 更換 Shell • 上述之方法僅能臨時改變環境, 一旦登出系統之後, 下次登入時又將變回預設的 shell。如果使用者希望更換預設值, 其步驟如下 (以 cassia 帳號為例):

  17. 更換 Shell • chsh指令的用法, 也可以簡寫如下: • 使用者必須先登出再重新登入系統, 就會啟用新指定的 shell 了。

  18. 禁止使用者登入 • 有些時候我們希望限制某位使用者僅能使用 FTP 或 E-mail 服務, 而不允許 telnet 或 ssh 登入。此時可將該使用者的 shell 換成 /sbin/nologin , 就能限定該使用者 (以 cas sia 為例) 不能 telnet 登入了。請以 root 帳號修改/etc/passwd 檔案:

  19. 禁止使用者登入

  20. 21 - 2 Shell 的各種功能 • 每一種 shell 都會有些許的不同, 本 Linux 發行版的預設值是 bash, 接下來讓我們一同看看 bash 的特色。

  21. 指令歷程 • 當使用者在輸入指令的時候, 可利用一些基本按鍵幫助編修指令列: • [↑]:顯示上一個指令。 • [↓]:顯示下一個指令。 • [←]:游標向左移動。 • [→]游標向右移動。 • [Backspace]:向左刪除一個字元。

  22. 指令歷程 • 使用上下鍵, 不僅可切換此次登入後所執行過的指令, 還能夠記住使用者以前登入時所用過的指令。這些指令歷程都記錄在使用者家目錄裡的 .bash_history 檔案內。假設使用文書編輯器去開啟這個檔案, 會看到類似下列的內容:

  23. 指令歷程 • 執行 history指令可列出最近使用過的指令及其編號, 讓使用者免除反複輸入長串指令, 節省時間並減少錯誤發生:

  24. 指令歷程

  25. 指令歷程 • 除了直接指定編號之外, 也能根據 "減法" 原則執行指令:

  26. 指令歷程 • 但是如果只輸入 ! 或 !-0指令, 會出現語法錯誤和未知事件的訊息:

  27. 定義指令別名 • 別名的作用可讓使用者自訂新的指令名稱來替代原有的指令。範例如下:

  28. 定義指令別名 • 從上面範例中我們可清楚地看出, mycopy指令在經過定義之後, 成為 cp指令的別名。每當執行 mycopy指令就等於是執行 cp指令。我們可以透過 alias指令, 採用熟悉的字彙替指令設定別名, 讓 Linux 的指令名稱可依我們的喜好來更改。

  29. 定義指令別名 • 欲得知目前有多少指令被設了別名, 可執行 alias指令, 參考一下別名的定義方法:

  30. 定義指令別名 • 可以定義別名, 當然也能取消, 請看下面用 unalias指令取消別名的範例: • 在指令列下所定義的別名只是暫時性的, 當登出系統之後, 再次登入時所有輸入的別名指令都會消失。若希望每次登入時系統會自動設定別名, 請將 alias指令加入該帳號家目錄下的 .bashrc 檔案裡:

  31. 定義指令別名

  32. 定義指令別名 • 您也許會感到有些疑惑?原本在 .bashrc 檔案中沒有定義所有的別名, 但執行 alias 指令還是列出一堆已經定義好的別名。其實這是因為系統已經預先設好一些較常用的別名, 供所有的人使用。而這些已設好的別名並不會定義在每個使用者的 .bashrc 檔中, 而是分別放在 /etc/profile.d 目錄內的 *.sh 設定檔中。

  33. 定義指令別名 • 若欲改變這些別名的定義, 請用文書編輯器開啟家目錄下的 .bashrc 檔案, 依自己的習慣將別名加入即可。系統讀取的順序是先讀 /etc/profile.d 內的 *.sh 檔案, 然後讀使用者的 .bashrc 檔案。若兩者定義的內容互有衝突, 則以後者為準。

  34. 指令補全 • 指令補全的功能可幫助使用者完成尚未全部輸入的指令, 範例如下:

  35. 指令補全 • 假使輸入資料不足, 導致 bash 無法判斷可能的指令為何, 系統便會發出聲響提醒使用者, 倘若此時再按一次 [Tab] 鍵, bash 就會把所有可能的指令都列出來, 供使用者參考:

  36. 實務經驗談 • 善用指令補全的功能, 可以幫助我們更快速、更正確地輸入指令, 例如:

  37. 工作控制 • 工作控制可在前景和背景間切換作業, 並且顯示有哪些工作正在背景中執行。所用的指令及其意義如下: • bg:將中斷的工作放到背景裡面去執行。 • fg:將正在背景執行的工作切回到前景來進行。 • jobs:顯示目前正在背景執行的工作名單。

  38. 工作控制 • 光是說說不易瞭解, 實際操作最能體會, 請您先切換到 root 帳號, 再操作以下範例:

  39. 工作控制 • 接著我們把正在執行的工作中斷, 放到背景裡面執行:

  40. 21 - 3 Shell 下的特殊字元 • Shell 下有些特殊字元, 可補系統指令之不足。常用的特殊字元及其意義條列於下: • #:標示註解, 這些說明不會被當成指令或程式執行。在 /etc/zshrc 檔案裡便能見到:

  41. 21 - 3 Shell 下的特殊字元 • &:以背景方式執行。例如執行updatedb & 指令, 會把這個工作丟到背景去執行。 • ':單引號定義引號內為一個完整的字串, 並且讓 shell 不要解讀其中的空白或特殊字元。例如執行 mycopy='cp -v'指令, 設定 mycopy為 cp -v指令的別名。 • *:對應任何字串、字元或空字串。例如執行 ls a*指令, 會列出所有以英文字母 "a" 開頭的檔案及子目錄。

  42. 21 - 3 Shell 下的特殊字元 • ?:對應任何單一字元。例如執行 ls b?指令, 會列出檔名為 2 個字元, 且第 1 個字元為 "b", 第 2 個字元為任意字元的檔案。 • .:表示目前所在的目錄。例如執 ./exefile 指令, 可執行位於現在目錄下的 exefile 執行檔 (exefile 為執行檔的檔案名稱)。 • ..:表示上一層的目錄。例如執行 cd ..指令可切換到上一層目錄。

  43. 21 - 3 Shell 下的特殊字元 • ;:可用它將多個指令分隔開來, 讓指令依序執行。範例如下所示: • >:把執行結果輸入一個檔案中。若該檔案已經存在, 則原有內容會被刪除。範例如下:

  44. 21 - 3 Shell 下的特殊字元 • >>:把執行結果附加到一個已存在的檔案後面。範例如下: • \:脫逸符號 (escape), 解除特殊字元的含意。 • |:建立管線, 將前一個指令的執行結果輸入給下一個指令使用。 • ~:使用者登入後所在的目錄, 也就是使用者家目錄。

  45. 21 - 3 Shell 下的特殊字元 • [英文字母或數字]:對應括弧中任意範圍的字元。示範如下: • 也可以指定字母的範圍: • 也可以指定數字的範圍:

  46. 21 - 3 Shell 下的特殊字元 • [!英文字母或數字]:排除括弧中任意範圍的字元。和前面一個的用法相反, 比如執行 ls [!abc]*指令, 會顯示所有不以英文字母 "a"、 "b"、"c" 中任一字元為檔名開頭的檔案。 • {英文字母或數字}: 對應括弧中的任意字元。效果和之前的 [英文字母或數字] 類似, 但是字母或數字間要以逗號間隔開來, 例如 ls {a,b,c}*。

  47. 請謹慎使用 . 與 * • 例如在 /tmp 目錄想檢查隱藏檔案時, 會直覺地打 ls .*, 但是 “.*” 會讓 shell 解釋成 . 與 ..。所以此指令可引伸為ls .. 將會顯示上一層目錄, 也就是根目錄的列表。又例如執行 cp-R /root/.* /tmp/時, 除了複製 /root 目錄下所有檔案, 還能引伸成 cp -R /root/../* /tmp/,導致根目錄底下所有目錄與檔案也會被複製過來。因此當執行指令時, 務必小心 . 與 * 兩者的搭配使用。

  48. 21 - 4 Shell 的環境變數與設定 • Shell 本身有一組用來儲存系統資訊的變數, 稱為環境變數 (Environment Variables)。環境變數依據 shell 種類的不同, 會有不一樣的變數及設定方法。

  49. 顯示環境變數 • 不同的 shell 雖擁有不一樣的環境變數, 但彼此間的差異並不大。在 bash 下可用 set指令查詢環境變數 (tcsh 請用 setenv指令):

  50. 修改環境變數 • 在 Bourne Shell 家族中, 環境變數的設定方式如下:

More Related