Linux 常用命令学习笔记(续):查找、压缩、vi 编辑器与其他命令
本文承接上一部分,继续介绍 Linux 中的查找/搜索命令、压缩/解压缩命令、vi 编辑器的详细用法,以及其他实用命令(file、which、whereis)。所有示例均基于 Ubuntu 系统,力求通俗易懂,适合零基础入门。
文章目录
- [Linux 常用命令学习笔记(续):查找、压缩、vi 编辑器与其他命令](#Linux 常用命令学习笔记(续):查找、压缩、vi 编辑器与其他命令)
-
- [1. 查找/搜索命令](#1. 查找/搜索命令)
-
- [1.1 `find` -- 在目录树中查找文件](#1.1
find– 在目录树中查找文件) -
- 基本格式
- [示例 1:按文件名精确查找](#示例 1:按文件名精确查找)
- [示例 2:使用通配符 `*` 模糊查找](#示例 2:使用通配符
*模糊查找) - [示例 3:查找目录或文件名为特定字符串](#示例 3:查找目录或文件名为特定字符串)
- 如果不指定目录,默认是当前目录
- 高级用法:按时间查找
- [1.2 `grep` -- 在文件内容中搜索字符串](#1.2
grep– 在文件内容中搜索字符串)
- [1.1 `find` -- 在目录树中查找文件](#1.1
- [2. 压缩/解压缩命令](#2. 压缩/解压缩命令)
-
- [2.1 `gzip` -- 压缩单个文件(后缀 `.gz`)](#2.1
gzip– 压缩单个文件(后缀.gz)) - [2.2 `bzip2` -- 压缩单个文件(后缀 `.bz2`)](#2.2
bzip2– 压缩单个文件(后缀.bz2)) - [2.3 `tar` -- 打包(并压缩)目录](#2.3
tar– 打包(并压缩)目录) -
- 常用选项
- [示例 1:使用 gzip 打包并压缩目录](#示例 1:使用 gzip 打包并压缩目录)
- [示例 2:使用 bzip2 打包并压缩目录](#示例 2:使用 bzip2 打包并压缩目录)
- [2.1 `gzip` -- 压缩单个文件(后缀 `.gz`)](#2.1
- [3. vi 编辑器](#3. vi 编辑器)
-
- [3.1 vi 的三种模式](#3.1 vi 的三种模式)
- [3.2 打开/新建/保存文件](#3.2 打开/新建/保存文件)
- [3.3 进入编辑模式(输入文本)](#3.3 进入编辑模式(输入文本))
- [3.4 光标移动(一般模式下)](#3.4 光标移动(一般模式下))
- [3.5 复制、粘贴、删除、撤销(一般模式下)](#3.5 复制、粘贴、删除、撤销(一般模式下))
- [3.6 查找和替换(命令行模式)](#3.6 查找和替换(命令行模式))
- [3.7 vi 完整使用示例](#3.7 vi 完整使用示例)
- [4. 其他常用命令](#4. 其他常用命令)
-
- [4.1 `file` -- 查看文件类型](#4.1
file– 查看文件类型) - [4.2 `which` 和 `whereis` -- 查找命令的位置](#4.2
which和whereis– 查找命令的位置)
- [4.1 `file` -- 查看文件类型](#4.1
- [5. 总结](#5. 总结)
1. 查找/搜索命令
在 Linux 中,查找文件或搜索文件内容是非常常见的需求。我们主要学习两个命令:find(按文件名等条件查找文件)和 grep(在文件内容中搜索字符串)。
1.1 find -- 在目录树中查找文件
find 命令类似于 Windows 的搜索框,但功能更强大。你只需要告诉它两个信息:从哪里找 (目录)和 找什么(条件)。
基本格式
bash
find 目录名 选项 查找条件
- 目录名 :从哪个目录开始搜索(如果不写,默认是当前目录
.) - 选项 :比如
-name表示按文件名查找 - 查找条件:具体的文件名或模式
示例 1:按文件名精确查找
bash
find /home/book/dira/ -name "test1.txt"
- 在
/home/book/dira/目录下(包括其所有子目录)查找名字为test1.txt的文件。 -name选项表示"名字"。
示例 2:使用通配符 * 模糊查找
bash
find /home/book/dira/ -name "*.txt"
*代表任意多个字符。这条命令会找到所有以.txt结尾的文件。- 例如:
a.txt、test.txt、myfile.txt都会被找到。
示例 3:查找目录或文件名为特定字符串
bash
find /home/book/dira/ -name "dira"
- 只要名字叫
dira(无论是目录还是文件)都会被找到。
如果不指定目录,默认是当前目录
bash
find . -name "*.txt" # 明确指定当前目录
find -name "*.txt" # 省略目录,等同于上面
高级用法:按时间查找
find 还能根据文件的修改时间来查找,非常实用。
bash
find /home/book -mtime -2
-mtime -2:查找最近 2 天以内 修改过的文件。-mtime +2:查找 2 天以前 修改过的文件。-mtime 2:查找恰好 2 天前 当天修改过的文件。
💡 小提示 :
find还有更多用法,比如按文件大小(-size)、按用户(-user)等,可以用man find查看。
1.2 grep -- 在文件内容中搜索字符串
如果说 find 是按"名字"找文件,那么 grep 就是按"内容"找信息。它会打开文件,一行一行地查找是否包含你指定的字符串。
基本格式
bash
grep [选项] [查找模式] [文件名]
常用选项
| 选项 | 含义 |
|---|---|
-r |
递归搜索,进入子目录查找 |
-n |
显示匹配行在文件中的行号 |
-w |
全字匹配(只匹配完整单词,不匹配单词的一部分) |
-i |
忽略大小写 |
示例 1:在单个文件中搜索
假设 test1.txt 文件内容为:
text
aaaaa abc abcbabc bccbcabca match_pattern nand->erase
执行:
bash
grep -n "abc" test1.txt
- 输出:
1:aaaaa abc abcbabc ...(行号和匹配的行) -n显示行号。
示例 2:在当前目录(包括子目录)递归搜索所有文件
bash
grep -rn "abc" *
*表示当前目录下的所有文件(也包括目录,grep会递归进去)。-r递归,-n显示行号。- 输出会显示:
文件名:行号:匹配的行内容。
示例 3:全字匹配 -w
bash
grep -nw "abc" test1.txt
- 只匹配独立的单词
abc,不会匹配abcbabc中的abc。
管道 | 的高级用法:在搜索结果中再次搜索
有时候搜索结果太多,想进一步筛选。可以用 管道 把前一个命令的输出交给后一个命令继续处理。
例如:搜索所有包含 ABC 的文件,但只关心 .h 头文件:
bash
grep "ABC" -w -nr | grep "\.h"
- 第一个
grep找到所有包含ABC的行(递归、显示行号)。 |将结果传给第二个grep。- 第二个
grep只保留包含.h的行(即头文件)。
🧠 理解管道 :
|就像一根管子,把左边命令的输出"灌进"右边命令作为输入。
2. 压缩/解压缩命令
Linux 下常见的压缩工具有 gzip、bzip2,以及打包工具 tar。通常我们会组合使用 tar 和压缩命令来打包并压缩整个目录。
2.1 gzip -- 压缩单个文件(后缀 .gz)
gzip 只能压缩单个文件 ,不能压缩目录。压缩后原文件会被删除(除非用 -k 保留)。
常用选项
| 选项 | 含义 |
|---|---|
-k (keep) |
压缩或解压时保留原文件 |
-d (decompress) |
解压缩 |
-l (list) |
列出压缩文件的信息 |
示例
bash
# 压缩文件(保留原文件)
gzip -k mypwd.1 # 生成 mypwd.1.gz
# 查看压缩文件内容信息
gzip -l mypwd.1.gz
# 解压缩(保留压缩包)
gzip -kd mypwd.1.gz # 得到 mypwd.1,原压缩包还在
⚠️ 注意 :如果不加
-k,直接执行gzip mypwd.1,压缩后原文件mypwd.1会被删除,只剩下.gz文件。推荐总是使用-k保留原文件。
缺点
- 只能压缩单个文件,不能处理目录。
- 压缩率一般(比
bzip2低)。
2.2 bzip2 -- 压缩单个文件(后缀 .bz2)
bzip2 与 gzip 类似,也只能压缩单个文件,但压缩率更高(文件更小),不过压缩速度稍慢。
常用选项
| 选项 | 含义 |
|---|---|
-k (keep) |
保留原文件 |
-d (decompress) |
解压缩 |
示例
bash
# 压缩(保留原文件)
bzip2 -k mypwd.1 # 生成 mypwd.1.bz2
# 解压缩(保留压缩包)
bzip2 -kd mypwd.1.bz2 # 得到 mypwd.1
gzip vs bzip2 对比
| 特性 | gzip | bzip2 |
|---|---|---|
| 后缀 | .gz |
.bz2 |
| 压缩速度 | 快 | 较慢 |
| 压缩率(文件大小) | 一般 | 更高(更小) |
| 适用场景 | 小文件 | 大文件,追求高压缩比 |
💡 经验之谈 :普通文本文件用
bzip2能压缩得更小;临时用一下或者文件不大时用gzip更方便。
2.3 tar -- 打包(并压缩)目录
tar 的本意是"磁带归档"(tape archive),可以把多个文件和目录打包成一个大文件 (后缀 .tar)。通常我们会结合 gzip 或 bzip2 进一步压缩,得到 .tar.gz 或 .tar.bz2 文件。
常用选项
| 选项 | 含义 |
|---|---|
-c (create) |
创建打包文件 |
-x (extract) |
解包(提取) |
-t (list) |
查看打包文件的内容列表 |
-z |
通过 gzip 压缩/解压(生成 .tar.gz) |
-j |
通过 bzip2 压缩/解压(生成 .tar.bz2) |
-v (verbose) |
显示详细过程 |
-f (file) |
指定文件名(必须放在选项最后,因为它后面紧跟着文件名) |
-C |
指定解压到的目标目录 |
📌 注意 :
-f选项必须紧挨着文件名,通常写作-f 文件名。常见写法如tar czvf dira.tar.gz dira,其中c、z、v、f连写。
示例 1:使用 gzip 打包并压缩目录
bash
# 压缩:将目录 dira 打包并压缩为 dira.tar.gz
tar czvf dira.tar.gz dira
c:创建z:用 gzip 压缩v:显示被处理的文件f dira.tar.gz:指定输出文件名dira:要打包的源目录
bash
# 查看压缩包内容(不解压)
tar tvf dira.tar.gz
t:查看列表v:显示详细信息
bash
# 解压到当前目录
tar xzvf dira.tar.gz
# 解压到指定目录(例如 /home/book)
tar xzvf dira.tar.gz -C /home/book
x:解包z:用 gzip 解压C:指定目标目录
示例 2:使用 bzip2 打包并压缩目录
bash
# 压缩:使用 bzip2,选项变为 j
tar cjvf dira.tar.bz2 dira
# 查看内容
tar tvf dira.tar.bz2
# 解压到当前目录
tar xjvf dira.tar.bz2
# 解压到指定目录
tar xjvf dira.tar.bz2 -C /home/book
💡 记忆技巧:
tar czf→ 创建.tar.gztar xzf→ 解压.tar.gztar cjf→ 创建.tar.bz2tar xjf→ 解压.tar.bz2- 中间加个
v只是显示过程,不影响功能。
3. vi 编辑器
vi 是 Linux 命令行下的文本编辑器,几乎所有 Linux 系统都自带。虽然现在有 vim(vi improved)更强大,但基础用法是一样的。在服务器调试、修改配置文件等场景下,vi 是必备技能。
3.1 vi 的三种模式
vi 有三种模式,不同的操作要在不同的模式下进行:
| 模式 | 主要功能 | 如何进入 |
|---|---|---|
| 一般模式(Normal) | 移动光标、复制、粘贴、删除、撤销 | 刚打开文件时默认模式;按 ESC 从其他模式返回 |
| 编辑模式(Insert) | 输入文本内容 | 按 i、a、o 等键(见下文) |
| 命令行模式(Command-line) | 保存文件、退出、查找、替换 | 在一般模式下按 : 进入 |
⚠️ 重要 :如果你不确定当前在什么模式,多按几次
ESC就能回到一般模式。
3.2 打开/新建/保存文件
bash
vi 文件名
- 如果文件存在,则打开它。
- 如果文件不存在,则新建一个空文件(但还没有保存到磁盘,需要执行保存操作才会真正创建)。
保存与退出(在命令行模式下)
| 命令 | 含义 |
|---|---|
:w |
保存文件(write) |
:q |
退出(quit) |
:wq |
保存并退出 |
:q! |
强制退出,不保存修改 |
:x |
保存并退出(等同于 :wq) |
📌 对于新文件,必须先
:w或:wq才会实际创建文件。
3.3 进入编辑模式(输入文本)
在一般模式下,按下以下任意键即可进入编辑模式(此时屏幕下方会出现 -- INSERT -- 提示):
| 按键 | 作用 |
|---|---|
i |
在光标所在字符的前面开始插入 |
I |
在当前行的行首开始插入 |
a |
在光标所在字符的后面开始插入 |
A |
在当前行的行尾开始插入 |
o |
在当前行的下方新建一行,并进入编辑模式 |
O |
在当前行的上方新建一行,并进入编辑模式 |
编辑完成后,按 ESC 返回一般模式。
3.4 光标移动(一般模式下)
基本移动
| 按键 | 作用 |
|---|---|
h 或 ← |
左移一个字符 |
l 或 → |
右移一个字符 |
j 或 ↓ |
下移一行 |
k 或 ↑ |
上移一行 |
快速跳转(行定位)
| 按键 | 作用 |
|---|---|
1G 或 gg |
跳到文件第一行(文件头) |
G |
跳到文件最后一行(文件尾) |
nG 或 ngg |
跳到第 n 行(例如 15G 跳到第 15 行) |
n+ |
向下移动 n 行 |
n- |
向上移动 n 行 |
屏幕翻页
| 按键 | 作用 |
|---|---|
Ctrl + f |
向下翻一页(forward) |
Ctrl + b |
向上翻一页(backward) |
行内快速定位
| 按键 | 作用 |
|---|---|
0(数字零) |
跳到当前行的行首 |
$ |
跳到当前行的行尾 |
fx |
在当前行中搜索下一个字母 x 并跳过去(例如 fa 跳转到下一个 a) |
3.5 复制、粘贴、删除、撤销(一般模式下)
复制(yank)
| 命令 | 作用 |
|---|---|
yy |
复制当前行 |
nyy |
复制当前行及其下方的 n-1 行(例如 3yy 复制当前行和下面两行,共3行) |
粘贴(paste)
| 命令 | 作用 |
|---|---|
p |
在光标下方粘贴(如果是整行,则粘贴到下一行) |
P |
在光标上方粘贴 |
删除(delete)
| 命令 | 作用 |
|---|---|
dd |
删除当前行 |
ndd |
删除当前行及其下方的 n-1 行(例如 5dd 删除5行) |
x |
删除光标所在位置的一个字符 |
X |
删除光标前面的一个字符 |
cc |
删除整行,并立即进入编辑模式(相当于替换整行) |
s |
删除光标所在字符,并进入编辑模式 |
撤销(undo)
| 命令 | 作用 |
|---|---|
u |
撤销上一步操作(可以连续撤销) |
💡 多按几次
u可以逐步撤销更早的操作。
3.6 查找和替换(命令行模式)
查找字符串
在一般模式下,输入 / 然后输入要查找的字符串,回车:
text
/pattern
pattern是你要查找的文本。- 按
n键:向同一个方向继续查找下一个匹配。 - 按
N键:向反方向查找上一个匹配。
如果要从头到尾全文搜索,建议先按
gg跳到文件开头,再执行/pattern。
替换字符串
在命令行模式(输入 :)下执行替换命令:
| 命令 | 作用 |
|---|---|
:%s/p1/p2/g |
将文件中所有 的 p1 替换为 p2 |
:%s/p1/p2/gc |
全局替换,但每次替换前都会询问确认(c = confirm) |
%表示整个文件范围。s表示替换(substitute)。g表示全局(global),如果不加g则只替换每行的第一个匹配。
3.7 vi 完整使用示例
让我们从头创建一个 hello.txt 文件,内容为两行:
text
www.100ask.net
wiki.100ask.net
步骤 1:打开/新建文件
bash
vi hello.txt
屏幕上出现一个空白文件,底部显示文件名和行数。当前处于一般模式。
步骤 2:进入编辑模式并输入内容
按下 i 键(光标前插入),屏幕底部显示 -- INSERT --。现在可以输入内容了:
text
www.100ask.net
wiki.100askx.net
(注意第二行我故意多打了一个 x,后面要删除它)
步骤 3:退出编辑模式
按 ESC 键,-- INSERT -- 消失,回到一般模式。
步骤 4:移动光标并删除错误的字符
使用方向键(或 h/j/k/l)将光标移动到第二行的 x 字符下方。在一般模式下,按 x 删除该字符。
步骤 5:保存并退出
输入 : 进入命令行模式,然后输入 wq,回车。文件已保存。
步骤 6:验证
bash
cat hello.txt
输出:
text
www.100ask.net
wiki.100ask.net
📌 注意:本教程不涉及 Ubuntu 下中文输入法的安装。建议编写代码或注释时使用英文。如需中文,可自行搜索配置。
4. 其他常用命令
4.1 file -- 查看文件类型
在 Linux 中,文件扩展名(如 .txt、.c)并不像 Windows 那样严格。一个文件到底是什么类型(文本、可执行程序、图片等),可以用 file 命令查看。
bash
file 文件名
典型用途:检查编译出来的程序是给哪个平台用的
初学者经常把在 PC(x86 架构)上用 gcc 编译的程序,复制到 ARM 开发板上运行,结果报错"无法执行"。这时用 file 就能看出原因:
bash
file myprogram
- 如果是 PC 程序,输出会包含
x86-64或ELF 64-bit LSB executable, x86-64。 - 如果是 ARM 程序,输出会包含
ARM或ELF 32-bit LSB executable, ARM。
💡 交叉编译时,
file是验证编译结果是否正确的好帮手。
4.2 which 和 whereis -- 查找命令的位置
当我们执行一个命令(如 ls、gcc)时,系统会在 PATH 环境变量指定的目录中寻找该命令。which 和 whereis 可以帮助我们找到命令的实际位置。
| 命令 | 作用 | 示例 |
|---|---|---|
which |
显示命令的可执行程序路径 | which pwd → /bin/pwd |
whereis |
显示命令的可执行程序路径 、源代码 (如果有)、手册页位置 | whereis pwd → /bin/pwd /usr/share/man/man1/pwd.1.gz |
示例
bash
which gcc # /usr/bin/gcc
whereis gcc # /usr/bin/gcc /usr/lib/gcc /usr/share/man/man1/gcc.1.gz
📌 当你安装了多个版本的软件(比如 Python 2 和 Python 3),可以用
which python确认当前使用的是哪一个。
5. 总结
本文涵盖了 Linux 中非常重要的查找、压缩、vi 编辑以及其他辅助命令。下面是速查表:
| 分类 | 命令 | 常用示例 |
|---|---|---|
| 查找文件 | find |
find /home -name "*.txt" |
| 查找内容 | grep |
grep -rn "error" * |
| 压缩(单文件) | gzip |
gzip -k file.txt |
| 压缩(单文件,高压缩比) | bzip2 |
bzip2 -k file.txt |
| 打包+压缩目录 | tar |
tar czvf dir.tar.gz dir/ |
| 解压 | tar |
tar xzvf dir.tar.gz -C /target |
| 文本编辑 | vi |
vi file.txt(然后 i 编辑,ESC,:wq) |
| 查看文件类型 | file |
file a.out |
| 查找命令位置 | which / whereis |
which ls |
🎉 练习建议 :在虚拟机上亲手敲一遍这些命令,从
find到vi创建一个文件并修改,再到tar打包压缩,你会很快掌握它们。Linux 命令的学习没有捷径,多敲几次自然就记住了。