【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 # 查看本地仓库所有文件状态

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/758761.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

5_springboot_shiro_jwt_多端认证鉴权_禁用Cookie

1. Cookie是什么 ​ Cookie是一种在客户端&#xff08;通常是用户的Web浏览器&#xff09;和服务器之间进行状态管理的技术。当用户访问Web服务器时&#xff0c;服务器可以向用户的浏览器发送一个名为Cookie的小数据块。浏览器会将这个Cookie存储在客户端&#xff0c;为这个Co…

java的前缀和算法

前缀和的概念 对于一个给定的数组A&#xff0c;它的前缀和数组S中S[i]表示从第1个元素到第i个元素的总和&#xff0c;用公式表示为&#xff1a; SiA1A2A3...An 前缀和的作用 在O(1)的时间求出数组任意区间的区间和。 降低求解的复杂度 算法模板 int n10; int [] arrnew in…

【Linux】盘点广义层面上【三种最基本的进程状态】

前言 大家好吖&#xff0c;欢迎来到 YY 滴 Linux系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过Linux的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY的…

SQL语句之SELECT语句

一般格式 SELECT DISTINCT/ALL 目标列表达式 //要显示的属性列 FROM 表名/视图名 //查询的对象 WHERE 条件表达式 //查询条件 GROUP BY 列名 HAVING 条件表达式 //查询结果分组 ORDER BY 列名 次序; //最终查询结果排序 文章目录 一、基本查询 1、SELECT 目标列表达…

进程(2)——进程优先级

1、基本概念 cpu资源分配的先后顺序&#xff0c;就是指进程的优先权&#xff08;priority&#xff09;。 优先权高的进程有优先执行权利。配置进程优先权对多任务环境的linux很有用&#xff0c;可以改善系统性能。 还可以把进程运行到指定的CPU上&#xff0c;这样一来&a…

Spring MVC开发小练习

1. 加法计算器 需求&#xff1a;输入两个整数&#xff0c;计算和 约定前后端交互接口&#xff1a; 在开发项目前&#xff0c;根据需求先约定好前后端交互接口&#xff0c;双方按照接口文档进行开发&#xff0c;接口文档一旦写好&#xff0c;尽量不要轻易改变&#xff0c;如果…

Springboot+vue的船舶维保管理系统(有报告)。Javaee项目,springboot vue前后端分离项目。

演示视频&#xff1a; Springbootvue的船舶维保管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot vue前后端分离项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09…

2024最新自动化测试面试题合集 (附答案)

1、你会封装自动化测试框架吗&#xff1f; 这个问得最多&#xff0c;甚至有很多公司直接写在招聘要求中&#xff01; 当然可以&#xff0c;自动化框架主要的核心框架就是分层PO模式&#xff1a;分别为&#xff1a;基础封装层BasePage&#xff0c;PO页面对象层&#xff0c;Tes…

网络编程-DAY6

1>创建一个武器信息库&#xff0c;包含编号&#xff08;主键&#xff09;、名称、属性、描述、价格 2>添加三把武器 3>修改某把武器的价格 4>展出价格在1000到4000的武器 5>卖掉一把武器&#xff0c;删除该武器的信息 6>几天后&#xff0c;客户顶着光头…

HarmonyOS NEXT应用开发之左右拖动切换图片效果案例

介绍 本示例使用滑动手势监听&#xff0c;实时调整左右两侧内容显示区域大小和效果。通过绑定gesture事件中的PanGesture平移手势&#xff0c;实时获取拖动距离。当拖动时&#xff0c;实时地调节左右两个Image组件的宽度&#xff0c;从而成功实现左右拖动切换图片效果的功能。…

C语言之动态内存管理(快点进来!!!)

c语言中的小小白-CSDN博客c语言中的小小白关注算法,c,c语言,贪心算法,链表,mysql,动态规划,后端,线性回归,数据结构,排序算法领域.https://blog.csdn.net/bhbcdxb123?spm1001.2014.3001.5343 给大家分享一句我很喜欢我话&#xff1a; 知不足而奋进&#xff0c;望远山而前行&am…

2024全国水科技大会【联合主办】福州水务集团有限公司

福州水务成立于2008年11月&#xff0c;AA信用评级&#xff0c;注册资本21.2亿元。下属各级企业70多家&#xff08;包括3家国家级高新技术企业、1家A股上市企业&#xff09;。集团主营供水、排水、环保、温泉文旅、综合服务五大板块&#xff0c;旗下运营自来水厂17座&#xff0c…

【WSL】Ubuntu 20.04 字符集不认识中文,及其中文路径

1. 问题 $ locale locale: Cannot set LC_CTYPE to default locale: No such file or directory locale: Cannot set LC_ALL to default locale: No such file or directory LANGen_US.UTF-8 LANGUAGE LC_CTYPEUTF-8 LC_NUMERIC"en_US.UTF-8" LC_TIME"en_US.UT…

算法沉淀——贪心算法五(leetcode真题剖析)

算法沉淀——贪心算法五 01.跳跃游戏 II02.跳跃游戏03.加油站04.单调递增的数字 01.跳跃游戏 II 题目链接&#xff1a;https://leetcode.cn/problems/jump-game-ii/ 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向前跳转…

redis在springboot项目中的应用

一&#xff0c;将查询结果放到redis中作为缓存&#xff0c;减轻mysql的压力。 只有在数据量大的时候&#xff0c;查询速度慢的时候才有意义。 本次测试的数据量为XXX. 测试代码: 功能为根据昵称进行模糊匹配。 GetMapping("/get-by-nick")public String getNickN…

维度建模理论之事实表

事实表概述 事实表作为数据仓库维度建模的核心&#xff0c;紧紧围绕着业务过程来设计。其包含与该业务过程有关的维度引用&#xff08;维度表外键&#xff09;以及该业务过程的度量&#xff08;通常是可累加的数字类型字段&#xff09;。 事实表特点 事实表通常比较“细长”…

Node.js核心命令与工具:提升开发效率的实用指南

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…

Redis面试题以及答案

1. 什么是Redis&#xff1f;它主要用来什么的&#xff1f; Redis&#xff0c;英文全称是Remote Dictionary Server&#xff08;远程字典服务&#xff09;&#xff0c;是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库&#xff0c;并…

刷力扣看见一个寻找单身狗的问题?【力扣题解】

今天刷力扣遇到一道有意思的题目&#xff0c;题目是写着撞色问题177 &#xff0c;当我写完这个题去看看有什么好的解题方式的时候&#xff0c;看见一个有趣的题解问题&#xff0c;他对这个题目的描述是几对情侣&#xff0c;带几个单身狗出去玩&#xff0c;然后现在我们要把这几…

天文馆3D可视化:揭秘宇宙星辰的奇幻之旅

在这个科技日新月异的时代&#xff0c;我们似乎离神秘的宇宙越来越近。 天文馆作为普及天文知识、展示宇宙奥秘的重要场所&#xff0c;一直备受人们的喜爱。然而&#xff0c;传统的天文馆展示方式往往局限于平面图片和简单的模型&#xff0c;无法让人真正感受到宇宙的浩瀚与壮丽…