Shell 簡介

  • 系統核心與使用者介面。

    \begin{picture}(100,180)
\setlength{\unitlength}{1mm}
......
  • 何謂 shell?
    1. 替我們工作的是「硬體」,控制硬體的「核心」,我們則利用「shell」控制核心提供工具來使硬體正確工作。
    2. Bash 為 linux 預設的 shell,文字模式之指令下達方式就是 bash 的工具與介面。
    3. shell 狹隘的定義是指文字模式的 BASH shell。廣義的 shell 也可以是 KDE 之類的圖形介面控制軟體。
    4. 如果沒有特別說明, shell 指的是比較狹義的文字模式。
  • 為什麼要學文字模式的 Shell?
    1. X Window 的介面雖然親善,功能雖然強大,但是其畢竟是將所有利用到的套件都整合在一起的一個套件而已,並非是一個完整的套件。
    2. 遠端連線時,文字介面的傳輸速度一定比較快。
    3. 主機出現問題時經常需要以開機等級 1 (單使用者模式,亦即所謂的安全模式)進入維修。
    4. 想要將主機管理好, shell 程式編寫一定需要。
  • Shell 的歷史
    1. Bourne shell
      1. 以發明者 Steven Bourne 命名
      2. 第一個重要的 shell,1979 年第一個流行的 Unix 版本 7 發行時, 開始使用 Bourne shell.
      3. Bourne shell 的主檔名為 sh.
      4. 雖然 Unix 上的 shell 有許多種, 但許多 Unix 系統至今仍然使用 sh 做為重要的管理工具.
    2. C shell
      1. 作者是柏克萊大學的 Bill Joy.
      2. 第一個廣為流行使用的 shell
      3. 主要附在 BSD 版的 Unix 系統.
      4. 因其語法和 C 語言類似, 因而得名,且使得程式設計師, 學習 C shell 時更方便容易.
    3. Bash shell
      1. Bash 是 GNU 計劃的重要工具軟體之一, 也是 GNU 作業系統中標準的 shell.
      2. Bash 相容於 sh, 許多早期開發的 Bourne shell 都可以繼續在 bash 中運作.
      3. Bash 在 1988 年誕生, 最初作者 Brian Fox.
      4. Bash 是完全免費的, 它是 Open Source 的一員, 原始碼全部開放.
    4. 其他的 shell,例如 tcsh, zch, ksh 及 pdksh.
    Shell 名稱 歷史
    sh 早期 UNIX 所用的 shell,由 Steven Bourne 發展出來。
    csh,tcsh,zsh C shell 和一些衍生版本,原始是由 Bill Joy 設計。
    ksh,pdksh Korn shell 和 public domain 的同類,由 David Korn
      設計,在很多商業版的 UNIX 系統,內定都為此 shell。
    bash bash(Bourne Again Shell)為 Linux 主要的 shell。
      bash 為 GNU 計畫之一,它提供了原始程式碼。
      bash 在很多方面很類似 Korn shell。
  • 系統支援之 Shells:
    [root@dywOffice ~]# cat /etc/shells
    /bin/ash
    /bin/bash
    /bin/bsh
    /bin/csh
    /bin/sh
    /bin/tcsh
    [root@dywOffice ~]# ll /bin/*sh
    lrwxrwxrwx 1 root root     11 Jan 12 16:14 /bin/ash -> ../sbin/bsh*
    -rwxr-xr-x 1 root root 725160 Aug 24  2006 /bin/bash*
    lrwxrwxrwx 1 root root     11 Jan 12 16:14 /bin/bsh -> ../sbin/bsh*
    lrwxrwxrwx 1 root root      4 Jan 12 16:14 /bin/csh -> tcsh*
    lrwxrwxrwx 1 root root      4 Jan 12 16:14 /bin/rbash -> bash*
    lrwxrwxrwx 1 root root      4 Jan 12 16:14 /bin/sh -> bash*
    -rwxr-xr-x 1 root root 324144 Jan  2  2006 /bin/tcsh*
    [root@dywOffice ~]# ll /sbin/bsh
    -rwxr-xr-x 1 root root 81988 Jul  2  2006 /sbin/bsh*
    

  • 使用者登入時取得的 Shell 記錄在 /etc/passwd:
    [root@dywOffice ~]# cat /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/bin/sh
    
    dywang:x:500:100:De-Yu Wang:/home/dywang:/bin/bash
    ftp:x:75:75:system user for proftpd:/var/ftp:/bin/false
    
    calculus:x:504:75::/home/ftp/pub:/bin/false
    [root@dywOffice ~]# ll /bin/false
    -rwxr-xr-x 1 root root 12144 Aug 31 06:26 /bin/false*
    
練習題
  1. 「shell」之功能為何?
    Sol. 控制核心提供工具來使硬體正確工作。
  2. 如果沒有特別說明, shell 指的是什麼?
    Sol. 文字模式介面
  3. 請列舉要學文字模式 Shell 的主要理由?
    Sol. 1.遠端連線,文字介面較快;2.有問題時需以開機等級 1 (單使用者模式)進入維修;3.要管理好主機,一定需要編寫 shell 程式。
  4. 第一個重要的 shell 為 Bourne shell,其主檔名及名稱由來為何?
    Sol. 主檔名為 sh,以發明者 Steven Bourne 命名
  5. 第一個廣為流行使用的 shell 為 C shell,其名稱由來為何?
    Sol. 因其語法和 C 語言類似, 而得名
  6. Linux 預設的 shell 為何?
    Sol. bash shell
  7. Bash shell 有無開效原始碼?
    Sol. Bash 是完全免費的, 它是 Open Source 的一員, 原始碼全部開放
  8. 如何查看 Linux 系統支援之 shells?
    Sol. 查看檔案 /etc/shells 中是否有列舉,例如使用 cat /etc/shells
  9. Linux 系統中,使用者登入時取得的 Shell 記錄在那個檔案?
    Sol. /etc/passwd
  10. /etc/passwd 中有如下一行,則其登入時取得的 shell 為何?
    csie:x:504:75::/home/csie:/bin/false
    Sol. 無法取得 shell
  11. /etc/passwd 中有如下一行,則其登入時取得的 shell 為何?
    csie:x:504:75::/home/csie:/bin/bash
    Sol. bash
  12. /etc/passwd 中有如下一行,則其登入時取得的 shell 為何?
    csie:x:504:75::/home/csie:/bin/sh
    Sol. sh

  DYWANG_HOME