shell简介&&终端

1825 字
9 分钟
shell简介&&终端

shell简介&&终端#

[TOC]


编译器#

  • 工作方式:一次性将整个源代码翻译成目标代码,生成可执行文件
  • 执行过程: 编写源代码(如 .c 文件) 编译器将其编译为机器码(如 .exe 或 .out 文件) 运行生成的可执行文件

解释器#

  • 工作方式:逐行读取源代码,边解释边执行,不生成独立的可执行文件

  • 执行过程:

    1. 编写源代码(如 .py 文件)
    2. 解释器逐行读取并立即执行

    Shell 是一个命令语言解释器


什么是 Shell?#

Shell 是操作系统提供给用户的一个 命令行界面(CLI) ,它允许用户通过输入文本命令与操作系统内核进行交互


Shell 如何工作?#

  1. 用户在终端中输入命令(如 ls -lecho "Hello" 或运行脚本)
  2. Shell 接收这些命令
  3. 它逐行解析(解释)这些命令:
    • 如果是内置命令(如 cdexport),Shell 直接执行
    • 如果是外部程序(如 lsgrep),Shell 调用操作系统启动对应程序
    • 如果是 Shell 脚本(.sh 文件),Shell 会逐行读取并解释执行其中的语句
  4. 输出结果返回给用户

这个过程 没有编译步骤 ,完全是“边读边执行”,符合解释器的典型特征


💡 Shell 是用户与操作系统服务之间的接口

数据流向:

Terminal window
用户命令 Shell解析 系统调用(操作系统) 内核处理 硬件执行 结果返回

图解#

image-20260303132947292
image-20260303132947292

这张图展示了计算机系统的经典分层架构,各部分关系如下:

  1. 硬件 (Hardware) 🟦
    • 位置:最底层
    • 作用:物理基础(CPU、内存、磁盘等)
    • 关系:只与内核直接对话,不直接接受用户指令
  2. 内核 (Kernel) 🟥
    • 位置:操作系统的核心,位于硬件之上
    • 作用:管理硬件资源(进程调度、内存管理、驱动)
    • 关系:直接控制硬件,通过 系统调用 为上层提供服务
  3. 操作系统 (Operating System) 🟩
    • 位置:包裹着内核
    • 作用:包含内核 + 系统库 + 系统工具
    • 关系:为 Shell 和软件提供运行环境,内核是操作系统的心脏
  4. Shell 🟧
    • 位置:用户空间,运行在操作系统之上
    • 作用命令行解释器 ,用户的“翻译官”
    • 关系:接收用户命令,转化为系统调用请求内核执行
  5. 软件 (Software/App) 🟪
    • 位置:用户空间
    • 作用:完成具体任务(如浏览器、编辑器)
    • 关系:与 Shell 平级,同样通过系统库请求内核资源
  6. 用户 (User)
    • 位置:最顶层
    • 关系:通过 Shell 或 图形软件 与系统交互
Note

💡 重点

  • 隔离性:用户和软件不能直接操作硬件,必须通过 内核
  • Shell 的本质:Shell 也是一个 软件(进程),但它是用户与内核交互的接口
  • 系统调用:Shell 和 软件 请求内核服务的唯一合法途径是通过 系统库 (System Libraries) 发起系统调用

终端简介#

image-20260303164016335
image-20260303164016335

  1. 多用户、多任务
  2. 不管哪个终端切进去,操作的都是这一个系统、互不影响

==终端大致分为三种:==

物理终端#

指的是 真实存在的、具有硬件实体的终端设备

  • 直接通过 硬件 进行连接!
Terminal window
root@rocky10:~# ls /dev/console
/dev/console
# 我们之前网络课,通过console线连接终端!

虚拟终端(TTY)#

  • 指的是 Linux 内核提供的本地多用户文本界面
  • 通过 Ctrl+Alt+F1 到 Ctrl+Alt+F6(或更多)切换

image-20260303151143958
image-20260303151143958

image-20260303151209268
image-20260303151209268

  • 直接在 VMware 上面敲即可!

  • 这些终端直接由内核管理,与物理显示器和键盘绑定

  • 对应设备文件如 /dev/tty1、/dev/tty2 等

Terminal window
root@rocky10:~# ls /dev/tty*
/dev/tty /dev/tty16 /dev/tty24 /dev/tty32 /dev/tty40 /dev/tty49 /dev/tty57 /dev/tty8 ....
快捷键终端编号 (TTY)设备文件路径典型默认用途
Ctrl+Alt+F1TTY1/dev/tty1文本终端 / 图形界面
Ctrl+Alt+F2TTY2/dev/tty2文本终端 / 图形界面
Ctrl+Alt+F3TTY3/dev/tty3纯文本终端
Note

如果一个终端的程序卡死,可以切换到其他虚拟终端tty,强制结束对应的进程

Debug Shell#

