linux.3 基础开发工具

本文详细介绍了Linux下的软件包管理器yum的使用,文本编辑器vim的基本操作与配置,程序编译器gcc的编译与链接,程序调试器gdb的实战技巧,以及项目自动化构建工具make/makefile的应用。涵盖了依赖管理、代码编辑、编译构建与调试的关键知识点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.Linux软件包管理器yum

1.1 什么是yum

在Linux下如何安装软件呢?
1. 源码安装
2. rpm安装包(会有依赖关系的问题,兼容性等)
3. yum安装(依赖关系已经处理好了)

所以一般情况下使用yum是最简单的安装方式。只要是安装软件,都要进行下载和安装两个过程,那么我们的机器是从哪里获取的安装包呢?yum是由yum软件服务器的,其中有着各种软件安装包的集合,我们如果需要,只需要将安装包下载到本地再进行安装。
在这里插入图片描述

yum其实是相当于Linux上的应用市场,是一个包管理器,解决了下载、解决依赖关系、安装、卸载的问题。yum其实在Linux上相当于一个客户端(client)(向服务器索取服务是客户端,自己提供服务是服务端)。所以使用yum是需要联网的,可以使用ping来检查是否联网
在这里插入图片描述
那么client是怎么知道包服务器在哪里的呢?其实client已经配置了目的服务器,以及目的服务器的软件源信息

软件源信息(配置文件):
在这里插入图片描述
在这里插入图片描述
yum去哪里下载(yum源存放地点):
Base:官方的标准源
Epel:非官方的扩展源

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

如果yum源是国外的网站的话,下载的速度可能会让人头疼,这时候就有必要去配置国内的yum源 CentOS 7 配置国内yum源 记得在更改之前要对原来的进行备份
在这里插入图片描述

1.2 yum的使用

那么yum该如何使用?我们试着来安装 sl ( sudo yum install ) :会在服务器中进行查找,匹配到之后,会进行确认,再进行下载安装。如果不希望系统进行询问确认,可以 sudo yum install -y
为什么 yum 前最好要加 sudo :在用yum 将安装包下载到本地之后,是需要把安装包拷贝到系统中的指定目录下的,卸载时是需要移除指定目录的文件,而系统中的有些目录是不允许往里面拷贝或者移除的,这时候就需要提高权限 。CentOS在任何时刻只能允许一个 yum 运行
在这里插入图片描述
在这里插入图片描述

然后我们再来卸载 sl ( sudo yum remove )
在这里插入图片描述
在这里插入图片描述

安装扩展源:标准的软件包放在yum服务器上,但是某些非标准的软件包是放在扩展服务上的,所以我们需要安装扩展源来供我们使用
在这里插入图片描述

通过 yum list 命令可以罗列出当前一共有哪些软件包. 由于包的数目可能非常之多, 这里我们需要使用 grep 命令只筛选出我们关注的包。关于 lrzsz :这个工具用于 windows 机器和远端的 Linux 机器通过 XShell 传输文件。安装完毕之后可以通过拖拽的方式将文件上传过去。例如:
在这里插入图片描述在这里插入图片描述

rz -E :从windows传文件到Linux
sz 文件名 :从Linux传文件到windows
在这里插入图片描述
在这里插入图片描述

2. Linux文本编辑器vim

vi/vim的区别简单点来说,它们都是多模式编辑器,不同的是vim是vi的升级版本,它不仅兼容vi的所有指令,而且还有一些新的特性在里面。例如语法加亮,可视化操作不仅可以在终端运行,也可以运行于x window、 mac os、 windows。

2.1 vim的基本概念

vim解决的是代码编写的问题,本质是多模式的文本编辑器,vim的三种模式(其实有好多模式,目前掌握这3种即可),分别是命令模式(command mode)、插入模式(Insert mode)和底行模式(last line mode),各模式的功能区分如下:
在这里插入图片描述

2.2 vim基本操作与命令模式命令集

基本操作

在这里插入图片描述

退出vim及保存文件,在[正常模式]下,按一下「:」冒号键进入「Last line mode」,例如:
:w (保存当前文件)
:wq (输入「wq」,存盘并退出vim)
:q! (输入q!,不存盘强制退出vim)

命令模式命令集:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

2.3 底行模式命令集

在这里插入图片描述
在这里插入图片描述

在底行模式下,!后跟指令就可以不退出vim来运行指令
在这里插入图片描述

vs filename :分屏
在这里插入图片描述在这里插入图片描述
ctrl + ww :在多屏幕下进行切换

2.4 简单的vim配置

配置文件的位置
在这里插入图片描述在这里插入图片描述

常用配置选项
在这里插入图片描述CentOS 7 下的 vim 配置
VimForCpp
在这里插入图片描述
在这里插入图片描述

3. Linux程序编译器gcc

gcc选项:
在这里插入图片描述

3.1 gcc如何完成

预处理:头文件展开,去注释,宏替换,条件编译
在这里插入图片描述观察 test.c 和 test.i 中的文件有什么不同
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

若 test.c 文件里没有写宏,还可以在 gcc 时动态指定宏:
在这里插入图片描述

编译(生成汇编):
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

汇编(生成机器可识别码):
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

链接(生成可执行文件或者库文件):
在这里插入图片描述目标文件,只有函数的调用,没有函数的实现,链接过程的本质是将自己的调用过程和具体的实现过程关联起来

在这里插入图片描述

3.2 函数库(动态库与静态库)

函数库的概念:
为什么要有库:减少当前的工作量,也是软件分工的一种表现。
在这里插入图片描述我们可以使用 ldd 来查看一个可执行程序所依赖的库
在这里插入图片描述

