【linux】环境基础|开发工具|gcc|yum|vim|gdb|make|git
目录
编辑
Linux 软件包管理器 yum
软件包:
操作:
拓展:lrzsz简介
Linux开发工具
Linux编辑器-vim使用
vim 的基本概念
命令模式
插入模式
底行模式
vim 命令模式的操作指令
vim 底行模式的操作命令
Linux编译器-gcc/g++使用
功能
格式
编译过程
gcc 常见选项:
Linux调试器-gdb使用
背景
gdb 的使用
项目自动化构建工具 - make/Makefile (地球人都在用)
准备工作、写法和用法
编写makefile文件
.PHONY 的作用
简化 makefile 文件
多文件项目,有 file.h file.c main.c 三个文件
make 是如何工作的
clean 项目清理
分布式版本控制软件 - git
Linux 软件包管理器 yum
软件包:
在linux下安装软件,通常办法是下载程序源代码,并进行编译,最后得到可执行程序;但是这样及其麻烦,于是有人将一些常用的软件编译好,做成软件包;类似“app商店”
操作:
yum list :查看当前一共有哪些软件包
例:
yum list | grep sl查看当前软件包中筛选出包含sl的软件包;
我们选取其中一个;
sl.x86_64 5.02-1.el7 @epel

软件包名称: 主版本号.次版本号.源程序发行号-软件包的发行号.主机平台.cpu架构.
“x86_64” 后缀表示64位系统的安装包, “i686” 后缀表示32位系统安装包. 选择包时要和系统匹配.
“el7” 表示操作系统发行版的版本. “el7” 表示的是 centos7/redhat7.“el6” 表示 centos6/redhat6.
epel 表示的是 “软件源” 的名称, 类似于 “小米应用商店”, “华为应用商店” 这样的概念.
拓展:lrzsz简介
rz,sz 是 Linux/Unix 同 Windows 进行 ZModem 文件传输的命令行工具。
rz 可以很方便的从客户端传文件到服务器,sz 也可以很方便的从服务器传文件到客户端,就算中间隔着跳板机也不影响。
在 SecureCRT 下的传输协议有 ASCII、Xmodem、Ymodem、Zmodem 4种:
ASCII:这是最快的传输协议,但只能传送文本文件
Xmodem:这种古老的传输协议速度较慢,但由于使用了CRC错误侦测方法,传输的准确率可高达99.6%
Ymodem:这是Xmodem的改良版,使用了1024位区段传送,速度比Xmodem要快。Zmodem:Zmodem采用了串流式(streaming)传输方式,传输速度较快,而且还具有自动改变区段大小和断点续传、快速错误侦测等功能,是目前最流行的文件传输协议
Linux开发工具
Linux编辑器-vim使用
vi/vim都是多模式编辑器,vim是vi的升级版本,不仅兼容vi的所有指令,而且还有一些新的特性在里面
vim 的基本概念
vim 是编辑器,用于编辑文本,编写代码的工具。因为 vim 的操作是在命令行中,不支持鼠标,因此光标的移动,文本内容的操作都需要命令来完成。
这里主要介绍vim最常用的三种模式:命令模式、插入模式、底行模式。
命令模式
控制屏幕光标的移动,字符、字或行的删除,移动复制某区段或者模式切换
插入模式
文本数据的写入,模式切换;在命令模式下按 i 进入该模式;按「ESC」键可回到命令行模式
底行模式
文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作。在命令模式下,shift + : 即可进入该模式;按「ESC」键可回到命令行模式
注:底行模式和插入不可转换;

