Linux常见工具如yum、vim、gcc、gdb的基本使用,以及编译过程和动静态链接的区别

news2025/4/21 3:08:58

目录

一、工具的本质

二、一些常用的工具

1.yum

2.vim

1)vim的三种基本模式:

2)vim的基本操作

①命令模式下的基本操作:

②插入模式:

③底行模式:

3)vim的配置:让他变得更好用

3.gcc/g++的使用

基本使用方法:

编译过程

动静态链接

4.gdb命令行调试

3)调试指令

​编辑

5.初识M/makefile

补充:系统是如何得知源文件是否未被修改的?文件属性——三个时间

总结



一、工具的本质

工具在本质上也是一种特殊的指令

二、一些常用的工具

1.yum

常用选项:
yum list | grep 软件名:搜安指定软件;

yum install 软件名:安装指定软件;

yum remove 软件名:卸载指定软件

提示:yum需要root权限,故一般处于root身份或者sudo安装

示例:安装sl小火车

①sudo yum install -y sl或则root身份下的yun install -y sl(-y即不要过多询问直接安装)

②sl(运行该软件)

如果安装成功,屏幕中会出现如下小火车。

不知道是普通用户还是root?可用whoami指令查看

2.vim

介绍:Linux下的一款功能强大的编辑器(功能很多的记事本……)

使用方法:vim 先打开的文件名

1)vim的三种基本模式:

①命令模式:默认打开vim进入后所处的模式;

注意:在vim中的操作须在输入法为英语环境下进行。

②底行模式:在命令模式下,按住shift + :即可进入底行模式

注意光标在哪

在底行模式输入q再Enter可退出vim。

③插入模式:在命令模式下按键盘上的i键进入,进入后屏幕左下角会显示“--INSERT--”字样

在插入模式输入内容后,保存须在底行模式输入w再Enter

三种模式的切换:

命令模式+i==插入模式,插入模式按esc(键盘左上角)可退回命令模式;

命令模式+shit+:是底行模式,底行模式按esc(键盘左上角)可退回命令模式;

插入模式不能直接切换到底行模式,反之亦然,需要命令模式做中介。

画的好丑,读者见谅

在底行模式输入!q再Enter可退出vim。

2)vim的基本操作

①命令模式下的基本操作:

        光标定位:

        文本编辑:

撤销:u

撤销撤销:ctrl + r

②插入模式:

按期望编写文件即可

③底行模式:

3)vim的配置:让他变得更好用

3.gcc/g++的使用

若系统未安装gcc或者g++先安装:sudo yum install -y gcc或sudo yum install -y g++

基本使用方法:

gcc 源文件 -o 可执行文件名;g++ 源文件 -o 可执行文件名。

①若有多个源文件则在gcc/g++后跟着列出即可,中间空格‘  ’隔开;

②-o:是为生成的可执行文件命名,若无-o则默认生成a.out

编译过程

从源文件到可执行文件经过了如下几个步骤:

①预处理:头文件展开,宏定义替换,去注释,条件编译;

②编译:将源文件编译为汇编语言;

③汇编:将②中汇编语言进一步翻译为二进制机器语言;

此时的二进制文件可以被机器执行吗?

答:不能,在我们的代码中只有函数的调用,如pringf、scanf等,没有他们的实现!!他们的实现在C标准库,还需要第五步链接!

④链接:将③中的二进制代码与库中代码合并链接最后形成可执行程序。

什么库?干嘛的?比如printf这个函数,我们在编写代码时只是调用了他,却并没有实现,他的实现在C标准库中,即头文件"stdio.h"

动静态链接

在编译过程中的第五步链接又分为动态链接和静态链接:

如上述生成的hello可执行程序,若用file指令:file hello,在弹出的信息中可看到Linux系统采用了动态链接方式(大多数系统都是默认动态链接

4.gdb命令行调试

首先应该明确的是:在不同的开发环境调试的方式是不同的,但调试的思路一定是一样的。

1)gdb的安装:sudo yum install -y gdb

2)在Linux中gcc/g++默认生成的是release版本,若想调试应该在编译时带上-g,如:

这里插个题外话:为什么会有release和debug之分?

3)调试指令

5.初识M/makefile

拿上述的hello程序写一个最简单的makefile(在vim中编写):

补充:系统是如何得知源文件是否未被修改的?文件属性——三个时间

使用stat指令:stat hello可查看hello的详细信息

其中有三个时间:

所以系统是如何得知源文件是否未被修改的呢?


总结

本篇文章主要介绍了yum、vim、gcc/g++以及gbd的基本使用方法,同时补充了程序的编译过程和动静态链接过程。笔者水平较浅薄,难免有疏忽大意的地方,若有错误还请读者指出!!

文章读完可否给笔者一个免费的赞呢,一个免费的点赞就能让笔者高兴很久哦。

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

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

相关文章

RBAC的使用

1、简述RBAC的作用及工作流程 Rbac基于角色访问控制,用于管理用户对集群资源的访问权限,通过定义角色和绑定规则,将用户与权限进行关联,作用:权限精细化管理,操作便捷与统一管理,动态调整权限。…

MySQL+Redis实战教程:从Docker安装部署到自动化备份与数据恢复20250418

MySQLRedis实战教程:从Docker安装部署到自动化备份与数据恢复 一、前言 在企业应用中,对MySQL和Redis运维的要求越来越高: 不能仅是启动就算部署运行稳定、隔离、访问控制、备份恢复、安全可靠,才是 企业级的基本功能 本文将手…

AI驱动商业变革:零售行业的智能化跃迁