.so 动态库
.a 静态库
c 是当前的库名称

函数库一般分动态库和静态库两种(去网吧上网和在家上网的例子):
在这里插入图片描述

gcc生成可执行程序,默认是动态链接的
在这里插入图片描述

如果我们不想使用默认的动态链接,想使用静态链接,我们可以在 gcc 文件后 -static (注意:在新版本的linux 系统下安装 glibc-devel、glibc和gcc-c++时,都不会安装libc.a. 只安装libc.so. 所以当使用-static时,libc.a不能使用。只能报找不到libc了,需要sudo yum install glibc-static,安装glibc-static),可见,动静态链接出来的可执行文件的大小差异甚大。
在这里插入图片描述

动静态库的优缺点:
动态链接:
优点:省空间(磁盘的空间,内存的空间),可执行程序体积小,加载速度快
缺点:依赖动态库,程序可移植性较差
静态链接:
优点:不依赖第三方库,程序的运行可移植性较好
缺点:浪费空间,加载速度慢

4. Linux程序调试器gdb

在这里插入图片描述

4.1 使用gdb之前

CentOS 7 gcc 中默认生成的可执行程序时release版本的,是不可以被调试的(debug版本加入了调试信息,release版本没有)要使用gdb时,一定要在源代码生成二进制程序的时候加上-g选项。可见,增加了调试信息的可执行文件要比没有添加调试信息的可执行文件大。
在这里插入图片描述
确实添加了调试信息

可见,Linux默认发布的可执行程序是动态链接且release方式的,可使用 -static 和 -g 来调整可执行程序的发布方式。

4.2 gdb的使用

在这里插入图片描述在这里插入图片描述

在这里插入图片描述

1.list ( l ) 显示程序
在这里插入图片描述

简写 l ,会从合适的位置开始显示,如果想从第一行开始显示 l -1 ,继续 l ,就会继续往下显示
在这里插入图片描述

2.run ( r ) 运行程序
在这里插入图片描述

3.breakpoint ( b ) 打断点
b n :在 n 行处打断点
在这里插入图片描述

b 函数名 :在函数的第一行位置打断点
在这里插入图片描述

info b :查看断点
在这里插入图片描述

d 断点编号:删除断点(不是行号)
在这里插入图片描述

4.p 查看变量
在这里插入图片描述

5.next ( n ) 逐过程调试

在这里插入图片描述

此时说明, next 并不会进入函数
在这里插入图片描述

6.step ( s ) 逐语句调试
step 可以调试进入函数
在这里插入图片描述

7.display/undispaly 变量常显示/取消变量常显示

在这里插入图片描述

取消常显示 undisplay 序号 (不是变量名)
在这里插入图片描述

8.until 跳到任意行
在这里插入图片描述

9.finish 直接运行完毕对应的函数
在这里插入图片描述

10.continue ( c ) 直接运行到下一个断点处
在这里插入图片描述

11.set var 设置变量的值
在这里插入图片描述
12.bt 查看调用栈
在这里插入图片描述

5. Linux项目自动化构建工具make / makefile

在这里插入图片描述

当有多文件的项目时,建议将每一个文件先生成目标文件,再根据需要去链接,这样更加灵活,如果对其中一个文件进行修改,则只需要重新生成这个目标文件即可,维护的成本就减小了。

在这里插入图片描述

5.1 依赖关系和依赖方法

我们想要用 test.c 生成可执行程序 testout ,其中的依赖关系就是:

testout : test.o main.o ( testout 依赖 test.o 和 main.o 而生成)
test.o : test.s ( test.o 依赖 test.s 而生成)
test.s : test.i ( test.s 依赖 test.i 而生成)
test.i : test.c ( test.i 依赖 test.c 而生成)

main.o : main.s (main.o 依赖 main.s 而生成)
main.s : main.i (main.s 依赖 main.i 而生成)
main.i : main.c (main.i 依赖 main.c 而生成)

光光有依赖关系它们之间是不能够转化的,这时候需要依赖方法:

gcc -E test.c -o test.i
gcc -S test.i -o test.s
gcc -c test.s -o test.o

gcc -E main.c -o main.i
gcc -S main.i -o main.s
gcc -c main.s -o main.o

gcc main.o test.o -o testout

5.2 makefile的创建

在这里插入图片描述

当我们创建了makefile ,我们就需要把文件的依赖关系和依赖方法写入(注意:依赖方法一行的开头有一个制表符TAB):
在这里插入图片描述

另外,我们还可以用一些符号去表示它们之间的关系:
$@ : 依赖关系中的目标文件
$^ :依赖关系中的依赖文件列表
$< :依赖关系中的一个一个的依赖文件

在这里插入图片描述

当然我们创建了文件,也要能够删除文件,其中.PHONY代表伪目标(依赖关系总是被执行的)
在这里插入图片描述

如果我们要在一个makefile里生成多个可执行文件,因为make操作的是 makefile从上往下扫描的第一个文件,所以当我们写了两个可执行程序时,只会执行从上往下数的第一个,所以我们得创建一个新的伪目标
在这里插入图片描述

5.3 makefile的使用

在这里插入图片描述
在这里插入图片描述

5.4 小程序:打印进度条

在这里插入图片描述

6. git代码管理

复制 git 的URL ,进行 git clone URL,这时系统上会生成一个新的本地目录,这就是 git 在本地的管理目录,然后将要上传的文件或者目录复制到该目录下,然后进行 git 三部曲:
git add .(或者文件名)
git comment -m '提交日志’
git push (vs下 girt push origin master)

如何理解git & github & gitee:

版本控制(保留所有版本,应付大多数情况)
分支管理
多人协作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

RanieMiss

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值