linux中基础开发工具的使用

news2025/1/15 21:09:19

1.linux中的软件包管理器

1.1什么是软件包

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

1.2具体使用

当然在开始介绍前我先提醒一下,如果想要使用yum指令的话必须要保持网络通畅,且安装和删除都在在root或者使用sudo来执行

查看软件包:

yum list | grep lrzsz

安装软件:

sudo yum install lrzsz

删除软件:

sudo yum remove lrzsz

2.vim文本编辑器

2.1正常开发流程

在我们正式开始讲解之前我们先回顾一下整个开发的这样一个流程

编写代码

编译代码

调试代码

发布运行代码

代码关系的维护

而我们的vi/vim干的就是编写代码的工作,定位上来说和记事本没什么区别,通常情况下,许多Linux发行版都会默认安装Vim,因为它是一个非常流行和功能强大的编辑器。(vim是vi的升级版)

2.2vim的四种模式

普通/命令模式:默认下的模式,退出按 shift : q (回车)

插入模式:用户可以像在其他编辑器中一样输入文本,在命令模式下输入i/a/o 可以进入此模式,按esc可回到命令模式

底行模式:shift : 进入此模式 ,输入w保持 , q退出 ,!强制 (也只能在命令模式下进入)

可视模式:在可视模式下,用户可以选择文本进行操作,例如复制、删除、替换等。可视模式可以通过按下 v 进入。(也只能在普通模式下)

2.3一些常见光标的使用(在命令模式下使用)
具体功能快捷键
让光标跳到当前行的行首shift ^
让光标跳到当前行的行尾shift $
跳转到所有代码的起始行gg
跳转到所有代码的结束行shift g
跳转到指定行n(具体行数) shift g (都要按住不放手)
w/b单词为单位进行前/后移动
2.4文本操作(也是在命令模式下使用)
具体功能快捷键
复制当前行yy
复制n行(包括当前行)nyy
撤销y
粘贴p/np(重复粘贴n次)
删除光标所在行dd
剪切功能dd删除之后直接p或者np
快速大小写切换shift ~ (光标指向的小写变成大写)
删除光标之后的一个字符/n个字符x/nx
从光标的右向左删X
替换一个光标所在的字符/或者n个字符r/nr 然后输入你想替换的内容
进入替换模式进入:shift r 退出:esc
撤销最近的撤销ctrl r
2.5底行命令的一些操作
具体功能快捷键
调出行号set nu
取消行号set nonu
分屏vs 所创分配文件名 (q:退出当前窗口)
光标跳转ctrl w
不退出vim照样编译程序!./可执行文件名
不退出vim查手册!man
2.6一些注意事项

vim配置在用户自己的配置文件中,只会影响自己的操作,root管理员有自己的vim配置,至于如何配置不同版本会有不同方法,这些内容在网上都有这里就不一一赘述了。

3.gcc编译

3.1实战使用

当我在一个文件当中写完代码,然后输入 gcc文件名 ,接着当前的目录下会生成一个a.out已经编译完成的文件,接着./a.out运行即可。

例子(这里我已经写好的文件名为test6.c):

在这里插入图片描述

另一种生成可执行文件的法子:

gcc mytest.c -o mytest / gcc -o mytest mytest.c (mytest.c为已经写好的文件,mytest为编译好的可执行程序)
在这里插入图片描述

3.2程序编译的具体过程

首先在我们讲解具体操作时,我们先来复习一下程序编译的4个阶段:

  • 预处理(进行宏替换)

    预处理功能主要包括宏定义,文件包含,条件编译,去注释等。

    预处理指令是以#号开头的代码行。

    实例: gcc –E hello.c –o hello.i

    选项“-E”,该选项的作用是让 gcc 在预处理结束后停止编译过程。

    选项“-o”是指目标文件,“.i”文件为已经过预处理的C原始程序。

  • 编译(生成汇编)

    在这个阶段中,gcc 首先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查

    无误后,gcc 把代码翻译成汇编语言。

    用户可以使用“-S”选项来进行查看,该选项只进行编译而不进行汇编,生成汇编代码。

    实例: gcc –S hello.i –o hello.s

  • 汇编(生成机器可识别代码)

    汇编阶段是把编译阶段生成的“.s”文件转成目标文件

    读者在此可使用选项“-c”就可看到汇编代码已转化为“.o”的二进制目标代码了

    实例: gcc –c hello.s –o hello.o

  • 链接(生成可执行文件的库文件)

    在成功编译之后,就进入了链接阶段。

    实例: gcc hello.o –o hello

    而链接过程又涉及一个很重要的概念:函数库

    我们的C程序中,并没有定义“printf”的函数实现,且在预编译中包含的“stdio.h”中也只有该函数的声明,而

    没有定义函数的实现,那么,是在哪里实“printf”函数的呢?

    其实系统把这些函数实现都被做到名为 libc.so.6 的库文件中去了,在没有特别指定时,gcc 会到

    系统默认的搜索路径“/usr/lib”下进行查找,也就是链接到 libc.so.6 库函数中去,这样就能实现函

    数“printf”了,而这也就是链接的作用。

