Linux开发工具

一、软件包管理器yum

linux中安装软件

1,源码安装

2,软件安装----rpm

程序之间存在依赖---->缺失,版本兼容性

3,包管理器yum(centos) apt/apy-get(ubuntu)

a、网络下载

b、安装(就是拷贝)----->必须使用root权限----->安装到系统里,只要安装一次,任何人都能使用

且会自动解决包的依赖问题!

什么是包管理器?

类似于我们手机上的应用商店

Linux上的软件由谁提供的?

如何去评估一款操作系统的好坏:内核版本,社区,文档,人群,问题(即生态)

一款操作系统背后的配置软件算不算生态的一环?属于,互相成就。

如何理解这个过程?

开源:本质是一种商业模式

我们直接镜像国外的社区,更改下载链接,切换镜像源

下载需要确保联网情况下,但是服务器不用考虑

yum list | grep lrzsz 查

sudo yum install lrzsz 安装

sudo yum remove lrzsz 删

添加man指令

sudo yum -y install man-pages

/etc/yum.repos.d/* (yum源配置文件)

base----- 稳定软件

epel------- 扩展软件源 根据需求安装

二、vim的使用

是一款编辑器

1.见一见vim

shift+;或ZZ 退出

由于我这还没有配置vim所以敲代码没有敲完整,没有自动缩进,难受

2.vim的多模式

vim是一种多模式的编辑器

3.命令模式,底行模式等

set nu 用于设置行号

快速编辑

gg:快速回到最开始

shift+g=G:快速定位结尾

n+shift+g:定位到n行

shift+$:定位到行结尾

shift+^:定位到行开头

h:左

j:下

k:上

l:右(都可统一带数字hjkl)

yy:复制

p:粘贴

这里着重说一下,从今天起要创建一个自己的用户,不再用root,用root是一个不好习惯,会隐藏掉一些潜在问题啊(权限高)

w:单词为单位,向后移动

b:单词为单位,向前移动

yy:复制当前行

p:光标所在位置粘贴(这俩前面可加n)

u:撤销历史操作

ctrl+r:撤销u操作(这两个,一旦退出文件编辑,无法再进行撤销了,但是只是保存没有进行q退出,可以撤销)

dd:剪切当前行,或者删除(以行为单位)

p:同上(这俩前面可加n)

(n)x:删除光标所在的位置(删右)

(n)shift+x:光标右侧不动,左侧删除(删左)

r:替换光标所在字符,r---->目标字符

shift+r:批量化替换

shift+~:大小写切换

shift+3 == #: 选中单词

n:逆向查找

底行命令

w:保存

q:退出

wq:保存并退出

ZZ:退出

!:强制

set nonu:取消行号

set nu:设置行号

!command:在不退出的情况下执行命令

%s/dst/src:将前者换成后者

:vs new_src:分屏(vs code.c)

使用vim小技巧

vim src +n:打开时光标定位到n行

!v:会自动执行我们最近执行的vim操作

vim文件名->wq->会自动生成

4.vim配置、

前提一定是普通账号

然后就会有自动缩进

改缩进(vim 。vimrc)

改成4即可

三、gcc/g++的使用

-ESc

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

$gcc -E code.c -o code.i

-E 开始进程序翻译,在预处理做完的时候,就停下来

2.编译(变成汇编)

gcc -S code.i -o code.s

-S 开始翻译,翻译做完了就停下来

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

-c 开始翻译,汇编完成就停下来

.o 可重定位目标,已经是二进制文件,我们的源文件中,会包含很多的库方法(.iso)

4、连接(生成可执行文件或库文件)

条件编译的用途?

a、内核源代码也是采用条件编译进行代码裁剪

b、软件进行专业度,收费情况进行区分,使用条件编译可以进行代码动态裁剪

c、开发工具,应用软件

如何理解条件编译?

gcc code.c -o code -DM

gcc code.c -o code -DM=100

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

编译过程的语言的自举过程?

开始用二进制版汇编语言-->编译器,编译汇编语言,最后形成汇编语言编译器

为什么进行c/c++编译?

开关

打孔编程

汇编语言(c语言) 最终的二进制

库可分成两类

a、动态库: Linux(.so) windows(.dll)

b、静态库:Linux(.a) windows(.lib)

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

libc.so libc.a

"c"用库中真实名字

动态库内部实现方法

我们自己的程序,会使用库中的方法 ---->两者链接起来------->形成可执行程序(让我们自己的程序能在库中找到方法,执行目标方法,需要跳转到库中执行完了,再返回)

让我的程序找库中方法发地址

而静态库是直接拷贝过来

库有缺点:被多个程序共享,一旦缺失会导致所有程序无法执行

静态链接:把我们程序中使用库的方法拷贝给自己,静态库只有在链接的时候有用,一旦形成可执行程序,静态库可不再需要。

两者进行对比:1.动态库形成的可执行程序体积小

2.可执行程序对静态库依赖小,动态库不能缺失

3.程序运行,需要加载到内存,静态库链接的会再内存中出现大量的重复代码

4.动态链接,比较节省内存和磁盘资源

相关推荐
大熊背2 小时前
ISP离线模式应用(二)-如何利用 ISP 离线模式 加速 3DNR 收敛
linux·算法·rtos·isp pipeline·3dnr
岁岁种桃花儿2 小时前
AI超级智能开发系列从入门到上天第十篇:SpringAI+云知识库服务
linux·运维·数据库·人工智能·oracle·llm
小陈工2 小时前
2026年3月24日技术资讯洞察:边缘AI商业化,Java26正式发布与开源大模型成本革命
java·运维·开发语言·人工智能·python·容器·开源
AttaGain2 小时前
【Ubuntu配置VLAN网络】
linux·网络·ubuntu
ljh5746491193 小时前
Linux find命令
linux·运维·chrome
东方不败之鸭梨的测试笔记3 小时前
基于RF自动化重跑
运维·自动化
纪伊路上盛名在3 小时前
Zerotier-Tailscale 自动化监控
linux·运维·自动化·内网穿透
无忧智库3 小时前
大型能源集团的数字中枢:EA框架如何驱动ERP系统从“流程自动化”迈向“智能决策”(PPT)
运维·自动化·能源
我不是程序猿儿3 小时前
【嵌入式】适合 STM32 初学者BootLoader 入门学习心得
linux·stm32·单片机·嵌入式硬件·学习