1.4 查看文件、搜索和编辑

1. 最常见的几个命令

命令全称主要作用
catconcatenate直接输出文件内容,适合小文件
lessless分页查看文件,适合大文件
headhead查看文件开头几行
tailtail查看文件最后几行,或持续追踪新输出
grepglobal regular expression print按关键词搜索文本内容

例如:

bash
cat INCAR                  # 直接输出整个文件内容
head OUTCAR                # 查看前 10 
tail OUTCAR                # 查看后 10 
head -n 20 OUTCAR          # 查看前 20 
tail -n 20 OUTCAR          # 查看后 20 
less OUTCAR                # 翻页查看大文件
grep "NELM" OUTCAR         # 搜索包含 NELM 的行
grep -i error job.out      # 忽略大小写搜索 error
grep -n "warning" OUTCAR   # 显示匹配行的行号
grep -r "keyword" results/ # 递归搜索目录中的文件

简单理解:

  • 小文件用 cat
  • 大文件优先用 less
  • 看文件开头用 head
  • 看文件结尾和最新输出用 tail
  • 想按关键词找内容,用 grep

cat 很直接,但文件一大就会一下子刷满屏幕。

所以看日志、输出文件、长文本时,通常更推荐:

bash
less OUTCAR # 分页查看大文件

less 里你先知道这几个就够了:

  • space:向下翻一页
  • b:向上翻一页
  • /keyword:在文件里向下搜索关键词
  • n:跳到下一个匹配
  • q:退出

2. 文件名、后缀和脚本

很多人刚接触 Linux 时,会下意识沿用 Windows 的习惯,用后缀来理解文件类型:

  • .txt 是文本文件
  • .sh 是 shell 脚本
  • .py 是 Python 脚本

这种理解在日常使用中是有帮助的,因为后缀确实方便人快速判断文件用途。但在 Linux 里,更准确的说法是:

  • 文件名只是一个名字
  • 后缀主要是给人看的提示
  • 系统并不依赖后缀来判断文件类型或是否可执行

例如:

  • run.sh
  • script.py

从系统角度看,它们没有本质区别,都是普通文件。

在日常使用中,你接触最多的文件可以简单分为两类:

1)文本文件(text file)

特点:

  • 可以直接用 cat、less 查看
  • 内容是人能读懂的字符

例如:

  • 代码:.py、.sh、.c
  • 配置:.json、.yaml
  • 科研数据:POSCAR、OUTCAR

这些文件本质上都是文本,只是内容结构不同: 有的写代码,有的存参数,有的存模拟结果。

2)二进制文件(binary file)

特点:

  • 不能直接读懂
  • cat 出来通常是乱码

例如:

  • 可执行程序(如 vasp_std, fortran、c 等编译后的可执行文件)
  • 模型文件(.pt 也是存数据的,但是特殊编码,并不可读)
  • 数据文件(.npy)

这些文件是给程序读的,而不是给人读的。

一个常用工具是:

code
file filename

例如:

  • ASCII text → 文本文件
  • ELF 64-bit executable → 可执行程序
  • Python script → 脚本(根据内容识别)

它是通过文件内容(而不是后缀)来判断类型的。

额外补充一下脚本(script)的概念,它一种文本文件,里面写了一串命令,由某个解释器解释执行,

例如:

code
bash run.sh
python test.py

shebang:让系统自动选择解释器

很多脚本开头会有一行:

code
#!/bin/bash

或:

code
#!/usr/bin/env python3

这叫 shebang,作用是:

指定这个文件应该用哪个解释器执行

配合执行权限(chmod +x),就可以直接运行:

code
./run.sh

3. grep 最基础的文本搜索器

你可以先把 grep 理解成“按关键词找文本”的工具。

最常见的用法是:

bash
grep "pattern" file      # 在文件中搜索字符串
grep -i error job.out    # 忽略大小写搜索 error
grep -n warning OUTCAR   # 显示匹配行号
grep -r keyword results/ # 递归搜索目录中的文件

这里先记住几个最常用参数:

  • -i:忽略大小写
  • -n:显示行号
  • -r:递归搜索目录

以后你看到很长的输出文件,不要默认从头读到尾,先想一件事:

能不能先 grep 一下关键词?

4. tail -f 适合边跑边看

如果任务还在运行,不想反复打开文件,可以用:

bash
tail -f job.out # 实时追踪日志新输出

它会一直停在那里,把新写进文件的内容持续显示出来。

这个命令很适合:

  • 看作业是不是还在正常往下跑
  • 看程序是不是卡住了
  • 看有没有新的报错出现

退出时按 Ctrl + C 即可。

5. 重定向和管道

5.1 重定向

在 shell 里:

  • >:覆盖写入
  • >>:追加写入

例如:

bash
python script.py > output.log  # 覆盖写入日志
python script.py >> output.log # 追加写入日志

这类写法最常见的用途,就是把终端输出保存成日志文件,方便之后再用 taillessgrep 去看。

5.2 管道

在 shell 中,| 表示把前一个命令的输出,直接交给后一个命令继续处理。

最常见的例子就是:

bash
tail -n 100 job.out | grep energy # 查看最后 100 行并筛选 energy
grep "warning" OUTCAR | less      # 先筛 warning,再分页查看

你可以先把它理解成:

前一个命令负责“拿出一批内容”,后一个命令负责“继续处理这批内容”。

所以:

  • tail 负责看最新部分
  • grep 负责筛关键词
  • less 负责分页看

| 负责把这些动作串起来。

6. vim 文件编辑

在 Terminal 里,最常见的文本编辑器之一就是 vim

bash
vim file.txt

如果文件不存在,会新建一个。

vim 和很多图形化编辑器不一样,它不是一打开就能直接打字的,而是有“模式”这个概念。

  • 普通模式(Normal):默认状态,用来移动、删除、复制
  • 插入模式(Insert):用来打字

你一打开就在普通模式。
所以新手最容易卡住的地方其实就一句话:

打不开,不是 vim 坏了,而是你还没进入插入模式。

进入插入模式:

bash
i

按下 i 之后,才是真正开始输入文字。

退出插入模式:

bash
Esc

写完之后,按 Esc 回到普通模式,再执行保存或退出命令。

保存文件:

bash
:w

退出:

bash
:q

强制退出(不保存):

bash
:q!

保存并退出:

bash
:wq

如果你只想先会最基本的用法,其实记住下面这个最小流程就够了:

bash
vim file.txt
i    # 进入插入模式,开始写
Esc  # 退出插入模式
:wq  # 保存并退出

另外 vim 在普通模式下有很多快捷键,比如:

  • yy`:复制当前这一行
  • p:把复制或删除的内容粘贴到后面
  • dd: 删除一行
  • u: 撤销删除
  • x:删除当前光标所在的字符
  • gg:跳到文件开头
  • G:跳到文件结尾
  • /keyword:在文件里搜索关键词
  • n:跳到下一个搜索结果

你可以把这些快捷键理解成“普通模式下的快速操作”。
也就是说,普通模式不是用来打字的,而是用来快速移动、删除、复制、搜索。