跳到主要内容
极客日志极客日志
首页博客AI提示词GitHub精选代理工具
搜索
|注册
博客列表
C

Linux 基础开发工具使用指南(上)

Linux 基础开发工具涵盖编辑器 vim、编译器 gcc/g++ 及自动化构建工具 make/Makefile。vim 提供命令、插入和底行三种模式,支持光标控制、文本编辑与查找替换。gcc 编译流程包含预处理、编译、汇编和链接四步,涉及宏定义、条件编译及动静态库机制。make 通过 Makefile 管理依赖关系实现自动化编译,.PHONY 用于处理非文件目标。内容包含各工具的核心命令与典型应用场景。

灰度发布发布于 2026/3/15更新于 2026/4/2511 浏览
Linux 基础开发工具使用指南(上)

壹 Linux 编辑器 - vim 使用

1.1 vim 的基本概念

vim 主要有三种模式,分别是命令模式、插入模式和底行模式。

  • 命令模式:控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入 Insert mode 下,或者到 last line mode。
  • 插入模式:只有在 Insert mode 下,才可以做文字输入,按「ESC」键可回到命令行模式。该模式是我们后面用的最频繁的编辑模式。
  • 底行模式:文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作。在命令模式下,shift+: 即可进入该模式。要查看你的所有模式:打开 vim,底行模式直接输入。

模式的切换:

20b636621cf343909ac119ba9b25b5f3.jpeg

1.2 vim 正常模式命令集

★ 命令前加数字能更快的进行批量操作

1.2.1 插入模式
  • 按「i」进入插入模式「insert mode」从光标当前位置开始输入文件;
  • 按「a」进入插入模式后,是从目前光标所在位置的下一个位置开始输入文字;
  • 按「o」进入插入模式后,是插入新的一行,从行首开始输入文字。
1.2.2 移动光标命令
  • 按「h」、「j」、「k」、「l」:控制光标左、下、上、右移一格;
  • 按[gg]:进入到文本开始;
  • 按[Shift+G]:进入文本末端;
  • 按「$」:移动到光标所在行的行尾;
  • 按「^」:移动到光标所在行的行首;
  • 按「w」:光标跳到下个单词的开头;
  • 按「e」:光标跳到下个单词的字尾;
  • 按「b」:光标回到上个单词的开头。
1.2.3 编辑命令

复制与粘贴与剪切

  • 「yy」:复制光标所在行;
  • 「p」:将缓冲区内的字符贴到光标所在位置;
  • 「dd」:剪切并删除光标所在行;
  • 「x」:剪切并删除光标所在位置后面的一个字符;
  • 「X」:剪切并删除光标所在位置前面的一个字符。

撤销

  • 「u」:撤销历史操作;
  • 「Ctrl+r」:撤销 u 的操作。

一旦退出文件编辑,无法再进行撤销了。没有退出都可以撤销。

替换

  • 「r」:替换光标所在处的字符;
  • 「R」:【替换模式】替换光标所到之处的字符,直到按下「ESC」键为止;
  • 「Shift+~」:小写改大写。

查找

  • 「#」:选中单词;
  • 「n」:批量查找。

批量注释

  • Ctrl+v 进入【V-BLOCK 模式】;
  • (n+) h j k l G 选择要注释行。

c5a1e7f61a1747828df40095145f2add.png

  • Shift+i 进入【插入模式】,输入第一行的 //。

b3d7035bbd58460f95d4ff43174c460d.png

  • Esc 退出【插入模式】。

be3a3cdedb9449c6815f76166361b268.png

  • 完成。

1.3 vim 末行模式命令集

  • 「w」:文件保存;
  • 「q」:退出 vim;
  • 「q!」:强制退出 vim;
  • 「wq」:退出并保存文件;
  • 「set nu」:列出行号;
  • 「!command」:执行命令;
  • 「%s/dst/src/」:批量替换;
  • 「vs 文件」:分屏;
  • 「Ctrl+w」:切换分屏。

贰 Linux 编译器 - gcc/g++ 使用

2.1 gcc 如何完成

gcc [选项] 要编译的文件 [选项] [目标文件]

1. 预处理 (进行宏替换)

  • 预处理功能主要包括宏定义,文件包含,条件编译,去注释等;
  • 预处理指令是以#号开头的代码行;
  • 选项"-E":开始进程程序翻译,预处理完后就停下来;
  • 选项"-o"是指目标文件,".i"文件为已经过预处理的 C 原始程序。
gcc -E hello.c -o hello.i

2. 编译(生成汇编)

  • 在这个阶段中,gcc 首先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查无误后,gcc 把代码翻译成汇编语言;
  • 选项"-S":开始翻译,编译完后就停下来。
