整理了一周近万字讲解linux基础开发工具vim,gdb,gcc,yum等的使用

news2024/11/24 10:34:02

 

 

文章目录

  • 前言
  • 一、yum的使用
  • 二、vim的使用
  • 三 .  gcc/g++的使用
  • 四 .  gdb的使用
  • 总结

 


前言

想用linux开发一些软件等必须要会的几种开发工具是必不可少的,在yum vim gcc gdb中指令繁杂的是vim和gdb这两个工具,至于yum和gcc的指令就比较简单了。


 

一、yum的使用

yum是linux的软件包管理器,那什么是软件包呢?

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

注意事项:关于yum的所有操作必须保证主机(虚拟机)网络畅通!!

yum工具的常用选项有:

yum install   : 表示安装软件包

yum 会自动找到都有哪些软件包需要下载, 这时候敲 "y" 确认安装.
出现 "complete" 字样, 说明安装完成.
注意:
安装软件时由于需要向系统目录中写入内容, 一般需要 sudo 或者切到 root 账户下才能完成.
yum安装软件只能一个装完了再装另一个. 正在yum安装一个软件的过程中, 如果再尝试用yum安装另外 一个软件, yum会报错.

f3312b1dd8374944a64dcd62cfdb8b41.png

在这里我以gdb为例,由于我的linux环境中已经有了gdb调试器,所以机器告诉我无需下载。 

yum list  : 列出所有可供安装的软件包

软件包名称: 主版本号.次版本号.源程序发行号-软件包的发行号.主机平台.cpu架构.
"x86_64" 后缀表示64位系统的安装包, "i686" 后缀表示32位系统安装包. 选择包时要和系统匹配.
"el7" 表示操作系统发行版的版本. "el7" 表示的是 centos7/redhat7. "el6" 表示 centos6/redhat6
最后一列, base 表示的是 "软件源" 的名称, 类似于 "小米应用商店", "华为应用商店" 这样的概念

5e48391adbd04c09b56a85d4bef50fd5.png

由于list显示出的包太多所以我们截取一部分。 

yum list | grep xxx  :由于list显示出的安装包太多所以我们用管道的方式只筛选出我们关注的包(xxx代表包的关键字,比如要查找ls,那么xxx就是ls)

7e7d5667690844788489814fb1a79a89.png

上图是我们以ls为例 

yum search : 搜索包含指定关键字的软件包

同样我们以ls为例:

b892934cd6df479abb8ed19119f16ad0.png

yum remove : 卸载指定的软件

376589721b414e888ce3605b52b24e5c.png

以gdb为例在删除的时候会询问是否删除,如果输入Y就删除了。 

yum makecache : 将服务器的软件包信息缓存到本地

yum clean all : 清除缓存中老旧的头文件和软件包

yum -y update : 升级所有包的同时也升级软件和系统内核

yum -y upgrade : 只升级所有包,不升级软件和系统内核,软件和内核保持原样

以上就是yum的常用命令,命令并不多只要多练习很快就能掌握。

二、vim的使用

由于vim的模式很多在这里我们只讲解最常用的四个模式,分别是命令模式,插入模式,底行模式和替换模式

命令模式:

vim + 文件名进入vim

刚打开vim默认就在命令模式中,在命令模式中不可以直接修改代码需要输入相对应的指令才可以修改。

4c7fcbda5b594019801f9b8a578d338b.png

由于我的vim是已经配置过的所以会和大家的不一样。 

插入模式:(进入插入模式需要在命令模式下按i或者a或者o还有其他进入插入模式的途径就不介绍了)

i : 光标不动进入插入模式

94701a9cbd2a44c58475faa0faef84de.png

按i后进入插入模式光标不变 

a:光标向后移动一个然后进入插入模式

917194b54b6d407385a2f4bd3680867b.png

 5a7af2b0299c4f53bfdf264fcedfd4d2.png

按a进入插入模式发现光标向后移了一个位置 

o:光标新起一行进入插入模式

bd2e58f4596f401faf195fb2694fbe31.png

4441a974975341a38f5f590d39fd4c92.png