3.3动静态库

我们的库分为两者:

  1. 静态库(文件后缀名为.a)
  2. 动态库(文件后缀名为.so)

静态链接库在编译时被链接到目标程序中,整个库的内容都被复制到目标程序中,使得目标程序可以独立运行,不需要依赖于其他的库文件。由于静态链接库的内容都被复制到目标程序中,因此目标程序的体积会变大。同时,由于每个目标程序都复制了一份库文件,因此在磁盘空间和内存使用方面可能会造成浪费。

动态链接库则是在运行时才被加载到内存中,并被多个程序同时共享使用,这样就能够避免静态链接库造成的浪费。动态链接库在磁盘上只有一份,多个程序可以同时引用它,从而降低了磁盘空间的占用。此外,由于动态链接库是在运行时加载的,因此可以动态地升级和替换库文件,这使得软件更新更加方便。

因此,静态链接库和动态链接库各有优缺点,开发者需要根据具体的需求来选择。一般来说,对于一些比较稳定的库文件,可以选择静态链接库,而对于一些常用的库文件,可以选择动态链接库,以便提高代码的重用性和可维护性。

tips:查看依赖库指令ldd mytest

4.gdb使用讲解(调试)

4.1具体操作

进入gdb模式:gdb 可执行文件

特别提醒:如果一个程序是可以被调试的,该程序的二进制文件一定加入了一些debug信息,而在linux下默认形成的文件是release版本的。

为了变成debug版本,应输入以下指令gcc mytest.c -o mytest -g

4.2模式下的操作
指令效果
run直接运行
l 行号显示行号后的代码
b 行号在行号处打断点
info b显现所打断点其情况
s逐语句调试
n逐过程
display 名字显示变量值
undisplay 编号(一定要用编号)使编号不显示
finish结束当前函数
continue直接进入下个断点
until跳转到指定行
set var 变量名修改变量值

5.linux自动化构建工具Makefile

makefile本质就是一个文件 其中包含:编译关系和依赖方法

举个例子:使用vim 写一个 makefile的文件如下(.phony 为修饰一个对应的符号,让符号变成伪目标的概念)

在这里插入图片描述

然后输入指令make

可编译文件mytest就生成了 (如果使用的是c99版本的代码 在 第二行 输入 -std = c99)

输入指令make clean

就将可编译文件mytest删除了

6.有趣的小程序进度条

6.1一个有趣的现象(缓冲区的初了解)

在mytest.c文件下写入这样一段文件:
在这里插入图片描述

和这样一段:(其实就多了个\n)
在这里插入图片描述

会观察到这样一个现象:前面的程序运行了5秒后输出了"Hello world",而后面的程序先输出了"Hello world",程序在运行了5秒,这是为什么呢?

原来printf里面的东西先会放在缓冲区内,而当我碰到\n时会立刻刷新到屏幕上(有关缓存区的具体讲解后面会有这里先做个简单了解)

6.2关于sleep函数的一些小注意

1、windows下的Sleep函数,首字母大写

#include <windows.h> 参数usigned long类型,为毫秒数

Sleep(1);

2、linux下的sleep函数,首字母小写

#include <unistd.h> 其参数为秒数

sleep(1);
(usleep 可以把单位变成微秒)

6.3进度条小程序源码(linux的vim下)
#include <stdio.h>
#include <unistd.h>
#include <string.h>

int main()
{
#define NUM 100
    char bar[NUM+1];
    memset(bar, '\0', sizeof(bar));

    const char *lable="|/-\\";

    int i = 0;
    while(i <= 100){
        printf("\033[31m[%-100s][%3d%%][%c]\r", bar, i, lable[i%4]);// \r(回车动作)
        fflush(stdout); //立刻刷新到屏幕上
        bar[i]='=';
        i++;
        usleep(50000);
    }
    printf("\n");

}

