【Linux】Linux环境基础开发工具的使用 ———(yum、vim、gcc&g++、gdb、make/Makefile、进度条 、git)(上)

简介: 【Linux】Linux环境基础开发工具的使用 ———(yum、vim、gcc&g++、gdb、make/Makefile、进度条 、git)(上)

🌍一.Linux 软件包管理器 yum


🌈1.什么是软件包


我们在Linux上安装软件是怎么样安装的呢?


⚡yum(Yellow dog Updater, Modified)是Linux下非常常用的一种包管理器(手机应用市场). 相当于Linux下进行软件安装的客户端。

yum也有依赖关系

0a2653c851af460fa595bd959398a8f1.png


🌈2.软件安装三板斧


💦查看软件包

🥑默认列出所有软件


sudo yum list


由于包的数目可能非常之多, 这里我们需要使用 行过滤工具:grep 和 管道只筛选出我们关注的包.


我们以sl小火车为例子:


sudo yum list | grep sl  


0a2653c851af460fa595bd959398a8f1.png


💦如何安装软件

🥑安装软件


sudo yum install sl.x86_64   以sl小火车为例


安装中会询问这个软件多大,是否安装


这时候敲 “y” 确认安装.出现 “complete” 字样, 说明安装完成


sudo yum install -y 安装软件


-y:不用询问,我默认许可了


安装软件时由于需要向系统目录中写入内容, 一般需要 sudo 或者切到 root 账户下才能完成,但是不建议以root身份安装,建议使用普通用户,本文后面有讲如何sudo提高权限

yum安装软件只能一个装完了再装另一个. 正在yum安装一个软件的过程中, 如果再尝试用yum安装另外一个软件, yum会报错

centOS安装软件对应的服务器一般都在国外,可能需要更新yum源

还有不懂的就百度吧

安装扩展源


sudo yum install -y -epel-release


可以去找找什么软件好玩的


sudo yum install cowsay.noarch


0a2653c851af460fa595bd959398a8f1.png


💦如何卸载软件

🥑 卸载软件


sudo yum remove sl  //以火车为例


同样可以加-y跳过询问


🌍二.vim的使用


IDE 集成开发环境:集成了编写编译调试链接运行于一体的开发环境

那我们是怎么样在linux下进行开发的呢?使用gcc、g++、vim、等一个个的独立工具进行


🌈1.vim的基本概念


vim是一个文本编辑器,和记事本没有区别,只负责写代码


vim是一款多模式的编辑器,有三种常见模式:命令模式、插入模式,底行模式。


0a2653c851af460fa595bd959398a8f1.png


可见底行模式和插入模式不能直接切换,都需要经过命令模式,所以命令模式就是核心,我们无脑的esc可退回

命令模式(Normal mode)

控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及按i进入插入模式下,或者按shift+: 进入底行模式


插入模式(Insert mode)

只有在Insert mode下,才可以做文字输入,按「ESC」键可回到命令行模式。该模式是我们后面用的最频繁的编辑模式。


底行模式(last line mode)

文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作。 在命令模式下,shift+: 即可进入该模式。


🌈2. vim命令模式指令集


💦光标移动

vim可以直接用键盘上的上下左右来移动,但是我们不建议,后面接触到的命令必须用到hjkl


我们看看最早的老式键盘


0a2653c851af460fa595bd959398a8f1.png


[h] ←左移一格

[j]  ↓下移一格jump:向下跳

[k]  ↑上移一格king:王子高高在上

[L] →右移一格


🥑光标位置锚点

image.png

💥快速定位到某一行

image.png

🔥行内进行跳转 —— 以单词为单位进行光标左右移动

image.png

💦文本操作

🥑复制粘贴

image.png

💥撤销恢复

image.png

💥 删除剪切

image.png

  • 删除行
  • image.png
  • 局部的修改
  • image.png
  • 常见: vim中字符串儿替换:%s/ / /g


无脑esc退出


🌈3. vim底行模式指令集


✨双屏操作


vs 文件名   //分屏
[ctrl + ww] 快速切换双屏的光标


