1.4 查看文件、搜索和编辑
1. 最常见的几个命令
| 命令 | 全称 | 主要作用 |
|---|---|---|
cat | concatenate | 直接输出文件内容,适合小文件 |
less | less | 分页查看文件,适合大文件 |
head | head | 查看文件开头几行 |
tail | tail | 查看文件最后几行,或持续追踪新输出 |
grep | global regular expression print | 按关键词搜索文本内容 |
例如:
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 很直接,但文件一大就会一下子刷满屏幕。
所以看日志、输出文件、长文本时,通常更推荐:
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)
这些文件是给程序读的,而不是给人读的。
一个常用工具是:
file filename例如:
- ASCII text → 文本文件
- ELF 64-bit executable → 可执行程序
- Python script → 脚本(根据内容识别)
它是通过文件内容(而不是后缀)来判断类型的。
额外补充一下脚本(script)的概念,它一种文本文件,里面写了一串命令,由某个解释器解释执行,
例如:
bash run.sh
python test.pyshebang:让系统自动选择解释器
很多脚本开头会有一行:
#!/bin/bash或:
#!/usr/bin/env python3这叫 shebang,作用是:
指定这个文件应该用哪个解释器执行
配合执行权限(chmod +x),就可以直接运行:
./run.sh3. grep 最基础的文本搜索器
你可以先把 grep 理解成“按关键词找文本”的工具。
最常见的用法是:
grep "pattern" file # 在文件中搜索字符串
grep -i error job.out # 忽略大小写搜索 error
grep -n warning OUTCAR # 显示匹配行号
grep -r keyword results/ # 递归搜索目录中的文件这里先记住几个最常用参数:
-i:忽略大小写-n:显示行号-r:递归搜索目录
以后你看到很长的输出文件,不要默认从头读到尾,先想一件事:
能不能先
grep一下关键词?
4. tail -f 适合边跑边看
如果任务还在运行,不想反复打开文件,可以用:
tail -f job.out # 实时追踪日志新输出它会一直停在那里,把新写进文件的内容持续显示出来。
这个命令很适合:
- 看作业是不是还在正常往下跑
- 看程序是不是卡住了
- 看有没有新的报错出现
退出时按 Ctrl + C 即可。
5. 重定向和管道
5.1 重定向
在 shell 里:
>:覆盖写入>>:追加写入
例如:
python script.py > output.log # 覆盖写入日志
python script.py >> output.log # 追加写入日志这类写法最常见的用途,就是把终端输出保存成日志文件,方便之后再用 tail、less、grep 去看。
5.2 管道
在 shell 中,| 表示把前一个命令的输出,直接交给后一个命令继续处理。
最常见的例子就是:
tail -n 100 job.out | grep energy # 查看最后 100 行并筛选 energy
grep "warning" OUTCAR | less # 先筛 warning,再分页查看你可以先把它理解成:
前一个命令负责“拿出一批内容”,后一个命令负责“继续处理这批内容”。
所以:
tail负责看最新部分grep负责筛关键词less负责分页看
而 | 负责把这些动作串起来。
6. vim 文件编辑
在 Terminal 里,最常见的文本编辑器之一就是 vim:
vim file.txt如果文件不存在,会新建一个。
vim 和很多图形化编辑器不一样,它不是一打开就能直接打字的,而是有“模式”这个概念。
- 普通模式(Normal):默认状态,用来移动、删除、复制
- 插入模式(Insert):用来打字
你一打开就在普通模式。
所以新手最容易卡住的地方其实就一句话:
打不开,不是
vim坏了,而是你还没进入插入模式。
进入插入模式:
i按下 i 之后,才是真正开始输入文字。
退出插入模式:
Esc写完之后,按 Esc 回到普通模式,再执行保存或退出命令。
保存文件:
:w退出:
:q强制退出(不保存):
:q!保存并退出:
:wq如果你只想先会最基本的用法,其实记住下面这个最小流程就够了:
vim file.txt
i # 进入插入模式,开始写
Esc # 退出插入模式
:wq # 保存并退出另外 vim 在普通模式下有很多快捷键,比如:
- yy`:复制当前这一行
p:把复制或删除的内容粘贴到后面dd: 删除一行u: 撤销删除x:删除当前光标所在的字符gg:跳到文件开头G:跳到文件结尾/keyword:在文件里搜索关键词n:跳到下一个搜索结果
你可以把这些快捷键理解成“普通模式下的快速操作”。
也就是说,普通模式不是用来打字的,而是用来快速移动、删除、复制、搜索。