Terminal • TTY • Shell • SSH

一次性搞懂命令行世界的四大核心概念

一句话对照表

Terminal(终端/终端模拟器)

你眼前这个"黑框窗口"应用(如 macOS 的 Terminal/iTerm2、Windows Terminal、GNOME Terminal)。它负责显示文字、把你键盘输入发给后端。

TTY(伪终端)

操作系统里的字符设备通道(历史上是打字机 Teletype),是程序与人类交互的"线路/座机号"。现代桌面上常见的是伪终端 PTY:/dev/pts/N。

Shell(命令解释器)

运行在 TTY 上的程序,读你输入、解析命令、启动其他程序(如 bash、zsh、fish、cmd.exe、PowerShell)。

SSH(安全远程连接)

一套加密的远程登录协议/工具。像打加密电话到远程机器,请对方开一个 TTY(通常是 PTY),在那边启动一个 Shell,然后你像本地一样敲命令。

心智模型

Terminal(窗口)TTY(通道)Shell(解释器)程序们

若是远程:Terminal(本地)SSH 加密通道远端 TTY/PTY远端 Shell

架构关系图

本地交互流程

[键盘/屏幕]
     │
 [Terminal.app / iTerm2 / Windows Terminal]
     │    (通过系统的伪终端接口)
     ▼
  [PTY Slave] ←→ [PTY Master/内核/终端驱动]
     │
     ▼
   [Shell: zsh/bash/fish/PowerShell]
     │
     ├── 读取命令行输入 (stdin)
     ├── 解析/扩展/重定向/管道等
     └── 启动程序,接管 stdin/stdout/stderr

远程连接流程

[本地 Terminal]
     │
 [SSH 客户端:ssh]
     │  加密传输(TCP 22)
     ▼
 [远端 sshd] ── 分配 PTY ──> [远端 Shell]
     │                        │
     └── 加密通道传输 ←────────┘

各概念详解

Terminal(终端模拟器)

  • 本质:一个应用程序,负责用户界面交互
  • 功能:把按键转换为字节发送给后端(TTY),显示从后端来的字节(包含 ANSI 颜色、光标移动等控制序列)
  • 常见产品:iTerm2/Terminal.app(macOS)、Windows Terminal(Win10+)、GNOME Terminal、Alacritty、WezTerm
  • 常见误解:"zsh 是不是终端?"——不是,zsh 是 Shell,Terminal 是运行 zsh 的窗口容器

TTY(伪终端)

  • 本质:操作系统内核暴露的字符型设备接口,用于交互式输入输出
  • 类型:物理控制台(Linux 的 tty1..tty6)、串口终端(/dev/ttyS0)、伪终端 PTY(现代最常见)
  • PTY 机制:成对出现 master/slave;应用(Terminal/SSH)握住 master,Shell/程序看到的是 slave(/dev/pts/N)
  • 重要性:提供"控制终端"概念,支持前台作业组、信号处理(Ctrl+C → SIGINT)、行编辑模式

Shell(命令解释器)

  • 本质:一个程序,典型的有 bash、zsh、fish、sh、cmd.exe、PowerShell
  • 职责:解析命令行(词法/语法、变量、通配符、重定向、管道),启动命令并连接到当前 TTY
  • 脚本功能:提供脚本语言(if/for/while、函数、数组)和登录配置(~/.zshrc、~/.bashrc)
  • 交互模式:交互(有人敲键盘)vs 非交互(执行脚本);登录 Shell vs 非登录 Shell

SSH(安全远程连接)

  • 本质:协议 & 工具,ssh 客户端和远端的 sshd 服务器
  • 功能:加密隧道 + 身份认证(密码、公钥、U2F)+ 可选 PTY 分配 + 远程命令执行
  • 交互模式:ssh user@host(分配 PTY,启动远端 Shell)
  • 非交互模式:ssh user@host 'uptime'(可加 -T 禁止 PTY,适合脚本)

工作流程详解

本地交互流程

  1. 1. 打开 Terminal(窗口应用)
  2. 2. Terminal 创建一对 PTY(master/slave)
  3. 3. Terminal 握住 master,处理用户输入输出
  4. 4. Terminal 启动 Shell 进程,连接到 PTY slave
  5. 5. 用户敲命令 → Shell 解析 → 启动程序 → 结果显示

远程连接流程

  1. 1. 本地 Terminal 运行 ssh 客户端
  2. 2. ssh 与远端 sshd 建立加密连接
  3. 3. 认证通过,请求 PTY(交互时默认)
  4. 4. 远端分配 /dev/pts/N,启动远端 Shell
  5. 5. 命令通过 SSH 加密隧道传输

常用命令速查表

系统诊断

查看当前 TTY tty
查看当前 Shell echo $0
查看所有 PTY ls -l /dev/pts
查看进程树 pstree
查看当前用户 whoami
查看在线用户 who
系统信息 uname -a
系统负载 uptime

TTY 控制

查看终端设置 stty -a
重置终端 reset
修复终端 stty sane
查看终端类型 echo $TERM
清屏 clear
终端尺寸 tput cols; tput lines
设置标题 echo -ne "\033]0;Title\007"

SSH 操作

基本连接 ssh user@host
指定端口 ssh -p 2222 user@host
强制 PTY ssh -t user@host
禁用 PTY ssh -T user@host
端口转发 ssh -L 8080:localhost:80
后台隧道 ssh -fN -L 8080:localhost:80
文件传输 scp file user@host:~
目录同步 rsync -av dir/ user@host:dir/

进程控制

后台运行 command &
查看作业 jobs
前台运行 fg %1
后台继续 bg %1
脱离终端 nohup command &
断开作业 disown %1
查看进程 ps aux
实时监控 htop

文件操作

