【Linux】|开发工具介绍 | yum |vim | gcc/g++ | gdb | git

news2024/9/22 23:32:06

Linux开发工具详解

      • 1. 引言💦
      • 2. Linux软件包管理器:Yum
        • 什么是软件包
        • 安装和卸载软件
        • rzsz工具
      • 3. Linux编辑器:Vim
        • Vim的基本概念
        • Vim的基本操作
        • Vim模式和命令集🐳
        • Vim配置
      • 4. Linux编译器:GCC/G++
        • 编译过程详解
        • ==编译器的自举==
        • 函数库:静态库和动态库
        • GCC常用选项
      • 5. Linux调试器:GDB
        • GDB的基本使用
        • 调试命令详解
      • 6. Linux项目自动化构建工具:Makefile
        • Makefile的基本概念
        • Makefile的编写实例
        • 自动化编译和项目清理
      • 7. 第一个Linux程序:进度条
        • 行缓冲区概念
        • 进度条代码实现
      • 8. 版本控制系统:Git
        • Git的安装与配置
        • 使用Git管理项目
        • 将项目上传至GitHub


1. 引言💦

在Linux系统上进行开发,掌握和使用合适的工具能够大大提高开发效率和代码质量。本文将详细介绍几种常用的Linux开发工具,包括软件包管理器Yum、编辑器Vim、编译器GCC、调试器GDB、构建工具Makefile以及版本控制系统Git。通过这些工具的使用,你将能够更高效地进行软件开发和维护。


2. Linux软件包管理器:Yum

什么是软件包

在Linux系统中,软件包是预先编译好的程序集合,类似于Windows上的安装程序。使用软件包管理器如Yum,可以方便地安装、更新和卸载软件包,而无需手动编译源代码。

安装和卸载软件

要安装软件包,可以使用如下命令:

sudo yum install package_name

例如,安装lrzsz软件包:

sudo yum install lrzsz

要卸载软件包,可以使用以下命令:

sudo yum remove package_name

例如,卸载lrzsz软件包:

sudo yum remove lrzsz
rzsz工具

rzsz工具用于在Windows机器和远程Linux机器之间通过XShell传输文件,安装完成后可以通过拖拽的方式将文件上传。


3. Linux编辑器:Vim

Vim的基本概念

Vim是vi的增强版,是一种多模式编辑器。Vim有三种基本模式:命令模式、插入模式和末行模式。命令模式用于移动光标和删除文本,插入模式用于文本输入,末行模式用于保存文件和退出Vim。

Vim的基本操作

进入Vim编辑一个文件:

vim filename

在命令模式下,按下iao进入插入模式进行文本输入。按下ESC键返回命令模式。按:进入末行模式,可以保存文件或退出Vim。

常用命令包括:

:w  # 保存文件
:q  # 退出Vim
:wq # 保存并退出
:q! # 强制退出不保存
Vim模式和命令集🐳

在这里插入图片描述


  • 命令模式:用于光标移动和文本操作

    • h 左移光标,j 下移光标,k 上移光标,l 右移光标
    • dd 删除整行,yy 复制整行,p 粘贴
  • 插入模式:用于文本输入

    • i 光标前插入,a 光标后插入,o 新行插入
  • 末行模式:用于保存和退出

    • :w 保存文件,:q 退出Vim,:wq 保存并退出,:q! 强制退出
Vim配置

Vim的配置文件位于/etc/vimrc(系统级)和~/.vimrc(用户级)。常用配置包括:

syntax on      " 启用语法高亮
set nu        " 显示行号
set shiftwidth=4 " 设置缩进为4个空格

4. Linux编译器:GCC/G++

编译过程详解

GCC的编译过程分为四个阶段:预处理、编译、汇编和链接。

  • 预处理:宏替换、文件包含、条件编译和去注释

    gcc -E hello.c -o hello.i
    

    在这里插入图片描述

  • 编译:将代码转换为汇编语言

    gcc -S hello.i -o hello.s
    
  • 汇编:将汇编代码转换为目标代码

    gcc -c hello.s -o hello.o
    
  • 链接:生成可执行文件或库文件

    gcc hello.o -o hello
    
    编译器的自举

在这里插入图片描述

函数库:静态库和动态库
  • 静态库:编译时将库文件代码加入可执行文件中,生成的文件较大,但运行时不需要库文件。

    • 静态库文件后缀为.a
  • 动态库:编译时不将库文件代码加入可执行文件中,运行时由运行时链接器加载库文件,节省系统资源。

    • 动态库文件后缀为.so
GCC常用选项
  • -E:仅进行预处理
  • -S:仅进行编译生成汇编代码
  • -c:仅进行编译生成目标代码
  • -o:指定输出文件
  • -g:生成调试信息
  • -O0, -O1, -O2, -O3:优化选项,级别从0到3

5. Linux调试器:GDB

GDB的基本使用

GDB用于调试程序,可以设置断点、单步执行、查看变量等。使用GDB调试程序时,需要在编译时加上-g选项。