按o后可以看到光标新起一行进入插入模式 

底行模式:(在命令模式下按shift + ; 进入底行模式)

3c9fb5b0ac4645f9a5846d214941793e.png

上面的界面就是底行模式,底行模式可以在底下的命令行输出指令来控制vim。

由于避免多开vim的情况,所以建议大家在进入底行模式前先退回到命令模式,不论在任何模式下要退回到命令模式下只需要按ESC键即可。 

替换模式:(在命令模式下shift + r 进入替换模式)

2db01a3245864c54b036b327fc3fba78.png

替换模式顾名思义就是替换非常方便。

下面进入在vim中最实用的指令讲解:

底行模式下的命令:

w : 保存所修改的文件

q : 直接退出文件,如果已经修改了文件使用q会提示

wq : 保存并退出文件

! : 强制执行(与其他命令配合使用)   比如  :w ! :强制保存

set nu : 调出行号

c3a6c588197c4e278166f18a35cda742.png

set nonu : 取消行号

8f730f2bbcfa4480923fa8f0060dd037.png

! + 指令 :跳出vim显示指令

 3ba18b52f65c4035bfcde2a8b27d19d9.png

比如上图的! ls  就是在vim中显示当前路径下的ls指令

vs + 文件名:分屏使用(如果没有这个文件则会创建一个文件)

0240f3ab0d2a4d83b0a2383d94beecb8.png 6b789707b435477d80d2eb9256cc1f10.png

如上图在此路径下并没有test.h文件,在我们使用vs命令后自动给我们创建了一个.h文件并且于刚刚的test.c文件分屏使用,理论上使用vs分屏没有次数,但是如果要分好几个文件的屏那么体验会非常不好。

在分屏模式下想要关闭或者修改哪个文件就要让光标在那个文件里,所以移动光标的指令必不可少

ctrl + ww:在分屏模式下切换光标

5f52b7702e08448ab8899fb1a8a95835.png

b4da51b82f1b47639c891bdf310caf06.png

关闭哪个文件只需要让光标在哪个文件里然后在底行模式下用q或者wq关闭即可,这个操作与单个文件一样。

接下来的所有命令都在命令模式下使用:

注意:vim不支持右边的小数字键盘,所以输入数字在字母区的上面输入。

yy/nyy  : 复制当前行或者复制当前行在内的指定若干行

此操作需要与粘贴指令配合所以先介绍粘贴指令在一起演示:

p/np : 粘贴一行或者多行相同的内容到当前光标所在行之下

f87acfc146a447ac903ae7d244f34b7a.png

当我的光标放在第9行时在键盘输入yy后然后直接输入p就将第九行的内容自动粘贴到下一行,如果想要复制第九行到第13行则输入5yy就是复制五行的内容然后p即可。如果想要10行一样的int i = 10那么只需要在第九行yy一下然后输入10p那么就自动粘贴了10行。

u : 撤销刚刚的操作(需要注意的是即使已经保存文件也可以撤销,但是一旦退出vim则不可以再撤销之前的命令)

38b3e54926df43409fc528828828922e.png

7d87a10d0bd74b18ae6debbdbdf22a24.png

ctrl + r  : 对刚刚进行的撤销进行撤销

f30e678c50df47cc81e2069e25db0a94.png

f162efd0adb746a9bd48b53728eaae65.png

dd/ndd : 对当前行或者当前行在内的n行的内容进行剪切

f5c231f21fec4fa7bc544dd5e617cb4f.png

比如我的光标在第9行然后键盘输入5dd则将第九行开始的后五行内容全删掉了 

dd + p :dd是剪切内容p是复制内容所以dd+p可以实现内容的移动

d214be6284224cf1a7f474c573c83ad4.png

 

cb54627fa71147bc98472f2e5067f833.png

如图所示是使用3dd + p指令后的代码

shift + g : 将光标定位到文档最结尾

1f000a00321b4785a83c58302ad2aff1.png

 gg :将光标快速定位到文档最开始

4e67cbca4f0643eea6ab1595bdabb468.png

n + shift + g :将光标定位到第n行

