Linux文件查看与编辑:cat、less、tail、vim快速入门

一、cat:小文件的"一锅端"查看器

cat 是 concatenate(连接) 的缩写,它最朴素的用法就是一次性把文件内容全部输出到屏幕。

语法格式

bash 复制代码
cat [选项] [文件...]

常用参数说明

参数 说明
-n 显示行号(包括空行)
-b 仅给非空行编号
-A 显示所有不可见字符(如 $ 表示行尾、^I 表示 Tab)
-s 压缩连续空行为一行
-E 在每行行尾显示 $

示例与预期输出

示例 1:查看文件并带行号

bash 复制代码
cat -n /etc/hostname

预期输出:

复制代码
     1	web-server-01

示例 2:把多个文件拼接成一个

bash 复制代码
cat part1.txt part2.txt > full.txt
wc -l full.txt

预期输出:

复制代码
8 full.txt

⚠️ 注意事项

cat 适合小文件,一旦文件超过几千行,内容就会刷屏,前面的内容根本来不及看。此时应该换 less 。另外用 cat 查看二进制文件会出现乱码并可能干扰终端,除非用 -v 等选项,否则别这么干。

常见错误:cat file 后面误加管道符号 | 再接一个不存在的命令,导致文件内容丢失进黑洞?其实不会------管道只会报错,但如果你写成 cat file > newfile 而 newfile 拼错了名字,原文件内容才会真的被覆盖。重定向要格外小心(第 18 篇会细讲)。

二、less:大文件的"翻页浏览器"

less 的名字来自对早期 more 的调侃------"less is more"(少即是多)。它的核心优势是只加载当前屏幕需要的内容,所以几十 GB 的日志也能秒开。

语法格式

bash 复制代码
less [选项] 文件

交互式操作速查

按键 作用
空格 / f 下一页
b 上一页
g / G 跳到文件开头 / 末尾
/关键词 向下搜索,n 下一个,N 上一个
?关键词 向上搜索
q 退出
-N(进入后按) 切换行号显示

示例与预期输出

示例:打开系统日志搜索报错

bash 复制代码
less /var/log/syslog

进入后输入 /mysql,文件会高亮并跳到第一个匹配位置。按 n 继续找下一个。

常见启动参数:

bash 复制代码
less -N file.log      # 进入即显示行号
less -i file.log      # 搜索时忽略大小写
less +G file.log      # 直接打开文件末尾(看最新日志)
less +/ERROR file.log # 打开后直接定位到第一个 ERROR

+G 这个技巧非常实用 :less +G app.log 相当于"打开文件直接看最后",配合 /关键词 回搜,排查线上问题效率极高。

💡 场景说明

less 是查看日志的主力工具。它不会像 cat 那样把终端刷爆,也支持搜索、跳转、甚至用 v 键直接调用 vim 编辑当前文件。

三、tail:盯着文件"尾巴"看更新

tail 输出文件的末尾 内容,它的看家本领是 -f 模式------实时跟踪文件追加的新内容。

语法格式

bash 复制代码
tail [选项] 文件

常用参数说明

参数 说明
-n 数字 显示最后 N 行(-n 50 等价于 -50)
-f 持续跟踪文件新增内容(follow)
-F 跟踪并处理文件被轮转(rename)的情况
-q 同时跟踪多个文件时不打印文件头

示例与预期输出

示例 1:查看最后 20 行

bash 复制代码
tail -n 20 /var/log/nginx/access.log

预期输出(节选):

复制代码
192.168.1.5 - - [16/Sep/2026:10:00:01 +0800] "GET / HTTP/1.1" 200 6120
192.168.1.5 - - [16/Sep/2026:10:00:02 +0800] "GET /css/style.css HTTP/1.1" 200 8841

示例 2:实时跟踪日志

bash 复制代码
tail -f /var/log/myapp/app.log

此时终端会"挂住",新日志一行行冒出来。按 Ctrl + C 退出跟踪。

⚠️ -f 与 -F 的区别

这是面试高频考点。当日志按天轮转(比如 app.log 被重命名为 app.log.1,新文件重新创建为 app.log)时:

  • tail -f app.log:只盯着旧文件的 inode,轮转后不再输出新内容;
  • tail -F app.log:按文件名重新打开,自动切换到新文件继续跟踪。

