【Linux】第三章Linux环境基础开发工具使用(yum+rzsz+vim+g++和gcc+gdb+make和Makefile+进度条+git)

article/2025/10/7 20:24:38

🏆个人主页:企鹅不叫的博客

​ 🌈专栏

  • C语言初阶和进阶
  • C项目
  • Leetcode刷题
  • 初阶数据结构与算法
  • C++初阶和进阶
  • 《深入理解计算机操作系统》
  • 《高质量C/C++编程》
  • Linux

⭐️ 博主码云gitee链接:代码仓库地址

⚡若有帮助可以【关注+点赞+收藏】,大家一起进步!

💙系列文章💙


【Linux】第一章环境搭建和配置

【Linux】第二章常见指令和权限理解


文章目录

  • 💙系列文章💙
  • 💎一、yum(软件管理器)
    • 🏆1.介绍
    • 🏆2.使用方法
    • 🏆3.rzsz工具
  • 💎一、vim使用
    • 🏆1.基本概念
    • 🏆2.vim命令模式下的命令
      • 进入插入模式的命令
      • 移动光标
      • 删除文字
      • 复制粘贴
      • 替换
      • 撤销
      • 跳转到指定行
    • 🏆3.vim底行模式命令
    • 🏆4.vim配置
    • 🏆5.视图模式
      • 注释代码和取消代码注释
    • 🏆6.vim编写代码突然中断处理
  • 💎三、gcc/g++使用
    • 🏆1.gcc/g++命令
    • 🏆2.动态库和静态库
    • 🏆3.动态连接和静态连接
  • 💎四、调试器gdb使用
  • 💎五、项目自动化构建工具make/Makefile
    • 🏆1.介绍
    • 🏆2.依赖关系和依赖方法
    • 🏆3.make/Makefile的使用
  • 💎六、进度条小程序
  • 💎七、git
    • 🏆1.基本创建和使用
    • 🏆2.问题解决


💎一、yum(软件管理器)

🏆1.介绍

Linux的几种安装方式

  1. 源码安装:源码安装会带来交叉编译的问题,源码在不同的环境下可能会有不同的效果,导致安装十分麻烦。这种安装方式用的比较少。
  2. rpm安装:rpm安装相对上面的方式比较友好,这些软件会被提前编译好,然后打包成一个软件包放在服务器上,然后通过指令就可以安装。它最大的缺陷就是不会解决依耐性的问题,一旦遇到依耐性问题,它会把问题反馈给用户,让用户自己解决。
  3. yum管理器:yum是Linux下非常常用的一种软件包管理器,它本身会考虑软件的依赖关系,会利用第三方库帮用户解决依耐性的问题,这样就比rpm更友好一些。

🏆2.使用方法

查看软件包

//罗列出所有的软件包
yum lish
//通过grep来过滤出自己想要的软件
yum list | grep lrzsz

安装软件包

sudo yum -y install lrzsz

卸载指令

sudo yum -y remove lrzsz

🏆3.rzsz工具

这个工具可以用于windows机器和远程的Linux机器通过Xshell远程传输文件,可以通过拖拽的方式上传文件,十分的方便。

rz // 上传文件  
sz 文件// 发出文件

在这里插入图片描述

💎一、vim使用

🏆1.基本概念

命令模式:刚进入到vim中默认的模式,该模式可以控制屏幕的光标的移动,来对一些字符进行删除和复制等

底行模式:当输入[shift]+:的时候,会回到底行,:q(退出),:wq(保存退出),按下ESC回到命令模式,

插入模式:当按下 i / o / a 时就可以写代码了,推出按下Esc回到命令模式

🏆2.vim命令模式下的命令

进入插入模式的命令

  • 按「i」切换进入插入模式「insert mode」,按“i”进入插入模式后是从光标当前位置开始输入文件
  • 按「a」进入插入模式后,是从目前光标所在位置的下一个位置开始输入文字
  • 按「o」进入插入模式后,是插入新的一行,从行首开始输入文字
  • 按ESC键切换为命令模式

