目录

Linux-基础开发工具

Linux-基础开发工具

1.软件包管理器

1.1什么是软件包

• 在Linux下安装软件, ⼀个通常的办法是下载到程序的源代码, 并进⾏编译, 得到可执⾏程序.

• 但是这样太⿇烦了, 于是有些⼈把⼀些常⽤的软件提前编译好, 做成软件包(可以理解成windows上

的安装程序)放在⼀个服务器上, 通过包管理器可以很⽅便的获取到这个编译好的软件包, 直接进⾏安装.

• 软件包和软件包管理器, 就好⽐ “App” 和 “应⽤商店” 这样的关系.

• yum(Yellow dog Updater, Modified)是Linux下⾮常常⽤的⼀种包管理器. 主要应⽤在Fedora,

RedHat, Centos等发⾏版上.

• Ubuntu:主要使⽤apt(Advanced Package Tool)作为其包管理器。apt同样提供了⾃动解决依

赖关系、下载和安装软件包的功能。

1.2Linux软件生态

• Linux下载软件的过程(Ubuntu、Centos、other)

https://i-blog.csdnimg.cn/direct/5909bbfd19354754a2503e80f46c00b2.png

• 操作系统的好坏评估— ⽣态问题

https://i-blog.csdnimg.cn/direct/6474962a13044d999db19701d04e49df.png

• 为什么会有⼈免费特定社区提供软件,还发布?还提供云服务器让你下载?

https://i-blog.csdnimg.cn/direct/1f3a1fd3e71a452a966f947b8fbf1223.png

• 软件包依赖的问题

https://i-blog.csdnimg.cn/direct/f93e0355c0a34fe09860cac46ab5b3aa.png

• 国内镜像源

https://i-blog.csdnimg.cn/direct/974116fd0e514cc099550c3d15900825.png

以下是⼀些国内Linux软件安装源的官⽅链接[由⽂⼼⼀⾔⽣成]:

  1. 阿⾥云官⽅镜像站

◦ 官⽅链接:https://developer.aliyun.com/mirror/

◦ 阿⾥云提供了丰富的Linux发⾏版镜像,包括CentOS、Ubuntu、Debian等,⽤⼾可

以通过该镜像站快速下载和更新软件包。

  1. 清华⼤学开源软件镜像站

◦ 官⽅链接:https://mirrors.tuna.tsinghua.edu.cn/

◦ 清华⼤学镜像站提供了多种Linux发⾏版的镜像,以及Python、Perl、Ruby等编程语

⾔的扩展包。该镜像站还提供了丰富的⽂档和教程,帮助⽤⼾更好地使⽤这些软件

包。

  1. 中国科学技术⼤学开源镜像站

◦ 官⽅链接:http://mirrors.ustc.edu.cn/

◦ 中科⼤镜像站提供了多种Linux发⾏版的镜像,以及常⽤的编程语⾔和开发⼯具。⽤⼾

可以通过该镜像站⽅便地获取所需的软件包和⼯具。

  1. 北京交通⼤学⾃由与开源软件镜像站

◦ 官⽅链接:https://mirror.bjtu.edu.cn/

◦ 北交⼤镜像站提供了多种Linux发⾏版的镜像,以及相关的软件仓库和⼯具。该镜像站

还提供了详细的⽂档和指南,帮助⽤⼾配置和使⽤这些软件源。

  1. 中国科学院软件研究所镜像站(ISCAS)

◦ 官⽅链接:http://mirror.iscas.ac.cn/

◦ ISCAS镜像站提供了多种Linux发⾏版、编程语⾔和开发⼯具的镜像。⽤⼾可以通过该

镜像站快速获取所需的软件包和更新。

  1. 上海交通⼤学开源镜像站

◦ 官⽅链接:https://ftp.sjtu.edu.cn/

◦ 上海交⼤镜像站提供了丰富的Linux软件资源,包括多种发⾏版的镜像和软件仓库。⽤

⼾可以通过该镜像站⽅便地下载和安装所需的软件包。

  1. ⽹易开源镜像站

◦ 官⽅链接:http://mirrors.163.com/

◦ ⽹易镜像站提供了多种Linux发⾏版的镜像,以及相关的软件仓库和⼯具。该镜像站还

提供了便捷的搜索功能,帮助⽤⼾快速找到所需的软件包。

此外,还有⼀些其他的国内镜像源,如搜狐开源镜像站等,但可能由于时间变化或政策调