这里就不过多解释了,有一定代码基础的看懂很容易,放在linux上运行一下感受一下就行

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

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

相关文章

软件管理员密码的作用 如何设置软件管理员密码?

在使用夏冰加密软件的过程中&#xff0c;很多软件都是可以设置软件管理员密码的。那么你知道管理员密码有什么用吗&#xff1f;又该如何设置软件管理员密码呢&#xff1f;下面我们来了解一下吧。 软件管理员密码是什么意思&#xff1f; 软件管理员密码就是软件的密码&#xff…

毕业5年,技术越来越好,混的却越来越差...

别人都是越来越好&#xff0c;而我是越来越差&#xff01; 17年&#xff0c;从一个普通的本科毕业&#xff0c;那个时候的我&#xff0c;很迷茫&#xff0c;简历上的求职岗位都不知道写什么&#xff0c;因为家里是农村的&#xff0c;朴实的父母也帮不上什么忙&#xff0c;关于…

KDBR-IV变压器空负载短路损耗测试仪

一、产品概述 本产品是我公司针对不良电力用户偷逃基本电费、私自增容问题而研发设计的仪器&#xff0c;用于变压器容量、空载、负载等特性参数测量的高精密仪器。本仪器为多功能测量仪器&#xff0c;相当于往常两种测试仪器&#xff1a;即变压器容量测试仪变压器特性参数测试仪…

【因子挖掘】遗传规划概述

在多因子选股的框架下&#xff0c;因子的产生通常有两条途径&#xff1a; 先有逻辑&#xff0c;后有公式&#xff1a;根据经济学逻辑、历史经验、直觉进行人工构造一些因子&#xff1b; 例如&#xff1a;动量&#xff08;Momentum&#xff09;因子&#xff1a;当最近的股价呈现…

Cadence Allegro 布局操作Move命令的应用

在布局的时候&#xff0c;常常需要对一些元素去进行移动位置以方便进行设计。 1、执行菜单命令Edit-Move&#xff0c;此时PCB界面的左下角会显示Move&#xff0c;就表示正在执行移动命令&#xff0c;如图1所示。 图1 移动命令 2、在PCB界面右边的Find面板中所选择需要进行移动…

Charles抓包工具使用

一、Charles的安装与激活 安装 官方地址&#xff1a;https://www.charlesproxy.com/ 根据自己系统安装最新版本即可 安装后可直接打开使用 激活 打开Charles -> 【Help】 -> 【Register Charles】 -> 输入 Registered Name &#xff1a; https://zhile.io Lic…

智能座舱的“宏大蓝图”和“残酷现实”

配图来自Canva可画 2023年上海车展各大车企发布新车、新配置和新战略好不热闹&#xff0c;“智能驾驶”、“智能座舱”等关键词频频出现&#xff0c;智能化已然成为车企技术比拼的关键。 Unity中国发布最新智能座舱解决方案&#xff0c;可为车企提供成熟、可量产落地的HMI&…

学系统集成项目管理工程师(中项)系列17b_范围管理(下)

1. 创建工作分解结构WBS 1.1. 自上而下的分解结构 1.2. 把项目可交付成果和项目工作分解成较小的、更易于管理的组件的过程 1.3. 用来确定项目范围的 1.3.1. 包括分包出去的工作 1.3.1.1. 【21上选40】 1.4. 输入 1.4.1. 项目范围管理计划 1.4.2. 项目范围说明书 1.4.…

AI教父变成“吹哨人” 他到底在警觉什么?

“我现在对自己过去的工作感到后悔&#xff0c;我找借口来安慰自己&#xff1a;就算我没做&#xff0c;别人也会做的。”有AI“教父”之称的杰弗里辛顿 (Geoffrey Hinton)在接受媒体采访时透露出悔意。 作为AI深度学习领域的代表性人物&#xff0c;辛顿一生都在该领域深耕&…

随笔-听说你年入百万了

两个月前接到老代的电话&#xff0c;说4月30号结婚&#xff0c;预约一下时间。半个月前接到小付的电话&#xff0c;说5月1号结婚&#xff0c;行吧&#xff0c;值当回趟老家了。 抢票还算顺利&#xff0c;转了一趟车&#xff0c;29号下午到了老家&#xff0c;想着收拾一下&…