gcc -S hello.i -o hello.s

3. 汇编(生成机器可识别代码)

  • 汇编阶段是把编译阶段生成的".s"文件转成目标文件;
  • 读者在此可使用选项"-c"就可看到汇编代码已转化为".o"的二进制目标代码了。
gcc -c hello.s -o hello.o

4. 链接(生成可执行文件或库文件)

  • 在成功编译之后,就进入了链接阶段。
gcc hello.o -o hello

2.2 几个小问题

2.2.1 条件编译

64f95589148d49f08b6918c4a1443f60.png

命令行级别的宏定义:

gcc test.c -o test -DM
gcc test.c -o test -DM=100

预处理的本质就是修改编辑我们的文本代码。

-DM 就是在文本文件中加入 #define M 100 这样的字符串。

条件编译的作用:

  • 软件进行专业度,收费情况进行区分,使用条件编译,可以进行代码动态裁剪;
  • 内核源代码也是采用条件编译进行代码裁剪;
  • 开发工具,应用软件不同平台下的使用。
2.2.2 为什么要编译成汇编文件

程序的发展是从二进制->汇编语言->C 语言->C++/JAVA等。每个阶段都经过了几十年的发展,C 语言出现时汇编语言已经很成熟了,把 C 语言翻译成汇编语言再转换成二进制要比直接翻译成二进制容易得多。

每个语言的发明都要有对应的编译器使他可以翻译成汇编语言,那汇编语言怎么编译成二进制呢?首先在汇编语言出现后,先要发明一个二进制版的编译器,然后用汇编语言写一个汇编编译器,用二进制版的汇编编译器编译一下汇编写的汇编编译器,最后二进制版的就可以不要了,直接用汇编版的进行编译,这就是编译器的自举过程。

2.2.3 动静态库是什么
  • 动态库:Linux (.so) Windows (.dll)
  • 静态库:Linux (.a) Windows (.lib)

库是一套方法或者数据集,为开发提供最基本的保证 (基本接口,功能,加速我们的二次开发)。

Linux 下的 C 语言库为 libc.so 和 libc.a,库的名字为去掉前缀 lib 和后缀.so/.a 后剩余的。

动态库:把动态库内部实现的方法和我们自己的程序链接起来,让我们自己的程序能在库中找到方法,形成可执行程序,动态库在执行库中的方法时需要跳转到库中执行,完了再返回。

根据地址的替换来定位。

动态链接的图示:

250b29f66b11444bbe725fcd5474e1fc.png

3feb156ccfd8409eb6cdbb3ab0a8df1e.jpeg

静态链接就是把库里的实现拷贝一份到我们自己的代码中,用时调用自己这份实现。静态库只有在链接时有用,一旦形成可执行程序,就不需要静态库了。

动静态库对比:

  • 动态库形成的可执行程序体积一定很小;
  • 可执行程序对静态库的依赖度小,动态库不能缺失;
  • 程序运行需要加载到内存,静态链接的会在内存中出现大量的重复代码;
  • 动态链接比较节省内存和磁盘资源。

ldd 命令 - 显示所用库。C 程序默认动态链接

f7161f595c93483f8da743a39b7bb541.png

file 命令 - 具体查看类型

8d7e83ab5b054e34afc998d96e3b9bfc.png

ccb4234c1fe4415dbec9a64a7b8bc351.png

如果想要静态链接:

2d965eb145e54dd9b577a8917fc5c154.png

5fd161a2faf94f65991f1042c78bb8ff.png

静态链接的可执行文件会大很多。 C++ 的情况:

d0f54b2986e94a0dad869b59aca84d80.png

动态库(共享库)的本质就是把语言层面的公共代码在内存中只出现一份。

2.2.4 解决 sudo 报错

fc0b089f32e54c44acd13ca4a54c0b95.png

普通用户在 sudo 时可能会出现以上报错。

解决步骤:

  • su -
  • 输入 root 密码
  • vim /etc/sudoers
  • :wq! 强制退出
  • Ctrl+d 退出 root

找到位置加入:

98854433575f48518a55f13a0d080b68.png

然后就完成了。

f7c7ac5a7f8048aca8c5f3e314149d20.png


叁 Linux 项目自动化构建工具-make/Makefile

3.1 初识 makefile

make 是一条命令,makefile 是一个文件,两个搭配使用,完成项目自动化构建。

makefile 带来的好处就是——'自动化编译',一旦写好,只需要一个 make 命令,整个工程完全自动编译,极大的提高了软件开发的效率。

  • touch Makefile
  • vim Makefile

