【Linux】Linux开发工具(yum、gdb、git)详解

news2024/11/15 15:33:17

一、软件包管理器 yum

1、什么是软件包

  • 在 Linux 下安装软件,通常的办法是下载到程序的源代码,并进行编译,得到可执行程序。
  • 但这样太麻烦了,于是有些人把一些常用的软件提前编译好,做成软件包(可以理解成在 Windows 上的安装程序)放在一个服务器上,通过包管理器可以很方便的获取到这个编译好的软件包,直接进行安装。
  • 软件包和软件包管理器,就好比 "App" 和 “应用商店” 这样的关系。
  • yum(Yellow dog Updater, Modified) 是 Linux 下非常常用的一种包管理器。主要应用在 Fedora,RedHat,Centos 等发行版上。

Linux 下安装软件的方式:

  • 源代码安装。

  • rpm 包安装。

  • yum 工具(yum 是一条命令)。

【总结】

yum 是什么?

在 Linux 中下载资源的一种工具,类似于手机上的应用商店。

yum 可以为我们提供什么服务呢?
  • 查找、安装、卸载资源。
  • 解决依赖关系。

在手机应用商店上面搜索下载软件,本质是在该公司的后端服务器上搜索下载软件。

那么应用商店如何知道该去哪个服务器上下载软件呢?
  • 这个应用商店在本地一定有相关软件的配置信息(比如软件名和其对应的下载链接)。
  • 所以 yum 工具中一定也有配置文件,指明我们应该去哪里下载资源。

2、查看、安装和卸载软件包