生产环境排障请无脑用 -F,避免日志轮转后"假死"。

四、vim:命令行编辑器中的"瑞士军刀"

vim 是 vi 的增强版,几乎所有主流 Linux 发行版都内置了 vi,Ubuntu 等发行版也默认安装了 vim。它是你修改配置文件的唯一"正牌武器"。

三种模式(核心中的核心)

模式 作用 进入方式
普通模式 移动光标、复制删除 启动即进入
插入模式 输入文字 普通模式按 i(当前字符前)/ a(后)/ o(下方新行)
命令行模式 保存、退出、搜索 普通模式按 : 或 /

最小可用操作集

操作 按键
进入插入模式 i
返回普通模式 Esc
保存 :w
退出 :q
保存并退出 :wq 或 ZZ
不保存强制退出 :q!
撤销 u
搜索 /关键词 回车,n 下一个
跳转到某行 :100 回车

示例与预期输出

示例:修改 Nginx 端口

bash 复制代码
vim /etc/nginx/sites-available/default

进入后:

  1. 按 /listen 回车,定位到监听配置;
  2. 按 n 跳到具体行;
  3. 按 i 进入插入模式,把 80 改成 8080;
  4. 按 Esc,输入 :wq 回车保存退出。

⚠️ vim 异常退出的 swap 文件

如果 vim 崩溃或 SSH 断线,再次打开文件会提示 .file.swp 已存在。此时:

  • 按 R 恢复上次未保存的内容;
  • 确认文件没问题后,用 rm .file.swp 删除交换文件(注意是隐藏文件 ,以 . 开头)。

五、四个工具怎么选?一张表说清

场景 推荐工具 理由
查看几十行的小文件 cat 快、简单,还能拼接文件
翻看几百 MB 的日志 less 分页加载、可搜索、可跳转
盯着日志实时输出 tail -F 实时跟踪,轮转也不怕
修改配置文件 vim 编辑器,功能全面
快速创建小文件 cat > file <<EOF 无编辑器也能写内容

六、知识扩展:tail 实时跟踪背后的原理

tail -f 之所以能"实时",早期实现是轮询 :每秒去检查文件有没有变大。现代 Linux 上,tail 会优先使用 inotify 机制------内核在文件被写入时主动发通知,tail 收到通知立刻读出新数据,既省资源又即时。

而"文件被写入"的本质,是写入者持有一个指向 inode 的文件描述符 。tail -F 能处理轮转,是因为它记住了文件名 → inode 的映射 ,一旦发现当前 inode 不再增长,就重新按文件名打开新文件。理解了 inode,你就同时理解了 tail -F 和软/硬链接(第 16 篇会展开)。

顺带一提,tail -f 也可以直接接多个文件,比如 tail -F /var/log/nginx/*.log,多文件会打印各自的文件头。

相关推荐
0+1117 小时前
Linux --从 poll 到 epoll多路转接
linux·服务器·1024程序员节
青瓦梦滋7 小时前
WebSocket协议
linux·服务器·网络·c++·websocket·网络协议·http
桌面运维家8 小时前
旧电脑跑不动课程软件,VDI云桌面怎样接着用?
运维·服务器·虚拟化·pve·vdi·云桌面
zhang133830890758 小时前
传统机械三杯式风速传感器易磨损冻堵?CG-88金属超声波风速风向传感器给出免运维方案
运维·服务器·网络·人工智能·自动化
知已难寻8 小时前
第 2 篇 · 云的地基:服务器、存储、网络三大基础设施
运维·服务器·网络·云原生·云计算·负载均衡·1024程序员节
2601_9498477510 小时前
bcrypt.js 跨端三方库仓颉适配全流程
linux·运维·ubuntu
m0_6399069410 小时前
Linux 操作系统入门:目录结构、服务排查常用命令、Shell 脚本基础
linux·运维·后端
今天重构了吗11 小时前
Linux 上 rm -rf 删错了能找回吗
运维·服务器
KaiwuDB11 小时前
KaiwuDB 分布式集群扩缩容,从原理到完整操作踩坑总结
运维·数据库·分布式
codezzzsleep12 小时前
学术汇报 PPT 自动化生成实战指南
运维·自动化·powerpoint