0a2653c851af460fa595bd959398a8f1.png


注意现在光标在哪个屏幕代表底行就是哪个


💦在命令模式里:【shift + :】进入底行模式


set nu  调出行号

set nonu 取消行号


退出——


q 退出

wq 保存并退出

! 强制写入、退出[q!][w!][wq!]


💦不退出vim执行命令(执行命令行、编译,查看,运行,查看man):!cmd


0a2653c851af460fa595bd959398a8f1.png


执行完 回车即可回到vim


🌈4. 简单vim配置


🔥注意:不管是root还是普通用户,配置只会影响自己


用户和root都分别有自己的配置文件

云服务器上,不含这个配置文件,如果没有就自己创建一个,所有的配置都写入在这个普通文件中


0a2653c851af460fa595bd959398a8f1.png


之前我们一直都执行不了sudo,是因为没有信任


那如何添加sudo信任关系?


首先切换成root身份进入家目录


vim /etc/sudoers


2d65d23f6d4748949b924e4057485923.png


wq! 强制退出即可


🌍三.Linux编译器 ~ gcc/g++使用


gcc是C语言的编译器,g++是Cpp的编译器(兼容c)


源代码生成可执行文件经历了编译+链接,其中编译又分为三个阶段


预处理(宏替换、头文件展开、条件编译、去注释)

编译(C ➡️ 汇编 )

汇编(汇编 ➡️ 可重定向二进制目标文件)

链接(链接 ➡️ 多个.o (Linux) / .obj (windows)文件合并形成一个可执行程序)

那么gcc / g++要不要遵循这样的规则呢?


🌈 翻译过程及选项

翻译阶段:ESc,是不是很熟悉呢?就是我们键盘最左上角的那个 ,🔥区分大小写哦

对应阶段生成文件的后缀名 - iso,是镜像文件后缀名之一。

💦 1.预处理

gcc -E mytest.c -o hello.i


-o:output自己指定形成的文件,如果不指定,会把结果全部打印到屏幕上。


“-E:从现在开始进行程序的翻译,如果预处理完成,就停下


0a2653c851af460fa595bd959398a8f1.png2d65d23f6d4748949b924e4057485923.png


可见预处理后还是c语言


💦 2.编译

-S:现在开始程序翻译,如果编译完成就停下


gcc -S hello.i -o hello.s


6de278e6d6694ce5bb08e7e842b7e74b.png8ec4f2997fb246878c34ecd6d122b7c6.png


计算机也看不懂汇编语言,还得再翻译!


💦 3.汇编


🥑现在开始进行翻译,完成汇编后,停下来


gcc -c hello.s -o hello.o


.o文件代表:重定位目标文件 ,其人话:经过汇编后变成了二进制


ps:当前的二进制文件是没法执行的


0a2653c851af460fa595bd959398a8f1.png2d65d23f6d4748949b924e4057485923.png


💦 4.链接

🥑目标文件和链接库经过链接生成可执行程序


gcc hello.o -o hello


6de278e6d6694ce5bb08e7e842b7e74b.png


🌈 动态库vs静态库


我们可以通过file命令来查看:gcc默认采用动态链接的方式,形成可执行文件


0a2653c851af460fa595bd959398a8f1.png


可以通过ldd命令来查看可执行程序依赖的库


34e8d716411043c08c7ffba9fbba23de.png


链接会把自己写的C程序和语言或者第三方库提供的方法关联起来


💥函数库:在Linux下静态库.o和动态库.so两种;windows下静态库为.lib、动态库为.dll


静态链接时,需要.a静态库。静态链接是把库文件的有关代码拷贝到我的可执行文件中,因此生成的文件比较大,但在运行时也就不再需要任何库文件了,可移植性较好。

动态链接时,需要.so动态库。静态链接,并不会把库文件的代码加入到可执行文件中,而是在程序执行时由运行时链接文件加载库(地址),这样可以节省内存和硬盘的空间。

ps:它们没有绝对的好坏,只有谁更合适


C程序是脱离不开C库文件的


