1 / 83

第 17 章

第 17 章. 使用者環境. 本章提要. 17-1 Shell 簡介 17-2 檢視與更換 Shell 17-3 Shell 的各種功能 17-4 Shell 下的特殊字元 17-5 Shell 的環境變數與設定 17-6 .project 、 .plan 和 .forward 設定檔. 17-1 Shell 簡介.

efuru
Download Presentation

第 17 章

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. 第 17 章 使用者環境

  2. 本章提要 • 17-1 Shell 簡介 • 17-2 檢視與更換 Shell • 17-3 Shell 的各種功能 • 17-4 Shell 下的特殊字元 • 17-5 Shell 的環境變數與設定 • 17-6 .project、.plan 和.forward 設定檔

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

  4. Shell 簡介

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

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

  7. Shell 簡介 • 隨著 shell 程式版本不斷更新, 各種不同的 shell 相互截長補短, 彼此間的差異就逐漸減少。 • BSD 的全名是 Berkeley Software Distribution/Design。

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

  9. 檢視與更換 Shell • 指令提示符號 • 檢視預設的 Shell 種類 • 更換 Shell • 禁止使用者登入

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

  11. 指令提示符號 • 我們來看看在不同的 shell 之下, 其提示符號有何不同 (提示符號可自行設定, 此處以預設值為例): • ash:$ • bash 和 bash2:[tony@free tony]$ 或[tony@free ~]$ • ksh:$ • tcsh:[tony@free ~]$ • zsh:[tony@free]~ %

  12. 指令提示符號 • 在本 Linux 發行版中, bsh、csh 、sh 等都是符號連結 (symbolic link), bsh 指向 ash, csh 指向 tcsh、sh 指向 bash 。 • 提示符號的用處是告訴使用者現在可以下達指令, 同時也表示先前下達的指令已經完成, 或是已經被放到背景執行。

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

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

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

  16. 更換 Shell

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

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

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

  20. 禁止使用者登入

  21. 禁止使用者登入 • 我們必須指定 /sbin/nologin 給該使用者, 若僅把 shell 刪除而不加上任何檔案, 則該使用者登入時, 系統會自動啟用 sh 為其預設之 shell。

  22. 17-3 Shell 的各種功能 • 17-3-1 指令歷程 • 17-3-2 定義指令別名 • 17-3-3 指令補全 • 17-3-4 連續執行指令 • 17-3-5 工作控制 • 17-3-6 拼字檢查

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

  24. 指令歷程 • 其中上下鍵提供的指令歷程功能, 不僅可以切換此次登入後所執行過的指令, 還能夠記住之前登入時所使用過的指令。其運作方式是將之前登入所執行過的指令記錄在使用者家目錄下的 .bash_history 檔中, 而本次登入所執行的指令則另外記錄在暫存記憶體, 待成功登出後, 再寫入 .bash_history 檔內。

  25. 指令歷程 • 不過無論是之前登入所執行的指令, 或此次登入所執行的指令, 都可以透過執行 history指令查得。 • 指令歷程功能除了可以幫助使用者快速輸入指令外, 更可以幫助使用者透過查詢曾執行過的指令進行除錯工作。

  26. 指令歷程 • 以下先來看看 .bash_history 檔的內容:

  27. 指令歷程 • 執行history指令則可以列出本次登入及之前登入所使用過的指令, 並會依序為各指令編號。透過 history指令以下列方式執行指令, 在需要輸入長串指令的狀況下, 除了可以節省時間, 更可以減少錯誤發生:

  28. 指令歷程

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

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

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

  32. 定義指令別名 • 從上面範例中我們可清楚地看出, mycopy指令在經過定義之後, 成為 cp指令的別名。每當執行 mycopy指令就等於是執行 cp指令。我們可以透過 alias 指令, 採用熟悉的字彙替指令設定別名, 讓 Linux 的指令名稱可依我們的喜好來更改。 • 欲得知目前有多少指令被設了別名, 可執行 alias指令, 參考一下別名的定義方法:

  33. 定義指令別名

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

  35. 定義指令別名

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

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

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

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

  40. 17-3-4 連續執行指令 • 在 Linux 下, 如果要連續執行多個指令, 不需一個一個依序下達, 可以使用";" 號, 一次下達所有欲執行的指令。連續執行的好處在於, 當您需要執行的指令中, 有某些指令需要花費較多時間執行時, 可以不必等該指令執行完, 再到終端機前下達下一個指令, 可以直接告訴系統該指令執行完後, 接著執行下一個指令。

  41. 連續執行指令 • 如此, 可以省下不少精神和時間。例如在編譯程式時可以如此下達指令:

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

  43. 工作控制 • 光是說說不易瞭解, 實際操作最能體會:

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

  45. 17-3-6 拼字檢查 • shell 的拼字檢查功能會檢查使用者輸入的指令和參數是否正確, 假若出現錯誤, 就顯示最接近的答案, 讓使用者決定如何處理:

  46. 拼字檢查 • 自動修正時所出現的四個英文字母, 其代表意義如下: • y (yes):表示以修正過的指令執行, 在上例中會執行 rmdir 指令。 • n (no):表示不要修正指令, 直接執行它, 在上例中會執行 rmdiz 指令。

  47. 拼字檢查 • e (edit):表示不要執行指令, 讓使用者重新修改, 在上例中會如下顯示: • a (abort):表示放棄執行該指令, 回到指令提示符號。 • 假如把 "set correct=cmd" 改成 "set correct=all", 則拼字檢查會對整個指令列進行修正。

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

  49. Shell 下的特殊字元

  50. Shell 下的特殊字元 • &:以背景方式執行。例如執行 find / -name data -print &指令, 會把這個工作丟到背景去執行。 • ':單引號定義引號內為一個完整的字串, 並且讓 shell 不要解讀其中的空白或特殊字元。例如執行 alias findscsi='find / -name SCSI -print &'指令, 設定findscsi為 find / -name SCSI -print &指令的別名。

More Related