前言
在Linux环境下进行开发和运维,就像操作一个精密的工具箱。无论你是初学者还是有一定经验的开发者,掌握Vim编辑器、GCC编译器以及打包解压命令都是必修课。很多新手容易混淆"打包"和"压缩"的区别,或者在Vim里不知道如何保存退出(笑,这是每个新手都会经历的"Vim劫持")。
Vim的强大之处在于它的模式化操作。

普通模式(Normal):打开Vim后的默认状态。在这里,你可以浏览文件、复制粘贴、删除文本,但不能输入字符。插入模式(Insert):可以疯狂敲代码的模式。按 i 进入。命令模式(Command):按 : 进入,底部会出现冒号,用来执行保存(:w)、退出(:q)等指令。
|-------|--------------------------|--------------------|
| ESC | 无论在哪,按 ESC 键都能返回到普通模式。 |
| | dd | 在普通模式下,删除光标所在的一整行。 |
| | yy | 复制光标所在的一整行。 |
| | p | 在光标后粘贴已复制或删除的内容。 |
假设我们要写一个C程序,这是最标准的流程:
bash
# 1. 打开(或创建)文件
vim hello.c
此时你处于普通模式,什么都做不了,先按 i /o/a进入插入模式
bash
// 在插入模式下,输入以下代码
#include <stdio.h>
int main() {
printf("Hello, Linux World!\n");
return 0;
}
输入完成后,按 ESC 键返回普通模式 。然后按 : 进入命令模式 ,输入 wq(write and quit)保存并退出。
如果不知道怎么退出,按
ESC确保在普通模式,然后输入:q!强制退出(不保存修改)如果想直接编译,可以在Vim的命令模式下输入
:!gcc -o hello hello.c并回车
我们需要把它变成机器能懂的可执行文件。GCC是Linux下最标准的编译器。
2.1 编译的四个阶段

步骤1:预处理
bash
gcc -E hello.c -o hello.i或者gcc -E -o hello.i hello.c
可以用 cat hello.i 查看,你会发现 stdio.h 的内容被展开了
步骤2:编译
bash
gcc -S hello.i -o hello.s
生成汇编代码
步骤3:汇编
将汇编代码转换成机器码(二进制),生成目标文件
bash
gcc -c hello.s -o hello.o
# 可以用 file hello.o 查看,它会显示这是一个 relocatable 文件
步骤4:链接
将目标文件和C标准库链接在一起,生成最终的可执行文件
bash
gcc hello.o -o hello
在实际工作中,没人会分四步走,都是用一行命令搞定。但理解了上面的过程,你才能真正明白 -c、-S 这些参数的意义。
ps:监控程序运行的"哨兵"
当你成功编译并运行了程序(例如执行./hello 让它在后台运行如果想查看它是否还在运行,或者想了解它的资源占用情况,就可以使用 ps 命令
ps默认显示在当前终端中、由你运行的进程 ps -ef也是一个常用组合,使用标准语法显示所有进程的完整信息列表
运行 ps -ef || grep hello 可以快速找到你刚编译的 hello 进程。
是通过管道的方式查询的
tar打包与压缩解压
步骤1:创建实验目录
bash
# 创建一个专门用于本次实验的目录
mkdir tar-demo
# 进入这个目录
cd tar-demo
# 显示当前路径,确认我们在正确的位置
pwd
步骤2:创建测试文件
bash
# 创建几个文本文件,用于后续打包
echo "这是第一个文件的内容" > file1.txt
echo "这是第二个文件的内容" > file2.txt
echo "这是第三个文件的内容" > file3.txt
# 创建一个子目录
mkdir documents
# 在子目录中创建文件
echo "这是文档1" > documents/doc1.txt
echo "这是文档2" > documents/doc2.txt
# 查看我们创建的所有文件
ls -l
我们先从最简单的开始:只打包,不压缩,这样我们可以清楚地看到tar命令的每一步输出。
步骤3:执行打包命令
bash
# 将当前目录下的所有文件打包成 archive.tar
# -c: 创建新包
# -v: 显示详细信息(verbose)
# -f: 指定包文件名
tar -cvf archive.tar file1.txt file2.txt file3.txt documents/
查看生成的tar包
bash
# 查看生成的archive.tar文件信息
ls -l archive.tar
查看tar包内部结构
bash
# 使用 -t 参数查看包内容(不解包)
tar -tvf archive.tar
解包
bash
# 将之前创建的archive.tar解包到当前目录
# -x: 解包
# -v: 显示详细信息
# -f: 指定包文件
tar -xvf ../archive.tar
现在我们来演示最常见的场景:打包并用gzip压缩 。我们将看到-z参数如何工作
bash
# 打包并用gzip压缩
# -z: 通过gzip压缩
tar -czvf project.tar.gz file1.txt file2.txt file3.txt documents/
解压 .tar.gz 过程详解
解压 .tar.gz 文件
bash
# 解压 .tar.gz 文件
# -x: 解包
# -z: 通过gzip解压
# -v: 显示详细信息
tar -xzvf ../project.tar.gz
第一步:gzip解压 project.tar.gz,生成临时的tar数据流(在内存中)第二步:tar从这个数据流中解包文件
总结
为了方便大家日常查阅,我把最核心的命令整理成了一张表格。
| 操作目的 | 命令示例 | 关键参数说明 |
|---|---|---|
| 编辑文件 | vim filename.c |
i 插入, :wq 保存退出, :q! 强制退出 |
| 编译C程序 | gcc -Wall -g -o output input.c |
-Wall 警告, -g 调试, -o 输出 |
| 仅编译不链接 | gcc -c file.c |
生成 .o 目标文件 |
| 打包并压缩(gz) | tar -czvf archive.tar.gz dir/ |
c 创建, z gzip, v 显示, f 文件 |
| 解压(gz) | tar -xzvf archive.tar.gz |
x 解压,其他同上 |
| 解压到指定目录 | tar -xzvf archive.tar.gz -C /path/ |
-C 指定目录 |