Linux 帮助系统、Vim 编辑器与 I/O 重定向
Linux 课堂笔记 Day 4:帮助系统、Vim 编辑器与 I/O 重定向

日期:2026-07-16
作者:课堂笔记整理
标签:LinuxVim重定向Man手册
前言
今天的课程内容非常扎实,涵盖了 Linux 日常使用中三个核心主题:
- 如何获取帮助 — Linux 自带的文档体系(man 手册、/usr/share/doc)
- Vim 编辑器 — 每个运维必备的文本编辑利器
- 输入输出重定向 — 理解进程的数据流,灵活控制输入输出
掌握了这些内容,你在命令行的操作效率会有一个质的飞跃。下面逐一梳理。
一、Linux 中获取帮助
Linux 自带了非常丰富的文档,学会查阅文档是脱离"死记命令"的第一步。
1.1 Man 手册
man 是 manual 的缩写,是 Linux 最核心的帮助系统。它用不同的 section(章节号) 区分手册类别:
| Section | 内容类型 |
|---|---|
| 1 | 用户命令(可执行命令和 shell 程序) |
| 2 | 系统调用(从用户空间调用的内核例程) |
| 3 | 库函数(由程序库提供) |
| 4 | 特殊文件(如设备文件) |
| 5 | 文件格式(配置文件和结构) |
| 6 | 游戏(历史遗留的有趣程序章节) |
| 7 | 惯例、标准和其他(协议、文件系统) |
| 8 | 系统管理和特权命令(维护任务) |
| 9 | Linux 内核 API(内核调用) |
记忆技巧:最常用的是 1、5、8。用一句话记:1 是命令怎么用,5 是配置文件怎么写,8 是管理员怎么管。
基本用法
# 查看 passwd 命令的用法(section 1)
man 1 passwd
# 查看 /etc/passwd 文件的格式说明(section 5)
man 5 passwd
# 查看英文原版手册(中文翻译有时不完整)
LANG=en_US.utf8 man gedit
man 命令底层调用 less 程序打开 /usr/share/man/ 下的手册文件。在 man 页面中的交互操作和 less 一样:
| 按键 | 作用 |
|---|---|
Space / PageDown | 向下翻一屏 |
PageUp | 向上翻一屏 |
↓ / ↑ | 向下/向上滚动一行 |
/string | 向下搜索 string |
n | 重复上一次搜索(向下) |
N | 重复上一次搜索(向上) |
g | 跳到第一行 |
G | 跳到最后一行 |
q | 退出 man |
按关键字搜索手册
# -k 选项:搜索包含关键字的所有手册页
man -k passwd
# 输出示例:
# chpasswd (8) - 批量更新密码
# gpasswd (1) - administer /etc/group and /etc/gshadow
# passwd (5) - (未知的主题)
man -k ext4 | grep resizer
# resize2fs (8) - ext2/ext3/ext4 file system resizer
更新 man page 数据库
如果 man -k 搜不到内容,先更新数据库:
sudo mandb
补充:命令来源有两种——安装软件包获得的外部命令(用
man查),以及 Shell 自带的内部命令(用help查,不要用man)。
# Shell 内部命令 → 用 help
help history
# 外部命令 → 用 man
man ls
通用后路:几乎所有命令都支持
--help选项,这是最快捷的查看方式。
1.2 /usr/share/doc
很多软件包在 /usr/share/doc/ 下提供了示例配置文件、模板和说明文档:
# 浏览 DHCP 客户端配置示例
cat /usr/share/doc/dhclient-4.2.5/dhclient.conf.example
可以通过浏览器访问 file:///usr/share/doc 来浏览。
1.3 which 与 whereis
想知道某个命令的实际路径和相关信息:
# which:显示命令的实际路径(包括别名)
which vi
# alias vi='vim'
# /usr/bin/vim
# whereis:同时显示程序路径、手册、源码位置
whereis passwd
# passwd: /usr/bin/passwd /etc/passwd
# /usr/share/man/man1/passwd.1.gz
# /usr/share/man/man5/passwd.5.gz
二、Vim 编辑器
每个 Linux 系统管理员都应该至少熟悉一个终端编辑器。Vim 可以说是最"保险"的选择——因为它在任何 Linux 发行版上都可用。
2.1 Vim 的三个版本
| 版本 | 说明 |
|---|---|
vim-minimal | 仅提供 vi 和相关基本命令 |
vim-enhanced | 提供完整 vim,支持语法高亮、拼写检查等 |
vim-X11 | 图形界面版 gvim,带菜单栏 |
# 安装增强版
sudo yum install -y vim
2.2 Vim 的四种模式
这是 Vim 区别于普通编辑器的核心设计:
┌──────────────────────────────┐
│ Command Mode │
│ (默认模式,按键=命令) │
└──────┬───────┬───────┬───────┘
i/I/a/A│ v/V │ : │ Esc
o/O │Ctrl+v │ │
┌────────┐ ┌┴──────┐┌┴──────┐
│ Insert │ │Visual ││Extended│
│ Mode │ │ Mode ││Command │
│ (编辑) │ │(选择) ││ Mode │
└────────┘ └───────┘│(:,/,?) │
└────────┘
- Command 模式:默认模式,键盘字母是命令(
gg跳首行,G跳末行,dd删一行) - Insert 模式:按
i进入,真正"输入文字",按Esc返回 Command 模式 - Extended Command 模式:按
:进入,执行保存退出等操作(:w保存,:q退出,:wq保存退出,:q!强制退出) - Visual 模式:按
v(字符选中)、V(行选中)、Ctrl+v(矩形选中),用于选中后复制/删除
2.3 Command 模式常用快捷键速查
光标移动
| 命令 | 作用 |
|---|---|
w | 跳到下一个单词开头 |
e | 跳到下一个单词末尾 |
b | 跳到上一个单词开头 |
0 / ^ | 跳到行首 |
$ | 跳到行尾 |
gg | 跳到文件第一行 |
G | 跳到文件最后一行 |
{ / } | 上/下一个自然段 |
进入插入模式
| 命令 | 作用 |
|---|---|
i | 光标前插入 (insert) |
I | 行首插入 |
a | 光标后追加 (append) |
A | 行末追加 |
o | 下方新开一行 |
O | 上方新开一行 |
复制粘贴删除
| 命令 | 作用 |
|---|---|
yy | 复制当前行(y2y 复制 2 行,y2w 复制 2 个单词) |
p / P | 粘贴到光标后 / 前 |
x | 删除当前字符(5x 删 5 个) |
dw | 删除一个单词(d5w、d$ 删到行尾) |
dd | 删除当前行 |
D | 从光标删到行尾(等价 d$) |
修改(删除 + 进入插入模式)
| 命令 | 作用 |
|---|---|
s | 删除当前字符并进入插入模式 |
S | 删除当前行并进入插入模式 |
cw | 删除当前单词并进入插入模式 |
C | 从光标删到行尾并进入插入模式 |
撤销与替换
| 命令 | 作用 |
|---|---|
u | 撤销 |
U | 撤销整行修改 |
Ctrl+r | 重做(反向撤销) |
r | 替换单个字符后自动回 Command 模式 |
R | 进入替换模式,直到按 Esc |
2.4 实战示例:编辑 DHCP 配置文件
下面是一个综合练习,把前面学的命令串联起来:
# 1. 准备文件
cp /usr/share/doc/dhcp*/dhcpd.conf.example ~/dhcpd.conf
vim ~/dhcpd.conf
在 Vim 中依次执行:
| 步骤 | 操作 | 说明 |
|---|---|---|
| 1 | :set number showcmd | 显示行号和当前命令 |
| 2 | gg | 跳到第一行 |
| 3 | d46d | 删除第 1-46 行(当前行 + 后面 45 行) |
| 4 | :11,28d | 删除第 11-28 行 |
| 5 | /You | 搜索 “You” 并定位 |
| 6 | dG | 从当前位置删到最后 |
| 7 | :%s/10.5.5/10.1.8/g | 全局替换 IP 地址 |
| 8 | /224 → cw → 输入 0 → Esc | 定位并替换一个单词 |
| 9 | ZZ | 保存退出 |
:s命令解读::%s/旧/新/g—%表示所有行,s表示替换 (substitute),g表示替换行内所有匹配 (global)。
2.5 Vim 配置文件
想让 Vim 更好用?写一个 ~/.vimrc:
vim ~/.vimrc
set number " 显示行号
set showcmd " 右下角显示正在输入的命令
set ai ts=2 " 自动缩进,tab 宽度为 2 个空格
set cursorcolumn " 列高亮对齐线
set cursorline " 行高亮对齐线
- 全局配置:
/etc/vimrc(对所有用户生效) - 个人配置:
~/.vimrc(只对当前用户生效)
三、Linux 输入输出重定向
这部分是 Linux "一切皆文件"哲学的集中体现。理解了它,你就理解了管道和 Shell 编程的基石。
3.1 标准流 (Standard Streams)
每个进程默认有三个数据流:
┌──────────┐
键盘 ──stdin(0)──▶ │ │ ──stdout(1)──▶ 终端屏幕
│ PROCESS │
│ │ ──stderr(2)──▶ 终端屏幕
└──────────┘
| 流 | 编号 | 方向 | 默认目的地 | 用途 |
|---|---|---|---|---|
| stdin | 0 | 输入 ← | 键盘 | 程序读取数据 |
| stdout | 1 | 输出 → | 终端屏幕 | 正常结果输出 |
| stderr | 2 | 输出 → | 终端屏幕 | 错误信息输出 |
重定向就是把这些默认的"目的地"改掉——输出到文件、从文件读取、或者传给另一个程序。
3.2 标准输出重定向到文件
覆盖写入 (>)
# 只重定向 stdout(1> 可简写为 >)
find /etc -name 'passwd' > passwd.list
# stderr 仍然显示在屏幕上
# stdout 写入了 passwd.list
# 只重定向 stderr
find /etc -name 'passwd' 2> passwd.err
# stdout 仍然显示在屏幕上
# stderr 写入了 passwd.err
# 丢弃错误信息(扔进 /dev/null 黑洞)
find /etc -name 'passwd' 2> /dev/null
# 分别重定向到不同文件
find /etc -name 'passwd' > passwd.list 2> passwd.err
追加写入 (>>)
# 追加不覆盖
find /etc -name 'passwd' >> passwd.list 2>> passwd.err
合并写入 (&> 和 &>>)
# stdout 和 stderr 覆盖写入同一个文件
find /etc -name 'passwd' &> passwd.all
# 追加写入同一个文件
find /etc -name 'passwd' &>> passwd.all
快速创建 / 清空文件
> testfile # 文件存在则清空,不存在则创建
>> testfile # 不存在则创建,存在则不做任何事
3.3 管道符 (|):标准输出重定向到程序
管道是 Linux 命令行最强大的特性之一——把前一个命令的 stdout 作为后一个命令的 stdin。
# 不用管道:两步操作
man -k ext4 > ext4.man
grep resizer ext4.man
# 用管道:一行搞定
man -k ext4 | grep resizer
# resize2fs (8) - ext2/ext3/ext4 file system resizer
实战:提取 IP 地址
ip addr | grep 'ens33$' | awk '{print $2}' | cut -d/ -f1
# 10.1.8.88
一步一步解读这条命令链:
ip addr— 输出所有网络接口信息grep 'ens33$'— 过滤出 ens33 那一行awk '{print $2}'— 取第二个字段(IP 地址/CIDR)cut -d/ -f1— 去掉/24这种子网掩码
重要:管道后面的命令必须能接收标准输入。像
ls就不接收管道数据——echo /etc/passwd | ls -l只会列出当前目录的内容。
|&:错误也一起传
# 普通管道只传 stdout,不传 stderr
ls -l file-{01..06} | grep file-06
# 错误信息直接显示,不会被 grep 处理
# |& 把 stdout 和 stderr 都传给下一个命令
ls -l file-{01..06} |& grep file-06
# 错误信息也能被 grep 到了
3.4 tee 命令:分叉你的数据流
tee 相当于管道中的一个"三通接头"——接收 stdin,一份继续输出(给下一个管道),一份保存到文件。
# 既在屏幕上看到输出,又保存到文件
find /etc -name 'passwd' 2>/dev/null | tee passwd.list
# 追加模式
find /etc -name 'passwd' 2>/dev/null | tee -a passwd.list
# 继续往下传
man -k passwd | tee passwd.man | grep passwd
3.5 标准输入重定向
# < 将文件内容作为命令的 stdin
cat < /etc/hosts
# << EOF 多行文本输入(Here Document)
cat > multi_lines.txt << EOF
hello world
hello python
hello linux
EOF
# <<< 单行字符串输入(Here String)
cat <<< 'hello world'
判断命令是否接收 stdin
最简单的测试:把一个文件的内容重定向给它,看它是否处理。
3.6 实用技巧:一次性写入多行
# 方法一:echo 中使用换行符
echo 'hello world
hello python
hello linux' > multi_lines.txt
# 方法二:cat + Here Document(推荐)
cat > multi_lines.txt << EOF
hello world
hello python
hello linux
EOF
总结与反思
今天的内容量很大,但逻辑清晰:
-
帮助系统让我不再需要死记命令——
man、--help、/usr/share/doc三管齐下,总能找到答案。 -
Vim 的学习曲线确实陡峭,但一旦掌握 Command 模式的肌肉记忆,编辑效率远超图形化编辑器。核心就是记住:大多数时候在 Command 模式,按
i进去编辑,按Esc出来操作。 -
I/O 重定向是 Linux 哲学的集中体现。理解了 0/1/2 三个文件描述符,
>、>>、|、tee这些操作就不再神秘——无非是把数据流"掰"到不同的方向。
课后任务:完成笔记中的实验练习,并预习 Shell 基础(变量范围、条件判断、循环等),为下一节课做准备。
本文整理自 2026 年 7 月 16 日课堂笔记,内容涵盖 Red Hat Enterprise Linux (CentOS 7) 环境下的实操。
更多推荐



所有评论(0)