shift + $(实际就是$键) :将光标定位到文档行的结尾

c3f2f51a0294486d9aab97cd3a5fcc79.png

比如光标在第九行i的前面使用命令后光标到结尾

shift + ^(实际就是^):将光标定位到文档行的开始与$是一对

nw,nb : 按照单词为单位在行内进行前后移动n个单词,w向后,b向前

shift + ~ (也就是~):快速将光标指向的字符进行大小写转换

nr + 要替换的字符 : 替换n个光标(从左到右n个)所在的字符

nx : 行内向后删除n个字符

n shift x : 行内向前删除n个字符

h j k l :h:光标向左移动 j : 光标向下移动 k:光标向上移动 L :光标向右移动

以上就是vim中常用的命令及演示。

二、gcc/g++的使用

 gcc/g++是一个编译器

gcc完成需要以下几个步骤:

1.预处理(头文件展开,条件编译,宏替换,去注释等)

使用: gcc –E hello.c –o hello.i    

-E :从现在开始进行程序的翻译,预处理做完就停下来

gcc -E + 文件名 :直接生成.i文件

gcc -E + 原来的文件名 + 自己想取的文件名(最好后缀为.i,因为.i是预处理后的代码文件):将预处理后的代码文件写入自己命名的文件中

9f05d441f6994321b4b18cbba650a4d9.png

255d6d61cec94233835e61e66220a95a.png  

2. 编译(生成汇编语言)

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

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

 -S :从现在开始进行程序的翻译,当编译做完就停下来

gcc -S + 文件名:形成汇编代码(默认形成一个.s文件)在这里注意如果刚刚我们已经已经有了预处理后的.i文件那么直接用.i文件即可,如果用原来.c文件则会又进行一次预处理

gcc -S + 原来文件名 + -o + 自己命名的文件名 :形成一个自己指明的汇编文件

1603db189a4942eeb64dfb822d38ad88.png

8c85f18dad904d13a14161c9b8162a0c.png 编译过程为:扫描程序->语法分析->语义分析->源代码优化->代码生成器->目标代码优化;

扫描程序进行语法分析,从左向右,从上往下扫描源程序字符,识别出各个单词,确定单词类型。

语法分析是根据语法规则,将输入的语句构建出分析树,或者语法树,也就是parse tree或者syntax tree

语义分析是根据上下文分析函数返回值类型是否对应这种语义检测,可以理解语法分析就是描述一个句子主谓宾是否符合规则,而语义用于检测句子的意思是否是正确的

目标代码生成指的是把中间代码变换成为特定机器上的低级语言代码

3. 汇编(可重定位目标二进制文件,不可以被执行的,bin.obj)

汇编阶段是把编译阶段生成的“.s”文件转成目标文件
实例: gcc –c hello.s –o hello.o
-c :从现在开始进行文件的汇编,当汇编完成后就停下来
gcc -c + 文件名(默认形成一个.o文件)形成二进制文件,文件名可以从.s开始也可以重新开始。
gcc -c + 原来文件名 + 自己命名的文件名 :将二进制文件写入自己命名的文件中
3c6c9d0d6b494274ad74d42ec00cd943.png

8d963b5b5093404f888c77cd43fb24fb.png

4.链接(将我们这自己形成的.obj文件和库文件等合并,形成可执行程序)

7491bfd8219b4cadb50335bad268b4da.png

ldd + 链接好的文件 :可以显示都链接了哪些库

4f02907d88bb410f8ff4f75575d5e8bd.png

直接gcc + 文件名会形成一个a.out可执行文件,然后./a.out可以直接运行程序

f5d84f61e27747588f8e807347891e15.png

如果想形成一个自己命名的文件:gcc + 文件名 -o + 自己命名的文件

e4a5c77cdd6d461590a810fa92fd9b6b.png

 gcc + 文件名 -o + 自己命名的文件-static -static :形成一个静态库

78a6fa34d91f4af6ac8885e590d10db5.png

当出现当出现cannot find -lc时,需要先下载c的静态库  yum install -y libc-static