进入 vim 的方法
vim + 文件名
退出 vim 的方法 (在底行模式):
w (保存当前文件)
wq (输入「wq」,存盘并退出vim)
q! (输入q!,不存盘强制退出vim)
vim 命令模式的操作指令
vim可以直接用键盘上的光标来上下左右移动,但正规的vim是用小写英文字母**「h」、「j」、「k」、「l」,分别控制光标左、下、上、右移一格**
按[gg]:进入到文本开头
按「G」或 「shift + g」或「 n + shift + g」:移动到文本末端 或 向下移动n位
按「shift + ^」:移动到光标所在行的“行首”
按「 shift + $ 」:移动到光标所在行的“行尾”
按「w」:光标跳到下个字的开头
按「b」:光标回到上个字的开头按 [ u ] : 撤销上次指令
按「x」: 每按一次,删除光标所在位置的一个字符
按「n + x」: 例如,「6x」表示删除光标所在位置的“后面(包含自己在内)”6个字符;
按「n + dd」: 从光标所在行开始删除 n 行
按「dd + p」或「n + dd + p」: 剪切某行 或 剪切n行
按「p」: 将缓冲区内的字符粘贴到光标所在位置。注意:所有与“y”有关的复制命令都必须与“p”配合才能完成复制与粘贴功能。
按「yy」: 复制光标所在行 到缓冲区。
按「n + yy」: 例如,「6yy」表示拷贝从光标所在的该行“往下数”6行文字。
vim 底行模式的操作命令
按「set nu」: 输入「set nu」后,会在文件中的每一行前面列出行号。
按「set nonu」: 取消行号。
按「/ + 关键字」: 先按「/」键,再输入想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按「n」会往后寻找到您要的关键字为止。
按「w」: 在冒号输入字母「w」就可以将文件保存起来
按「q」: 按「q」就是退出,如果无法离开vim,可以在**「q」后跟一个「!」强制离开vim**。
按「wq」: 一般建议离开时,搭配「w」一起使用,这样在退出的时候还可以保存文件。
按「x!」: 保存并退出编辑,仅当文件有修改时会保存,并修改文件时间属性按「: vs + 文件名」: 如在 test.c 中打开或创建一个文件「: vs liren.c 」
按「ctrl + w」: 光标在分屏的多屏幕下进行切换
Linux编译器-gcc/g++使用
功能
将我们所写的高级语言代码编译解释成机器指令
格式
gcc [选项] 要编译的文件 [选项] [目标文件]
编译过程
预处理:展开所有代码(引入头文件,宏替换,删除注释…)
编译:语法语义检测,没有错误则将代码解释成为汇编指令
汇编:架构汇编指令解释成二进制机器指令
链接:将所需的二进制机器指令(其他的.o以及库文件)打包生成可执行文件
gcc 常见选项:
- -E 只进行到预处理完成
- -S 只进行到编译完成
- -c 只进行到汇编完成
- -o 指定要生成的目标文件对象名称
- -g 告诉编译器不要生成release版本在 -c 时就要加上-g
Linux调试器-gdb使用
背景
程序的发布方式有两种,debug模式和 release模式
Linux gcc/g++出来的二进制程序,默认是release模式
要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项