引言:AI技术迈入黄金时代 2024年成为生成式AI(Gen AI)全面落地的关键年。据麦肯锡《技术趋势展望》报告,生成式AI相关投资同比增长​7倍​​,其经济价值预计达​​2.6-4.4万亿美元​​[1]。在零售领域,该技…

AI调试工具有哪些?

一、深度学习框架专用调试工具 TensorBoard • 功能:实时监控训练指标(损失值、准确率)、可视化神经网络结构、分析参数分布和梯度信息 • 适用框架:TensorFlow、PyTorch(通过插件) • 特点:支持…

交易模式革新:Eagle Trader APP上线,助力自营交易考试效率提升

近年来,金融行业随着投资者需求的日益多样化,衍生出了众多不同的交易方式。例如,为了帮助新手小白建立交易基础,诞生了各类跟单社区;而与此同时,一种备受瞩目的交易方式 —— 自营交易模式,正吸…

健身会员管理系统(ssh+jsp+mysql8.x)含运行文档

健身会员管理系统(sshjspmysql8.x) 对健身房的健身器材、会员、教练、办卡、会员健身情况进行管理,可根据会员号或器材进行搜索,查看会员健身情况或器材使用情况。

捋一遍Leetcode【hot100】的二叉树专题

二叉树专题 除了后面两个,都挺简单 二叉树的中序遍历 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int …

【测试文档】项目测试文档,测试管理规程,测试计划,测试文档模版,软件测试报告书(Word)

原件获取列表: 系统测试方案-2.docx B-Web安全服务渗透测试模板.docx 压力测试报告.docx安全测试用例及解析.docx 测试计划.doc 测试需求规范.doc 测试需求指南.docx 测试用例设计白皮.doc 单元测试报告模板.doc 单元测试计划模板.doc 回归测试指南.doc 集成测试报…

Linux的联网网络管理攻略

RHEL9版本特点 在RHEL7版本中,同时支持network.service和NetworkManager.service(简称NM)。 在RHEL8上默认只能通过NM进行网络配置,包括动态ip和静态ip,若不开启NM,否则无法使用网络RHEL8依然支持network.service&am…

Linux上位机开发实践(SoC和MCU的差异)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 soc一般是指跑linux的芯片,而mcu默认是跑rtos的芯片,两者在基本原理方面其实差异不大。只不过,前者由于性能的原…

ios app的ipa文件提交最简单的方法

ipa文件是ios的app打包后生成的二级制文件,在上架app store connect或做testflight测试的时候,它提示我们需要使用xcode、transporter或xcode命令行等方式来上传。 而xcode、transporter或xcode命令行的安装都需要使用mac电脑,假如没有mac电…

详细解释浏览器是如何渲染页面的?

渲染流程概述 渲染的目标:将HTML文本转化为可以看到的像素点 当浏览器的网络线程收到 HTML 文档后,会产生一个渲染任务,并将其传递给渲染主线程的消息队列。在事件循环机制的作用下,渲染主线程取出消息队列中的渲染任务&#xff0…

Nacos安装及数据持久化

1.Nacos安装及数据持久化 1.1下载nacos 下载地址:https://nacos.io/download/nacos-server/ 不用安装,直接解压缩即可。 1.2配置文件增加jdk环境和修改单机启动standalone 找到bin目录下的startup.cmd文件,添加以下语句(jdk路径根据自己…

FPGA_YOLO(四)用HLS实现循环展开以及存储模块

Vivado HLS(High-Level Synthesis,高层次综合)是赛灵思(Xilinx)在其 Vivado 设计套件 中提供的一款工具,用于将 高级编程语言(如 C、C、SystemC) 直接转换为 硬件描述语言&#xff0…

ASP.NET MVC 实现增删改查(CRUD)操作的完整示例

提供一个完整的 ASP.NET MVC 实现增删改查(CRUD)操作的示例。该示例使用 SQL Server 数据库,以一个简单的 Product 实体为例。 步骤 1:创建 ASP.NET MVC 项目 首先,在 Visual Studio 中创建一个新的 ASP.NET MVC 项目…

MCP理解笔记及deepseek使用MCP案例介绍

文章目录 一、MCP介绍(1)使用MCP与之前的AI比较(2)原理(3)优点 二、deepseek使用MCP使用案例介绍 一、MCP介绍 全称 模型上下文协议 来源 由Claude母公司Anthropic于24年底开源发布 简介 AI大模型的标准化…

# 手写数字识别:使用PyTorch构建MNIST分类器

手写数字识别:使用PyTorch构建MNIST分类器 在这篇文章中,我将引导你通过使用PyTorch框架构建一个简单的神经网络模型,用于识别MNIST数据集中的手写数字。MNIST数据集是一个经典的机器学习数据集,包含了60,000张训练图像和10,000张…

LeetCode:DFS综合练习

简单 1863. 找出所有子集的异或总和再求和 一个数组的 异或总和 定义为数组中所有元素按位 XOR 的结果;如果数组为 空 ,则异或总和为 0 。 例如,数组 [2,5,6] 的 异或总和 为 2 XOR 5 XOR 6 1 。 给你一个数组 nums ,请你求出 n…

Perf学习

重要的能解决的问题是这些: perf_events is an event-oriented observability tool, which can help you solve advanced performance and troubleshooting functions. Questions that can be answered include: Why is the kernel on-CPU so much? What code-pa…

齐次坐标变换+Unity矩阵变换

矩阵变换 变换(transform):指的是我们把一些数据,如点,方向向量甚至是颜色,通过某种方式(矩阵运算),进行转换的过程。 变换类型 线性变换:保留矢量加和标量乘的计算 f(x)…