Linux第二节:开发工具全攻略--从编译调试到项目部署

server/2025/3/28 13:08:11/

一、Linux软件包管理利器 - yum

1.1 yum工作原理

yum作为RHEL系Linux的核心包管理器,采用C/S架构:

  • 本地存储元数据缓存
  • 自动解析依赖关系
  • 连接远程仓库获取软件包

常用命令示例:

命令说明示例
yum install安装软件包sudo yum install gcc
yum remove删除软件包sudo yum remove vim
yum update更新软件包sudo yum update
yum search搜索软件包yum search python3
yum list列出可用包yum list installed
yum info查看包信息yum info openssl
yum clean清理缓存yum clean all
yum repolist查看仓库列表yum repolist all

1.2 配置技巧

修改/etc/yum.repos.d/下的.repo文件:

[base]
name=CentOS-$releasever
baseurl=https://mirrors.aliyun.com/centos/$releasever/os/$basearch/
gpgcheck=1
enabled=1

二、高效代码编辑 - Vim终极配置

2.1 模式切换速查表

操作命令模式插入模式底行模式
进入插入模式i/a/o--
返回命令模式ESCESCESC
进入底行模式:--
命令模式
插入模式
底行模式
用户输入
模式判断
执行编辑操作
输入文本到缓冲区
执行扩展命令
刷新屏幕渲染

2.2 推荐.vimrc配置

" 基础设置
set nu                  " 显示行号
syntax on               " 语法高亮
set tabstop=4           " Tab宽度
set autoindent          " 自动缩进" 插件管理(需安装Vundle)
filetype off
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
Plugin 'VundleVim/Vundle.vim'
Plugin 'preservim/nerdtree'
Plugin 'vim-airline/vim-airline'
call vundle#end()
filetype plugin indent on

2.3 常用的 vim 命令

命令模式说明示例
i进入插入模式-
:wq保存并退出-
/text向下搜索文本/main
:n跳转到第n行:15
dd删除当前行-
yy复制当前行-
p粘贴-
u撤销操作-
:set nu显示行号-
:%s/old/new/g全局替换:%s/foo/bar/g

三、GCC编译全过程解析

3.1 四阶段编译流程

预处理
编译
汇编
链接

各阶段示例:

# 预处理(生成.i文件)
gcc -E main.c -o main.i# 生成汇编(.s文件)
gcc -S main.i -o main.s # 生成目标文件(.o)
gcc -c main.s -o main.o# 静态链接
gcc main.o -static -o main_static

3.2 gcc 编译器常用命令

参数说明示例
-E预处理阶段gcc -E main.c -o main.i
-S生成汇编代码gcc -S main.i -o main.s
-c生成目标文件gcc -c main.s -o main.o
-o指定输出文件gcc main.o -o app
-g包含调试信息gcc -g test.c -o debug
-Wall显示所有警告gcc -Wall demo.c
-O2优化级别2gcc -O2 optimize.c
-static静态链接gcc -static hello.c
-I指定头文件路径gcc -I ./include src.c
-l链接库文件gcc -lm math.c

四、调试利器GDB实战

4.1 调试流程示例

调试段错误步骤:

# 编译带调试信息的程序
gcc -g segfault.c -o segfault# 启动调试
gdb ./segfault(gdb) break 15        # 在15行设置断点
(gdb) run             # 运行程序
(gdb) backtrace       # 查看调用栈
(gdb) print *ptr      # 检查指针值
(gdb) x/10x memory    # 查看内存区域

4.2 gdb 调试器常用命令

命令说明示例
gdb [exe]启动调试gdb ./demo
break(b)设置断点b 20b main
run(r)启动程序-
next(n)单步执行(不进入函数)-
step(s)单步进入函数-
print(p)打印变量值p count
backtrace(bt)查看调用栈-
list(l)显示源代码l 10-20
info locals查看局部变量-
continue(c)继续执行到下一个断点-
quit(q)退出调试器-

五、自动化构建 - Makefile精要

5.1 智能Makefile示例

ProgressBar:main.c ProgressBar.cgcc -o ProgressBar main.c ProgressBar.c -DN=1
.PHONY:clean
clean:rm -f ProgressBar

5.2 Makefile常用命令

语法元素说明示例
target: dependencies目标定义app: main.o utils.o
$(CC)预定义变量(编译器)CC = gcc
$@自动变量(目标文件)gcc -o $@ $^
$^自动变量(所有依赖)同上
.PHONY伪目标声明.PHONY: clean
wildcard文件匹配SRC = $(wildcard *.c)
%模式规则%.o : %.c
-include包含其他Makefile-include config.mk
ifeq条件判断ifeq ($(OS),Linux)
@隐藏命令回显@echo "Compiling..."

六、实战:动态进度条程序