debug版本程序本身会被加入更多的调试信息,以便于进行调试。
所以debug文件比生成默认的release文件大
gdb 的使用
gdb binFile 退出: ctrl + d 或 quit 调试命令:
(list 或者 l)+ 行号:显示binFile源代码,接着上次的位置往下列,每次列10行
(list 或者 l)+ 函数名:列出某个函数的源代码
r 或 run: 运行程序,从开始连续而非单步执行程序
n 或 next: 单条执行,逐过程
s 或 step: 进入函数调用,逐语句
c(continue): 直接跳转到下一个断点
until X行号: 跳至X行
finish: 直接运行完毕对应的函数
b(break) + 行号:在某一行设置断点
b(break) + 函数名:在某个函数开头设置断点
i(info) b(break) : 查看断点信息
d(delete) b(breakpoints): 删除所有断点
d(delete) b(breakpoints) + 行号: 删除序号为 n 的断点
disable b(breakpoints): 禁用断点
enable b(breakpoints): 启用断点
p(print) + 变量或表达式: 打印表达式的值,通过表达式可以修改变量的值或者调用函数
display 变量名: 跟踪查看一个变量,每次停下来都显示它的值,==相当于vs中的监视==*
undisplay 变量名: 取消对先前设置的那些变量的跟踪
bt(breaktrace): 查看各级函数调用及参数,相当于vs中的调用堆栈窗口
i(info) locals: 查看当前栈帧局部变量的值set 变量名=n: 修改变量的值为 n
注意:
调试程序完毕,或者调试中间过程,调试痕迹 很重要,当调试一个大的项目,可能有几十个断点,某个断点调试完了,不要直接把它删除,而是暂时禁用它,等程序没有任何问题了,再把所有断点删除。
项目自动化构建工具 - make/Makefile (地球人都在用)
make命令是用来自动完成大批量源文件的编译工作的维护工具;能够建立不同文件之间的依赖关系;自动识别被修改的源文件并重新编译,避免不必要的编译。(简言之,就是一个编译工具,并且非常实用。)
注:想要使用 make 命令,需要创建一个 makefile 文件
准备工作、写法和用法
准备工作
首先将所有项目中要处理的文件放到同一个文件目录下,并且在该目录下新建一个名为Makefile的文件(推荐使用Makefile)。新建方法:在该目录下打开终端,输入如下命令即可。
vim Makefile
规则的写法
对源文件(demo.c)处理将其生成对应的目标文件(即demo.o)
file:file.cgcc file.c -o file//注意:gcc前是一个Tab
目标文件file 依赖于原始文件 file.c,但光光有依赖关系是不能生成目标文件的,是不够的。
还需要有依赖方法,而
gcc file.c -o file就是与之对应的依赖方法,表明如何生成目标文件 file。
编写makefile文件
file:file.c # 表明了一种依赖关系,目标文件 file依赖于 file.c gcc file.c -o file # 依赖方法,怎么用 file.c 生成目标文件 file(需要以tab键开头)
.PHONY:clean # .PHONY —— "定义"伪目标:clean总是可以被执行的
clean: # 依赖项为空rm -rf file # 清理可执行程序
.PHONY 的作用
一般不会把可执行程序 “定义” 成伪目标,因为每次编译都是有成本的,第一次编译好了,就不需要再编译了,除非文件有改动。一般把清理可执行程序 “定义” 成伪目标。
简化 makefile 文件
file:file.cgcc $^ -o $@ # $^: 可执行程序所依赖的文件列表 $@: 目标文件
.PHONY:clean
clean:rm -rf file
多文件项目,有 file.h file.c main.c 三个文件
file:file.c main.c # 目标文件 test 依赖于 file.c 和 main.cgcc $^ -o $@ # $^: 可执行程序所依赖的文件列表 $@: 目标文件
.PHONY:clean
clean:rm -rf file
- $@:表示依赖关系中的目标文件
- $^ :表示依赖关系中的依赖文件列表
- $< :表示依赖关系中的一个一个的依赖文件
make 是如何工作的
make 会在当前目录下找名字叫 “Makefile” 或 “makefile” 的文件。
如果找到,它会找文件中的第一个目标文件(target),在上面的例子中,他会找到 “file” 这个文件,并把这个文件作为最终的目标文件。
如果 test 文件不存在,或是 test 所依赖的后面的 test.o 文件的文件修改时间要比 test 文件新,那么就会执行后面所定义的命令来生成 test 这个文件。
如果 test 所依赖的 test.o 文件不存在,那么 make 会在当前文件中找目标文件为 test.o 的依赖性,如果找到则再根据那一个规则生成 test.o 文件。
这就是整个 make 的依赖性,make 会一层又一层地去找文件的依赖关系,直到最终编译出第一个目标文件。在寻找的过程中,如果出现错误,比如最后被依赖的文件找不到,那么 make 会直接退出并报错(因为 make 只管文件的依赖性,不会管依赖的文件项到底在不在)。如果是所定义的命令的错误,或是程序编译不成功,make 不会理会。
clean 项目清理
工程是需要被清理的。
比如 clean,如果没有被第一个目标文件直接或间接关联,那么它后面所定义的命令将不会被自动执行,不过,我们可以显示要 make 执行。即命令 make clean,以此来清除所有的目标文件,以便重新编译。
一般会把 clean 设置为伪目标,用 .PHONY 修饰。(伪目标的特性是:总是被执行的)
分布式版本控制软件 - git
1.在 gitee/github 创建新仓库:略,然后在创建好的仓库页面中复制远程仓库的地址 url,推荐 HTTPS。
2.克隆远程仓库到本地
$ git clone [url]
执行命令后,输入 gitee/github 的用户名和密码,将会直接在本地创建一个放置代码的目录。
$ git add . # 添加所有文件到暂存区
$ git commit -m "本次提交的主题" # 提交文件到本地仓库,""中写提交信息,不能乱写
$ git push # 推动本地仓库的文件到远程仓库
会提示设置用户名和邮箱(每次 git 提交都会使用到该信息,它被永远的嵌入到了你的提交中) (仓库有)
$ git config --global user.email "you@example.com" # 邮箱
$ git config --global user.name "Your Name" # 用户名
补充:
$ git log # 查看所有提交日志信息
$ git status # 查看本地仓库所有文件状态