移动光标

  • vim可以直接用键盘上的光标来上下左右移动,但正规的vim是用小写英文字母「h」、「j」、「k」、「l」,分别控制光标左、下、上、右移一格
  • 按「G」:移动到文章的最后
  • 按「 $ 」:移动到光标所在行的“行尾”
  • 按「^」:移动到光标所在行的“行首”
  • 按「w」:光标跳到下个单词的开头
  • 按「e」:光标跳到下个单词的字尾
  • 按「b」:光标回到上个单词的开头
  • 按「#l」:光标移到该行的第#个位置,如:5l,56l
  • 按[gg]:进入到文本开始
  • 按[shift+g]:进入文本末端
  • 按「ctrl」+「b」:屏幕往“后”移动一页
  • 按「ctrl」+「f」:屏幕往“前”移动一页
  • 按「ctrl」+「u」:屏幕往“后”移动半页
  • 按「ctrl」+「d」:屏幕往“前”移动半页

删除文字

  • 「x」:每按一次,删除光标所在位置的一个字符
  • 「nx」:例如,「6x」表示删除光标所在位置的“后面(包含自己在内)”6个字符
  • 「X」:大写的X,每按一次,删除光标所在位置的“前面”一个字符
  • 「nX」:例如,「20X」表示删除光标所在位置的“前面”20个字符
  • 「dd」:删除光标所在行(相当于剪切)
  • 「#dd」:从光标所在行开始删除#行

复制粘贴

  • 「yw」:将光标所在之处到字尾的字符复制到缓冲区中。
  • 「nyw」:复制#个字到缓冲区
  • 「yy」:复制光标所在行到缓冲区。
  • 「nyy」:例如,「6yy」表示拷贝从光标所在的该行“往下数”6行文字。
  • 「p」:将缓冲区内的字符贴到光标所在位置,【6p」表示粘贴6次。注意:所有与“y”有关的复制命令都必须与“p”配合才能完成复制与粘贴功能(粘贴)

替换

  • [ r ] :替换光标所在处的字符
  • [shift] + r : 批量化替换

撤销

  • [ u ] :撤销
  • [ ctrl + r ] : 撤销上一次的撤销

跳转到指定行

  • 「ctrl」+「g」列出光标所在行的行号。
  • 「#G」:例如,「15G」,表示移动光标至文章的第15行行首
  • [shift]+g : 光标快速定位到文本末尾
  • [gg] : 将光标定位到文本的最开始

🏆3.vim底行模式命令

  • 列出行号: set nu

  • 分屏:vs 文件,底行模式使用[ctrl]+w可以切换窗口

    vs test.cpp
    
  • 保存文件:输入w保存

  • 退出vim: 按q直接退出,按wq是保存并退出,加一个‘!’就是强制的意思。

🏆4.vim配置

  • 在目录 /etc/ 下面,有个名为vimrc的文件,这是系统中公共的vim配置文件,对所有用户都有效。
  • 而在每个用户的主目录下,都可以自己建立私有的配置文件,命名为:“.vimrc”。例如,/root目录下,通常已经存在一个.vimrc文件,如果不存在,则创建这个文件。
  • 切换用户成为自己执行 su ,进入自己的主工作目录,执行 cd ~
  • 打开自己目录下的.vimrc文件,执行 vim .vimrc

我用的vim环境安装 传送门

安装指令

curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o ./install.sh && bash ./install.sh

卸载指令

bash ~/.VimForCpp/uninstall.sh

🏆5.视图模式

注释代码和取消代码注释

注释代码

  1. 在命令模式当中,[ctrl]+v 进入视图模式
  2. 之后使用h j k l 分别控制指针左上下右移动,选中区域,可以用[shift] + g直接切换到底部
  3. 将输入法切换成大写,输入I,输入’/',按Esc

取消注释

  1. 在命令模式当中,[ctrl]+v 进入视图模式
  2. 之后使用h j k l 分别控制指针左上下右移动,选中区域
  3. 将输入法切换成小写,输入d

🏆6.vim编写代码突然中断处理

