一、软件包管理器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.动态链接,比较节省内存和磁盘资源