相关文章:
【linux】环境基础|开发工具|gcc|yum|vim|gdb|make|git
目录 编辑 Linux 软件包管理器 yum 软件包: 操作: 拓展:lrzsz简介 Linux开发工具 Linux编辑器-vim使用 vim 的基本概念 命令模式 插入模式 底行模式 vim 命令模式的操作指令 vim 底行模式的操作命令 Linux编译器-gcc/g使用 功能 格…...
小程序中实现轮播图左向堆叠
1、效果图: 轮播图左向堆叠 2、封装的组件: my-swiper.wxml <view><view class"tower-swiper" bindtouchend"TowerEnd"><view class"tower-item" wx:for"{{swiperList}}" wx:key"index&q…...
零基础入门数据挖掘系列之「建模调参」
摘要:对于数据挖掘项目,本文将学习如何建模调参?从简单的模型开始,如何去建立一个模型;如何进行交叉验证;如何调节参数优化等。 建模调参:特征工程也好,数据清洗也罢,都是…...
如何在Mac中删除照片?这里有详细步骤
前言 本文介绍如何从Mac中删除照片,以释放硬盘空间或更好地组织文件和文件夹。 如何使用废纸篓删除Mac上的图片 在Mac上删除图片的最简单方法之一是使用废纸篓功能。学习只需几秒钟。下面是如何删除单个图片以及如何在Mac上删除多个图片,以及一些关键和有用的提示,以使该…...
Qt笔记 事件处理_鼠标事件
什么是事件? 点击鼠标左键,双击鼠标左键,鼠标来回移动,按下键盘按钮,这些都是事件。 那么事件的响应机制是什么样的呢? 首先main函数中有一个QApplication,其作用是创建一个应用程序对象&…...
【Vue】三、使用ElementUI实现图片上传
目录 一、前端代码实现 二、后端代码实现 三、调试效果实现 一、前端代码实现 废话不多说直接上代码 <el-form-item prop"image" label"上传图片" v-model"form.image"><el-upload:action"http://localhost:8…...
ffmpeg的ffprobe.exe查询修改视频信息
# 查询视频信息 ffprobe -i 1.mp4Input #0, mov,mp4,m4a,3gp,3g2,mj2, from video.mp4:Metadata:major_brand : isomminor_version : 512compatible_brands: isomiso2avc1mp41encoder : Lavf58.20.100comment : 123654Duration: 00:00:15.21, start: 0.0…...
Windows 2019服务器上安装NFS服务器
提供NFS服务服务器: Windows 2019服务器上安装NFS服务器资源管理器 创建目录比如D:\nfshare, 鼠标邮件菜单 点击 属性,进行NFS共享 使用NFS服务的客户端: 另外一台Windows服务器,需要安装NFS客户端 具体操作:Window…...
元素定位之xpath和css
元素定位 xpath绝对路径相对路径案例xpath策略(路径)案例xpath策略(层级、扩展)属性层级与属性层级与属性拓展层级与属性综合 csscss选择器(id、类、标签、属性)id选择器类选择器标签选择器属性选择器案例-…...
JavaScript 什么是纯函数,有哪些常见的纯函数
什么是纯函数 纯函数是指那些不依赖于外部状态,也不改变外部状态的函数。在JavaScript中,纯函数的返回值仅由其输入参数决定,而且执行纯函数不会产生副作用,比如修改全局变量或修改传入的参数。 常见的纯函数 JavaScript中一些常…...
c++ 指针大小
C的一个指针占内存几个字节? 结论: 取决于是64位编译模式还是32位编译模式(注意,和机器位数没有直接关系) 在64位编译模式下,指针的占用内存大小是8字节在32位编译模式下,指针占用内存大小是4字…...
IBM SPSS Statistics:提升数据处理效率的利器
IBM SPSS Statistics软件是一款功能强大的统计软件平台,广泛应用于学术研究、市场调查、数据挖掘和业务决策等领域。其主要功能特色体现在以下几个方面: 基础描述统计功能:软件提供平均值、众数、标准差、百分位数等多种常用的统计数值&#…...
is ignored, because it exists, maybe from xml file
1、问题概述? springboot整合mybatisplus启动的时候报错信息如下: 2024-03-20 10:12:19.239 ERROR 17840 --- [ main] c.b.m.core.MybatisConfiguration : mapper[com.hazq.hazqoa.mapper.DutyTrunsMapper.dutyTrunsExistence] is …...
Spark面试整理-Spark是什么?
Apache Spark是一个开源的分布式计算系统,它提供了一个用于大规模数据处理的快速、通用、易于使用的平台。它最初是在加州大学伯克利分校的AMPLab开发的,并于2010年开源。自那时起,Spark已经成为大数据处理中最受欢迎和广泛使用的框架之一。下面是Spark的一些关键特点: 速度…...
Android 13.0 开机启动优化之PMS扫描apk耗时相关功能优化
1.前言 在android13.0的系统rom定制化开发中,在系统中开发产品时,会根据客户要求内置第三方app,这时如果内置app过多,或者安装的app过多,在系统开机的过程中 在pms扫描安装app的时候,就会比较耗时,这时候就需要优化下pms扫描安装app这块的功能代码,用多线程来实现pms扫…...
云蜜罐技术(德迅猎鹰)诞生
数字化程度高且高价值信息密集的行业,如金融、能源、互联网、政府、教育、医疗、军工等行业,面对日益规模化、专业化的网络攻击,渐渐不再满足于一味的防守加固。除了巩固防线之外,他们愈发看重主动出击、感知更大范围内的攻击&…...
ARM:汇编点灯
.text .global _start _start: 使能GPIOE和GPIOF的外设时钟 LDR R0,0x50000A28 指定寄存器地址 LDR R1,[R0] 将寄存器原来的数值读取出来,保存到R1中 ORR R1,R1,#(0x3<<4) 将第3/4位设置为1 STR R1,[R0] 将修改后的数值写回设置LED1亮 设置PE10为输出…...
69: 偷菜时间表(python)
收藏 难度:一般 标签:暂无标签 题目描述 随着“开心农场”等娱乐游戏风靡互联网,“偷菜”遂瞬间蹿红网络,席卷网民生活。 于是,“你‘偷’了吗”便成为大家见面的招呼语。很快,数百万都市白领成为“偷菜…...
【计算机视觉】三、图像处理——实验:图像去模糊和去噪、提取边缘特征
文章目录 0. 实验环境1. 理论基础1.1 滤波器(卷积核)1.2 PyTorch:卷积操作 2. 图像处理2.1 图像读取2.2 查看通道2.3 图像处理 3. 图像去模糊4. 图像去噪4.1 添加随机噪点4.2 图像去噪 0. 实验环境 本实验使用了PyTorch深度学习框架,相关操作…...
用css滤镜做颜色不同的数据卡片(背景图对于css滤镜的使用)
<template> <div class"xx_modal_maincon"><div class"xx_model_bt">履约起始日至计算日配额及履约情况</div><el-row><el-col :span"6"><div class"xx_modal_mod"><div class"mod…...
stm32G473的flash模式是单bank还是双bank?
今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...
《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...
家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序
一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中,新增了一个本地验证码接口 /code,使用函数式路由(RouterFunction)和 Hutool 的 Circle…...
Razor编程中@Html的方法使用大全
文章目录 1. 基础HTML辅助方法1.1 Html.ActionLink()1.2 Html.RouteLink()1.3 Html.Display() / Html.DisplayFor()1.4 Html.Editor() / Html.EditorFor()1.5 Html.Label() / Html.LabelFor()1.6 Html.TextBox() / Html.TextBoxFor() 2. 表单相关辅助方法2.1 Html.BeginForm() …...
MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)
macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 🍺 最新版brew安装慢到怀疑人生?别怕,教你轻松起飞! 最近Homebrew更新至最新版,每次执行 brew 命令时都会自动从官方地址 https://formulae.…...

