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 开发和运维的基础,建议多通过实战练习(如编写脚本、查找配置文件)加深理解,后续在部署项目、排查问题时会频繁用到。

相关推荐
取酒鱼食--【余九】3 小时前
机器人学基础(一)【坐标系和位姿变换】
笔记·算法·机器人·开源·机器人运动学·机器人学基础
im_AMBER3 小时前
数据结构 03 栈和队列
数据结构·学习·算法
筑梦之路4 小时前
深入linux的审计服务auditd —— 筑梦之路
linux·运维·服务器
hi_link4 小时前
centos系统将/home分区的空间分配给/
linux·运维·centos
我先去打把游戏先4 小时前
VSCode通过SSH连接到Ubuntu虚拟机失败“找不到ssh安装”问题解决
笔记·vscode·单片机·嵌入式硬件·学习·ubuntu·ssh
CSND7404 小时前
linux离线环境局域网远程ssh连接vscode
linux·vscode·ssh
XiangrongZ4 小时前
江协科技STM32课程笔记(三)—定时器TIM(输出比较)
笔记·科技·stm32
应用市场4 小时前
Linux驱动开发原理详解:从入门到实践
linux·运维·驱动开发
●VON4 小时前
重生之我在大学自学鸿蒙开发第五天-《实战篇》
学习·华为·云原生·harmonyos·鸿蒙