列出文件 ls -la
当前目录 pwd
切换目录 cd /path
查找文件 find . -name "*.txt"
文件内容 cat file.txt
分页查看 less file.txt
文件权限 chmod 755 file
磁盘使用 du -sh *

网络监控

网络接口 ip addr
端口监听 netstat -tlnp
TCP连接 ss -tuln
测试连接 ping google.com
路由追踪 traceroute google.com
下载文件 wget url
HTTP请求 curl -I url
防火墙状态 ufw status

常用快捷键

信号控制

Ctrl+C SIGINT 中断
Ctrl+Z SIGTSTP 暂停
Ctrl+\ SIGQUIT 退出
Ctrl+D EOF/退出

终端控制

Ctrl+L 清屏
Ctrl+S 暂停输出
Ctrl+Q 恢复输出
Ctrl+R 历史搜索

编辑快捷键

Ctrl+A 行首
Ctrl+E 行尾
Ctrl+W 删除单词
Ctrl+U 删除到行首

VPS 管理命令表

系统管理

系统信息

uname -a 系统信息
lsb_release -a 发行版信息
uptime 运行时间
free -h 内存使用
df -h 磁盘空间
lscpu CPU信息

用户管理

useradd -m user 添加用户
passwd user 设置密码
usermod -aG sudo user 添加sudo权限
userdel -r user 删除用户
su - user 切换用户
sudo -u user cmd 以用户身份执行

包管理

Ubuntu/Debian (APT)

apt update 更新源
apt upgrade 升级包
apt install pkg 安装包
apt remove pkg 删除包
apt search keyword 搜索包
apt list --installed 已安装包

CentOS/RHEL (YUM)

yum update 更新系统
yum install pkg 安装包
yum remove pkg 删除包
yum search keyword 搜索包
yum list installed 已安装包
yum clean all 清理缓存

服务管理

Systemd 服务

systemctl start service 启动服务
systemctl stop service 停止服务
systemctl restart service 重启服务
systemctl enable service 开机启动
systemctl status service 服务状态
systemctl list-units 所有服务

常用服务

nginx Web服务器
mysql 数据库
ssh SSH服务
docker 容器服务
ufw 防火墙
cron 定时任务

安全管理

防火墙 (UFW)

ufw enable 启用防火墙
ufw status 查看状态
ufw allow 22 允许端口
ufw deny 80 禁止端口
ufw delete allow 22 删除规则
ufw reset 重置规则

SSH 安全

ssh-keygen -t rsa 生成密钥
ssh-copy-id user@host 复制公钥
chmod 600 ~/.ssh/id_rsa 设置权限
fail2ban-client status 查看封禁

性能监控

实时监控

htop 进程监控
iotop IO监控
nethogs 网络监控
vmstat 1 系统状态
iostat 1 IO统计
nload 网络流量

日志查看

journalctl -f 实时日志
tail -f /var/log/syslog 系统日志
dmesg 内核消息
last 登录记录

文件传输

SCP 传输

scp file user@host:/path/ 上传文件
scp user@host:/path/file . 下载文件
scp -r dir user@host:/path/ 上传目录
scp -P 2222 file user@host:/path/ 指定端口

Rsync 同步

rsync -av dir/ user@host:dir/ 同步目录
rsync -av --delete src/ dst/ 镜像同步
rsync -avz file user@host:/path/ 压缩传输
rsync --progress file user@host:/path/ 显示进度

VPS 初始化一键脚本

#!/bin/bash
# VPS 初始化脚本

# 更新系统
apt update && apt upgrade -y

# 安装必要工具
apt install -y htop wget curl git vim ufw fail2ban

# 配置防火墙
ufw default deny incoming
ufw default allow outgoing
ufw allow ssh
ufw --force enable

# 配置SSH安全
sed -i 's/#PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config
sed -i 's/#PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config
systemctl restart ssh

# 设置时区
timedatectl set-timezone Asia/Shanghai

echo "VPS 初始化完成!"

故障排查与最佳实践

掌握常见问题的快速诊断和解决方法

故障排查速查表

现象 可能原因 解决方法
^M、中文错乱、界面花屏 终端编码或 stty 行设置错误 stty sane;统一 UTF-8 编码
less 不分页,tput 报错 没有分配 TTY,$TERM 未设置 确保有 PTY;设置 TERM=xterm-256color
SSH 脚本卡住 远端命令需要交互/TTY ssh -t 强制 PTY 或改用非交互命令
私钥权限报错 私钥权限过于开放 chmod 600 ~/.ssh/id_rsa
Host key verification failed 主机指纹变更 核对后更新 ~/.ssh/known_hosts

最佳实践配置

Terminal 设置

  • • 统一编码:UTF-8
  • • 设置 TERM=xterm-256color
  • • 选择现代终端:iTerm2/Windows Terminal/WezTerm
  • • 启用真彩色支持

Shell 配置

  • • macOS 默认 zsh,Linux 常用 bash/zsh
  • • 交互行为放 ~/.zshrc/~/.bashrc
  • • 环境变量放 ~/.profile 或 ~/.zprofile
  • • 使用包管理器(如 oh-my-zsh)

SSH 安全配置示例

# ~/.ssh/config
Host prod
  HostName 203.0.113.10
  User ubuntu
  IdentityFile ~/.ssh/id_ed25519
  Port 22
  ProxyJump bastion

Host *
  ServerAliveInterval 60
  ServerAliveCountMax 3
  PasswordAuthentication no

记住边界关系

Terminal

看得见摸得着的窗口

TTY

程序与人的信道/座机号

Shell

会"听话并解释"的程序

SSH

到远端开的加密电话

猪哥云 © 数据产品部 开发者:maurice 版本:v1.0

掌握这四个概念,命令行世界的大门就向你敞开了