Linux 基础开发工具的使用

news2025/6/1 10:27:01

目录

前言

一:下载工具yum

二:文本编辑器vim

1. 命令模式

2. 插入模式

3. 底行模式

三:gcc和g++

基本使用格式

常用选项及作用

编译过程示例

四、Linux 项目自动化构建工具 ——make/Makefile

1. make 与 Makefile 的关系

2. Makefile 的原理

3. Makefile 的推导规则

四:调试工具(gdb)

五.git

总结


前言

  本篇内容给大家带来的是在Linux下一些常见基础开发工具的使用,这些工具有些需要先下载好才能使用,如果一开始没有该工具,系统应该会提示要如何下载,也会有工具是需要经过配置的,大家多动动小手,搜搜教程,都不难配置的

工具:本质也是指令

一:下载工具yum

linux如何下载安装?

不同的社区,在自己的linux中,内置服务器和应用对应的下载链接——>yum(等同于手机上的应用商店)

可以通过yum搜索安装删除相应的软件

yum install 软件名:安装这个软件

yum lis:列举出可以安装的软件

yum remove 软件名 :删除这个软件

rzsz软件 rz :将win上文件传到linux上 sz:将linux上文件传到win上

二:文本编辑器vim

vim 是一种功能强大的多模式编辑器(类似记事本,但功能更丰富)

让我们来见一见vim

(我这个是配置过的,大家一开始打开vim可能会很简陋,得去搜教程配置一下才好用一些)

下面来介绍一下vim该如何使用

1. 命令模式

  • 进入方式:vim 打开之后的默认模式。
  • 模式切换
    • 输入i可从命令模式转到插入模式。
    • 输入shift + :可进入底行模式。
  • 光标定位操作
    • shift + 4:将光标定位到当前行的最后位置(行右)。
    • shift + 6:将光标定位到当前行的最前位置(行左)。
    • shift + g:将光标定位到最后一行的开始位置(底部)。
    • gg:将光标定位到第一行的开始位置(顶部)。
    • n + shift + g:将光标跳转至指定行,其中n代表行号。
  • 光标移动操作
    • h:向左移动。
    • j:向下移动。
    • k:向上移动。
    • l:向右移动。
  • 文本操作
    • 复制粘贴
      • yy:复制光标所在行(nyy:支持复制光标所在行及其后的n行)。
      • p:粘贴(np:支持粘贴n行内容)。
    • 撤销恢复
      • u:撤销操作。
      • ctrl + r:取消u操作(恢复撤销的操作)。
    • 删除剪切
      • dd:删除光标所在行(ndd:支持删除n行)。
      • ndd + p:实现剪切操作(先删除n行,再粘贴,等同于剪切)。
  • 文本编辑操作
    • 大小写切换shift + ~可切换文本行的大小写。
    • 批量替换shift + r可进行批量化替换。
    • 字符替换r可替换光标所在的一个字符(nr支持替换n个字符)。
    • 行内删除
      • x:向后删除一个字符(nx支持向后删除n个字符)。
      • X(即shift + x):向前删除一个字符(nX支持向前删除n个字符),删除后支持p进行粘贴。
    • 单词移动
      • w:向后按单词移动。
      • b:向前按单词移动。
    • 字词更改
      • c + w:更改光标所在处的字到字尾处。
      • c#w(如c3w):表示更改 3 个字。

2. 插入模式

  • 进入方式:输入i(在光标前插入)、a(在光标后插入)、o(在当前行下新开一行插入)可进入插入模式。
  • 退出方式:按esc回到命令模式。

3. 底行模式

  • 行号显示控制
    • set nu:显示行号。
    • set nonu:取消显示行号。
  • 分屏操作vs 文件名可分屏显示指定文件。无论分多少屏幕,始终只有一个光标。光标的跨屏移动操作是ctrl + ww 。
  • 执行 Linux 命令:在底行输入! ,可执行 Linux 命令。
  • 全局替换操作:格式为%s/要替换的原字符/要替换的新字符/g 。例如%s/cout/printf/g ,意思是把全局的cout替换成printf,其中g代表全局。

通用操作:无论是哪种模式,按esc就能回到命令模式。

三:gcc和g++