Linux系统默认已经携带了语言级别的头文件和语言对应的库
ls /usr/include/stdio.h :查看C语言头文件所在位置
静态库   libxxxxx.a      动态库   libxxxxx.so
1.库分为静态库(专门让编译器,对用户的程序进行静态链接的)和动态库(专门让编译器,对用户的程序进行动态链接的)
2.静态库和静态链接:链接的时候,如果是静态链接,找到静态库,拷贝静态库中的我所需要的代码到我自己的可执行程序中
3.动态库和动态链接:链接的时候,如果是动态链接,找到动态库,拷贝动态库中的我所需要的代码的地址到我自己的可执行程序中相关的位置
4.静态链接成功:我们的程序,不依赖任何库,自己就可以独立运行
5.动态链接成功:我们的程序,还是依赖动态库,一旦动态库缺失,我们的程序便无法运行
6.静态库,因为自身拷贝的问题,比较浪费空间
7.动态库,因为可以做到被大家共享,所以真正的实现永远在库中,程序内部只有地址,比较节省空间。
8.静态库VS动态库 :Linux默认使用的是动态链接和动态库

 接下来讲解Linux项目自动化构建工具-make/Makefifile

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

规则:makefile是一个围绕依赖关系和依赖方法构建的一个自动化编译的工具

依赖关系中:
目标文件对应的依赖文件列表可以是空

.PHONY:总是被执行的

比如:

a29d7e00d42847f2888a3671d05d58a3.png

 在上图的makefile里,test依赖test.c.  而clean后面为空说明目标文件对应的依赖文件列表可以是空

makefile文件中,保存了编译器和链接器的参数选项,并且描述了所有源文件之间的关系。make程序会读取makefile文件中的数据,然后根据规则调用编译器,汇编器,链接器产生最后的输出。
makefile里主要包含了五个东西:显式规则,隐晦规则,变量定义,文件指示和注释
显式规则说明了如何生成一个或多个目标文件
make有自动推导的功能,所以隐晦的规则可以让我们比较粗糙的简略的书写makefile,比如源文件与目标文件之间的时间关系判断之类
在makefile中可以定义变量,当makefile被执行时,其中的变量都会被扩展到相应的引用位置上,通常使用$(var)表示引用变量
文件指示:包含在一个makefile中引用另一个makefile,类似C语言的include;
注释:makefile中可以使用#在行首表示行注释
默认情况下,make命令会在当前目录下按顺序找寻文件名为GNUmakefile,makefile,Makefile的文件,找到了解释这个文件
make的执行规则是,只生成所有目标对象的第一个,当然make会根据语法规则,递归生成第一个目标对象的所有依赖对象后再回头生成第一个目标对象,生成后退出
make在执行makefile规则中,根据语法规则,会分析目标对象与依赖对象的时间信息,判断是否在上一次生成后,源文件发生了修改,若发生了修改才需要重新生成
makefile中的伪对象表示对象名称并不代表真正的文件名,与实际存在的同名文件没有相互关系,因此伪对象不管同名目标文件是否存在都会执行对应的生成指令。伪对象的作用有两个。1.使目标对象无论如何都要重新生成。2.并不生成目标文件,而是为了执行一些指令。
makefile中使用.PHONY来声明伪对象

三、git的使用

如果没有Git就先安装git,命令为 yum install git

我这里使用的码云,首先在码云中新建一个仓库然后复制仓库的链接,然后再linux中输入命令

git clone + 仓库链接 : 就能将仓库克隆到本地了

204f18a0424f478284c6ea8116538c87.png

 上图是我的仓库的路径,该怎么提交呢?首先将你要提交的文件拷贝到这个路径中

7f68ef7623464516ba8fe921acebd411.png

然后 git add . : .的意思是将当前目录下所有没有被添加的文件添加到仓库

接下来 git commit -m "此处是提交日志 "  : 提交日志必须好好写,这个可以查到

e6fa4b89a6f341b5a990a839d9cbff5e.png