(1)查看软件包(yum list

通过此命令可以罗列出当前一共有哪些软件包。由于包的数目非常之多,一般配合管道(grep 命令)筛选出我们关注的包。

例如:

$ sudo yum list | grep lrzsz

结果如下:

# 软件包的名称和版本
lrzsz.x86_64                             0.12.20-36.el7                @os 

注意

  • 第 1 列:软件包名称,主版本号.次版本号.源程序发行号-软件包的发行号.主机平台.cpu架构。
  • “x86_64” 后缀表示 64 位系统的安装包,“i686” 后缀表示 32 位系统安装包,选择包时要和系统匹配。
  • 第 2 列:“el7” 表示操作系统发行版的版本,“el7” 表示的是 centos7/redhat7。
  • 第 3 列:表示的是 “软件源” 的名称,即该软件包的发布方,类似于 “微信官网”,“华为应用商店” 这样的概念。

(2)安装软件(yum install
$ sudo yum install -y sl # 一个好玩的东西,可以在屏幕上跑一个小火车

yum 会自动找到都有哪些软件包需要下载,-y 表示直接安装,中途不需要确认。出现 complete! 的字样说明软件安装完成。

注意

  1. 安装软件时由于需要向系统目录中写入内容,一般需要 sudo 命令或者切到 root 账户下才能完成。
  2. yum 安装软件只能一个装完了再装另一个。在 yum 安装一个软件的过程中,如果再尝试用 yum 安装另外一个软件,yum 会报错。

(3)卸载软件(yum remove
$ sudo yum remove -y sl # 卸载sl软件以及它的依赖包

更新 yum 源

yum 的配置文件 /etc/yum.conf,这个一般不要去改动。

在 yum 配置路径下,会有 yum 源:

[ll@VM-0-12-centos 5]$ ls /etc/yum.repos.d/ # 查看yum源
CentOS-Base.repo  CentOS-Epel.repo  epel.repo  epel-testing.repo

# CentOS-Base.repo: yum源,要求软件可靠稳定才能放进yum源中,这里的软件版本迭代比较慢
# CentOS-Epel.repo: 扩展源,比如某个软件新开发的版本,就可以放到epel源中

在 CentOS-Base.repo 文件中可以进行软件源(即软件的下载链接)的配置,当你使用 yum install 安装软件时,就会去对应的服务器上下载软件。

执行 vim /etc/yum.repos.d/CentOS-Base.repo


3、关于 rz / sz 工具

(1)功能

这个工具用于本地 Windows 机器和远端的 Linux 服务器通过 XShell 传输文件。

安装完毕之后可以通过拖拽的方式将文件上传过去。

安装 rz / sz 工具:

$ sudo yum install -y lszrz  # lszrz是要安装的软件名称

安装完毕之后可以通过拖拽的方式将文件上传过去。


(2)用法

1、rz 命令,上传 Windows 中的文件到远端 Linux 服务器中:

$ rz # 运行该命令会弹出一个文件选择窗口,从本地选择文件上传到服务器,上传到服务器的路径为当前执行rz命令的目录。

2、sz 命令,将选定的文件发送到本地 windows 机器:

$ sz filename # filename是文件名

二、Linux 开发工具调试器 gdb

1、背景

  • 程序的发布方式有两种:debug 模式和 release 模式。
  • Linux gcc / g++ 出来的二进制程序,默认是 release 模式
  • 要使用 gdb 调试,必须在源代码生成二进制程序的时候, 加上 -g 选项。
$ gcc test.c -o test_debug -g

2、基本概念

  • 程序的发布的两种模式:

    • debug 模式(在生成可执行程序的时候,会加入调试信息,可调试)。
    • release 模式(没有调试信息,不可被调试)。

Linux gcc / g++ 编译生成的 release 版本和 debug 版本的可执行程序区别:


3、基本操作

gdb 命令格式:gdb [目标文件名]

这些基本操作中,常用操作都在下面举了例子,例子也是大致按照调试步骤来排列的。

  • list/l + 行号:显示程序源代码,接着上次的位置往下列,每次列 10 行。
(gdb) list 1  # 从第一行代码开始显示。接着按回车键,会继续往下显示代码,每次列10行。
  • list/l + 函数名:列出某个函数的源代码。(比如:l main 列出 main 函数的代码)

  • b / break + 行号在某一行设置断点。

(gdb) b 7
Breakpoint 1 at 0x400543: file test.c, line 7. # 断点1位于0x400543:文件test.c,第7行
  • break 函数名:在某个函数开头设置断点。(实际上是这个断点是打在该函数的第一行)

  • info b查看断点信息。当前设置了哪些断点。

(gdb) info b
Num     Type           Disp Enb Address            What
1       breakpoint     keep y   0x0000000000400543 in main at test.c:7  # 第7行
2       breakpoint     keep y   0x0000000000400555 in main at test.c:10 # 第10行
  • r 或 run:开始调试,如果没有设置断点,就直接运行结束。(断点打完了,该如何让程序执行起来,开始调试呢?相当于 VS 中的 F5
(gdb) r
Starting program: /home/ll/xxxx/test_debug 

Breakpoint 1, main () at test.c:7  # 此时来到了第一个断点处(第7行)
7	  for (; i < 10; i++) {
(1)问题:此时我想跳到第二个断点去调试程序,该怎么办呢?
  • continue / c:从当前位置开始连续而非单步执行程序。(运行至下一个断点处停下来

(gdb) continue
Continuing.

Breakpoint 2, main () at test.c:10 # 此时来到了第二个断点处(第10行)
10	  printf("sum = %d\n", sum);
  • n 或 next:单条执行。逐过程,不会进入函数,相当于 VS 中的 F10
(gdb) n
8	    sum += i; # 单步执行,此时来到了第8行
  • s 或 step:进入函数调用。逐语句,会进入函数,相当于 VS 中的 F11

  • print / p + 变量打印变量值。

(gdb) p i
$1 = 3
(gdb) p sum
$2 = 3
(gdb) p &i
$3 = (int *) 0x7fffffffe44c
(gdb) p &sum
$4 = (int *) 0x7fffffffe448
(2)问题:我想要这些变量值随着调试的进行而不断变化,该怎么办呢?
  • display + 变量名设置常显示。跟踪查看一个变量,每次停下来都显示它的值。

(gdb) display i   # 跟踪查看变量i
1: i = 3
(gdb) display sum # 跟踪查看变量sum
2: sum = 3
(gdb) n    # 单步调试
7	  for (; i < 10; i++) {
2: sum = 6 # 显示变量i的值,前面的2:是它的序号
1: i = 3   # 显示变量sum的值,前面的1:是它的序号
  • undisplay + 序号取消常显示。取消对先前设置的那些变量的跟踪。
(gdb) undisplay 2
(gdb) undisplay 1
  • delete breakpoint:删除所有断点
  • delete / d Num删除序号为 Num 的断点。
  • disable Num禁用断点。
  • enable Num启用断点。
  • until X(指定行号)跳转到第 X 行。
  • finish执行到当前函数返回,然后停下来等待命令。输入 finish 可直接结束当前函数调用,用此命令可以快速判断一个程序中到底是哪个函数出了 bug(此命令在非 main 函数中才有效)。
(gdb) finish 
Run till exit from #0  Sum (n=10) at test.c:4
0x0000000000400609 in main () at test.c:18
18	  int sum = Sum(n);   # 结束Sum函数调用,直接返回函数结果
Value returned is $1 = 55 # Sum函数的返回值
  • print§:打印表达式的值,通过表达式可以修改变量的值或者调用函数(print 中可以执行各种表达式)。
  • set var i = 100:修改变量 i 的值(比如在调试过程中,有一个 if 语句本来该进去的,结果没进去,所以我怀疑是不是变量的值有问题,就通过这种方式来修改变量的值,观察它是否会进入这个 if 语句)。
  • bt / breaktrace:查看各级函数调用及参数(相当于 VS 中的查看调用堆栈)。
(gdb) bt     # 查看调用堆栈,main函数上面压的是SUm函数
#0  Sum (n=10) at test.c:4
#1  0x0000000000400609 in main () at test.c:18
  • info(i) locals:查看当前栈帧局部变量的值

  • q / quit退出 gdb。

注意:调试程序完毕,或者调试中间过程,调试痕迹很重要,当调试一个大的项目,可能有几十个断点,某个断点调试完了,不要直接把它删除,而是暂时禁用它,等程序没有任何问题了,再把所有断点删除。


三、Linux 开发工具分布式版本控制软件 git

1、背景

git 是一个分布式版本控制软件,最初由林纳斯·托瓦兹创作,于 2005 年以 GPL 许可协议发布。最初目的是为了更好地管理 Linux 内核开发而设计。


2、使用 git

(1)预备工作

安装 git:

$ sudo yum install -y git

在 gitee / github 创建新仓库,然后在创建好的仓库页面中复制远程仓库的地址 url,推荐 HTTPS。


(2)克隆远程仓库到本地
$ git clone [url] # 这里的url就是刚刚建立好的仓库的链接

执行命令后,输入 gitee / github 的用户名和密码,将会直接在本地创建一个放置代码的目录。

仓库中的内容(注意:不要修改隐藏文件 .git 里面的内容):


(3)把需要提交的代码拷贝到本地仓库

(4)三板斧(提交本地仓库文件到远程仓库)
# 添加所有文件到暂存区,将需要用git管理的文件告知git
$ git add .

# 提交文件到本地仓库,""中写提交日志,不能乱写,描述改动的详细内容
$ git commit -m "first commit"

# 推动本地仓库的文件到远程仓库,即同步到远端服务器上
$ git push origin master

最后的 "." 表示当前目录。 

最后一步需要填入用户名密码。同步成功后,刷新页面就能看到代码改动了。

执行 git commit -m “msg” 时,会让你设置用户名和邮箱(每次 git 提交都会使用到该信息,它被永远的嵌入到了你的提交中):

$ git config --global user.email "you@example.com" # 邮箱
$ git config --global user.name "Your Name"        # 用户名

当依次执行三个命令后,输入 gitee/github 的用户名和密码,在 gitee/github 上的远程仓库刷新就可以看到自己的代码啦。


(5)配置免密码提交

git本地免密码和账号pull、push_没有git账号怎么拉代码-CSDN博客


(6)补充
$ git log    # 查看所有提交日志信息
$ git status # 查看本地仓库所有文件状态

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

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

相关文章

mac电脑flutter环境配置,解决疑难问题

准备工作 首先搭建flutter的环境需要使用到flutter的sdk&#xff0c;可以直接跳去官网下载&#xff1a;Choose your first type of app - Flutter 中文文档 - Flutter 中文开发者网站 - Flutter&#xff0c;下载时要注意你电脑所使用的芯片是Intel的还是苹果的芯片。 下载好的…

邮箱营销软件推荐?企业邮箱群发会限制吗?

邮箱营销平台怎么选择&#xff1f;哪种邮箱适合做外贸邮件群发&#xff1f; 邮箱营销凭借其精准触达、低成本和高回报的特点&#xff0c;依然是许多企业不可或缺的营销手段。该如何选择一款适合自己的工具呢&#xff1f;蜂邮EDM将为您推荐几款优秀的邮箱营销软件&#xff0c;并…

微信的年终奖牛逼,但真相是……

loonggg 读完需要 3分钟 速读仅需 1 分钟 可能标题党了一些哈。 我看最近很多人都用微信年终奖这个标题来吸引流量。 前几天我在媒体上也看到了关于腾讯年终奖的爆料&#xff0c;确实&#xff0c;微信团队相比于腾讯其他团队的年终奖高很多。 尤其是&#xff0c;微信视频号团队…

Linux学习笔记(centOS)—— 文件系统

目录 一、Linux中的文件 打开方式 二、目录结构​ 三、相关命令 切换目录命令 列出当前目录下的文件和目录命令 一、Linux中的文件 “万物皆文件。” 图1.1 所有文件 打开方式 图形化界面左上角的位置→计算机&#xff0c;打开以后就可以看到Linux全部的文件了&#xf…

Codeforces Round 923 (Div. 3)

Codeforces Round 923 (Div. 3) Codeforces Round 923 (Div. 3) A. Make it White 题意&#xff1a;略 思路&#xff1a;找最小和最大的‘B’下标即可 AC code&#xff1a; void solve() {cin >>n;string s; cin>> s;int mn INF, mx 0;for (int i 0; i <…

2024阿里云GPU服务器租用费用价格表说明

阿里云GPU服务器租用价格表包括包年包月价格、一个小时收费以及学生GPU服务器租用费用&#xff0c;阿里云GPU计算卡包括NVIDIA V100计算卡、T4计算卡、A10计算卡和A100计算卡&#xff0c;GPU云服务器gn6i可享受3折优惠&#xff0c;阿里云百科aliyunbaike.com分享阿里云GPU服务器…

Page246~250 11.1GUI下的I/O基础

11.1.1 从“控制台”说起 “命令行交互界面”&#xff08;简称CUI,也有人称为CLI)。 CUI需要我们记忆并在控制台输入命令文本内容&#xff0c;而GUI则以图形的方式呈现、组织各类命令&#xff0c;比如Windows的“开始”菜单&#xff0c;用户只需通过简单的键盘或鼠标操作&am…

【C++】C++的简要介绍

简单不先于复杂&#xff0c;而是在复杂之后。 文章目录 1. 什么是C2. C的发展史3. C的重要性3.1 语言的使用广泛度3.2 在工作领域3.3 在校招领域3.3.1 岗位需求3.3.2 笔试题 3.3.3 面试题 4. 如何学习C4.1 别人怎么学&#xff1f; 1. 什么是C C语言是结构化和模块化的语言&…

写后台接口,前后台数据对接(vue+springboot)

一、怎么写接口&#xff1f;&#xff1f;&#xff1f; 1.Entity&#xff08;定义一堆属性之类的&#xff09; altins>getter和setter方法 2.Controller 3.Service&#xff08;查询出数据&#xff09; 调用了一个方法 4.Mapper 5.回到service&#xff08;返回数据&#x…

关于 Ant Design 的 Upload 组件使用 action 自动上传出现跨域问题的解决

问题描述 使用 Ant Design 的 Upload 组件时&#xff0c;可以通过 action 属性指定上传地址实现选择文件自动上传。但在我选择文件上传后浏览器控制台一直出现跨域错误。关键我已经在后端处理了跨域&#xff0c;还是一直会出现跨域错误。而且其它请求都可以正常处理跨域&#…

机器学习——有监督学习和无监督学习

有监督学习 简单来说&#xff0c;就是人教会计算机学会做一件事。 给算法一个数据集&#xff0c;其中数据集中包含了正确答案&#xff0c;根据这个数据集&#xff0c;可以对额外的数据希望得到一个正确判断&#xff08;详见下面的例子&#xff09; 回归问题 例如现在有一个…

文生图提示词:摄影艺术风格

艺术风格 --摄影艺术风格 Photography Art Styles 覆盖了从传统到现代、从具象到抽象的多种摄影艺术风格&#xff0c;展示了摄影作为一种艺术形式的广泛性和多样性。 Portrait Photography 人像摄影 Landscape Photography 风景摄影 Street Photography 街头摄影 Documentary P…

质数基础筛法

文章目录 埃氏筛线性筛 埃氏筛 埃氏筛是一种筛素数的方法&#xff0c;埃氏筛的思想很重要&#xff0c;主要是时间复杂度 朴素的埃氏筛的时间复杂度是 O ( n l o g n ) O(nlogn) O(nlogn) 这个复杂度是调和级数 vector<int>p; int vis[N];void solve() {rep(i,2,n){if(…

Java学习网络编程

Java学习网络编程 大纲 网络相关概念IP地址网络协议InetAdressSocket 具体案例 1. 网络相关概念 网络 网络通信 2. IP地址 域名 3.网络协议 4. InetAdress 获得本机的名字和IP public static void main(String[] args) throws UnknownHostException {InetAddress inetA…

C语言——T/单链表专题

1. 链表的概念及结构 概念&#xff1a;链表是⼀种物理存储结构上⾮连续、⾮顺序的存储结构&#xff0c;数据元素的逻辑顺序是通过链表 中的指针链接次序实现的 链表的结构跟⽕⻋⻋厢相似&#xff0c;淡季时⻋次的⻋厢会相应减少&#xff0c;旺季时⻋次的⻋厢会额外增加⼏节。只…

【flink状态管理(三)】StateBackend的整体设计、StateBackend创建说明

文章目录 一. 状态后端概述二. StateBackend的整体设计1. 核心功能2. StateBackend的UML3. 小结 三. StateBackend的加载与初始化1. StateBackend创建概述2. StateBackend创建过程 一. 状态后端概述 StateBackend作为状态存储后端&#xff0c;提供了创建和获取KeyedStateBacke…

数据结构:双向链表

文章目录 1. 双向带头循环链表的结构2. 相关操作2.1 创建节点2.2 尾插2.3 头插2.4 打印2.5 尾删2.6 头删2.7 查找2.8 指定位置前/后插入2.9 删除指定位置的节点2.10 删除指定位置后的节点2.11 销毁链表 3.顺序表与链表区别 1. 双向带头循环链表的结构 与单链表不同的是&#xf…

Python学习从0到1 day14 Python数据容器.5.总结及通用操作

我什么都没有忘&#xff0c;只是有些事只适合收藏&#xff0c;不能说&#xff0c;不能想&#xff0c;却也不能忘 ——24.2.4 一、数据容器的分类 数据容器可以从以下视角进行简单的分类 1.是否支持下标索引&#xff1a; 支持&#xff1a;列表元组、字符串——序列类型 不支持&a…

华为机考入门python3--(9)牛客9-提取不重复的整数

分类&#xff1a;列表 知识点&#xff1a; 从右往左遍历每一个字符 my_str[::-1] 题目来自【牛客】 def reverse_unique(n): # 将输入的整数转换为字符串&#xff0c;这样可以从右向左遍历每一位 str_n str(n) # 创建一个空列表来保存不重复的数字 unique_digits []…

从零开始手写mmo游戏从框架到爆炸(十一)— 注册与登录

导航&#xff1a;从零开始手写mmo游戏从框架到爆炸&#xff08;零&#xff09;—— 导航-CSDN博客 从这一章开始&#xff0c;我们进入业务的部分&#xff0c;从注册登录开始。 创建注册和登录的路由 package com.loveprogrammer.command.server;public interface Se…