關於 Linux 、Shell 和終端
文章目錄
建議在閱讀本文之前,先看下上篇文章 關於計算機系統的基本組成 ,更容易理解。
一、什麼是作業系統?
在上一篇文章中已經介紹過,計算機軟體包括系統軟體和應用軟體,作業系統就屬於系統軟體中的核心部分。
- 作業系統是計算機系統中必不可少的核心繫統軟體;
- 其它的軟體都是在作業系統的基礎上建立的,在作業系統的統一管理和支援下執行。
- Linux 是一種常用的作業系統軟體,相對應的還有其它的作業系統,如常見的 Windows 、MAC、UNIX 等等。
二、作業系統的作用
作業系統有兩大重要作用:
1、管理資源,提高系統效率
- 有效的組織和管理系統中的各種軟、硬體資源,組織工作流程,控制程式執行;
- 進行 CPU 管理、儲存管理、裝置管理、檔案管理;
- 合理分配各種資源,提高系統吞吐量;
2、改善人機互動
- 在複雜的 01 程式碼和機器指令基礎上,為使用者提供易用的介面和介面;
- 是使用者和計算機硬體之間的介面;
三、Linux 和 Shell 的角色
在鳥哥私房菜中,是這樣說明作業系統的:
- 其中,作業系統和作業系統是一樣的概念,對應英文都是 operating system;
- 不同的硬體執行不同的作業系統及應用程式;
若使用的是 Linux 作業系統,則 Linux 和 Shell 的角色如下:
四、Shell 的作用
1、什麼是 Shell ?
- 一般說的 Shell 都是指命令列 shell (command line shell,CLI),屬於一種應用程式,相當於 Linux 中的命令直譯器;
- Shell 把命令或程式傳遞給作業系統(如Linux),呼叫系統核心來執行,是使用者使用作業系統的橋樑;
- 過去命令列 Shell 是類Unix 系統中唯一的使用者介面,後來出現了圖形化的使用者介面(graphical user interfaces ,GUIs),如 Ubuntu 作業系統下的圖形介面;
- Shell 既是一種命令語言,可以互動式的解釋和執行使用者輸入的命令;
- Shell 又是一種解釋型的程式設計語言,有各種變數和引數,及迴圈和分支等複雜的流程控制結構;
2、Shell 的分類
不同的作業系統使用不同的 Shell,同時隨著作業系統核心的更新,也出現了不同版本的 Shell。
Linux 系統中預設使用的是/bin/bash
, 是 /bin/sh
的增強版,功能非常強大,保持預設就好。
可以在 /etc/shells
中檢視一下系統中可用的 shell 有哪些:
$ cat /etc/shells
/bin/sh
/bin/bash ---預設使用的是這個
/sbin/nologin
/bin/tcsh
/bin/csh
3、Shell 的兩種執行方式
互動式(Interactive)
使用者每輸入一條命令,shell 就解釋並執行一條命令。
在前面的文章中,講到的常用的 Linux 命令中的例子基本都是屬於互動式的。
批處理(batch)
把多條命令寫在一個 shell 指令碼中(shell script),最後執行這個 shell 指令碼。
這種方式 shell 會依次讀取並解釋執行指令碼中的每行命令。
五、終端、TTY 和 Shell 的關係
1、什麼是終端?
- 常說的終端(Terminal),也可以叫做終端模擬器(terminal emulator)指的是一個用來輸入 shell 命令和指令碼的視窗。
- 我們實際上是在終端上面編寫和執行 shell 命令和指令碼。
- 在 Linux 系統中有很多終端應用,如:gnome-terminal, konsole, xterm, rxvt, kvt, nxterm, eterm 等等,可以直接使用。
如果是在 Windows 環境下,也可以使用 SecureCRT 、XShell 等工具來模擬一個 Linux 下的終端,實際執行 shell 。
比如,在 SecureCRT 中我們可以在 Options
中設定使用哪種終端:
2、TTY
TTY 來源於 Teletypewriter (電傳打字機),後來被鍵盤和顯示器取代,所以後來就用 tty 指代終端,它相當於是對應終端的一個代號。
Linux 系統會提供很多個 tty ,對應於很多使用者的終端,關係類似下圖:
tty
命令
(1)在 shell 中輸入 tty
,會顯示當前終端資訊:
直接在 Linux 系統下執行:
$ tty
/dev/tty1
在 Windows 系統中通過 SecureCRT 執行:
$ tty
/dev/pts/9
這裡在不同的終端下執行 tty
,結果不太一樣:
- 直接在 Linux 系統(也可以是虛擬機器的 Linux 系統)中開啟的終端,會顯示裝置代號為
tty
加上代號; - 通過遠端連線到 Linux 系統開啟的虛擬終端,會顯示裝置代號為
pts(pseudo-terminal slave)
加上代號,pts 是用於實現 pty(pseudo-tty 虛擬終端)的一種方式。
tty
和 pts
只是不同終端型別的顯示代號而已。
(2)在 shell 中輸入 who
,會顯示當前使用者所有的終端資訊:
加上 -H 引數,會顯示列名:
# who -H
NAME LINE TIME COMMENT
root tty7 2018-12-13 12:12 (:0)
root pts/0 2018-12-14 17:09 (:0.0)
root pts/1 2018-12-14 18:51 (192.168.1.17)
root pts/2 2018-12-14 19:48 (192.168.1.17)