个人主页:仍有未知等待探索-CSDN博客
专题分栏:Linux
目录
2、为什么makefile对最新的可执行程序,默认不想重新形成呢?
一、yum(软件包管理器)
Linux中软件包可能会有依赖关系——yum会帮助我们解决依赖关系的问题。
1、什么是软件包?
可以理解成windows上的安装程序。(在Linux上安装软件,通常上是下载到程序的源代码,然后
进行编译得到可执行程序。为了方便,会将一些软件提前进行编译好,然后做成一个软件包放在服
务器上,通过软件包管理器直接获得这个软件包,直接安装)
2、什么是yum?
yum是一个软件下载管理的客户端。(类似于小米应用商城、华为应用商城...)
3、软件包管理器和软件包之间的关系
就相当于是 软件 和 应用商店 之间的关系。
4、Linux系统(Centos)的生态
1、Linux中安装方式
源代码安装、rpm包安装、yum安装
2、 如何明确某款软件的软件包放在哪个服务器上
我的机器内一定内置了目标服务器的地址链接。
5、yum的相关操作
- yum list(罗列出所有的软件)
- yum list | grep XXX(罗列出与XXX相关的软件)
- yum install [-y] XXX 下载(sudo提权,或者root)
- yum remove [-y] XXX删除(sudo提权,或者root)
- sudo yum -y install -y epel-release ------ 下载扩展软件源
yum 提供软件源:base,基本软件源,很稳定;epel,扩展软件源
6、yum本地配置
yum会根据/etc/yum.repos.d/该路径下面的配置文件,来构成自己的下载链接(根据os版本、要下载的软件),yum帮助我们下载安装。
一般而言,centos的服务器的下载链接指向的都是国外的centos官网。我们可以通过配置,将下载链接改成国内的镜像源。
二、vim(编辑器)
vim是一款编辑器(多模式)
1、vim的基本概念
vim刚打开的默认模式是命令模式。
- 命令模式
控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insert mode下,或者到 last line mode
- 插入模式
只有在Insert mode下,才可以做文字输入,按「ESC」键可回到命令行模式。该模式是我们后面用的最频繁的编辑模式。
- 底行模式
文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作。 在命令模式下,shift+: 即可进入该模式。要查看你的所有模式:打开vim,底行模式直接输入:help vim-modes
2、vim操作
1、进入vim
vim filename
2、切换至插入模式
输入 i
3、切换至命令模式
Esc
4、切换至底行模式
shift + ‘;’ 其实就是 [ :](冒号)
5、退出vim及保存文件
在底行模式下
- :w(保存当前文件)
- :wq(存盘并退出vim)
- :q!(不存盘,强制退出vim)
3、命令模式命令集
1、移动光标
- 「h、j、k、l」:光标的左下上右移动一格
- 「gg」:直接移动到文本的开头
- 「G」:直接移动到文本的结尾
- 「^」:移动到光标所在行的行首
- 「$」:移动到光标所在行的行尾
- 「b」:向前移动一次,以单词为单位
- 「w」:(小写)向后移动一次,以单词为单位
2、删除文字
- 「X」:(大写)删除光标所在位置的前一个字符。
- 「x」:(小写)删除光标所在位置的一个字符。
- 「n + X」:(大写)删除光标的前n个字符(不包括光标所在位置)
- 「n + x」:(小写)删除光标的后n个字符(包括光标所在位置)
- 「dd」:删除光标所在行
- 「n + dd」:删除光标所在行之后的n行(包括光标所在行)
3、复制
- 「yy」:复制光标所在行
- 「n + yy」:复制光标所在行 n 次
- 「p」:(小写)粘贴到光标所在行的下一行
- 「n + p」:(小写)粘贴到光标所在行的下一行,连续粘贴 n 次
4、替换
- 「r」:替换光标所在处的字符
- 「R」:一直进行字符替换,直到按下Esc结束
- 「n + r」:对光标指定位置 ,进行n个字符替换
5、撤销
- 「u」:撤销
- 「Ctrl + r」:撤销的恢复
6、跳转到指定行
- 「n + G」:光标到文本的第n行
4、底行模式命令集
「set nu(nonu)」:列出行号(去掉)
「n」:跳转到第 n 行
「/c」:查找字符 c,如果第一次找的关键字不是您想要的,可以一直按「n」会往后
「w」:保存文件
「q(q!)」:退出vim(强制退出),不保存
「wq(wq!)」:退出vim(强制退出),保存
「Ctrl + w + w」:文件间跳转
「Ctrl + v 」:批量化去注释(先选中、在 d 删除)
三、make/Makefile
Makefile是一个用来自动化编译的工具。在一个大型的工程中,有很多的文件,这时候就需要用到Makefile通过工程的编译规则(那些文件先编译。那些文件后编译等等)来对这些文件进行编译。
make是一个命令
Makefile是一个文件
make 会根据文件中的依赖关系,进行自动推导,帮助我们执行所有相关的依赖方法
1、怎么写?
依赖关系+依赖方法
2、为什么makefile对最新的可执行程序,默认不想重新形成呢?
提高编译的效率。
3、Makefile怎么知道我的文件需要被编译了
对比可执行文件的最新修改时间和源文件的最新修改时间
4、换行/回车
‘\n’ -> 回车 + 换行
‘\r’ -> 回车
5、缓冲区
程序结束的时候,一般要自动冲刷缓冲区。
什么时候冲刷缓冲区:1.‘\n’ 2、缓冲区满了 3、fflush(stdout)
四、gcc/g++(编译器)
1、链接
1、是什么?
是我们的程序和标准库进行结合的过程。
ldd + 可执行文件:显示动态库。
(标准库文件后缀)
Linux:动态库:.so 静态库: .a
windows:动:.dll 静:.lib
2、为什么?
a。让开发站在巨人的肩膀上
b。提高开发效率
3、怎么办?
Linux:
动态库:.so
静态库: .a
连接时,两种连接方式:动态链接,静态链接。
在编译期间:编译器会告知你目标库(动态库)的地址:动态链接。
动态链接共享动态库,但是一旦动态库缺失,所有的动态链接这个库的程序,都无法执行。
在编译期间,把库中的方法,拷贝到我自己的可执行程序中(不在关心任何库):静态链接。
关于动态库和静态库的类比例子:
动态库:去网吧上网。(共享的电脑)
静态库:在自己家上网。(私人的电脑)
C动态库,默认提供的,gcc默认形成的可执行程序,默认采用动态链接。
动态库&&动态库的优缺点:
1、不能丢失
2、节省资源
静态库&&静态库的优缺点:
1、一旦形成,和库无关
2、浪费资源
(默认情况下,Linux上,一般静态库都没有安装)
静态链接的应用场景???
- 简化部署 :当你需要将应用程序部署到多个不同的环境中,且无法确保这些环境具备所需的所有依赖库时,静态链接可以简化部署过程,因为你只需要分发一个包含所有必需功能的单一可执行文件。
- 独立应用 :对于那些需要在没有安装任何额外库的“裸机”
- 兼容性保持 :在需要确保长时间稳定运行,且不受系统库更新影响的场景下,静态链接可以保持应用程序的稳定性和一致性。
五、git
对代码进行版本控制,分支控制等的工具。
1、安装
1、安装git:yum install git
2、本地仓库和gitte仓库同步
git clone +仓库链接
这个仓库链接就是仓库的HTTPS链接。
3、git的提交
1、先将想提交的文件或文件夹添加到仓库中
2、git add .(提交当前目录下的所有文件)或者git add filename/(提交某个文件)。提交到git本地仓库的暂存区。
3、git commit -m "日志"
// -m后面的是日志,不能胡写。提交到git本地仓库。
4、git push 默认要输入用户名和密码(可以配置文件,省略用户名密码。但是不建议)。同步到云端。
4、git的删除
1、git rm filename
2、git add
3、git commit -m “日志”
4、git push
5、git的其他知识
git log:查看日志
.gitignore:忽略某个后缀文件的文件。(在提交到本地仓库暂存区时就会对某个文件进行忽略)最好在仓库里添加这个文件,这个文件可以去网上自己找找。
六、gdb(调试)
debug:编译器形成可执行程序的时候会给可执行程序添加了调试信息。
release:发行版本,不可进行调试。
gcc/g++默认的编译,采用release模式。(gcc是编译C语言,g++是编译C++)
gcc/g++用debug模式编译,多加 -g 选项。
gcc test.c -o test.exe (将test.c进行编译,编译完的信息放在text.exe文件中,release版本)
gcc test.c -o test.exe -g(debug版本)
1、基本操作
1、启动gdb:gdb + 有调试信息的可执行程序。
2、退出gdb:quit(可以简写成 q )。
3、查看源代码:list(可以简写成 l )。后面加上 (文件名:行号/函数名) | (行号/函数名),表示从哪行开始查看。(默认显示10行)
4、运行程序:run(简称 r )
5、打断点:(breakpoint)b + 行号。给某一行打断点。
6、查看断点:info b(可以写成 i b)
查看当前战争的局部变量:info i(locals)
7、去掉断点:d + 断点编号。
8、禁用断点:disable + 断点编号。
9、使能断点(把禁用断点打开):enable + 断点编号。
10、逐过程:next/n F10
11、逐语句:step/s F11
12、查看变量/地址:print/p
13、常显示:display 变量名和&(变量)
14、取消常显示:undisplay 编号
15、运行到下一个断点处:continue/c
16、运行结束所在函数:finish
17、跳转到指定行:util
18、动态修改变量的值:set var
19、查看调用栈:bt