命令行入门
Linux 运维基础 · 第一章 目标:理解终端和 Shell 的关系,掌握命令行基本操作,学会查阅手册
1. 终端 vs Shell 的区别#
很多人把"终端"和"Shell"混为一谈,但它们是完全不同的两层东西。
终端(Terminal Emulator)#
终端是一个图形界面程序,它负责显示文字、接收键盘输入。你看到的那个黑色窗口,就是终端。
常见终端程序:
| 平台 | 常见终端 |
|---|---|
| macOS | Terminal.app / iTerm2 |
| Linux 桌面 | GNOME Terminal / Konsole / Alacritty |
| Windows | Windows Terminal / PowerShell 窗口 |
| 远程连接 | SSH 客户端(PuTTY / macOS Terminal 内的 ssh 命令) |
终端的核心职责就两件事:把你的键盘输入送给 Shell,把 Shell 的输出显示在屏幕上。它本身不解释命令。
Shell(壳程序)#
Shell 是一个命令解释器进程,它读入你敲的命令字符串,解析、执行,然后把结果返回给终端显示。
常见 Shell 类型:
| Shell | 全称 | 说明 |
|---|---|---|
| bash | Bourne Again SHell | 最主流,几乎所有 Linux 默认 Shell |
| zsh | Z Shell | macOS 默认,插件生态丰富(Oh My Zsh) |
| dash | Debian Almquist Shell | 轻量,常用于执行 /bin/sh 脚本 |
| fish | Friendly Interactive Shell | 自动建议、语法高亮,但语法不兼容 bash |
| sh | Bourne Shell | 最古老的 Shell,现在基本只作为兼容层存在 |
查看你当前使用的 Shell:
# 方法一:看进程
ps
# 输出中 CMD 列会显示 bash 或 zsh 等
# 方法二:查当前正在运行的 Shell(最准)
echo $0
# 输出如:-bash 或 bash;ps -p $$ 也能看当前 shell
# 方法三:查环境变量里的登录 Shell
echo $SHELL
# 注意:$SHELL 是登录时的默认 Shell。如果你临时敲了 zsh 进另一个 Shell,
# 它不会跟着变——此时以 $0 或 ps -p $$ 为准
# 方法四:查系统记录的默认登录 Shell
getent passwd "$(whoami)"
# 每行末尾(第 7 字段)就是默认 Shell。getent 比 grep /etc/passwd 更准:
# 不会误匹配子串,也能查到 LDAP/NIS 等网络用户它们的关系(一句话)#
终端是窗口,Shell 是引擎。 终端提供输入/输出的界面,Shell 提供命令解析和执行的逻辑。换一个终端程序(比如从 GNOME Terminal 换到 Alacritty),Shell 还是同一个 bash;换一个 Shell(比如从 bash 换到 zsh),终端窗口还是同一个。
类比理解#
你(用户)
↓ 键盘输入
终端(Terminal) ← 相当于电话机,负责收发信号
↓ 传递命令字符串
Shell(bash/zsh) ← 相当于翻译官,理解你的话并执行
↓ 调用系统调用
内核(Kernel) ← 相当于操作系统的大脑,真正干活
↓ 返回结果
Shell ← 把结果格式化
↓ 传递输出
终端 ← 显示到屏幕上
↓
你(看到结果)2. 常用快捷键#
命令行操作的效率,很大程度上取决于你是否熟悉快捷键。以下是最常用的分类整理。
日常高频(必须记住)#
| 快捷键 | 功能 | 说明 |
|---|---|---|
| Tab | 自动补全 | 补全命令名、文件路径;双击 Tab 显示所有候选 |
| Ctrl+C | 中断当前任务 | 发送 SIGINT 信号,强制停止正在运行的命令 |
| Ctrl+Z | 挂起当前任务 | 发送 SIGTSTP,任务变 Stopped(暂停,非终止);fg 恢复到前台,bg 转后台继续运行 |
| Ctrl+D | 退出当前 Shell | 发送 EOF,等效于输入 exit |
| Ctrl+L | 清屏 | 等效于 clear 命令,但不用中断当前操作 |
| ↑ / ↓ | 切换历史命令 | 上一条 / 下一条 |
光标移动(编辑长命令时用)#
| 快捷键 | 功能 |
|---|---|
| Ctrl+A | 光标跳到行首 |
| Ctrl+E | 光标跳到行尾 |
| Ctrl+F | 光标右移一个字符(等效于右箭头) |
| Ctrl+B | 光标左移一个字符(等效于左箭头) |
剪切与粘贴(行内编辑)#
| 快捷键 | 功能 |
|---|---|
| Ctrl+U | 剪切从光标到行首的内容 |
| Ctrl+K | 剪切从光标到行尾的内容 |
| Ctrl+W | 剪切光标前的一个单词 |
| Ctrl+Y | 粘贴刚才剪切的内容 |
搜索与扩展#
| 快捷键 | 功能 |
|---|---|
| Ctrl+R | 搜索历史命令(输入关键词即匹配) |
| Ctrl+G | 退出历史搜索模式 |
| !! | 执行上一条命令(sudo !! = 用 sudo 重跑上一条) |
| !$ | 获取上一条命令的最后一个参数 |
| Esc+. | 同 !$,获取上一条命令最后一个参数 |
实用技巧#
# 场景:上一条命令忘了加 sudo
$ apt update
E: Could not open lock file...
$ sudo !! # 自动变成 sudo apt update
# 场景:快速搜索之前执行过的命令
Ctrl+R → 输入 "docker" → 显示最近一条含 docker 的命令
按 Enter 执行,按 Ctrl+G 取消
# 场景:路径补全
$ cd /etc/apac → Tab → 自动补全为 /etc/apache2/3. man 手册怎么看#
man(manual)是 Linux 最权威的命令参考手册,几乎每个命令都有对应的 man 页面。
基本用法#
man <命令名> # 查看命令的完整手册
man 5 passwd # 查看第 5 章节(配置文件格式)的 passwd 说明
man -k keyword # 搜索包含关键词的手册页(同 apropos)手册章节编号#
man 手册按主题分成 9 个章节,同一个名字可能出现在不同章节:
| 章节号 | 内容 |
|---|---|
| 1 | 用户命令(最常用) |
| 2 | 系统调用(内核接口) |
| 3 | 库函数(C 语言等) |
| 4 | 特殊文件(如 /dev 下的设备文件) |
| 5 | 文件格式与配置文件(如 /etc/passwd 的格式说明) |
| 6 | 游戏 |
| 7 | 杂项(协议、字符集等) |
| 8 | 系统管理命令(通常需要 root) |
| 9 | 内核相关 |
关键区分:man passwd 默认显示第 1 章(命令用法),man 5 passwd 显示第 5 章(配置文件格式)。这是两个完全不同的东西。
man 页面内的导航#
man 页面由 less 分页器显示,导航方式与 less 一致:
| 操作 | 功能 |
|---|---|
| Space / b | 向下翻一页 / 向上翻一页 |
| /关键词 | 向下搜索关键词 |
| n / N | 下一个匹配 / 上一个匹配 |
| q | 退出 man 页面 |
| h | 查看帮助 |
手册页结构#
一个典型的 man 页面包含以下段落:
| 段落 | 含义 |
|---|---|
| NAME | 命令名和一句话简介 |
| SYNOPSIS | 命令语法格式(方括号 = 可选,竖线 = 多选一) |
| DESCRIPTION | 详细功能描述 |
| OPTIONS | 各参数选项的说明 |
| EXAMPLES | 使用示例 |
| EXIT STATUS | 退出码含义(0 = 成功) |
| SEE ALSO | 相关命令推荐 |
| BUGS | 已知缺陷 |
除了 man,还有什么?#
| 工具 | 用途 | 何时用 |
|---|---|---|
命令 --help | 快速查看常用参数 | 不需要完整手册,只想快速确认某个选项 |
info 命令 | GNU 的超文本手册(比 man 更详细) | 查看 GNU 工具(如 coreutils)的深层说明 |
whatis 命令 | 一句话描述命令功能 | 快速确认命令是干什么的 |
apropos 关键词 | 搜索相关命令 | 不知道具体命令名,但知道功能关键词 |
# 示例:不知道怎么看磁盘分区,搜索关键词
$ apropos partition
fdisk (8) - partition table manipulator for Linux
partprobe (8) - inform the OS of partition table changes
sfdisk (8) - partition table manipulator for Linux4. 命令的基本结构(命令 + 选项 + 参数)#
Linux 命令的通用格式:
命令 [选项] [参数]三个组成部分:
| 组成 | 说明 | 示例 |
|---|---|---|
| 命令 | 要执行的动作/程序名 | ls, cp, grep |
| 选项 | 修改命令行为的开关 | -l, -a, --help |
| 参数 | 命令操作的对象 | 文件名、目录路径、搜索关键词 |
选项的两种风格#
短选项:单个字母,前面一个横杠 -
ls -l # 长格式列出
ls -a # 显示隐藏文件
ls -la # 短选项可以合并:等效于 ls -l -a长选项:完整单词,前面两个横杠 --
ls --all # 等效于 -a
ls --human-readable # 等效于 -h(人类可读的大小格式)
ls -l --sort=size # 长选项和短选项可以混用长选项更易读、更自解释,适合写脚本;短选项更省敲键次数,适合日常操作。
参数的顺序#
多数命令中,选项在前、参数在后:
grep -rn "error" /var/log/ # 选项 -rn,参数 "error" 和路径
cp -r src_dir/ dest_dir/ # 选项 -r,参数 源目录 和 目标目录但也有例外,比如 find 的参数结构比较特殊(后续章节专门讲)。
带值的选项#
有些选项需要附带一个值:
head -n 20 file.txt # -n 选项,值为 20(显示前 20 行)
tar -czf archive.tar.gz dir/ # -f 选项,值为 archive.tar.gz
ssh -p 2222 user@host # -p 选项,值为 2222短选项带值时,值紧跟选项后面(可以空格分隔也可以连写):
head -n20 file.txt # 连写,等效于 head -n 20 file.txt
head -20 file.txt # 极简写法,有些命令支持省略 -n命令行提示符#
你看到的提示符(Prompt)不是命令的一部分,它是 Shell 显示的"等待输入"标志:
[user@host dir]$ # 普通用户,$ 结尾
[root@host dir]# # root 用户,# 结尾提示符的含义:用户名@主机名 当前目录。其中 ~ 表示用户的家目录。
本章小结#
| 知识点 | 一句话记忆 |
|---|---|
| 终端 vs Shell | 终端是窗口,Shell 是翻译官 |
| 快捷键 | Tab 补全 / Ctrl+C 中断 / Ctrl+R 搜索历史 |
| man 手册 | man 命令 看完整手册,--help 看快速参考 |
| 命令结构 | 命令 [选项] [参数],短选项合并写,长选项更自解释 |
下一章:二、文件系统结构