整,部分镜像站的链接或状态可能有所变动。因此,建议⽤⼾在使⽤前访问官⽅⽹站或咨询

相关社区以获取最新的信息和帮助。

https://i-blog.csdnimg.cn/direct/bf179d24bf85446bbcec778ed092d5ef.png

1.3具体操作

1.3.1查看软件包

通过 yum list 命令可以罗列出当前⼀共有哪些软件包. 由于包的数⽬可能⾮常之多, 这⾥我们需要使⽤grep 命令只筛选出我们关注的包. 例如:

https://i-blog.csdnimg.cn/direct/c90c9d85bc8b4ef3b8740c47a16470c4.png

https://i-blog.csdnimg.cn/direct/eb3cda7544474527a9299a65a183a60e.png

1.3.2安装软件

https://i-blog.csdnimg.cn/direct/dd7fb8067ac44e2192ad77bb73aba7c5.png

1.3.3卸载软件

https://i-blog.csdnimg.cn/direct/098b5a2bdf9442a190315b01194baf7d.png

1.3.4注意事项

https://i-blog.csdnimg.cn/direct/7c5cfbf4b69d467594a1a26b7c796788.png

1.4安装源

https://i-blog.csdnimg.cn/direct/e24cf2ccd64c4d208b3e3efa919431d6.png

更新安装源,现场说明原理即可。云服务器不⽤考虑,因为软件源都是国内的了.

好玩的命令:https://blog.csdn.net/xiaoxiaosutang/article/details/141053674

2.Vim编辑器

https://i-blog.csdnimg.cn/direct/56673ca7fc8047b7a75fb03c51905d67.png

2.1vim的使用

vi/vim的区别简单点来说,它们都是多模式编辑器,不同的是vim是vi的升级版本,它不仅兼容vi的所有指令,⽽且还有⼀些新的特性在⾥⾯。例如语法加亮,可视化操作不仅可以在终端运⾏,也可以运⾏于x window、 mac os、 windows。我们课堂上,统⼀按照vim来进⾏讲解。

https://i-blog.csdnimg.cn/direct/25ce9299f75249079e11d955b8ad6244.png

2.2vim的基本概念

vim的三种模式(其实有好多模式,⽬前掌握这3种即可),分别是命令模式(command mode)、插⼊模式(Insert mode)和底⾏模式(last line mode),各模式的功能区分如下:

https://i-blog.csdnimg.cn/direct/350a00166bcd490593c51619d5b7d7fa.png

https://i-blog.csdnimg.cn/direct/8ae66e037c1049958f65af32c1378336.png

2.3vim的基本操作

https://i-blog.csdnimg.cn/direct/2a13ec8c0c85423a893afdfd33a8d53b.png

2.4vim正常模式命令集

https://i-blog.csdnimg.cn/direct/c312bef272604c508bcc7d9c5f273c1b.png

https://i-blog.csdnimg.cn/direct/a672a8dee7f44aa197d773c4708a5d4a.png

https://i-blog.csdnimg.cn/direct/53025f1a7e9d4ae09f5ae68d4e2a0cc9.png

2.5vim底行模式命令集

https://i-blog.csdnimg.cn/direct/4336353c1d15483ba099adba0c542f0f.png

2.6vim操作总结

https://i-blog.csdnimg.cn/direct/1db5464636df4661a9c32b5585a612b7.png

https://i-blog.csdnimg.cn/direct/55ffa54716534b278b364c06990c135f.png

2.7简单的vim配置

https://i-blog.csdnimg.cn/direct/728a9a2ecd504bc09089d090323e523c.png

https://i-blog.csdnimg.cn/direct/51945858645e4844848ccf1d1e8f9ab4.png

参考资料

3.编辑器gcc/g++

3.1背景知识

https://i-blog.csdnimg.cn/direct/dd4801a4abb14cc4ba1d3ecbefeb0c2d.png

3.2gcc编译选项

格式 gcc [选项] 要编译的⽂件 [选项] [⽬标⽂件]

3.2.1预处理(进行宏编译)

https://i-blog.csdnimg.cn/direct/39f20388383d45dcbf45b4b33a4f6375.png

3.2.2编译(生成汇编)

https://i-blog.csdnimg.cn/direct/ad3328a074d54d22a9c52153b0af83f1.png

3.2.3汇编(生成机器可识别的代码)

