Linux 学习笔记之 VI 编辑器与文件查找技巧

在 Linux 系统操作中,VI 编辑器是文本编辑的核心工具,文件查找与过滤则是高效管理系统文件的关键技能。本章将从元字符基础、VI 编辑器的全方位使用(模式切换、命令操作、配置优化),到文件查找与过滤的实用命令,带你系统掌握这些 Linux 必备技能,适合刚接触 Linux 的开发者或需要巩固基础的运维人员。

一、元字符:Linux 命令行的 "万能匹配符"

元字符是 Linux 命令行中用于模糊匹配、多命令执行或数据传递的特殊字符,掌握它们能大幅提升命令行操作效率,常用元字符及场景如下:

元字符 功能说明 示例
* 匹配 0 个或多个任意字符(常用于文件批量操作) ls *.txt(列出当前目录所有.txt文件)
? 匹配 1 个任意字符 ls test?.sh(匹配test1.shtesta.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 的完整使用流程:

  1. 新建并打开文件

    bash

    复制代码
    vi ~/HelloWorld.html  # 在用户家目录新建并打开文件
  2. 进入输入模式 :按i键,输入 HTML 代码:

    html

    预览

    复制代码
    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="UTF-8">
        <title>Hello World</title>
    </head>
    <body>
        <h1>Hello, Linux VI!</h1>
    </body>
    </html>
  3. 保存并退出 :按Esc返回命令模式,输入:wq保存退出。

  4. 部署与访问 :将文件移动到 Apache 的默认部署目录(需提前安装 Apache),并赋予权限:

    bash

    复制代码
    sudo mv ~/HelloWorld.html /var/www/html/
    sudo chmod 644 /var/www/html/HelloWorld.html  # 赋予读权限
  5. 浏览器访问 :在浏览器输入http://云服务器公网IP/HelloWorld.html,即可看到 "Hello, Linux VI!" 页面。

常见问题 :若访问 404,检查文件名大小写(Linux 区分大小写,HelloWorld.htmlhelloworld.html是两个文件);若权限不足,执行sudo chmod -R 755 /var/www/html/级联赋予目录权限。

三、文件查找与过滤:高效定位系统文件

Linux 提供findgrep等命令,分别用于 "按文件属性查找文件" 和 "按内容过滤文本",配合管道符|可实现复杂查找需求。

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常与lsps等命令配合,筛选输出结果,示例:

  • 查看当前系统中运行的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 编辑器和文件查找两大核心技能展开,重点需掌握:

  1. VI 的三种模式切换逻辑,以及光标移动、文本编辑、保存退出的常用命令;
  2. 通过.vimrc配置个性化 VI 环境,提升编辑效率;
  3. find命令按文件属性定位文件,grep命令按内容筛选文本,结合管道符实现复杂需求。

这些技能是 Linux 开发和运维的基础,建议多通过实战练习(如编写脚本、查找配置文件)加深理解,后续在部署项目、排查问题时会频繁用到。

相关推荐
zhouping@2 分钟前
JAVA学习笔记day06
java·笔记·学习
Jack.Jia5 分钟前
GPS原理笔记三——GPS卫星轨道理论和计算
笔记
守望时空3313 分钟前
使用NetworkManager替换当前网络管理器
linux·运维
爱网安的monkey brother33 分钟前
Linux自用文档
linux
庞轩px34 分钟前
内存区域的演进与直接内存——JVM性能优化的权衡艺术
java·jvm·笔记·性能优化
xlq223221 小时前
30.进程池IPC
linux·运维·服务器
nuomigege1 小时前
beagleboneblack刷入官方IOT镜像后无法运行nodered问题的处理
linux·运维·服务器
liangshanbo12151 小时前
大模型 RAG 向量数据工程全链路架构笔记
笔记·架构
huaxiu51 小时前
ubuntu下应用打不开
linux·运维·ubuntu
罗罗攀1 小时前
PyTorch学习笔记|张量的广播和科学运算
人工智能·pytorch·笔记·python·学习