Linux 学习笔记之 VI 编辑器与文件查找技巧
在 Linux 系统操作中,VI 编辑器是文本编辑的核心工具,文件查找与过滤则是高效管理系统文件的关键技能。本章将从元字符基础、VI 编辑器的全方位使用(模式切换、命令操作、配置优化),到文件查找与过滤的实用命令,带你系统掌握这些 Linux 必备技能,适合刚接触 Linux 的开发者或需要巩固基础的运维人员。
一、元字符:Linux 命令行的 “万能匹配符”
元字符是 Linux 命令行中用于模糊匹配、多命令执行或数据传递的特殊字符,掌握它们能大幅提升命令行操作效率,常用元字符及场景如下:
元字符 | 功能说明 | 示例 | ||
---|---|---|---|---|
* | 匹配 0 个或多个任意字符(常用于文件批量操作) | ls *.txt (列出当前目录所有.txt 文件) | ||
? | 匹配 1 个任意字符 | ls test?.sh (匹配test1.sh 、testa.sh 等,不匹配test.sh ) | ||
` | ` | 管道符,将前一个命令的输出作为后一个命令的输入 | `ls -l /etc | more(分页查看 /etc` 目录下文件的详细信息) |
; | 分隔多个命令,按顺序执行 | cd /home; ls -a (先切换到/home 目录,再列出所有文件(含隐藏文件)) |
二、VI 编辑器:Linux 下的 “全能文本工具”
VI 编辑器是 Linux 系统自带的文本编辑工具,支持多种编辑模式,灵活度高,是编写脚本、配置文件的首选工具。
2.1 VI 的三种核心模式及切换
VI 的所有操作基于 “模式” 展开,三种核心模式的功能和切换逻辑是入门关键:
- 命令模式(Command Mode):默认启动模式,用于光标移动、文本删除 / 复制等操作,无法直接输入文本。
- 输入模式(Entry Mode):用于文本输入,需从命令模式切换进入,按
Esc
键返回命令模式。 - 底行模式(Last-line Mode):用于保存文件、退出编辑器、全局查找替换等,需从命令模式输入
:
/?
//
进入,按Esc
返回命令模式。
模式切换流程图:
plaintext
命令模式(默认)↓ 输入i/a/o/I/A/O(6种进入方式)
输入模式(编辑文本)↓ 按Esc键
命令模式↓ 输入:/?
底行模式(执行保存/退出/替换等)↓ 按Esc键或执行命令后
命令模式
6 种进入输入模式的差异:
命令 | 功能 |
---|---|
i | 在光标当前位置前插入文本 |
a | 在光标当前位置后插入文本 |
o | 在光标所在行下方新建一行并插入 |
I | 在光标所在行行首插入文本 |
A | 在光标所在行行尾插入文本 |
O | 在光标所在行上方新建一行并插入 |
2.2 VI 常用命令:从基础操作到高级编辑
(1)光标移动命令(命令模式)
命令 | 功能 |
---|---|
h /左箭头 | 光标向左移动 1 个字符 |
j /下箭头 | 光标向下移动 1 行 |
k /上箭头 | 光标向上移动 1 行 |
l /右箭头 | 光标向右移动 1 个字符 |
21G | 直接跳转到第 21 行(G 单独使用跳转到文件末尾,1G 跳转到文件开头) |
:21 | 底行模式下跳转到第 21 行 |
(2)文本删除与复制粘贴(命令模式)
命令 | 功能 |
---|---|
x | 删除光标所在位置的 1 个字符 |
dw | 删除光标所在位置的 1 个单词(从光标处到单词末尾) |
3dw | 删除 3 个单词 |
dd | 删除光标所在行(可用于 “剪切”,配合p 粘贴) |
5dd | 删除从光标行开始的 5 行 |
:5,10d | 底行模式下删除第 5-10 行 |
yy (或Y ) | 复制光标所在行 |
3yy | 复制从光标行开始的 3 行 |
p | 在光标所在行下方粘贴复制 / 剪切的内容 |
:1,2co3 | 底行模式下复制第 1-2 行到第 3 行下方 |
:4,5m6 | 底行模式下移动第 4-5 行到第 6 行下方 |
(3)文本替换(命令模式)
命令 | 功能 |
---|---|
r | 替换光标所在位置的 1 个字符(输入r 后直接按目标字符) |
cw | 替换光标所在位置的 1 个单词(从光标处到单词末尾,替换后进入输入模式) |
cc | 替换光标所在行(替换后进入输入模式) |
C | 替换从光标处到行尾的内容(替换后进入输入模式) |
:%s/旧串/新串/g | 底行模式下全局替换(% 表示全文件,g 表示每行替换所有匹配项) |
:5,10s/old/new/ | 底行模式下替换第 5-10 行的第一个 “old” 为 “new” |
(4)文件保存与退出(底行模式)
命令 | 功能 |
---|---|
:w | 保存当前文件(不退出) |
:w newfile.txt | 将当前内容另存为newfile.txt |
:wq (或ZZ /:x ) | 保存并退出 VI |
:q! | 强制退出,不保存修改(适用于误编辑不想保留的情况) |
2.3 VI 配置优化:打造个性化编辑环境
默认 VI 功能较基础,通过配置可实现 “显示行号”“自动缩进” 等实用功能,配置分为用户级别(仅当前用户生效)和系统级别(所有用户生效)。
(1)用户级别配置(推荐)
编辑用户家目录下的.vimrc
文件(若不存在则新建):
bash
vi ~/.vimrc
添加以下配置内容(按需调整):
vim
set nu # 显示行号
set autoindent # 自动缩进(新行与上一行缩进一致)
set tabstop=2 # Tab键缩进2个空格(默认8个,开发场景更适配)
syntax on # 语法高亮(编辑代码时自动识别语法并着色)
set wrap # 自动换行(长文本不超出屏幕宽度)
配置生效:保存.vimrc
后,重新打开 VI 即可生效,无需重启系统。
(2)系统级别配置(需 root 权限)
编辑系统级配置文件/etc/vim/vimrc
,配置内容与用户级别一致,但需使用sudo
获取权限:
bash
sudo vi /etc/vim/vimrc
注意:系统级别配置会影响所有用户,建议仅管理员操作。
2.4 VI 分屏功能:多文件同时编辑
当需要对比或同时编辑多个文件时,VI 的分屏功能非常实用,所有操作需在底行模式执行:
命令 | 功能 |
---|---|
:split (或:sp ) | 横向分屏(上下两个窗口,默认打开当前文件) |
:vsplit (或:vs ) | 纵向分屏(左右两个窗口,默认打开当前文件) |
:sp file2.txt | 横向分屏,新窗口打开file2.txt |
:vs file3.sh | 纵向分屏,新窗口打开file3.sh |
Ctrl + ww | 在多个分屏窗口间切换光标 |
:close | 关闭当前分屏窗口 |
:only | 关闭除当前窗口外的所有分屏窗口 |
2.5 实战:用 VI 编写 HelloWorld.html 并访问
以编写简单 HTML 文件为例,熟悉 VI 的完整使用流程:
- 新建并打开文件:
bash
vi ~/HelloWorld.html # 在用户家目录新建并打开文件
- 进入输入模式:按
i
键,输入 HTML 代码:html
预览
<!DOCTYPE html> <html> <head><meta charset="UTF-8"><title>Hello World</title> </head> <body><h1>Hello, Linux VI!</h1> </body> </html>
- 保存并退出:按
Esc
返回命令模式,输入:wq
保存退出。 - 部署与访问:将文件移动到 Apache 的默认部署目录(需提前安装 Apache),并赋予权限:
bash
sudo mv ~/HelloWorld.html /var/www/html/ sudo chmod 644 /var/www/html/HelloWorld.html # 赋予读权限
- 浏览器访问:在浏览器输入
http://云服务器公网IP/HelloWorld.html
,即可看到 “Hello, Linux VI!” 页面。
常见问题:若访问 404,检查文件名大小写(Linux 区分大小写,HelloWorld.html
与helloworld.html
是两个文件);若权限不足,执行sudo chmod -R 755 /var/www/html/
级联赋予目录权限。
三、文件查找与过滤:高效定位系统文件
Linux 提供find
和grep
等命令,分别用于 “按文件属性查找文件” 和 “按内容过滤文本”,配合管道符|
可实现复杂查找需求。
3.1 find 命令:按属性查找文件
find
是功能最强大的文件查找命令,支持按文件名、大小、修改时间、权限等多维度筛选,语法为:
bash
find [查找目录] [筛选条件] [执行操作]
常用筛选条件与示例
条件 | 说明 | 示例 |
---|---|---|
-name "*.html" | 按文件名匹配(支持通配符,需加引号) | find /var/www -name "*.html" (在/var/www 目录下查找所有.html 文件) |
-type f/d | 按文件类型筛选(f 为普通文件,d 为目录) | find ~ -type d -name "test*" (在用户家目录查找所有以test 开头的目录) |
-size +400k | 按文件大小筛选(+ 表示大于,- 表示小于,单位支持k /M /G ) | find /etc -size +1M (在/etc 目录下查找大于 1MB 的文件) |
-mtime +7 | 按修改时间筛选(+7 表示 7 天前修改,-7 表示 7 天内修改) | find ~/docs -mtime -3 (查找用户docs 目录下 3 天内修改过的文件) |
-user root | 按文件所有者筛选 | find /tmp -user root (查找/tmp 目录下所有者为 root 的文件) |
结合执行操作(-exec)
find
可通过-exec
对查找到的文件执行后续命令(如删除、复制),语法为:
bash
find [目录] [条件] -exec [命令] {} \; # {}代表查找到的文件,\;表示命令结束
示例:删除/home
目录下 1 年未访问的普通文件:
bash
find /home -type f -atime +365 -exec rm {} \;
3.2 grep 命令:按内容过滤文本
grep
用于从文本文件或命令输出中筛选包含指定字符串的行,语法为:
bash
grep [选项] "目标字符串" [文件/命令输出]
常用选项与示例
选项 | 说明 | 示例 |
---|---|---|
-i | 忽略大小写 | grep -i "linux" test.txt (在test.txt 中查找含 “linux” 或 “Linux” 的行) |
-v | 反向筛选(显示不包含目标字符串的行) | grep -v "#" /etc/profile (查看/etc/profile 中不含注释(#)的行) |
-n | 显示匹配行的行号 | grep -n "PATH" ~/.bashrc (查找~/.bashrc 中含 “PATH” 的行并显示行号) |
-r | 递归查找目录下所有文件 | grep -r "import" /home/project (在/home/project 目录下递归查找含 “import” 的文件) |
结合管道符使用
grep
常与ls
、ps
等命令配合,筛选输出结果,示例:
- 查看当前系统中运行的
apache
进程:bash
ps -ef | grep apache
- 统计
/var/log
目录下含 “error” 的日志文件行数:bash
cat /var/log/*.log | grep "error" | wc -l # wc -l用于统计行数
3.3 其他实用工具
- wc 命令:统计文本行数、单词数、字符数,常用选项
-l
(行数)、-w
(单词数)、-c
(字符数):bash
wc -l ~/HelloWorld.html # 统计HTML文件的行数
- xargs 命令:将
find
等命令的输出转换为后续命令的参数(解决find
输出过多时的 “参数列表过长” 问题),示例:bash
find /var/www -name "*.html" | xargs grep "title" # 查找所有HTML文件中的“title”标签
四、总结
本章围绕 VI 编辑器和文件查找两大核心技能展开,重点需掌握:
- VI 的三种模式切换逻辑,以及光标移动、文本编辑、保存退出的常用命令;
- 通过
.vimrc
配置个性化 VI 环境,提升编辑效率; find
命令按文件属性定位文件,grep
命令按内容筛选文本,结合管道符实现复杂需求。
这些技能是 Linux 开发和运维的基础,建议多通过实战练习(如编写脚本、查找配置文件)加深理解,后续在部署项目、排查问题时会频繁用到。