调试命令详解
  • gdb binFile:启动GDB并加载可执行文件
  • run:运行程序
  • break 行号break 函数名:设置断点
  • next:单步执行
  • step:进入函数
  • print 表达式:打印表达式的值
  • continue:继续执行
  • quit:退出GDB

6. Linux项目自动化构建工具:Makefile

Makefile的基本概念

Makefile定义了一系列规则来指定文件的编译顺序和依赖关系,实现自动化编译。Make工具解释Makefile中的指令。

Makefile的编写实例

一个简单的Makefile示例:

hello: hello.o
    gcc hello.o -o hello

hello.o: hello.c
    gcc -c hello.c -o hello.o

clean:
    rm -f hello hello.o
自动化编译和项目清理
  • 依赖关系:Make根据文件的时间戳确定哪些文件需要重新编译。
  • 伪目标:如clean,用.PHONY声明,执行make clean进行项目清理。

7. 第一个Linux程序:进度条

行缓冲区概念

在Linux中,标准输出是行缓冲的,输出会在遇到换行符时刷新缓冲区。因此,制作进度条时需要手动刷新缓冲区。

进度条代码实现
#include <stdio.h>
#include <unistd.h>
#include <string.h>

int main() {
    int i = 0;
    char bar[102];
    memset(bar, 0, sizeof(bar));
    const char *lable = "|/-\\";
    while (i <= 100) {
        printf("[%-100s][%d%%][%c]\r", bar, i, lable[i % 4]);
        fflush(stdout);
        bar[i++] = '#';
        usleep(10000);
    }
    printf("\n");
    return 0;
}

8. 版本控制系统:Git

Git的安装与配置

使用Yum安装Git:

yum install git
使用Git管理项目
  1. 初始化Git仓库:

    git init
    
  2. 将文件添加到暂存区:

    git add filename
    
  3. 提交改动:

    git commit -m "commit message"
    
  4. 推送到远程仓库:

    git push origin master
    
将项目上传至GitHub
  1. 注册GitHub账号并创建新仓库。
  2. 克隆仓库到本地:
    git clone repository_url
    
  3. 添加文件并提交:
    git add .
    git commit -m "initial commit"
    git push origin master
    

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

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

相关文章

如何通过兔子和窝窝的故事理解“在机器人学习和研究中的获得成本与维护成本”(节选)

获得成本 掌握一门课程&#xff0c;以最为简单的学校成绩过60为例&#xff0c;需要按要求提交材料&#xff0c;包括作业、报告、实验和考试等&#xff0c;依据学分和考核要求的不同&#xff0c;需要对于花费时间和经历进行完成。 维护成本 考完了&#xff0c;如果被动学习那…

Django 删除单行数据

1&#xff0c;添加模型 from django.db import modelsclass Post(models.Model):title models.CharField(max_length200)content models.TextField()pub_date models.DateTimeField(date published)class Book(models.Model):title models.CharField(max_length100)author…

安防监控视频平台LntonCVS视频融合共享平台智慧消防实现远程集中视频监控方案

近年来&#xff0c;电力系统内变电站着火事件频发&#xff0c;这对消防安全管理提出了严峻挑战。我国消防安全基础设施不完善、管理机制不健全、应急处置能力不足及公众消防安全意识淡薄等问题&#xff0c;严重制约了消防安全的提升。因此&#xff0c;加强变电站的消防安全管理…

Python应用爬虫下载QQ音乐歌曲!

目录&#xff1a; 1.简介怎样实现下载QQ音乐的过程&#xff1b; 2.代码 1.下载QQ音乐的过程 首先我们先来到QQ音乐的官网&#xff1a; https://y.qq.com/&#xff0c;在搜索栏上输入一首歌曲的名称&#xff1b; 如我在上输入最美的期待&#xff0c;按回车来到这个画面 我们首…

nx上darknet的使用-目标检测-在python中的使用

1 内置的代码 在darknet中已经内置了两个py文件 darknet_video.py与darknet_images.py用法类似&#xff0c;都是改一改给的参数就行了&#xff0c;我们说一下几个关键的参数 input 要预测哪张图像weights 要使用哪个权重config_file 要使用哪个cfg文件data_file 要使用哪个da…

240712_昇思学习打卡-Day24-LSTM+CRF序列标注(3)

240712_昇思学习打卡-Day24-LSTMCRF序列标注&#xff08;3&#xff09; 今天做LSTMCRF序列标注第三部分&#xff0c;同样&#xff0c;仅作简单记录及注释&#xff0c;最近确实太忙了。 Viterbi算法 在完成前向训练部分后&#xff0c;需要实现解码部分。这里我们选择适合求解…

Android Gantt View 安卓实现项目甘特图

需要做一个项目管理工具&#xff0c;其中使用到了甘特图。发现全网甘特图解决方案比较少&#xff0c;于是自动动手丰衣足食。 前面我用 Python和 Node.js 前端都做过&#xff0c;这次仅仅是移植到 Android上面。 其实甘特图非常简单&#xff0c;开发也不难&#xff0c;如果我…