https://i-blog.csdnimg.cn/direct/e6c2e1abec984951a5ca367e3aaa0566.png

3.2.4链接(生成可执行文件或库文件)

https://i-blog.csdnimg.cn/direct/73bdf15d813d477fba5c4b4ec4d3c41c.png

3.3动态链接和静态链接

在我们的实际开发中,不可能将所有代码放在⼀个源⽂件中,所以会出现多个源⽂件,⽽且多个源⽂件之间不是独⽴的,⽽会存在多种依赖关系,如⼀个源⽂件可能要调⽤另⼀个源⽂件中定义的函数,但是每个源⽂件都是独⽴编译的,即每个*.c⽂件会形成⼀个*.o⽂件,为了满⾜前⾯说的依赖关系,则需要将这些源⽂件产⽣的⽬标⽂件进⾏链接,从⽽形成⼀个可以执⾏的程序。这个链接的过程就是静态链接。

静态链接的缺点很明显:

https://i-blog.csdnimg.cn/direct/b8cc34bc39bc4baa857672500749291b.png

动态链接的出现解决了静态链接中提到问题。动态链接的基本思想是把程序按照模块拆分成各个相对独⽴部分,在程序运⾏时才将它们链接在⼀起形成⼀个完整的程序,⽽不是像静态链接⼀样把所有程序模块都链接成⼀个单独的可执⾏⽂件。

动态链接其实远⽐静态链接要常⽤得多。⽐如我们查看下 hello 这个可执⾏程序依赖的动态库,会发现它就⽤到了⼀个c动态链接库:

https://i-blog.csdnimg.cn/direct/e29aa2bb0d0d4f30a4ca76f0bffe8f61.png

在这⾥涉及到⼀个重要的概念: 库

3.4动静态库

https://i-blog.csdnimg.cn/direct/b7e16fab5ece412d9a054546b1e5cc5e.png

• Linux下,动态库XXX.so, 静态库XXX.a

• Windows下,动态库XXX.dll, 静态库XXX.lib

⼀般我们的云服务器,C/C++的静态库并没有安装,可以采⽤如下⽅法安装

https://i-blog.csdnimg.cn/direct/b552c4d415d44b13be0cbcd0f2760a6d.png

3.5gcc其他常用选项

https://i-blog.csdnimg.cn/direct/9cb410fc37b24bdbac998e3bac7597f3.png

4.自动化构建-make/Makefile

4.1背景

https://i-blog.csdnimg.cn/direct/d6bcd1d71efa4c7dbafeb1ba7a21b989.png

4.2基本使用

https://i-blog.csdnimg.cn/direct/2afc7fc8408a4ac9a1c8523bd1d0cb9c.png

https://i-blog.csdnimg.cn/direct/452cea013f454369a8bef05669cfe3e8.png

https://i-blog.csdnimg.cn/direct/352b6b63b5384bc1bca0a379c8f91117.png

4.3推导过程

https://i-blog.csdnimg.cn/direct/8e4af99afcea486d839587c2210a3415.png

https://i-blog.csdnimg.cn/direct/31d30293c01e47b59b435ed207f1ff69.png

4.4适度扩展语法

https://i-blog.csdnimg.cn/direct/62d0e3f659e845fe8a06c452a6c9422d.png

5.Linux第一个系统程序-进度条

5.1回车与换行

回车-\n

换行-\r

5.2行缓冲区

\n会刷新缓冲区

\r不会刷新缓冲区,需要手动刷新

https://i-blog.csdnimg.cn/direct/ff79d850358d44f6a080b4c016612d44.png

5.3倒计时程序

https://i-blog.csdnimg.cn/direct/b8dbb4c0cf354d30b0a69854128e3c47.png

5.4进度条代码

https://i-blog.csdnimg.cn/direct/298a3d6b21f94b06b9e105a4df283903.png

https://i-blog.csdnimg.cn/direct/667c2590dc754d84af52e7923180be6c.png

https://i-blog.csdnimg.cn/direct/9702739da0354aaba8d4bf86a649e4de.png

https://i-blog.csdnimg.cn/direct/a4066aec30ac4dc4bdaaf26c349d2938.png

https://i-blog.csdnimg.cn/direct/f0978585bf4948ef82dbbd32a58080ee.png

https://i-blog.csdnimg.cn/direct/2fd9f3bf2eea4de08aff2a3992b1d035.png

