來介紹一下 Shell吧!

在操作 Linux 的時候,應該很多人都會使用終端機指令操作系統以外,但有時候指令複雜又多,但又想簡化他,這時候 就需要 Shell 程式了,使用一些簡單的 Shell 程式,就可以簡化許多繁複的工作。但在現行 Linux 發行版本中,大多都使用 Bash 為預設 Shell,活用 Shell 可以有效降低操作的複雜度。

更簡單來說,以「核心(Kernel)」及「硬體」來做區分,而「shell」就是提供空具命令「核心」去跟「硬體」說該動以來工作囉!

如果以上太複雜….難懂,只要懂 shell 是一個「文字模式介面」就好

Shell 種類

sh

sh 的全名是 Bourne shell,由 AT&T 公司的 Steve Bourne開發,為了紀念他,就用他的名字命名。

sh 是 UNIX 上的標準 shell,很多 UNIX 版本都配有 sh。sh 是第一個流行的 Shell。

ash

ash Shell是由 Kenneth Almquist 編寫的,是Linux中 一個簡單的輕量級且占用系統資源最少的一個小Shell,它只包含24個內部命令,適合運行於低內存環境,因而使用起來很不方便,但與bash shell完全兼容。

bash

bash 是 Linux 目前預設的 shell,bash 由 GNU 組織開發,保持了對 sh 的兼容性,是各 Linux 發行版預設的 shell,bash 是完全免費的,屬於開源軟體(Open Source),內部命令一共有 40 個。

Linux 作為預設的 Shell 是因為它具有以下特色:

  • 可以使用類似DOS下面的doskey的功能,用上下方向鍵查閱和快速輸入並修改命令。
  • 自動通過查找匹配的方式,給出以某字串開頭的命令。
  • 包含了自身的幫助功能,你只要在提示符下面鍵入help就可以得到相關的幫助信息。

csh

csh 是由柏克萊大學的 Bill Joy 設計的,這個 shell 的語法有點類似C語言,所以才得名為 C shell ,簡稱為 csh,共有52個內部命令。該 shell 其實是指向/bin/tcsh這樣的一個 shell,也就是說,csh 其實就是 tcsh。

Bill Joy 是一個風雲人物,他創立了 BSD 作業系統,開發了 vi 編輯器,還是 Sun 公司的創始人之一。

BSD 是 UNIX 的一個重要分支,後人在此基礎上發展出了很多現代的作業系統,最著名的有 FreeBSD、OpenBSD 和 NetBSD,就連 Mac OS X 在很大程度上也基於BSD。

dash

基於 Debian 的作業系統還有 Ubuntu 16.04之後的版本爲了避免預設的 sh 過於肥大,因此把 /bin/sh 的檔案路徑連接到更輕量且符合 POSIX 標準的 Debian Almquist Shell(dash)。

fish

ksh

ksh是Korn Shell的縮寫,由Eric Gisin編寫,ksh綜合了csh的強大功能和bash的易用性,共有42 條內部命令。該 shell 最大的優點是幾乎和商業發行版的 ksh 完全相容,這樣就可以在不用花錢購買商業版本的情況下嘗試商業版本的性能了。

用於編寫 script 的 shell,從可移植性和普遍性上考慮,建議用 ksh。

因為 POSIX 1003.2 就是以 ksh 為藍本的。而 bash 又是遵尋 POSIX 寫的。但 bash 除 linux 外,應用較少。而且,有些 ksh93 中的特性 bash 中沒有,如 associative arrays。

tcsh

tcsh 是 csh 的增強版,加入了命令補全功能,提供了更加強大的語法支持。

zsh

zsh 稱之為 z shell,是由 Paul Falstad 完成的,zsh 基於 Bourne Shell(sh) 的核心做出的的擴展版本,增加了大量的新功能,他與 bashkshtcsh 有許多相同的功能,zsh 支持外部插件和主題也支援很多的框架,其中最常搭配的框架「Oh-My-Zsh」。

zsh具有如下特性:

  • 更高效
  • 更好的自動補全
  • 更好的文件名展開(通配符展開)
  • 更好的數組處理
  • 可定制性高
  • 如果只是一般的用途,沒有必要安裝這樣的Shell。

環境介紹

shell 是一個程序,為什麼說是程序,可以直接在終端機輸入 ps 會看到 bash 或是其他的 shell,shell 一般都是放在 /bin 或者 /usr/bin 目錄下,Linux 系統可用的 Shell 都會記錄在 /etc/shells 文件。

chsh 指令介紹

chsh 指令主要用來更換預設的 shell。

1
[root@localhost etc]# chsh [選項] [目標]
  • -s <shell 名稱> --shell<shell 名稱>:更改系統預設的shell環境。
  • -l --list-shells 列出目前系統可用的shell清單。
  • -u --help 線上幫助。
  • -v --version 顯示版本資訊。

cat 指令,檢視當前系統可用 shell 有哪些

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@localhost ~]# cat /etc/shells

/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash

// 或

[root@localhost etc]# chsh -l

/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash

檢視系統上的 shell 環境變數

在 Linux 系統上,sh 大部分已經被 bash 這個 shell 代替, /bin/sh 通常會指向 /bin/bash 的符號連結。

1
2
3
4
5
6
7
8
9
[root@localhost ~]# echo $SHELL

/bin/bash

// 或

[root@localhost etc]# echo $0

/bin/bash

echo 是一個 shell 印出變數的指令,其實跟 PHP 的 echo 很像。

變更系統預設的 shell

若要變更使用者預設的 shell,使用 chsh 指令。

1
2
3
4
[root@localhost etc]# chsh -s /bin/bash

變更 root 的 shell。
chsh: Shell not changed.

※ 更改完,記得重新登入,就可使用。

標籤: w3HexSchool LINUX