PCL从理解到应用【04】Octree 原理分析 | 案例分析 | 代码实现

前言 Octree 作为一种高效的空间分割数据结构&#xff0c;具有重要的应用价值。 本文将深入分析 Octree 的原理&#xff0c;通过多个实际案例帮助读者全面理解其功能和应用&#xff0c;包括最近邻搜索、半径搜索、盒子搜索以及点云压缩&#xff08;体素化&#xff09;。 特性…

MongoDB - 查询操作符:比较查询、逻辑查询、元素查询、数组查询

文章目录 1. 构造数据2. MongoDB 比较查询操作符1. $eq 等于1.1 等于指定值1.2 嵌入式文档中的字段等于某个值1.3 数组元素等于某个值1.4 数组元素等于数组值 2. $ne 不等于3. $gt 大于3.1 匹配文档字段3.2 根据嵌入式文档字段执行更新 4. $gte 大于等于5. $lt 小于6. $lte 小于…

(Vue+SpringBoot+elementUi+WangEditer)仿论坛项目

项目使用到的技术与库 1.前端 Vue2 elementUi Cookie WangEditer 2.后端 SpringBoot Mybatis-Plus 3.数据库 MySql 一、效果展示 1.1主页效果&#xff1a; 1.2 文章编辑页面&#xff1a; 1.3 成功发布文章 1.4 文章关键字搜索提示 1.5 文章查询结果展示 1.6 文章内容及交互展示…

统信UOS服务器操作系统离线安装postgresql数据库

原文链接&#xff1a;统信UOS服务器离线安装postgresql数据库 Hello&#xff0c;大家好啊&#xff01;今天给大家带来一篇关于在统信UOS服务器操作系统上离线安装PostgreSQL数据库的文章。PostgreSQL是一款功能强大的开源对象-关系型数据库管理系统。由于某些环境中无法直接访问…

免费开源的工业物联网(IoT)解决方案

什么是 IoT&#xff1f; 物联网 (IoT) 是指由实体设备、车辆、电器和其他实体对象组成的网络&#xff0c;这些实体对象内嵌传感器、软件和网络连接&#xff0c;可以收集和共享数据。 IoT 设备&#xff08;也称为“智能对象”&#xff09;范围广泛&#xff0c;包括智能恒温器等…

SpringBoot+Vue(2)excel后台管理页面

一、需求 SpringBootVue写excel后台管理页面&#xff08;二级页面打开展示每一个excel表&#xff0c;数据库存储字段为“下载、删除、文件详情、是否共享、共享详情”&#xff09; 二、解答 后端(Spring Boot) 1. 项目设置 使用Spring Initializr创建一个新的Spring Boot项目…

深入理解 Elasticsearch 分页技术

原文链接&#xff1a;https://zhuanlan.zhihu.com/p/609576187 Elasticsearch 是一款分布式的搜索引擎&#xff0c;提供了灵活的分页技术。本文主要介绍 Elasticsearch&#xff08;简称 ES&#xff09; 的几种分页技术&#xff0c;并深入分析各种分页技术的优缺点及应用场景。 …

基于AT89C51单片机篮球计时计分器的设计(含文档、源码与proteus仿真,以及系统详细介绍)

本篇文章论述的是基于AT89C51单片机篮球计时计分器的设计的详情介绍&#xff0c;如果对您有帮助的话&#xff0c;还请关注一下哦&#xff0c;如果有资源方面的需要可以联系我。 目录 绪论 原理图 ​编辑 仿真图 系统总体设计图 代码实现 系统论文 资源下载 绪论 本次…

内网服务器通过squid代理访问外网

一、背景 现在要对172.16.58.158服务器进行openssh升级操作,我用之前写好的升级脚本执行后,发现没有备份旧的ssh程序文件,然后还卸载了oenssl-devel,然后我发现其他服务器ssh该服务器失败。同时脚本执行时报错“ configure: error: *** zlib.h missing - please install first …

windows查看局域网所有设备ip

windows如何查看局域网所有设备ip 操作方法 一 . 在搜索栏里输入cmd 二 .在命令行黑窗口输入arp -a 三 . 最上面显示的动态地址就是所有设备ip

day20、21、22补卡

235. 二叉搜索树的最近公共祖先 这道题的解题思路&#xff0c;我想了一会都没想出来&#xff0c;看了题解想&#xff1a;对于二叉搜索树&#xff0c;当我们从上向下去递归遍历&#xff0c;第一次遇到 cur节点是数值在[q, p]区间中&#xff0c;那么cur就是 q和p的最近公共祖先。…

Database数据库 vs Data Warehouse数据仓库 vs Data Mart数据集市 vs Data Lake数据湖

1.DATABASE 数据库 数据库是一个结构化的数据集合&#xff0c;用于存储、管理和检索数据。数据库设计用于支持事务处理&#xff08;OLTP&#xff0c;Online Transaction Processing&#xff09;和日常操作。 数据库通常由数据库管理系统&#xff08;DBMS&#xff09;控制&…

webRtc架构与目录结构

整体架构 目录结构 webrtc Modules目录