集成ES全文检索、Neo4J知识图谱、Activiti工作流的知识库管理系统

一、项目介绍 一款全源码&#xff0c;可二开&#xff0c;可基于云部署、私有部署的企业级知识库云平台&#xff0c;一款让企业知识变为实打实的数字财富的系统&#xff0c;应用在需要进行文档整理、分类、归集、检索、分析的场景。 获取方式q:262086839 为什么建立知识库平台&…

Cell-- 战胜癌症中的耐药性,组合疗法初见成效!

Jerry C. Madukwe在Cell发表了一篇关于癌症耐药性的精选。 癌细胞经历系统化疗、靶向治疗或免疫治疗时对相关药物会逐步产生耐受性。抗癌药物耐药是一种多因素的现象&#xff0c;可通过多种机制产生。原发性肿瘤内的不同遗传组成的癌细胞亚群&#xff0c;对化疗或靶向药物有不同…

Angular 16 正式版发布

在之前的Angularv15中&#xff0c;Angular团队通过将独立API从开发者预览版升级至稳定版&#xff0c;在Angular的简易性和开发者体验方面达到了一个重要的里程碑。如今&#xff0c;Angular将继续这一改进的势头&#xff0c;发布了自Angular最初推出以来最大的一次版本更新&…

springboot - spring.factories

spring.factories 是什么&#xff1f; spring.factories 是 Spring Boot 自动配置的核心机制之一&#xff0c;它用于自动注册 Spring Boot 中的各种自动配置类&#xff0c;从而实现自动化配置的目的。在 Spring Boot 应用程序启动时&#xff0c;Spring Boot 会自动扫描 classp…

如何在 VMware 中安装 Kali Linux

Kali Linux 是用于学习和练习黑客攻击和渗透测试的Linux发行版的不二之选。 而且&#xff0c;如果你经常捣鼓 Linux 发行版&#xff0c;出于好奇心&#xff0c;你可能已经尝试过它。 警告&#xff01; 本文介绍的内容仅供学习 Kali Linux 的安装&#xff0c;请勿使用 Kali Lin…

【genius_platform软件平台开发】第九十七讲:常见Visual Studio版本号对应表VisualStudioVersion

1. sln文件格式 使用记事本打开.sln文件&#xff0c; 从一个外行角度看&#xff0c;VC/VS有3种版本号&#xff0c;具备一定的迷惑性&#xff1a;(xx表示具体的数字&#xff09; MSVC xx(VC版本 eg. VC6.0) _MSC_VER VisualStudio xx&#xff08;VS版本 eg. VS2012&#xf…

[Tool] python项目中集成使用Firebase推送功能

背景介绍 目前&#xff0c;App推送功能已经非常普遍&#xff0c;几乎所有App都有推送功能。推送功能可以自己实现&#xff0c;也可以使用第三方提供的推送服务&#xff08;免费的收费的都有&#xff09;。本文主要介绍使用Firebase提供的推送服务Firebase Cloud Messaging&…

微信小程序共享云开发环境的代码配置

微信小程序共享云开发环境的代码配置 1. 环境的分享配置2. 使用共享云开发环境的小程序代码编写2.1 初始化2.2 云函数调用 4. 拓展&#xff1a;共享环境的小程序获取openId4.1 小程序密钥的设置4.2 小程序内代码编写 4.3 云函数编写 小程序2022年进行了云开发付费调整&#xff…

【C++】详解二叉树进阶OJ题(更深入理解递归和非递归在二叉树的各种结构的应用)

前言&#xff1a; 我们在此前的初阶数据结构讲解中已经讲解了部分二叉树的OJ题&#xff0c;当时我们只学习了C语言&#xff0c;其实还有很多进阶的OJ题用C来写会比较方便和容易理解&#xff0c;所以本章将在讲解完二叉搜索树后来详解不同类型的二叉树进阶OJ题&#xff0c;校招中…

常用性能测试工具都有哪些特点?

在软件开发过程中&#xff0c;性能测试是不可或缺的一部分。通过性能测试&#xff0c;我们可以评估系统的响应速度、稳定性和容量等方面的表现&#xff0c;帮助我们发现和解决潜在的性能问题。而常用的性能测试工具也在不断发展和升级&#xff0c;成为了帮助我们完成性能测试的…