然后git push即可,在这里会有一些问题,如果你是第一次提交则会出现git config --global user.email "you@example.com"和git config --global user.name "Your Name"这样的报错,这时候可以将其保存粘贴下来输入你自己的名字和邮箱运行即可。

a7b9aa149b0847f1b1b4b707682dbbd5.png

e1319b9ed1114b3588933ef223116c4b.png

这个时候代码就已经提交到远端仓库了。

git log :可以查看以往提交和删除的日志

git rm + 文件名 :在git中删除一个文件,删除后远端仓库也没有这个文件了 

如果要在linux中把仓库删了只需要:rm .git -rf  即可

四、gdb的使用

程序的发布方式有两种,debug模式和release模式
Linux gcc/g++出来的二进制程序,默认是release模式
要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项
首先查看自己的系统是否有gdb这个软件,如果没有则使用命令:
yum install -y gdb   进行安装
在这里我们就直接使用makefile让其自动编译文件了,上面已经说过,要使用gdb调试,必须在源代码生成二进制程序的时候加上-g选项,所以我们的makefile如下图:
e3cc0cc0c1294d9aaeb667f36d809c13.png

后面的-std=c99是什么意思呢?因为我们在.c文件中使用了新的C语言语法特性linux默认的C语言标准是不支持这个特性的,所以我将其改为c99就可以正常编译了。

e52aef1ada3f4831999613639b29fda7.png

只有在c99的标准下才默认支持for循环内定义变量。

接下来我们讲解gdb的常用指令:

首先 gdb + 可执行文件  开始对文件的调试(注意是可执行文件而不是普通文件)

76e0e7784a4e46969261e6214a11a7dd.png

当出现如上图的提示的时候即可调试。

list / L   + 行号:显示文件的源代码,接着上次的位置往下列每次列10行

65a1d9c628e8478b9208698f3636cbce.png

L + 1   就是从第一行开始显示

list / L  + 函数名 :列出某个函数的源代码

abb3d7f04c8b45e6ba4d7e76e57bdf01.png

run / r :直接运行完整个程序

a237640d5b5c46969e715673d2159e61.png

break / b + 行数:在某行上打上断点

1413f6e705ad4258947e86b8e26c3c1e.png

如图在第五行打上了断点

info b/break  : 查看断点信息 

此命令在上图中已有显示。

d + 断点编号  :删除某个断点

dd0ca35971bb42d59494e0b058e49234.png

d + breakpoints  :删除全部断点

3518219deff64e81a0f9339303338115.png

disable + breakpoint + 断点编号  :禁用某个断点

83a96be314f04daeb71ae88ae2367634.png

 enable + breakpoint + 断点编号 : 打开某个断点

970cd75064e5418183c1189c36a3059a.png

quit 或者 ctrl + d  :  退出gdb

 d9f7c7b999e64a399a25c544e97645c9.png

n/next  : 逐过程调试(遇见函数不进入函数)

8b475796ea7441ca8701d4408c577a94.png

在这里要说明一下gdb的每次run都会从距离main函数最近的那个断点开始,如果没有打断点run一下直接就程序运行完了也就无法调试,所以正确的步骤是先打断点,然后run,然后逐过程或者逐语句进行调试

s/step :   逐语句调试(遇见函数会进入函数)

58946d30ca1a4e0ea51854e40e00d649.png

 p + 变量   :打印变量值

ef17646d034e46edb8c822b234c57aec.png

display + 变量  :  常显示变量

2ab5f247f03148adb30430948e7a2373.png

每一步调试都会自动把要常显示的变量打印一遍

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

1a5b9e0c3be14ee4aabcc596a1083207.png

until + 行号   :在函数内,进行指定位置跳转,执行完区间代码

84c134dd0c034b05ab6cc46dc949e13b.png

finish : 进入一个函数,只执行完一个函数就停下来

acfe23ed2a94491fa657e8a76a358285.png

c : 从一个断点处直接运行到下一个断点处

e59729ed63ba4aa28e375e021634ca01.png 

set var  : 修改变量的值

d9c6f835166b416293c7617a396b5c2e.png 

以上就是在gdb中最常用的调试命令了。

 


总结