在 Linux 系统中,gccg++是 GCC 套件里用于编译 C 和 C++ 程序的重要工具 。gcc专门用于 C 语言程序编译,g++则用于 C++ 程序编译。虽然在编译 C 程序时二者表现可能相似,但处理 C++ 程序时,g++会链接 C++ 标准库,gcc默认链接 C 标准库。

基本使用格式

  • gcc (选项) 要编译的文件 (选项) (目标文件)
  • g++ (选项) 要编译的文件 (选项) (目标文件)

常用选项及作用

  • -E:仅进行预处理,处理宏定义、文件包含(#include )、条件编译(如#ifdef#ifndef#endif )以及删除注释等操作,不进行编译和汇编。例如gcc -E hello.c -o hello.i ,会生成预处理后的hello.i文件。
  • -S:生成汇编代码,在预处理、编译后停止汇编和链接步骤。如gcc -S hello.i -o hello.s ,会得到汇编文件hello.s 。
  • -c:生成目标代码(.o 文件),完成预处理、编译、汇编后,停止链接操作。像gcc -c hello.s -o hello.o ,可生成二进制目标文件hello.o ,但它还不能直接执行。
  • -o:用于指定输出文件名。比如gcc hello.o -o hello ,将hello.o与必要库链接后,生成名为hello的可执行文件。
  • -static:使用静态链接生成可执行文件,会把库代码直接复制到可执行文件中,文件较大,但运行时无需依赖库文件 。
  • -g:生成调试信息,供GDB等调试器使用。默认不指定该选项时,编译类似 Release 模式,进行优化但无调试信息;若要用GDB调试程序,编译时需加-g选项,如g++ -g my_program.cpp -o my_program 。

编译过程示例

一个 C 或 C++ 程序从源代码到可执行文件,通常经预处理、编译、汇编和链接四个步骤:

  1. 预处理:以 C 语言的hello.c为例,gcc -E hello.c -o hello.i ,对hello.c进行宏替换、文件包含展开等,生成预处理后的hello.i 。
  2. 编译gcc -S hello.i -o hello.s ,检查hello.i代码规范性、语法错误等,将其翻译成汇编语言,得到hello.s 。
  3. 汇编gcc -c hello.s -o hello.o ,把hello.s汇编代码转成机器可识别的二进制目标代码,生成hello.o 。
  4. 链接gcc hello.o -o hello ,将hello.o与程序所需库(如 C 标准库libc.so.6 )合并,生成最终可执行文件hello 。实际中,常直接用gcc hello.c -o hello ,一次性生成可执行文件。 对于 C++ 程序,如test.cpp ,使用g++ test.cpp -o test 即可编译生成可执行文件test 。

使用 g++ 编译时,通过 -std 选项指定支持 C++11 及以上标准 修改编译命令为 g++ test.cpp -o testcpp -static -std=c++11

四、Linux 项目自动化构建工具 ——make/Makefile

1. make 与 Makefile 的关系

  • make是一个命令工具,用于解释Makefile文件中的指令。
  • Makefile是一个文件,它带来的好处是实现自动化编译。一旦编写完成,只需执行一个make命令,整个工程就能完全自动编译,极大地提高了软件开发的效率。
  • make默认情况下只生成一个可执行目标文件,后续的依赖关系和依赖方法不再执行。

2. Makefile 的原理

Makefile的存在是为了构建项目,主要包含以下两方面:

  • 依赖关系:依赖关系可以为空。
  • 依赖方法
    • 语法示例
mycode:mycode.c  # 表示mycode依赖于mycode.c,这是依赖关系
    gcc mycode.c($^) -o mycode($@)  # 前面需用Tab键缩进,这是依赖方法,说明如何从依赖文件形成可执行程序
    # ($<:表示规则中的第一个依赖文件)

.PHONY:clean
clean:
    rm -f mycode
    # (.PHONY:被该关键字修饰的对象是一个伪目标,表示该目标总是被执行的)

举例:

原先是没有process_pool的

执行make代码

可以看到此时make之后就有对应的可执行程序了

使用make clean就可以删除对应的可执行程序(我们的make是只能顺着往下执行第一个脚本命令的,如果想执行其他的,就得写PHONY,然后在make后面指明对应的脚本)

  • 时间相关知识
    • 使用stat查看文件的三个时间,分别为最近访问时间(access)、最近修改内容时间(modify)、最近修改文件属性时间(change)。一旦修改了文件内容,文件属性也会被更改,因为文件属性包括文件大小,修改内容会影响大小。最近访问时间是在访问达到一定次数后才修改,否则如果访问太频繁,就要不断去磁盘中修改属性。
    • 对于gcc/g++来说,判断源程序是否需要重新编译是通过比较源程序和源文件最近被修改的时间来解决的。如果源文件时间晚于源程序,那就再进行编译一遍;若源文件时间早于源程序,则不需要编译。
    • touch除了创建文件之外,如果touch的文件已经存在,那么会更新文件的时间到最新。

3. Makefile 的推导规则

  • 示例代码及问题
mycode:mycode.o
    g++ mycode.o -o mycode -std=c++11
mycode.o:mycode.s
    g++ -c mycode.s -o mycode.o -std=c++11
mycode.s:mycode.i
    g++ -S mycode.i -o mycode.s -std=c++11
mycode.i:mycode.cpp
    g++ -E mycode.cpp -o mycode.i -std=c++11

推导的顺序是从下到上,因为读到最下面才有源文件。但一般不建议这样写,因为把简单问题复杂化了。

  • 简化写法
mycode:mycode.cpp 
    g++ mycode.cpp -o mycode -std=c++11

四:调试工具(gdb)

调试,在方法上有区别吗?(与windows相比)

1.调试思路上,一定是一样的

2.调试的操作方式一定是不一样的--> 命令行调试

3.在linux中,用gcc/g++生成软件时,默认是release的,所以默认gdb中无法对发布的程序进行调试,如果要进行调试,就得在编译程序时把它设置成debug模式:在编译命令后面加上 -g

gcc/g++默认行为:

1.默认是动态链接的

2.默认是release

vim默认行为:

默认打开就是命令模式

gdb相关命令

gdb 可执行程序 :打开gdb

q:退出gdb

b 行号:在这一行打断点 --- 形成编号

info b:查看所打的断点信息 --- 看到编号

info locals:查看当前栈帧局部变量的值

d 断点的编号:删除断点 ---使用编号

l 0:显示程序代码

r:调试运行 --- run ,可以在断点处停下来

n:逐过程 --- next

s:逐语句 --- step

c:运行至下一个断点处 --- continue

bt:查看调用堆栈(函数调用的过程)

finish:直接运行到将对应的函数跑完

p 变量:显示该变量

display 变量:常显示变量(相当于vs下的监视)---会出现变量编号

undisplay 编号:删除常显示的变量

set var 变量:修改变量的值

until:跳转至指定行

五.git

1.git是什么? 答:一种分布式去中心版本控制器

2.(.gitignore):凡是在这个文件内部的后缀,对应的文件不会被上传到gitee上

3.所谓的git的仓库,本质就是一个目录.git加上里面的内容 (push到远端本质就是将你的.git里面的内容同步到gitee上)

注意:在使用它之前得做一下前置的工作,需要将你的linux系统和你的gitee或者github的某一个仓库进行连接,具体可以问问ai或者搜搜教程

相关指令

git add . :将我们新增的文件(以前没有的)添加到本地的git仓库,添加到临时区域
git commit -m '这是我的第一次提交'(''里面是日志,第一次一定要写并且不能乱写):把新增的文件提交到本地仓库  
git push :把本地仓库新增的内容提交到远端
git mv 原文件名 新文件名:已经提交到git的文件使用这条指令进行修改,然后再提交
git pull:把远端修改的文件拉到本地同步一下

(如果远端修改文件没有同步到本地,在本地是提交不了文件的)

在本地要同步删除远端文件的以下几步操作:

  1. git rm 要删除的文件名

  2. git commit -m "删除临时文件"

  3. git push git log:查看git记录

  4. git status:显示工作目录和暂存区的状态

总结

通过本篇文章的学习,相信大家已经了解了我们在linux操作系统中比较常用的几个开发工具,这些工具或多或少都会陪伴我们学习linux比较长的时间(除了gdb),大家尽量多熟悉熟悉。

到此篇为至,我们已经初步入门了linux操作系统的一些常见指令的使用、一些基本知识的了解,还有通过本篇文章的了解到一些常见开发工具的使用,我们接下来将会进入linux编程中各种系统理论部分的内容,这部分的内容可能稍微会比较多以及抽象,希望大家能够坚持下来(๑•̀ㅂ•́)و✧

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

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

相关文章

华为云Flexus+DeepSeek征文 | Dify-LLM平台一键部署教程及问题解决指南

作者简介 我是摘星&#xff0c;一名专注于云计算和AI技术的开发者。本次通过华为云MaaS平台体验DeepSeek系列模型&#xff0c;将实际使用经验分享给大家&#xff0c;希望能帮助开发者快速掌握华为云AI服务的核心能力。 目录 1. 前言 2. 准备工作 2.1 注册华为云账号 2.2 确…

哈工大计算机系统2025大作业——Hello的程序人生

计算机系统 大作业 题 目 程序人生-Hello’s P2P 专 业 计算学部 学   号 2023113072 班 级 23L0513 学 生 董国帅 指 导 教 师 史先俊 计算机科学与…

Vue中van-stepper与input值不同步问题及解决方案

一、问题描述 在使用Vant UI的van-stepper步进器组件与原生input输入框绑定同一响应式数据时&#xff0c;出现以下现象&#xff1a; 通过步进器修改值后&#xff0c;页面直接输出{{ count }}和watch监听器均能获取最新值但input输入框显示的数值未同步更新&#xff0c;仍为旧…

react基础技术栈

react基础技术栈 react项目构建react的事件绑定React组件的响应式数据条件渲染和列表循环表单绑定 Props和组件间传值&#xff0c;插槽react中的样式操作 生命周期ref 和 context函数组件和hook高阶组件React性能问题React-route的三个版本react-router使用步骤react-router提供…

Three.js搭建小米SU7三维汽车实战(4)场景搭建

场地搭建 javascript // 导入threejs import * as THREE from "three"; // 导入轨道控制器 import { OrbitControls } from "three/addons/controls/OrbitControls.js"; // 1. 创建场景 const scene new THREE.Scene(); // 2. 创建相机 const camera ne…

Excel 统计某个字符串在指定区域出现的次数

【本文概要】 Excel 统计某个字符串在指定区域出现的次数&#xff1a; 1、Excel 统计一个单元格内的某字符串的出现次数 2、Excel 统计某一列所有单元格内的某字符串的出现次数 3、Excel 统计某一区域所有单元格内的某字符串的出现次数 1、Excel 统计一个单元格内的某字符串的出…

【Linux我做主】进度条小程序深度解析

Linux下C语言进度条程序深度解析 进度条小程序GitHub地址 前言前置知识回车换行&#xff08;CR/LF&#xff09;的深度解析历史渊源与技术规范在进度条/倒计时中的应用 缓冲区机制的全面剖析缓冲区引入缓冲类型对比进度条开发中的关键控制 进度条实现以小见大——倒计时倒计时最…

从Homebrew找到openssl.cnf文件并拷贝到Go项目下使用

安装OpenSSL 在 macOS 上下载和安装 OpenSSL 最常见和推荐的方式是使用 Homebrew&#xff0c;这是一个 macOS 缺失的包管理器。 如果您还没有安装 Homebrew&#xff0c;请先安装它。安装 Homebrew 后&#xff0c;安装 OpenSSL 只需要一条命令。 步骤 1&#xff1a;安装 Home…

微信小程序一次性订阅封装

封装代码如下&#xff1a; export async function subscribeMessage(tmplIds: string[]): Promise<ISubscribeMessagePromise> {// 模板ID// 1、获取设置状态const settings (await wx.getSetting({ withSubscriptions: true })).subscriptionsSetting || {}console.log…

安全帽检测算法AI智能分析网关V4守护工地/矿山/工厂等多场景作业安全

一、方案概述​ 在工业生产与建筑施工场景中&#xff0c;安全帽是保障人员安全的重要装备。但传统人工巡检效率低、易疏漏&#xff0c;难以满足现代安全管理需求。AI智能分析网关V4安全帽检测方案&#xff0c;借助人工智能与计算机视觉技术&#xff0c;实现作业现场安全帽佩戴…

Python自动化之selenium语句——打开、关闭浏览器和网页

目录 一、打开谷歌浏览器 1.双击桌面的Pycharm工具 2.新建Python文件&#xff0c;输入文件名 3.新建的Python文件如下 4.安装selenium库 5.导入包 二、打开网页、关闭网页、关闭浏览器 1.导入增加一个时间包 2.使用函数打包之前写的浏览器的配置 3.调用 4.打开百度网…

【数据结构】--二叉树--堆(上)

一、树的概念和结构 概念&#xff1a; 树是一种非线性的数据结构&#xff0c;他是由n(n>0)个有限结点组成一个具有层次关系的集合。其叫做树&#xff0c;是因为他倒过来看就和一棵树差不多&#xff0c;其实际上是根在上&#xff0c;树枝在下的。 树的特点&#xff1a; 1…

多线程(5)——单例模式,阻塞队列

目录 单例模式饿汉模式懒汉模式—单线程版懒汉模式—多线程版&#xff08;经典面试题&#xff09;懒汉模式—多线程版&#xff08;改进&#xff09; 阻塞队列阻塞队列是什么生产者消费者模型标准库中的阻塞队列-BlockingQueue阻塞队列实现 单例模式 单例模式是一种设计模式&am…

视频监控汇聚平台EasyCVR工业与安全监控:防爆摄像机的安全应用与注意事项

石油、化工、煤矿等行业存在易燃易爆气体、粉尘&#xff0c;普通监控设备易因电火花、高温引发爆炸火灾。随着工业规模扩大&#xff0c;安全生产监控需求激增&#xff0c;防爆摄像机成为保障安全的关键。加之国家法规与行业标准对危险环境监控设备要求严格&#xff0c;规范其应…

基于 Redis 实现分布式锁:原理及注意事项

文章目录 基于 Redis 实现分布式锁&#xff1a;原理及注意事项基于 Redis 实现分布式锁的原理Redis 分布式锁的过期时间和锁续期机制如何防止锁被其他 goroutine 删除&#xff1f;Redis 分布式锁存在的单点故障问题&#xff1a;基于 RedLock 的解决方案高并发场景中 Redis 分布…

手机设备多?怎样设置IP保证不关联

在移动互联网时代&#xff0c;多设备运营&#xff08;如电商、游戏工作室、社交媒体矩阵&#xff09;常面临IP关联风险&#xff0c;轻则账号受限&#xff0c;重则封禁。以下提供6种高效设置独立IP的方法&#xff0c;结合技术原理与实操建议&#xff0c;助您打造稳定合规的运营环…

哈尔滨工业大学计算机系统大作业程序人生-Hello’s P2P

摘 要 文章以C语言程序设计经典案例hello.c为研究对象&#xff0c;系统解析程序在计算机系统中的完整生命周期。剖析源代码通过预处理、编译、汇编、链接四阶段演化为可执行目标程序的编译系统工作机制&#xff0c;继而从进程视角揭示程序运行时计算机体系结构的协同运作&…

Linux系统管理与编程24:基础条件准备-混搭“本地+阿里云”yum源

兰生幽谷&#xff0c;不为莫服而不芳&#xff1b; 君子行义&#xff0c;不为莫知而止休。 1.添加宿主机共享文件夹 Linux虚拟机可以和宿主机共享文件夹&#xff0c;这样有利于工具文件的共享。具体操作如下&#xff1a; 1&#xff09;vmware workstation共享文件夹 虚拟机…

如何在 Windows 10 PC 上获取 iPhone短信

您可以轻松地将媒体数据从 iPhone 传输到 Windows 计算机&#xff0c;并直接访问计算机上的数据。但是&#xff0c;您可以在 Windows 10 PC 上接收 iPhone 短信吗&#xff1f;有什么功能或工具支持它吗&#xff1f;如果您发现在 Windows 10 PC 上接收 iPhone 消息很困难&#x…

Linux 系统中的软链接与硬链接

目录 一、什么是软链接&#xff1f; 1. 创建软链接 2. 软链接的特性 3. 软链接的用途 二、什么是硬链接&#xff1f; 1. 创建硬链接 2. 硬链接的特性 3. 硬链接的用途 4. 目录硬链接的特殊性 ​编辑 三、软链接与硬链接的区别 1. inode 编号 2. 路径依赖 3. 删除行…