理论讲完,开始实操 动手动手



若要采用静态链接,需要带选项


gcc hello.c -o hello_static -static


-static:表面使用静态链接的方式形成可执行程序!


ps:有些机器可能会没有静态库导致连接失败 需要下载静态库libc.a


安装C静态库 & C++静态库指令如下:


sudo yum install glibc-static   //c静态库
sudo yum install libstdc++-static  //c++静态库

0a2653c851af460fa595bd959398a8f1.png


🌍四.Linux调试器-gdb使用


对于gdb的使用,我们的要求是熟悉使用常用指令即可


🌈 4.1 release & debug模式


我们知道程序的发布方式有两种,debug模式和release模式

Linux gcc/g++出来的二进制程序,默认是release模式,无法调试的。如果一个二进制的文件可以被调试,一定加入了一些调试信息。


0a2653c851af460fa595bd959398a8f1.png


想要调试,必须在gcc/g++编译时候加上-g选项


gcc -o mytest mytest.c -g


2d65d23f6d4748949b924e4057485923.png


相关实践学习
阿里云图数据库GDB入门与应用
图数据库(Graph Database,简称GDB)是一种支持Property Graph图模型、用于处理高度连接数据查询与存储的实时、可靠的在线数据库服务。它支持Apache TinkerPop Gremlin查询语言,可以帮您快速构建基于高度连接的数据集的应用程序。GDB非常适合社交网络、欺诈检测、推荐引擎、实时图谱、网络/IT运营这类高度互连数据集的场景。 GDB由阿里云自主研发,具备如下优势: 标准图查询语言:支持属性图,高度兼容Gremlin图查询语言。 高度优化的自研引擎:高度优化的自研图计算层和存储层,云盘多副本保障数据超高可靠,支持ACID事务。 服务高可用:支持高可用实例,节点故障迅速转移,保障业务连续性。 易运维:提供备份恢复、自动升级、监控告警、故障切换等丰富的运维功能,大幅降低运维成本。 产品主页:https://www.aliyun.com/product/gdb
相关文章
|
2天前
|
Linux Android开发 开发者
linux m、mm、mmm函数和make的区别
通过理解和合理使用这些命令,可以更高效地进行项目构建和管理,特别是在复杂的 Android 开发环境中。
32 18
|
2月前
|
Linux C++
Linux c/c++之makefile的基础使用
Linux下C/C++项目中makefile的基本使用,包括基础、进阶和高级用法,以及如何创建和使用makefile来自动化编译过程。
25 0
Linux c/c++之makefile的基础使用
|
2月前
|
Linux 开发工具
【Linux快速入门(二)】Linux与ROS学习之编译基础(make编译)
【Linux快速入门(二)】Linux与ROS学习之编译基础(make编译)
107 0
|
7月前
|
小程序 Linux 开发工具
【Linux】Linux 开发工具(vim、gcc/g++、make/Makefile)+【小程序:进度条】-- 详解
【Linux】Linux 开发工具(vim、gcc/g++、make/Makefile)+【小程序:进度条】-- 详解
|
6月前
|
Linux 开发工具 数据安全/隐私保护
Linux基础——Linux开发工具(下)_make/makefile
Linux基础——Linux开发工具(下)_make/makefile
55 1
|
5月前
|
Java Linux C++
【Linux】Make和Makefile快速入门
【Linux】Make和Makefile快速入门
37 0
|
5月前
|
Java Linux 编译器
编写和使用Linux Makefile
编写和使用Linux Makefile
|
6月前
|
Linux
【make/Makefile】Linux下进度条的设计与实现
【make/Makefile】Linux下进度条的设计与实现
|
6月前
|
NoSQL 编译器 Linux
【Linux】--- Linux编译器-gcc/g++、调试器-gdb、项目自动化构建工具-make/Makefile 使用
【Linux】--- Linux编译器-gcc/g++、调试器-gdb、项目自动化构建工具-make/Makefile 使用
105 0
|
6月前
|
Linux Shell C++
linux C/C++ makefile
linux C/C++ makefile