当我们编写代码中断后再次进入文件编写会出现以下错误,原因是vim帮我们备份了一个,但是每次进来都有这个界面选择很烦,怎么去掉呢?

在这里插入图片描述

rm 路径,删除备份路径即可

rm /home/Jungle/.local/share/nvim/swap//%home%Jungle%lesson15_进程控制%main.c.swp

💎三、gcc/g++使用

🏆1.gcc/g++命令

程序编译的知识,程序从.c文件到.exe文件有预处理、编译、汇编和链接四个过程,具体讲解传送门

编译文件的指令

//gcc只能编译C文件,g++可以编译C文件和C++文件
gcc test.c
g++ text.cpp
//-o是自己命名的可执行程序
gcc mytest.c -o test
//加上-static表示生成文件连接的是静态库,不加默认生成动态库
gcc mytest.c -o test -static

gcc命令:

  • -E 只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里面。从现在开始进行程序翻译,当预处理完成就停下来
  • -S 编译到汇编语言不进行汇编和链接,从现在开始进行程序的翻译,当我们编译完成后就停下来
  • -c 编译到目标代码,从现在开始进行程序的翻译,当汇编结束后,就停下来
  • -o 文件输出到 文件
  • -static 此选项对生成的文件采用静态链接
  • -g 生成调试信息。GNU 调试器可利用该信息。
  • -shared 此选项将尽量使用动态库,所以生成文件比较小,但是需要系统由动态库.
  • -O0
  • -O1
  • -O2
  • -O3 编译器的优化选项的4个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高
  • -w 不生成任何警告信息。
  • -Wall 生成所有警告信息

🏆2.动态库和静态库

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

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

🏆3.动态连接和静态连接

  • 动态链接:运行时链接文件加载库,节省系统开销
  • 静态链接:编译链接时,将库中的代码拷贝进可执行文件中,直接使用,之后都不依赖这个库

动态连接

优点:大家共享一个库,可以节省资源

缺点:一旦库缺失,会导致几乎所有程序失效

静态连接:

优点:不依赖任何库,程序可以独立执行

缺点:浪费资源

💎四、调试器gdb使用

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

//以下指令生成debug程序(-g),gcc是编译,mytest.c是文件,-o是重命名,mytest_g是重命名后的名字
gcc mytest.c -o mytest_g -g
//查看程序符号表
readelf -S test

开始调试

//开始调试程序(注意必须是debug版本).gdb+文件
gdb mytest_g
//查看源码
l
//b+行号,打断点
b 15//15行打断点
//查看断点
info b
//运行程序
r
//打印值
p sum//打印sum中的值是多少
//逐语句
s
//逐过程
n
//退出gdb
quit
//删除断点
d 1//删除的断点编号是1
//跳转到指定行
until 15//跳转到15行
//常显示或者取消常显示
display && undisplay
//从一个断点运行到另一个断点
c
//执行完成一个函数就停下来
finish

💎五、项目自动化构建工具make/Makefile

🏆1.介绍

make是一条指令,Makefile是一个文件

  • 在一个项目中,Makefile定义了一系列的规则来指定文件编译的先后顺序,还有文件是否需要重新编译,甚至还会进行更复杂的功能操作
  • make是一个命令工具,是一个解释makefile中指令的命令工具
  • makefile最大的好处就是自动化编译。写好后只需要一条make指令就可以对整个功率进行完全自动编译,极大地提高了开发效率。
  • 默认的情况下,make命令会在当前目录下按顺序找寻文件名为“GNUmakefile”、“makefile”、“Makefile”的文件

🏆2.依赖关系和依赖方法

依赖关系:依赖关系指明了两个文件之间的依赖性。例如:生成可执行程序需要依赖源码

依赖方法:依赖方法就是怎么做。例如:用gcc编译

🏆3.make/Makefile的使用

1.创建文件makefile和源文件test.c

2.在源文件中写下以下代码

#include<stdio.h>
int main ()
{
printf("hello1");
return 0;                                                                                          
}

3.再makefile文件中写下以下代码

