1. 程式人生 > >關於 Linux 、Shell 和終端

關於 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 虛擬終端)的一種方式。

ttypts只是不同終端型別的顯示代號而已。

(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)