博客主页:christine-rr-CSDN博客 hi,大家好,我是christine-rr ! 今天来分享一下linux常用命令——文件处理
vi 是 Linux 系统默认自带的文本编辑器,无需额外安装,适用于所有场景(包括无图形界面的服务器)。它功能简洁但操作依赖快捷键,核心是 “模式切换”,默认启动进入 命令模式。
核心格式
vi [选项] 文件名
模式 | 进入方式 | 核心操作 | 退出方式 |
|---|---|---|---|
命令模式 | 启动 vi 后默认进入 | 光标移动、复制、删除、模式切换 | 输入 i/a/o 进入编辑模式;输入 : 进入末行模式 |
编辑模式 | 命令模式下输入 i(光标前插入)、a(光标后插入)、o(新行插入) | 直接输入文本内容 | 按 Esc 键返回命令模式 |
末行模式 | 命令模式下输入 : | 保存、退出、查找、替换 | 执行命令后自动返回命令模式;按 Esc 可取消输入 |
常用示例
新建并编辑 test.txt 文件:
vi test.txt # 启动vi,进入命令模式
# 按 i 进入编辑模式,输入内容(如“Hello Linux”)
# 按 Esc 返回命令模式,输入 :wq 保存并退出(w=write保存,q=quit退出)强制退出不保存:
命令模式下输入 :q!(适用于编辑错误不想保留的场景)。
vim 是 vi 的增强版,兼容 vi 所有功能,新增了语法高亮、代码补全、行号显示等实用特性,是开发和运维的首选编辑器(部分系统需手动安装:sudo apt install vim 或 sudo yum install vim)。

