linux vim及ps到tar包的详解


前言

在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 指定目录
相关推荐
qzhqbb1 小时前
OpenClaw(系统服务模式与独立进程模式)
linux·人工智能
linux修理工1 小时前
vi/vim 基本操作指南
运维·服务器
红牛vc1 小时前
Centos 7.9openssl 升级报错和python3版本安装
linux·运维·centos
高梦轩1 小时前
Linux系统安全
linux
Lsir10110_1 小时前
【Linux】网络基础——协议与网络传输基本原理
运维·服务器·网络
白云偷星子2 小时前
云原生笔记6
linux·运维·笔记·mysql·云原生
YuQiao03032 小时前
Ubuntu怎么弄得像windows:Dash to Panel
linux·ubuntu·dash
刚入坑的新人编程2 小时前
Linux-git的使用
linux·服务器·git
玖剹2 小时前
gitee在Linux下的使用
linux·运维·gitee