要掌握好linux这些环境基础开发工具是必须要会的,学会了这些再去写代码有着事半功倍的效果,在这些工具中,大多数指令是需要经常使用才能记住的,所以大家一定要多去练习这些指令,如果有能力的话还可以自己更深入的去研究,需要说明的是,虽然我们在文章中讲的git指令很少很简单,但实际只是让大家掌握了如何将代码提交到远程仓库,git还有很多功能是非常优秀的这就需要大家自己下去慢慢学习。

 

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

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

相关文章

【SpringMVC】拦截器

目录 一、概念 二、自定义拦截器的三个实现方法 三、自定义拦截器执行流程 四、使用 五、拦截器和过滤器 相关文章(可以关注我的SpringMVC专栏) SpingMVC专栏SpingMVC专栏一、概念在学习拦截器之前,我们得先了解一下它是个什么❓ SpringMVC…

SAP ABAP调用标准事务码

这里介绍常见的几种在开发中常用到的事务代码跳转功能。 1、最常用到的是“SET PARAMETER”语句赋值,然后再使用“CALL TRANSACTION”语句跳转屏幕。 比如采购订单、销售订单、交货单、采购发票、销售发票等事务代码,均可以利用给参数赋值来直接跳转&am…

零售及仓储数字化整理解决方案

价格管控 皮克价格管控方案可实现门店与企业信息管理平台的数据同步,强化零售企业对终端的控制。同时为企业销售决策提供支持,优化门店经营活动的效率和频率。陈列管理 皮克陈列管理方案通过电子价签产品使商品陈列得到固化。 同时实现了陈列可视化&am…

ArcGIS水文分析提取河网及流域