以上图片来自菜鸟教程
i、 a、o等切换到输入模式,此时页面底部显示--INSERT--;ESC 按钮回到命令模式:wq 储存后离开 vi/vim注意:不允许输入模式和命令模式直接进行切换
命令模式只有一些最基本的命令,因此仍要依靠:进入底线命令行模式输入更多命令。
光标移动(高效快捷键,比方向键更灵活):
h(左)、j(下)、k(上)、l(右);^(行首第一个非空字符)、$(行尾);Ctrl+B(向上翻一屏)、Ctrl+F(向下翻一屏)、Ctrl+U(向上翻半屏)、Ctrl+D(向下翻半屏);数字+G(如 10G 跳转到第 10 行)、G(跳转到最后一行)、gg(跳转到第一行)。复制操作:
yy;数字+yy(如 3yy 复制当前行及下方 2 行,共 3 行);p(小写)(粘贴到光标下方)、P(大写)(粘贴到光标上方)。剪切 / 删除操作(剪切 = 删除 + 可粘贴,删除 = 不可恢复删除):
dd(删除后可通过 p 粘贴);数字+dd(如 2dd 剪切当前行及下方 1 行);x(删除光标所在字符)、X(删除光标前一个字符);dw(删除光标后一个单词)、d$(删除光标到行尾内容)。撤销 / 恢复:
u(undo);Ctrl+R(redo)。模式切换:
i(光标前插入)、a(光标后插入)、o(光标下新建行插入)、I(行首插入)、A(行尾插入)、O(光标上新建行插入);:。功能:纯文本输入,支持方向键移动光标,新增 “语法高亮”(根据文件类型自动着色,如代码文件会区分关键字、注释);
退出:按 Esc 键返回命令模式。
在命令模式下按下 i 就进入了输入模式,使用Esc键可以返回到普通模式。
在输入模式中,可以使用以下按键:
: 进入)保存与退出:
:w:保存当前文件(不退出);:w 新文件名:另存为新文件;:q:退出(需先保存,否则提示);:wq / :x:保存并退出;:q!:强制退出(不保存,忽略修改)。查找与替换:
: /关键字(按 n 下一个匹配,N 上一个匹配,如 :/Linux 查找 “Linux”);:s/旧内容/新内容(如 :s/Hello/Hi 替换当前行第一个 “Hello” 为 “Hi”);:s/旧内容/新内容/g(g=global,替换当前行所有匹配);: %s/旧内容/新内容/g(% 表示所有行,如 :%s/Linux/Unix/g 替换全文 “Linux” 为 “Unix”)。其他实用命令:
:set nu(临时生效,退出后失效;永久生效需编辑 ~/.vimrc 文件添加 set nu);:set nonu。vim /etc/profile #打开系统环境变量配置文件 vim +10 /etc/passwd #打开/etc/passwd并跳转到第 10 行,适合修改已知行的配置)vim +/root /etc/passwd #打开文件并直接定位到第一个“root” 所在行,适合快速查找配置);vim file1.txt file2.txt file3.txt #按:n 切换到下一个文件,`:N` 切换到上一个文件info 是 Linux 系统的 “高级帮助工具”,提供比 man 更详细的文档(按章节组织,支持跳转),常用于查看命令、函数或配置的完整说明(部分命令的 info 文档包含示例和使用场景)。
格式:
info [命令/主题]
Enter 进入链接(蓝色高亮文本),u 返回上一级,n 下一个节点,p 上一个节点;s 输入关键字搜索,Ctrl+G 退出搜索;q 键退出 info 界面。示例:
vim 的详细帮助文档:info vim # 进入后可按章节查看vim的模式、命令、配置等详细说明
info ls #这会显示 ls 命令的详细文档,包括:命令语法、所有选项说明、使用示例、相关命令链接bash 命令的帮助:info bash # 适合深入学习bash语法(如循环、条件判断)s 键, 查找下一个匹配项echo 是最常用的 “文本输出命令”,可直接打印字符串,或输出环境变量、脚本变量的值,常用于脚本调试、批量输出内容。
核心格式:
echo [选项] [内容/变量]
选项 | 功能 |
|---|---|
-n | 不换行输出(默认输出后会自动换行) |
-e | 支持转义字符(如 \n 换行、\t 制表符 |
-E | 禁用转义字符解释(默认) |
转义字符(需要 -e 选项):
\n : 换行\t : 制表符\r : 回车\b : 退格\\: 反斜杠\" : 双引号\a : 响铃示例:
echo "Hello Linux" # 输出:Hello Linux(自动换行)echo -n "Enter your name: " # 输出后不换行,常用于提示用户输入(如脚本中配合 read 命令)PATH、自定义变量 name):echo $PATH # 输出系统环境变量 PATH(存储可执行命令路径)
name="Alice"
echo "My name is $name" # 输出:My name is Alice(变量需加 $ 引用)-e 选项):echo -e "Name:\tAlice\nAge:\t20" # 输出:
# Name: Alice
# Age: 20echo -e "First\nSecond" #启用对反斜杠转义字符的解释执行结果:
First
Secondnano 是一款 “傻瓜式” 文本编辑器,操作直观(无需记忆复杂模式),适合新手或临时编辑文件,默认显示操作快捷键(底部有提示),部分轻量系统(如 Alpine Linux)默认预装。
核心格式:
nano [文件名]
Ctrl+O(按 Enter 确认文件名);Ctrl+X(若有未保存修改,会提示是否保存);Ctrl+W(输入关键字后按 Enter 查找,Alt+W 下一个匹配);Ctrl+K 剪切当前行(可连续剪切多行),Ctrl+U 粘贴剪切内容。示例:
编辑 test.sh 脚本文件:
nano test.sh # 直接进入编辑界面,输入内容(如 #!/bin/bash\n echo "Hello")
# 按 Ctrl+O 保存(Enter 确认),按 Ctrl+X 退出sed(Stream Editor)是 “非交互式文本编辑器”,通过脚本化命令批量处理文本(如替换、删除、插入),无需打开文件,直接读取输入流(文件或管道)并输出处理结果,常用于脚本自动化处理。
格式:
sed [选项] ‘脚本命令’ 文件名
选项 | 功能 | 脚本命令 | 功能 |
|---|---|---|---|
-i | 直接修改原文件(默认仅输出到终端,不修改原文件) | s/旧/新 | 替换(默认每行第一个匹配) |
-n | 仅显示匹配的行(默认显示所有行) | s/旧/新/g | 全局替换(每行所有匹配) |
d | 删除匹配的行 | ||
p | 打印匹配的行(常与 -n 配合) |
** 示例**:
sed 's/Linux/Unix/' test.txt # 将 test.txt 中每行第一个“Linux”替换为“Unix”,输出结果-i 选项,谨慎使用):sed -i 's/old/new/g' config.ini # 将 config.ini 中所有“old”替换为“new”,直接修改原文件
#备份原文件(推荐,避免误操作)
sed -i.bak 's/old/new/g' config.ini(生成 config.ini.bak 备份)sed '3d' test.txt # 删除 test.txt 第3行,输出结果
sed '/^#/d' test.txt # 删除所有以“#”开头的行(注释行),输出结果sed -n '/root/p' /etc/passwd # 仅打印 /etc/passwd 中包含“root”的行(-n 抑制默认输出,p 打印匹配行)awk 是功能强大的 “文本处理语言”,擅长按行分割文本、提取字段、统计分析(如计数、求和),核心是 “按模式处理行”,常用于日志分析、数据提取等场景。
核心格式:
awk '模式 {动作}' 文件名示例:
/etc/passwd 文件,以 : 为分隔符):awk '{print}' file #打印整行
awk '{print $1, $2}' file #打印特定列
# /etc/passwd 格式:用户名:密码占位符:UID:GID:注释:家目录:Shell
awk -F ':' '{print $1, $6}' /etc/passwd # -F 指定分隔符为“:”,打印第1字段(用户名)和第6字段(家目录)awk -F ':' '$3 >= 1000 {print $1, $3}' /etc/passwd # $3 是 UID,条件满足则打印用户名和 UID#假设 access.log 中有“192.168.1.100 - [时间] GET /index.html”格式的日志
awk '{print $1}' access.log | sort | uniq -c | grep '192.168.1.100'
#步骤:1. 提取第1字段(IP)→ 2. 排序 → 3. 去重并计数 → 4. 过滤目标IPNR 表示行号,NF 表示当前行字段数):awk -F',' '{print $1, $2}' file #使用分隔符指定列
awk '{print NR, $0}' file #打印行数
awk '{print "行号:" NR, "字段数:" NF, "整行:" $0}' test.txt # 打印每行的行号、字段数、整行内容sort 用于对文件内容按行排序,支持按字母、数字、字段排序,可配合 uniq 去重,常用于日志分析、数据整理。
选项 | 功能 |
|---|---|
-n | 按数字排序(默认按字母排序,如 “10” 会排在 “2” 前面) |
-r | 反向排序(从大到小,默认从小到大) |
-k 字段数 | 按指定字段排序(需配合 -t 指定分隔符) |
-t 分隔符 | 指定字段分隔符(如 -t ':' 以 : 为分隔符) |
-u | 去重(等同于 sortuniq,排序后删除重复行) |
示例
score.txt):# cat score.txt 内容:
# 小明 85
# 小红 92
# 小刚 78
sort -n -k 2 score.txt # -k 2 按第2字段(成绩)排序,-n 按数字排序,结果从小到大
# 小刚 78
# 小明 85
# 小红 92/etc/passwd 按 UID 从大到小排序):sort -t ':' -k 3 -n -r /etc/passwd # -t ':' 指定分隔符,-k 3 按 UID 排序,-r 反向words.txt 中不重复的单词):sort -u words.txt # 排序后删除重复行,等同于 sort words.txt | uniqdiff 用于对比两个文件的内容差异,输出 “修改、删除、新增” 的行,支持文本文件和配置文件对比,常用于版本控制、配置变更检查。
核心格式
diff [选项] 文件1 文件2
选项 | 功能 |
|---|---|
-u | 以 “统一格式” 输出(显示修改前后的上下文,更易读,常配合 patch 打补丁) |
-b | 忽略空格差异(如多空格、少空格视为相同) |
-B | 忽略空行差异 |
-i | 忽略大小写差异 |
示例
diff /etc/profile /etc/profile.bak # 输出两个文件的行差异,默认格式(如“3c3”表示第3行修改)diff -u /etc/profile /etc/profile.bak # 输出包含上下文的差异,开头“---”是原文件,“+++”是目标文件diff -bB test1.txt test2.txt # 忽略空格和空行的不同,仅对比有效内容