test:test.cgcc test.c -o mytest 
.PHONY:clean
clean:rm -r test 
  1. test是目标文件
  2. :是依赖关系
  3. test.c原本的文件名字
  4. 第二行按下[TAB]后写上两个文件的依赖方法
  5. .PHONY是makefile语法格式中的一个关键字,后面clean是一个伪目标,clean被.PHONY修饰时,表示总是被执行的(无论目标文件是否新旧,每次都会执行),伪目标后面是没有依赖文件的

4.使用,退出vim编写后使用make编译项目,make clean清除项目

make//编译项目,多次使用make,只有第一次有用
make clean//清除项目

多文件操作:

1.创建三个文件main.c hello.c hello.h

在Makefile文件中写下以下,hello是目标文件,由文件hello.o和main.o编译得来,main.o和hello.o分别由他们对应的.c文件编译过来,rm -f *.o是删除.o文件,hello是删除目标文件

hello:hello.o main.ogcc -o hello hello.o main.o
main.o:main.cgcc -o main.o main.c
hello.o:hello.cgcc -o hello.o hello.c 
.PHONY:clean
clean:rm -f *.o hello 

多文件操作2:

(使用时删除两者之间的空格)$ @对应目标文件(myproc),$ ^对应依赖文件内容(myproc.c),如果有多个文件则写在myproc.c后面用空格分开

myproc:myproc.c 1.c 2.cgcc -o $@ $^
.PHONY:clean
clean:rm -f myproc

多文件操作3:
生成两个可执行程序

.PHONY:allall:myexec mycmd
myexec:myexec.cgcc -o $@ $^
mycmd:mycmd.cppg++ -o $@ $^
.PHONY:clean
clean:rm -f myexec mycmd

替换:将部分代码替换成我们自定的代码