0f8ec211c677482ca7850b60693e43e7.png

第一行为依赖关系; 第二行为tab + 依赖方法。

42983d7d69bd44b9a04542005f3c078d.png

上图为使用 makefile 的方法。

84b151ed4a914e0ebca5b27b9ccb5883.png

make 命令扫描 makefile 文件的时候,从上向下扫描,默认形成第一个目标文件。

3.2 .PHONY

9c8afb1c510c490287f8f14e3e0250c7.png

93658ee3fca841aebb10ebbdb70448a5.png

.PHONY 修饰的每次编译都执行。(本质上是说忽略判断新旧问题)

而一般来说 gcc 编译的不建议加.PHONY 修饰,如果源文件不改动,编译就不会执行。

58edec2219ba4994a7f7696276bc5fcd.png

Modify 时间是作为知道 bin 和.c 新旧的标准。

4a45a82935814e4a9400f380c8015f68.png

3.3 完整的依赖关系

d8f05deb193a4ed39b56c00f05d01d83.png

644f913b49d84e33972c6e3d11f7534c.png

3.4 makefile 中的写法

测试方法:

f45a44d1a4c94f82b1c83568ef8b49a1.png

**@**符号让 make 不回显。

3.4.1 第一个版本

基于变量版的 Makefile(类似于宏)

dc39e688f7d044ce968c4043e171f77e.png

BIN 和 SRC 也可以优化掉。

fb74a902163942b19c8a5f20122b9ff3.png

69869a2dc7e64ecbb06e5f88f4778cb7.png

3.4.2 第二个版本

05afc1142b0f4b34b0b2772db6769f9d.png

如果有多个文件呢?

e58f79222fd542baa1d06b7919aa6820.png

8e36654e4e054389a75f25c4f97a8c8f.png

3.4.3 最终版本

a4b45792e5bc4384ad4442f25cd938f2.png

1ec65d9f74874f349a43154be1cb55e8.png

8c29e315f6a7448c825cd0b58d091eb9.png

目录

  1. 壹 Linux 编辑器 - vim 使用
  2. 1.1 vim 的基本概念
  3. 1.2 vim 正常模式命令集
  4. 1.2.1 插入模式
  5. 1.2.2 移动光标命令
  6. 1.2.3 编辑命令
  7. 1.3 vim 末行模式命令集
  8. 贰 Linux 编译器 - gcc/g++ 使用
  9. 2.1 gcc 如何完成
  10. 2.2 几个小问题
  11. 2.2.1 条件编译
  12. 2.2.2 为什么要编译成汇编文件
  13. 2.2.3 动静态库是什么
  14. 2.2.4 解决 sudo 报错
  15. 叁 Linux 项目自动化构建工具-make/Makefile
  16. 3.1 初识 makefile
  17. 3.2 .PHONY
  18. 3.3 完整的依赖关系
  19. 3.4 makefile 中的写法
  20. 3.4.1 第一个版本
  21. 3.4.2 第二个版本
  22. 3.4.3 最终版本
  • 💰 8折买阿里云服务器限时8折了解详情
  • 💰 8折买阿里云服务器限时8折购买
  • 🦞 5分钟部署阿里云小龙虾了解详情
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • AI 图像生成指南:从原理到实战
  • 网络安全入门指南:技术方向与学习路线详解
  • Flutter 三方库 vertex_ai 的鸿蒙化适配指南
  • Python 调用 Deepseek API 失败原因及排查指南
  • VoxCPM-1.5-TTS-WEB-UI 基于镜像站的快速部署方案
  • WhisperX 语音识别工具核心优势与应用解析
  • Flutter 在 OpenHarmony 中集成 objectid 实现离线分布式 ID 生成
  • AI Agent 实战:Agent 框架与 7 个核心实例详解
  • 从软件工程视角理解低代码的价值、边界与演进路径
  • 基础算法核心模板指南:快速排序、归并排序与二分查找等
  • Java 智能仿真无人机项目 V4 版本实战
  • Stable Diffusion 低成本部署与使用指南
  • Spring MVC 中 Cookie 与 Session 机制详解
  • C/C++ 算法入门:多状态动态规划与打家劫舍股票问题
  • 从语言模型蒸馏视觉推理能力:基于代码中介的数据合成方法
  • JDK 官方下载归档页面访问指南
  • 前端开发转行渗透测试指南与学习路径
  • Python 在 CentOS 系统上的安装与配置深度指南
  • 基于 Python 与 Spotlight 的拼车司机推荐系统设计
  • 基于MusePublic的Web艺术爬虫开发实战

相关免费在线工具

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online

  • JSON美化和格式化

    将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online