文章目录
建议在阅读本文之前,先看下上篇文章 关于计算机系统的基本组成 ,更容易理解。
一、什么是操作系统?
在上一篇文章中已经介绍过,计算机软件包括系统软件和应用软件,操作系统就属于系统软件中的核心部分。
- 操作系统是计算机系统中必不可少的核心系统软件;
- 其它的软件都是在操作系统的基础上建立的,在操作系统的统一管理和支持下运行。
- 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)