CC=gcc 
bin=myexec
src=myexec.c
$(bin):$(src) 	$(CC) -o $@ $^
.PHONY:clean 
clean: rm -f $(bin) ```

💎六、进度条小程序

  • 回车: 回到行首
  • 换行: 列不变,进行下一行
    \r与\n
  • \r: 这是一个回车的转义符号,回到行首
  • \n: 回车+换行,回到行首,然后列不变进行下一行的行首
#include<stdio.h>
#include<string.h>
#include<unistd.h>//睡眠函数
#define NUM 101
void process()
{int cnt = 0;char bat[NUM];const char* lable = "|/-\\";//初始化为空memset(bat, '\0',sizeof(bat));while(cnt<=100){//预留100个位置,并且从左向右移动,并且回车不换行printf("[%-100s][%2d%%][%c]\r", bat, cnt, lable[cnt%4]);//输出缓冲区内容fflush(stdout);bat[cnt++] = '#';usleep(50000);}printf("\n");
}
int main ()
{process();return 0;
}

💎七、git

🏆1.基本创建和使用

使用,在gitee创建一个仓库(默认私有),创建完后改成了公有

用以下操作实现仓库克隆到本地,并且上传文件

git clone 仓库地址//地址用HTTSP的仓库地址,如果是私有仓库需要输入gitee账户和密码
git status//查看本地文件提交情况
git log//查看每次文件的描述(日志)
git add test.c//test.c为需要提交的文件
git add .//提交所有文件
git commit -m "测试程序"//-m用于提交缓存区文件,“测试程序”是日志,此时本地git存在新增文件,但是gitee还没有
git push//之后需要输入账号密码,此时gitee上也有文件了

🏆2.问题解决

当本地仓库和gitee仓库代码不一样时,我们需要进行以下操作

git pull//将gitee仓库拿到本地来
:q!//如果发现本地文件上传不了,在报错后直接这样即可,之后再git push即可

下面这个文件是用来存储类似黑名单的东西的,如果相关后缀文件在这个文件当中就不能提交到gitee

.gitignore


http://chatgpt.dhexx.cn/article/JIpRMap1.shtml

相关文章

【Linux基础】Linux软件包管理器yum的使用指南rzsz安装

【Linux基础】Linux软件包管理器yum的使用指南|rzsz安装 前言 主页&#xff1a; 潮.eth的博客_CSDN博客-C学习,C学习,数据结构and算法领域博主 Linux基础专栏&#xff1a; Linux基础_潮.eth的博客-CSDN博客 正文 文章目录 【Linux基础】Linux软件包管理器yum的使用指南|rzsz安装…

linux虚拟机rzsz安装(wget方法,自测可用)

1、mkdir /usr/local/lszrz创建文件夹后进入这个文件夹&#xff0c;使用wget https://ohse.de/uwe/releases/lrzsz-0.12.20.tar.gz --no-check-certificate下载安装包lrzsz-0.12.20.tar.gz。这里的--no-check-certificate是不进行证书验证的意思&#xff0c;我没有加这个会产生…

linux 下安装安装rzsz命令

我们在linux上部署代码的时候经常需要上传文件到linux&#xff0c;有时候也需要从linux上下载文件到本地&#xff0c;大部分人都直接借助于ftp工具&#xff0c; 然而其实我们可以直接通过rz和sz上传下载文件&#xff0c;但是rz和sz命令不是linux默认自带的命令&#xff0c;需要…

Linxux应用开发-串口下载命令rzsz交叉编译

1.1 简介 rz/sz工具是通过Zmodem协议传输文件的命令&#xff0c;常用于Linux与windows之前的数据传输。 这篇文章就介绍如何在交叉编译rz/sz命令&#xff0c;并在Linux开发板上完成测试。 1.1.1 什么是rz/sz (lsz/lrz) rz/sz 通过Zmodem协议传输数据的命令&#xff0c;通过串…

kafka消息队列使用场景

一、消息队列概述 消息队列中间件是分布式系统中重要的组件&#xff0c;主要解决应用解耦&#xff0c;异步消息&#xff0c;流量削锋等问题&#xff0c;实现高性能&#xff0c;高可用&#xff0c;可伸缩和最终一致性架构。目前使用较多的消息队列有ActiveMQ&#xff0c;RabbitM…

Springboot之Kafka

Kafka介绍 Kafka属于分布式日志系统。 主要应用场景是&#xff1a;日志收集系统和消息系统。 Kafka主要设计目标如下&#xff1a; 以时间复杂度为O(1)的方式提供消息持久化能力&#xff0c;即使对TB级以上数据也能保证常数时间的访问性能。高吞吐率&#xff0c;即使在非常廉价…

Kafka的原理、基础架构、以及使用场景详解

一&#xff1a;Kafka简介 Apache Kafka是分布式发布-订阅消息系统&#xff0c;在 kafka官网上对 kafka 的定义&#xff1a;一个分布式发布-订阅消息传递系统。 Kafka最初由LinkedIn公司开发&#xff0c;Linkedin于2010年贡献给了Apache基金会并成为顶级开源项目。主要应用场景…

Kafka入门、Kafka应用场景、Kafka设计理念 01

1. Kafka简介 Kafka是linkedin用于日志处理的分布式消息队列&#xff0c;同时支持离线和在线日志处理。Kakfa对消息保存时根据Topic进行归类&#xff0c;发送消息者成为Producer&#xff0c;消息接受者成为Consumer。Kafka集群有多个Kafka实例组成&#xff0c;每个实例&#x…

kafka笔记N0.4Kafka应用场景

消息 kafka更好的替换传统的消息系统。kafka有更好的吞吐量&#xff0c;内置分区&#xff0c;副本和故障转移。网站活动追踪 用户活动的追踪&#xff0c;网站的活动&#xff08;网页浏览&#xff0c;搜索或其他用户的操作信息&#xff09;发布到不同的话题中心&#xff0c;这…

kafka简介及应用场景、架构

1、简介 kafka是最初由linkedin公司开发的&#xff0c;使用scala语言编写&#xff0c;kafka是一个分布式&#xff0c;分区的&#xff0c;多副本的&#xff0c;多订阅者的日志系统&#xff08;分布式MQ系统&#xff09;&#xff0c;可以用于搜索日志&#xff0c;监控日志&#…

RocketMQ:与Kafka对比应用场景及组成架构

文章目录 1.应用场景1.1.RocketMQ应用场景1.2.Kafka应用场景 2.架构组成2.1.RocketMQ架构组成2.2.Kafka架构组成 1.应用场景 1.1.RocketMQ应用场景 RocketMQ 是阿里巴巴开源的分布式消息中间件&#xff0c;前身为阿里内部消息系统Notify及MetaQ。RocketMQ被广泛应用于电商、订…

详解Kafka应用场景及工作原理

一、概述 Kafka是最初由Linkedin公司开发&#xff0c;是一个分布式、支持分区的&#xff08;partition&#xff09;、多副本的&#xff08;replica&#xff09;&#xff0c;基于zookeeper协调的发布/订阅式分布式消息系统 二、特性 持久性、可靠性&#xff1a;消息被持久化到…

Kafka应用场景

序 在学习一门新技术之前&#xff0c;我们需要先去了解一下这门技术的具体应用场景&#xff0c;使用它能够做什么&#xff0c;能够达到什么目的&#xff0c;学习kafka的初衷是用作消息队列&#xff1b;但是还可以使用Kafka Stream进行一些实时的流计算&#xff0c;多用于大数据…

Kafka基本概念与应用场景

一、Kafka的定义 Apache Kafka是一种分布式的、基于发布/订阅的消息系统&#xff0c;由Scala语言编写而成。它具备快速、可扩展、可持久化的特点。Kafka最初由LinkedIn开发&#xff0c;并于2011年初开源&#xff0c; 2012年10月从Apache孵化器毕业&#xff0c;成为Apache基金会…

kafka使用场景与设计原理

目录 1 kafka的介绍 2 架构 2.1 工作流程 2.2 副本原理 2.3 分区和主题的关系 2.4 生产者 2.4.1 为什么分区-可以水平扩展 2.4.2 分区策略 2.5 消费者 2.5.1 消费方式 2.5.2 分区分配策略 2.6 数据可靠性保证 2.6.1 副本数据同步策略 2.6.2 ACK 应答机制 2.6.3 …

kafka学习(六):kafka应用场景

消息队列中间件是分布式系统中重要的组件&#xff0c;主要解决应用解耦&#xff0c;异步消息&#xff0c;流量削锋等问题&#xff0c;实现高性能&#xff0c;高可用&#xff0c;可伸缩和最终一致性架构。目前使用较多的消息队列有ActiveMQ&#xff0c;RabbitMQ&#xff0c;Zero…

kafka使用场景

kafka基本介绍 kafka是使用scala语言和java语言编写的一套高可用的消息队列&#xff0c;广泛应用在后端开发里&#xff0c;是后端开发里的一个重要中间件。 kafka的使用场景 1、异步处理 下图为一个订单状态在后端各个模块之间的处理流程&#xff0c;后一个流程必须要等到前…

kafka的应用场景

关于消息队列的使用 一、消息队列概述消息队列中间件是分布式系统中重要的组件&#xff0c;主要解决应用解耦&#xff0c;异步消息&#xff0c;流量削锋等问题&#xff0c;实现高性能&#xff0c;高可用&#xff0c;可伸缩和最终一致性架构。目前使用较多的消息队列有ActiveMQ…

解开Kafka神秘的面纱(一):kafka架构与应用场景

文章目录 一、前言二、Kafka简介2.1 Kafka简介2.2 基于分布式的Kafka 三、Kafka架构3.1 消息生产与消费3.1.1 消息生产与消费模型3.1.2 Kafka消费单元是消费者组3.1.3 Kafka只消费Partition主分区的消息3.1.4 消费者组中的每个消费者的offset3.1.5 小结 3.2 Partition备份与选主…

Metricbeat使用与入门-1 收集系统指标数据到ES中

Metricbeat由模块和指标集组成。Metricbeat 模块定义了从特定服务&#xff08;例如Redis&#xff0c;MySQL等&#xff09;收集数据的基本逻辑。 系统环境&#xff1a;CentOS 7.4 ES版本&#xff1a;7.6.1 Metricbeat版本&#xff1a;7.6.1 1 安装 Metricbeat版本&#xff1a;7…