详见:实验一、Linux环境下实现进度条小程序:深入解析核心实现与关键技术细节


七、Gitee代码管理速成

常用工作提交(gitee三板斧)

# 初始化仓库
git init# 关联远程仓库
git remote add origin https://gitee.com/user/repo.git# 典型提交流程
git add .
git commit -m "feat: add progress bar"
git push -u origin main# 分支管理
git checkout -b dev
git merge dev
git branch -d dev

八、总结

掌握这些核心工具的使用,将帮助开发者构建完整的Linux开发能力体系。建议通过实际项目不断练习,逐步深入理解各工具的高级用法。收藏文章,可作为日常开发快速参考手册。

使用提示

  1. yum操作需要sudo权限
  2. vim命令区分模式(命令模式/插入模式/底行模式)
  3. gcc编译流程:预处理 -> 编译 -> 汇编 -> 链接
  4. gdb调试需要带-g编译的程序
  5. Makefile缩进必须使用Tab键(不能是空格)

思维导图

Linux开发知识体系
软件管理
代码编辑
编译系统
调试工具
项目构建
实战案例
进阶方向
yum核心功能
软件安装
依赖管理
仓库配置
Vim三模式
命令模式
插入模式
底行模式
高效配置
快捷键映射
插件体系
语法高亮
GCC编译流程
预处理
编译
汇编
链接
构建参数
调试信息
优化级别
静态链接
GDB核心功能
断点管理
执行控制
内存调试
调试技巧
段错误分析
多线程调试
性能分析
Makefile核心
目标依赖
自动变量
模式规则
构建策略
增量编译
多目录管理
条件编译
进度条实现
终端控制
动态刷新
时间统计
代码管理
Git工作流
分支策略
CI/CD
性能优化
性能分析
缓存优化
指令级优化
系统开发
内核模块
驱动开发
系统调用

http://www.ppmy.cn/server/179009.html

相关文章

flutter 开发web端的性能优化

参考资料 Flutter for Web 首次首屏优化 ——JS 分片优化_main.dart.js-CSDN博客文章浏览阅读1.4k次。本文介绍了如何通过延迟加载组件和js分片优化Flutter for Web应用的加载速度。在实践中,通过按需加载减少js文件大小,使用并行加载提升加载效率。通过…

网络安全工程师逆元计算 网络安全逆向

中职网络安全逆向题目整理合集 逆向分析:PE01.exe算法破解:flag0072算法破解:flag0073算法破解:CrackMe.exe远程代码执行渗透测试天津逆向re1 re22023江苏省re12023年江苏省赛re2_easygo.exe2022天津市PWN 逆向分析:P…

什么是网络准入?十种常见的网络准入解决方案分享!

在数字化转型的浪潮中,企业网络的边界日益模糊,数据安全与访问控制成为了企业IT管理的核心挑战之一。OneNAC网络准入系统,作为新一代网络安全解决方案的佼佼者,凭借其强大的功能特性和灵活性,在众多网络准入控制&#…

ngx_http_conf_port_t

定义在 src\http\ngx_http_core_module.h typedef struct {ngx_int_t family;in_port_t port;ngx_array_t addrs; /* array of ngx_http_conf_addr_t */ } ngx_http_conf_port_t; 该结构体用于在 Nginx 配置阶段存储 监…

【智能搜索引擎技术】第四章搜索引擎索引构建(水课复习自用)

一、倒排索引基础与结构 1.定义 倒排索引(Inverted Index)是搜索引擎的核心数据结构,主要用于记录文档集中单词与文档之间的映射关系。它的设计目的是为了提高搜索效率,使得搜索引擎能够快速定位包含用户查询词的文档&#xff0…

【嵌入式学习2】内存管理

## C语言编译过程 预处理:宏定义展开、头文件展开、条件编译,这里并不会检查语法,将#include #define这些头文件内容插入到源码中 gcc -E main.c -o main.i 编译:检查语法,将预处理后文件编译生成汇编文件&#xff…

【2025】基于springboot+vue的校园创新创业竞赛平台设计与实现(源码、万字文档、图文修改、调试答疑)

基于 Spring Boot Vue 的校园创新创业竞赛平台设计与实现 系统功能结构图如下: 一、课题背景 在当今时代,创新创业已成为推动社会发展的重要动力。校园创新创业竞赛作为培养大学生创新思维和创业实践能力的重要途径,受到了越来越多高校的重…

【Linux学习笔记】gcc编辑器和动静态库的深度剖析

【Linux学习笔记】gcc编辑器和动静态库的深度剖析 🔥个人主页:大白的编程日记 🔥专栏:Linux学习笔记 文章目录 【Linux学习笔记】gcc编辑器和动静态库的深度剖析前言一. 编译器gcc/g1.1背景知识1.2gcc编译选项1-2-1预处理(进行宏…