Terminal window
Debug Shell 是一个用于故障排查和系统调试的特殊功能,通常在系统启动过程中出现问题(如无法正常挂载根文件系统)时启用,允许管理员检查硬件、文件系统、内核参数等
RHEL 默认并不会启用 Debug Shell,也不会自动将 Ctrl+Alt+F9 绑定到该 shell
root@rocky10:~# systemctl is-active debug-shell.service
inactive
# 不是活跃的,默认关闭!
root@rocky10:~# systemctl start debug-shell.service
# 启动
激活后,Debug Shell 通常出现在 tty9(Ctrl+Alt+F9)
# 调试完成后,应及时关闭服务
root@rocky10:~# systemctl stop debug-shell.service

image-20260303153505739
image-20260303153505739

伪终端(PTY)#

  • 是一种 软件模拟的终端设备

  • 用于支持 终端模拟器(如 Xhell)、远程登录(如 SSH)等场景

  • 完全虚拟,无硬件依赖

  • 设备文件通常位于 /dev/pts/ 目录下

Terminal window
root@rocky10:~# ls /dev/pts/*
/dev/pts/0 /dev/pts/ptmx

who命令#

Terminal window
# Xshell远程登陆rocky_linux后:
# 在rockylinux 验证:
root@rocky10:~# who
root pts/0 2026-03-03 08:00 (10.0.0.1)
# 这个是我们Xshell的伪终端(看IP)
# pts/0 远程第一个用户
root seat0 2026-03-03 14:24 (login screen)
# 这个是我们的屏幕,桌面
root tty2 2026-03-03 14:24 (tty2)
# 这个是我们虚拟终端,桌面里面打开的终端
'tty终端是本地登录, pts是远程连接'
# 其中的“登录时间”指的是本次会话的登录时间

w命令#

image-20260303160625623
image-20260303160625623

Terminal window
1.也可以用来查看负载
w的第一行等于uptime命令
2.查询谁登陆了系统,并且正在干啥
root@rocky10:~# w
16:02:37 up 8:02, 3 users, load average: 0.00, 0.00, 0.00
USER TTY LOGIN@ IDLE JCPU PCPU WHAT
root 08:00 48:42 0.00s 0.01s sshd-session: root [priv]
root 08:00 48:42 0.00s 0.64s /usr/lib/systemd/systemd --user
root tty2 14:24 8:02m 0.02s 0.02s /usr/libexec/gnome-session-binary

tty#

Terminal window
root@rocky10:~# tty
/dev/pts/1
# 虚拟终端中查看
root@rocky10:~# tty
/dev/pts/0
# Xshell中查看,伪终端

终端对比#

对比维度**物理终端 **虚拟终端 (TTY)伪终端 (PTY)
英文缩写/dev/tty (硬件)/dev/ttyN/dev/pts/N
核心定义直接连接计算机的物理设备(键盘+显示器)内核提供的本地多用户文本界面,共享同一物理设备是一种 软件模拟的终端设备,模拟终端行为
设备文件/dev/tty0/dev/tty1 ~ /dev/tty63/dev/pts/0,1,2...
典型设备名tty0 (控制台映射)tty1, tty2, tty3pts/0, pts/1, pts/2
是否依赖硬件✅ 强依赖(物理串口/控制台)⚠️ 部分依赖(需物理屏幕输出)❌ 不依赖(纯软件模拟)
典型使用场景• 服务器本地维护口 (Serial Console) • 嵌入式设备 UART 调试 • 物理机房直连操作Ctrl+Alt+F1~F6 切换多文本终端 • 图形界面崩溃时的救援通道 • 无图形环境的多任务隔离• SSH 远程登录 (sshd) • 图形界面终端模拟器 (Xshell) • 自动化测试/脚本控制
Important

📌 记忆口诀:

  • 物理终端 = 硬件直连 虚拟终端 = 内核分身 伪终端 = 软件模拟

  • 现代 Linux 日常交互(SSH/图形终端)99% 使用的是 伪终端 (PTY)

命令参考#

目的命令说明
查看当前终端类型tty输出如 /dev/pts/0 (伪终端) 或 /dev/tty2 (虚拟终端)
查看终端设备详情ls -l /dev/tty* /dev/pts/*列出所有终端设备文件
查看登录会话whow显示用户登录的终端类型 (tty/pts)

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

shell简介&&终端
https://www.kpyun.fun/posts/basics/extension/extension04/
作者
久棹
发布于
2025-09-12
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
久棹
只要胆子大,天天寒暑假!
公告
欢迎来到久棹的技术小站!本站专注 Linux 运维学习笔记分享,如有问题欢迎交流探讨 🎉
分类
标签
站点统计
文章
98
分类
11
标签
203
总字数
244,453
运行时长
0
最后活动
0 天前
站点信息
构建平台
Local
博客版本
Firefly v6.13.5
文章许可
CC BY-NC-SA 4.0

文章目录