在进行某些研究或者一些论文插图显示的时候,有时我们会碰到在部分资料中找不到一些小的河流或者流域的数据的情况,这里讲述通过DEM数据生成河网及流域。 一、数据来源 四川省高程数据来源于中国科学院资源环境科学与数据中心(中国科学院资源环…

Vue3学习之深度剖析CSS Modules和Scope

Css Modules 是通过对标签类名进行加装成一个独一无二的类名,比如.class 转换成.class_abc_123,类似于symbol,独一无二的键名 Css Scope 是通过为元素增加一个自定义属性,这个属性加上独一无二的编号,而实现作用域隔离。 原理 …

爬虫必备抓包工具——Fiddler【认识使用】

目录:1.fiddler (抓包工具)1.1 引入:HTTP/https代理(正向代理)1.2 拓展:反向代理:1.2 初识Fiddler①什么是抓包?抓包有什么用?②浅谈fiddler:③fi…

Unity_Skybox自定义插件可实现日夜更替Polyverse Skies | Low Poly

又又一个天空盒,不过这个做的还是比较完善的。。。不会出现买家秀和买家秀差别大问题 此Skybox插件特色提供: 可扩展,自定义很多的Skybox Shader预制体几个,虽然都是夜晚样式(缺白天)若干预设值</

对NIO和BIO的进一步理解

疑问 在之前的学习中&#xff0c;只提到BIO是阻塞IO&#xff0c;在建立连接和读写事件时会阻塞线程。NIO是非阻塞IO&#xff0c;基于事件注册&#xff0c;通过Selector进行切换Channel&#xff0c;不会阻塞线程。对于这种解释&#xff0c;还是带有一些疑问的。Selector进行Cha…

#define 实现快捷模板类实例在eigen::Maxtrix中的应用

欢迎关注更多精彩 关注我&#xff0c;学习常用算法与数据结构&#xff0c;一题多解&#xff0c;降维打击。 背景 在eigen库中&#xff0c;矩阵类原来的用法是 Matrix<Type, row, col>。 为了方便用户&#xff0c;库中还提供了用户常用的快捷类型&#xff0c;比如Matrix…

Java-String的API

一、length()package 做题; import java.lang.reflect.Array; import java.security.PublicKey; import java.util.Arrays; import java.util.Scanner;import javax.naming.StringRefAddr;public class Main {public static void main(String[] args) {Scanner sc new Scanne…

ZeroTierr的moon云服务器搭建和使用

搭建moon 问题是ZeroTier One本身的服务器都在国外访问速度很慢。可以通过搭建国内Moon服务加速解决连接慢的问题。 1、 进入云服务器在线安装zerotier curl -s https://install.zerotier.com/ | sudo bash查看安装zerotier版本 sudo zerotier-cli status安装完成后生成moon…

从0到1完成一个Vue后台管理项目(二十二、列表拖拽排序SortableJS)

往期 从0到1完成一个Vue后台管理项目&#xff08;一、创建项目&#xff09; 从0到1完成一个Vue后台管理项目&#xff08;二、使用element-ui&#xff09; 从0到1完成一个Vue后台管理项目&#xff08;三、使用SCSS/LESS&#xff0c;安装图标库&#xff09; 从0到1完成一个Vu…

Python WebGL 3D应用开发快速入门

在本文中&#xff0c;我们将学习如何在Python中使用three.js库&#xff0c;而无需编写任何一行 JavaScript。我们将使用PyWeb3D&#xff0c;这是一个额外的层&#xff0c;旨在与Brython的three.js轻松交互。 1、什么是PyWeb3D&#xff1f; 简单地说&#xff0c;PyWeb3D是一个…

现代JavaScript,你应该使用的10件事

javascripttip&#xff08;3 部分系列&#xff09;1现代 JavaScript&#xff0c;你应该使用的 10 件事&#xff0c;从今天开始2了解如何在 JavaScript 中使用循环3如何在 JavaScript 中学习足够多的 RegEx 才能变得危险您可能对 JavaScript 完全陌生&#xff0c;也可能多年来只…

文件学习笔记

删除线格式 ## 文件描述符 1.文件文件内容文件属性。 2.文件操作文件内容的操作文件属性的操作。 3.所谓的“打开”文件&#xff0c;是指将文件的属性或内容加载到内存中—这是由冯诺依曼决定。 4.所以文件不全打开&#xff0c;不打开的文件放在磁盘存储。 5.内存文件&#xff…

在线教育-谷粒学院学习笔记(三)

文章目录1 搭建前端项目环境2 前端页面框架介绍3 讲师管理前端开发4 后台系统登录功能改造到本地5 前端框架开发过程6 讲师列表前端实现7 讲师分页前端实现8 讲师条件查询前端实现9 讲师删除功能前端实现10 讲师添加前端实现11 讲师修改前端实现12 前端路由切换问题解决1 搭建前…

Linux工具学习之【gdb】

✨个人主页&#xff1a; Yohifo &#x1f389;所属专栏&#xff1a; Linux学习之旅 &#x1f38a;每篇一句&#xff1a; 图片来源 &#x1f383;操作环境&#xff1a; CentOS 7.6 阿里云远程服务器 Whatever is worth doing is worth doing well. 任何值得去做的事情&#xff0…

【HTML】一款可交互的响应式登陆注册表单,你确定不来看看嘛(附源码)

&#x1f482;作者简介&#xff1a; THUNDER王&#xff0c;一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学会计学专业大二本科在读&#xff0c;同时任汉硕云&#xff08;广东&#xff09;科技有限公司ABAP开发顾问。在学习工作中&#xff0c;我通常使用偏后…

2022年五一杯数学建模C题火灾报警系统问题求解全过程论文及程序

2022年五一杯数学建模 C题 火灾报警系统问题 原题再现&#xff1a; 二十世纪90年代以来&#xff0c;我国火灾探测报警产业化发展非常迅猛&#xff0c;从事火灾探测报警产品生产的企业已超过100家&#xff0c;年产值达几十亿元&#xff0c;已经成为我国高新技术产业的一个组成…

Docker之Nginx部署前端项目

目录 创建nginx容器 nginx.conf讲解 ①所有配置必须以“;”结尾 ②nginx发布java项目 nginx发布静态vue项目 nginxtomcat实现反向代理及均衡 nginxhtml静态服务器 创建nginx容器 docker run –name mynginx -d -p 80:80 -v /data/nginx/conf/nginx.conf:/etc/nginx/ngin…