6.版本控制器Git

https://i-blog.csdnimg.cn/direct/3a8516d5e36c41aba791c5c260790470.png

6.1版本控制器

https://i-blog.csdnimg.cn/direct/143af3392e8f4057a47eb800a364c766.png

6.2git简史

https://i-blog.csdnimg.cn/direct/4c4257d809f749f2bb56fc12454a4f36.png

6.3安装git

1yum install git

2.apt install git

6.4在Github上创建项目

自行上网创建

注册账号

创建项目

1.登陆成功后,进⼊个⼈主⻚,点击左下⽅的Newrepository按钮新建项⽬

https://i-blog.csdnimg.cn/direct/f4dab1ae21da43638e73d251b53d4944.png

2.然后跳转到的新⻚⾯中输⼊项⽬名称(注意,名称不能重复,系统会⾃动校验.校验过程可能会花费⼏ 秒钟).校验完毕后,点击下⽅的Create repository按钮确认创建.

https://i-blog.csdnimg.cn/direct/3811a8b670104abebe605647b3e41d00.png

3.在创建好的项⽬⻚⾯中复制项⽬的链接,以备接下来进⾏下载.

https://i-blog.csdnimg.cn/direct/2c2a251c272c44b384036aad4f2078c6.png

下载项目到本地

创建好一个放置代码的目录

git clone 刚刚建立好的项目链接

6.5三板斧

1.git add

将代码放到刚才下载好的⽬录中

git add [⽂件名]

将需要⽤git管理的⽂件告知git

2.git commit

提交改动到本地

git commit -m “XXX”

最后的".“表⽰当前⽬录提交的时候应该注明提交⽇志,描述改动的详细内容.

3.git push

同步到远端服务器上

git push

需要填⼊⽤⼾名密码.同步成功后,刷新Github⻚⾯就能看到代码改动了.

配置免密码提交

7.调试器-gdb/cgdb的使用

7.1样例代码

https://i-blog.csdnimg.cn/direct/b343635f1cdf49c9b26fc2cc26bf012d.png

7.2预备

程序的发布⽅式有两种, debug 模式和 release 模式。

Linux gcc/g++ 出来的⼆进制程 序,默认是 release 模式。

要使⽤gdb调试,必须在源代码⽣成⼆进制程序的时候,加上 -g 选项,如果没有添加,程序⽆法被 编译。

https://i-blog.csdnimg.cn/direct/fa75abadc8e943c2a399850d0078783a.png

7.3常见使用

https://i-blog.csdnimg.cn/direct/722e99f439cb405db4085ecdbc141078.png

https://i-blog.csdnimg.cn/direct/dc9b050b05c643be9a4ecafd9dbbef35.png

7.4操作指令加餐

https://i-blog.csdnimg.cn/direct/cb20685e84004c7a96f89670f03ae331.png

7.4.1watch

执⾏时监视⼀个表达式(如变量)的值。如果监视的表达式在程序运⾏期间的值发⽣变化,GDB会暂 停程序的执⾏,并通知使⽤者

https://i-blog.csdnimg.cn/direct/f01a7c9aa0ea4fd78091c3ecdcd4266f.png

https://i-blog.csdnimg.cn/direct/3fdf04fbd0714f7b957de5615748aa01.png

https://i-blog.csdnimg.cn/direct/9a06dc754b1b47128396d4d9e42bc859.png

7.4.2set var确定问题原因

更改⼀下标志位,假设我们想得到 +-result

https://i-blog.csdnimg.cn/direct/79cd5243ddd44e98b9eaea8977e1a997.png

https://i-blog.csdnimg.cn/direct/760720772b554431afb5205a2d3346cb.png

https://i-blog.csdnimg.cn/direct/99f2488c143644f98e5b6e827c906183.png

7.4.3条件断点

添加条件断点

https://i-blog.csdnimg.cn/direct/507570466db1461ca534a7f5606ad436.png

https://i-blog.csdnimg.cn/direct/257ece8be0a44930a7fe9659cded3d58.png

给已经存在的端点新增条件

https://i-blog.csdnimg.cn/direct/ce40a2068a9244c0b4387b3595c3a402.png

https://i-blog.csdnimg.cn/direct/99d4331b1748498bad9fe58f64c1ada3.png

https://i-blog.csdnimg.cn/direct/b3d1fd62ed3547c1a368a6dc535b6c9a.png