Linux篇:开发工具yum/vim/gcc/g++/Makefile/gdb

一. yum:软件包管理器

什么是软件包?
        在Linux 下安装软件 , 一个通常的办法是下载到程序的源代码 , 并进行编译 , 得到可执行程序 .
但是这样太麻烦了, 于是有些人把一些常用的软件提前编译好 , 做成软件包 (可以理解成windows 上的安装程序) 放在一个服务器上 , 通过包,管理器可以很方便的获取到这个编译好的软件包 , 直接进行安装 . 软件包和软件包管理器, 就好比 "App" " 应用商店 " 这样的关系 .
yum(Yellow dog Updater, Modified) Linux 下非常常用的一种包管理器 . 主要应用 Fedora,RedHat, Centos等发行版上 .
关于 rzsz
这个工具用于 windows 机器和远端的 Linux 机器通过 XShell 传输文件 .
安装完毕之后可以通过拖拽的方式将文件上传过去 .
注意事项
关于 yum 的所有操作必须保证主机 ( 虚拟机 ) 网络畅通 !!!
可以通过 ping 指令验证
查看软件包
通过 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 表示的是 " 软件源 " 的名称 , 类似于 " 小米应用商店 ", " 华为应用商店 " 这样的概念 .
如何安装软件
通过 yum, 我们可以通过很简单的一条命令完成 gcc 的安装 .
sudo yum install lrzsz
yum 会自动找到都有哪些软件包需要下载 , 这时候敲 "y" 确认安装 .
出现 "complete" 字样 , 说明安装完成 .
注意事项 :
安装软件时由于需要向系统目录中写入内容 , 一般需要 sudo 或者切到 root 账户下才能完成 .
yum 安装软件只能一个装完了再装另一个 . 正在 yum 安装一个软件的过程中 , 如果再尝试用 yum 安装另外 一个软件, yum 会报错。
如何卸载软件
仍然是一条命令 :
sudo yum remove lrzsz

二. vim:多模式编辑器

2.1 vim的基本概念

课堂上我们讲解 vim 的三种模式 ( 其实有好多模式,目前掌握这 3 种即可 ), 分别是命令模式( command mode )、插 入模式(Insert mode )和底行模式( last line mode ),各模式的功能区分如下:
正常 / 普通 / 命令模式 (Normal mode)
        控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insert mode 下,或者到 last line mode
插入模式 (Insert mode)
        只有在Insert mode 下,才可以做文字输入,按「 ESC 」键可回到命令行模式。该模式是我们后面用的最频繁
的编辑模式。
末行模式 (last line mode)
        文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作。 在命令模式下,shift+:   即可进入该模式。要查看你的所有模式:打开vim ,底行模式直接输入

2.2. vim的基本操作

进入 vim, 在系统提示符号输入 vim 及文件名称后,就进入 vim 全屏幕编辑画面 :
vim 文件名
不过有一点要特别注意,就是你进入 vim 之后,是处于 [ 正常模式 ] ,你要切换到 [ 插入模式 ] 才能够输入文 字。
[ 正常模式 ] 切换至 [ 插入模式]        
        输入a
        输入i
        输入o
[ 插入模式 ] 切换至 [ 正常模式 ]
目前处于 [ 插入模式 ] ,就只能一直输入文字,如果发现输错了字 , 想用光标键往回移动,将该字删除,可 以先按一下「ESC 」键转到 [ 正常模式 ] 再删除文字。当然,也可以直接删除。
[ 正常模式 ] 切换至 [ 末行模式 ]
shift + ; , 其实就是输入「 :
退出 vim 及保存文件 , [ 正常模式 ] 下,按一下「 : 」冒号键进入「 Last line mode , 例如 :
: w (保存当前文件)
wq ( 输入「 wq , 存盘并退出 vim)
: q! ( 输入 q!, 不存盘强制退出 vim)

2.3. vim正常模式命令集

插入模式
        按「i 」切换进入插入模式「 insert mode 」,按 “i” 进入插入模式后是从光标当前位置开始输入文件;
        按「a 」进入插入模式后,是从目前光标所在位置的下一个位置开始输入文字;
        按「o 」进入插入模式后,是插入新的一行,从行首开始输入文字。
从插入模式切换为命令模式
        按「ESC 」键。
移动光标
vim可以直接用键盘上的光标来上下左右移动,但正规的 vim 是用小写英文字母「 h 」、「 j 」、「 k 」、 「l 」,分别控制光标左、下、上、右移一格
按「 G 」:移动到文章的最后
按「 $ 」:移动到光标所在行的 行尾
按「 ^ 」:移动到光标所在行的 行首
按「 w 」:光标跳到下个字的开头
按「 e 」:光标跳到下个字的字尾
按「 b 」:光标回到上个字的开头
按「 #l 」:光标移到该行的第 # 个位置,如: 5l,56l
按[ gg ]:进入到文本开始
按[ shift g ]:进入文本末端
按「 ctrl + b 」:屏幕往 移动一页
按「 ctrl + f 」:屏幕往 移动一页
按「 ctrl + u 」:屏幕往 移动半页
按「 ctrl + d 」:屏幕往 移动半页
删除文字
x 」:每按一次,删除光标所在位置的一个字符
#x 」:例如,「 6x 」表示删除光标所在位置的 后面(包含自己在内) ”6 个字符
X 」:大写的 X ,每按一次,删除光标所在位置的 前面 一个字符
#X 」:例如,「 20X 」表示删除光标所在位置的 前面 ”20 个字符
dd 」:删除光标所在行
#dd 」:从光标所在行开始删除 #
复制
yw 」:将光标所在之处到字尾的字符复制到缓冲区中。
#yw 」:复制 # 个字到缓冲区
yy 」:复制光标所在行到缓冲区。
#yy 」:例如,「 6yy 」表示拷贝从光标所在的该行 往下数 ”6 行文字。
p 」:将缓冲区内的字符贴到光标所在位置。注意:所有与 “y” 有关的复制命令都必须与 “p” 配合才能完
成复制与粘贴功能。
替换
r 」:替换光标所在处的字符。
R 」:替换光标所到之处的字符,直到按下「 ESC 」键为止。
撤销上一次操作
u 」:如果您误执行一个命令,可以马上按下「 u 」,回到上一个操作。按多次 “u” 可以执行多次回
复。
ctrl + r : 撤销的恢复
更改
cw 」:更改光标所在处的字到字尾处
c#w 」:例如,「 c3w 」表示更改 3 个字
跳至指定的行
ctrl + g 」列出光标所在行的行号。
#G 」:例如,「 15G 」,表示移动光标至文章的第 15 行行首。

2.4. vim末行模式命令集

在使用末行模式之前,请记住先按「 ESC 」键确定您已经处于正常模式,再按「:」冒号即可进入末行模式。
列出行号
「set nu : 输入「 set nu 」后,会在文件中的每一行前面列出行号。
跳到文件中的某一行
# : # 」号表示一个数字,在冒号后输入一个数字,再按回车键就会跳到该行了,如输入数字 15 , 再回车,就会跳到文章的第15 行。
查找字符
/ 关键字」 : 先按「 / 」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按 「n 」会往后寻找到您要的关键字为止。
? 关键字」:先按「 ? 」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直
按「 n 」会往前寻找到您要的关键字为止。
问题:/ 和 ?查找有和区别?
  1. 在命令模式下按下 / 后输入要搜索的关键词,然后按 Enter 键,Vim 会从光标所在位置向文件末尾方向查找匹配该关键词的内容。按下 n 键可继续向后查找下一个匹配项,按下 N 键可向前查找下一个匹配项。
  2. 使用 ? 进行反向搜索:

    在命令模式下按下 ? 后输入要搜索的关键词,然后按 Enter 键,Vim 会从光标所在位置向文件开头方向查找匹配该关键词的内容。按下 n 键可继续向前查找下一个匹配项,按下 N 键可向后查找上一个匹配项。
保存文件
w : 在冒号输入字母「 w 」就可以将文件保存起来
离开 vim
q 」:按「 q 」就是退出,如果无法离开 vim ,可以在「 q 」后跟一个「 ! 」强制离开 vim
wq 」:一般建议离开时,搭配「 w 」一起使用,这样在退出的时候还可以保存文件。

2.5. vim操作总结

三种模式: 正常模式   插入模式   底行模式

2.6. 简单vim配置

配置文件的位置
在目录 /etc/ 下面,有个名为 vimrc 的文件,这是系统中公共的 vim 配置文件,对所有用户都有效。
而在每个用户的主目录下,都可以自己建立私有的配置文件,命名为: “.vimrc” 。例如, /root 目录下,
通常已经存在一个 .vimrc 文件 , 如果不存在,则创建之。
切换用户成为自己执行 su ,进入自己的主工作目录 , 执行 cd ~
打开自己目录下的 .vimrc 文件,执行 vim .vimrc
常用配置选项 , 用来测试
设置语法高亮 : syntax on
显示行号 : set nu
设置缩进的空格数为 4: set shiftwidth=4
可以自行到网上查找一些好用的配置

三. Linux编译器-gcc/g++使用

1. 背景知识
1. 预处理(进行宏替换 )
2. 编译(生成汇编 )
3. 汇编(生成机器可识别代码)
4. 连接(生成可执行文件或库文件 )
2. gcc 如何完成
格式 gcc [ 选项 ] 要编译的文件 [ 选项 ] [ 目标文件 ] 例如:
g++ -o process process.c

预处理 ( 进行宏替换 )
预处理功能主要包括宏定义 , 文件包含 , 条件编译 , 去注释等。
预处理指令是以 # 号开头的代码行。
实例 : 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” , 而这也就是链接的作用
函数库一般分为静态库和动态库两种。
静态库是指编译链接时 , 把库文件的代码全部加入到可执行文件中 , 因此生成的文件比较大 , 但在运行时也 就不再需要库文件了。其后缀名一般为“.a”
动态库与之相反 , 在编译链接时并没有把库文件的代码加入到可执行文件中 , 而是在程序执行时由运行时 链接文件加载库, 这样可以节省系统的开销。动态库一般后缀名为 “.so”, 如前面所述的 libc.so.6 就是动态 库。gcc 在编译时默认使用动态库。完成了链接之后 ,gcc 就可以生成可执行文件 , 如下所示。 gcc hello.o –o hello
gcc 默认生成的二进制程序,是动态链接的,这点可以通过 file 命令验证。
下载动静态库
sudo yum install -y glibc-static
sudo yum install -y libstbc++-static
gcc 选项
-E 只激活预处理 , 这个不生成文件 , 你需要把它重定向到一个输出文件里面
-S  编译到汇编语言不进行汇编和链接
-c  编译到目标代码
-o 文件输出到 文件
-static 此选项对生成的文件采用静态链接
-g  生成调试信息。 GNU 调试器可利用该信息。
-shared  此选项将尽量使用动态库,所以生成文件比较小,但是需要系统由动态库 .
-O0
-O1
-O2
-O3 编译器的优化选项的 4 个级别, -O0 表示没有优化 ,-O1 为缺省值, -O3 优化级别最高
-w  不生成任何警告信息。
-Wall 生成所有警告信息。

四. Linux调试器-gdb使用

1. 背景
程序的发布方式有两种, debug 模式和 release 模式
Linux gcc/g++ 出来的二进制程序,默认是 release 模式
要使用 gdb 调试,必须在源代码生成二进制程序的时候 , 加上 - g 选项
2. 开始使用
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) :打印表达式的值,通过表达式可以修改变量的值或者调用函数
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
readelf -S 文件名:读取可执行程序二进制构成的文件debug
在Makefile文件中chang常在依赖关系后加后缀-g,让可执行程序以debug方式发布。
以debug方式发布的可执行程序具有调试信息。

以debug方式发布的可执行程序比以默认(release)方式发布的可执行程序略大(多了调试信息)

gdb+可执行程序名:进入调试模式

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

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

1、make是一条指令,makefile当前目录下的一个文件

2、依赖关系、依赖方法


Makefile注释用#
Make会自动退到makefile中的依赖关系栈式结构

Make会自顶向下扫描makefile,形成的第一个目标文件充当为Make的默认动作

3、问:为什么重复编译不通过?答:提供编译效率!
问:怎么做到的?
答:原理如下:
一定是源文件形成可执行,现有源文件,才有可执行。一般而言,源文件的最近修改时间比可执行成文件要老!如果我们修改了原文件,历史上曾经还有可执行,那么原文件的最近修改时间,一定要比可执行程序要新!
只需要比较,可执行程序的最近修改时间和源文件的最近修改时间:.exe新于.c源文件,不需要重新编译,.exe老于.c源文件,需要重新编译。

4、Access(最后一次访问时间)、Modify(最后一次被修改时间)与Change(权限最后一次修改时间)
文件=文件内容(Modify)+文件属性(Change)

touch后面如果跟已存在文件,则将所有时间(access、modify、change)更新为最新
touch -a 文件名:更新Access
touch -m 文件名:更新Modify
touch -c 文件名:更新Change

总结:make会根据源文件和目标文件的新旧判定是否需要重新执行依赖关系进行编译。

若需要总是执行的呢?

5、.PHONY(伪目标):mycode依赖关系,依赖方法总是被执行

编译效果:


特殊符号:
$@:目标文件
$^:依赖文件
@:不回显依赖方法

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【MySQL】学习连接查询和案例演示

🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​💫个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-KOxr1rwR9cQTlydJ {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…

HotSpot虚拟机对象探秘

对象的创建 1.1 对象创建的6种方式 使用new关键字、Class的newInstance()方法、Constructor类的newInstance()方法、clone()方法、反序列化、第三方库Objenesis。 每种创建对象方式的实际操作如下。 使用new关键字—调用无参或有参构造器创建。使用Class的newInstance()方法…

软件实际应用实例分享,门诊电子处方模板制作教程,中西医诊所病历开单系统教程

软件实际应用实例分享,门诊电子处方模板制作教程,中西医诊所病历开单系统教程 一、前言 以下软件教程以 佳易王诊所电子处方软件V17.3为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 1、在开电子处方的时候&#xff0c…

Python3零基础教程之Python解释器与开发环境搭建

大家好,我是千与编程,硕士毕业于北京大学,曾先后就职于字节跳动,京东等互联网大厂,目前在编程导航知识星球担任星球嘉宾,著有《AI算法毕设智囊袋》,《保姆级带你通关秋招教程》两大专栏。 今天开…

【鸿蒙系统学习笔记】网络请求

一、介绍 资料来自官网:文档中心 网络管理模块主要提供以下功能: HTTP数据请求:通过HTTP发起一个数据请求。WebSocket连接:使用WebSocket建立服务器与客户端的双向连接。Socket连接:通过Socket进行数据传输。 日常…

基于Skywalking开发分布式监控(三)

回顾上期的问题,当我们搭建完成Skywalking的搭建,顺利完成应用监控之后,就会面临一类问题,怎么利用获取的监控数据,包括三方面: 1 应用的Trace和SW收集Service/Endpoint不一定完全一致,可能定位…

【快速上手QT】05-绘画Paint

我们写一个QT程序,说实话,很难昧着良心说这个QT界面很好看(技术高超的小伙伴请忽略我这句话)。但是我们可以使用绘画事件来弥补一下“相貌丑陋”的这个缺点。 paintEvent 我们可以对主界面进行绘图,从而达到美化界面…

js设计模式:计算属性模式

作用: 将对象中的某些值与其他值进行关联,根据其他值来计算该值的结果 vue中的计算属性就是很经典的例子 示例: let nowDate 2023const wjtInfo {brithDate:1995,get age(){return nowDate-this.brithDate}}console.log(wjtInfo.age,wjt年龄)nowDate 1console.log(wjtInf…

【UI自动化】使用poco框架进行元素唯一定位

直接选择: 1.poco(text买入).click() 2.poco("android.widget.ImageView").click()相对选择、空间选择: 3.poco(text/name).parent().child()[0].click()正则表达式: 4.listpoco(textMatches".*ETF")今天主要想记录下…

操作系统导论-课后作业-ch19

1. 本书在第6章中有过介绍,gettimeofday函数最多精确到us,并且大致精确(并不完全精确),需要多迭代几次减少误差,循环次数太多也会导致结束时间小于开始时间(即回滚)的现象&#xff…

Kaggle实践之《Home Credit Default Risk》的逐步优化

记录下每一次的改进及其score。 1、只用训练集的特征简单处理 特征只用训练集的特征,把string型的特征全部进行one-hot转化,然后随机1:4分成测试集训练集,模型也调参直接出结果。 最终的score是训练集80.13%、验证集76.33%、线上74.28%。 …

Java 注解机制解密并发编程的时间之谜:揭开Happens-Before的神秘面纱

优质博文:IT-BLOG-CN 一、简介 为什么需要happens-before原则: 主要是因为Java内存模型 , 为了提高CPU效率,通过工作内存Cache代替了主内存。修改这个临界资源会更新work memory但并不一定立刻刷到主存中。通常JMM会将编写的代码…

⭐北邮复试刷题LCR 052. 递增顺序搜索树__DFS (力扣119经典题变种挑战)

LCR 052. 递增顺序搜索树 给你一棵二叉搜索树,请 按中序遍历 将其重新排列为一棵递增顺序搜索树,使树中最左边的节点成为树的根节点,并且每个节点没有左子节点,只有一个右子节点。 示例 1: 输入:root [5,…

零基础学习8051单片机(十六)

继续学习8051单片机,本次通过观看视频在此学习8051单片机的中断系统 要掌握单片机中断系统的硬件结构和工作原理 掌握:中断系统的初始化编程以及中断服务子程序设计。 一、中断的基本过程图: 中断的响应和处理过程: 当中断提出…

Redis篇----第十三篇

系列文章目录 文章目录 系列文章目录前言一、假如 Redis 里面有 1 亿个 key,其中有 10w 个 key是以某个固定的已知的前缀开头的,如果将它们全部找出来?二、如果有大量的 key 需要设置同一时间过期,一般需要注意什么?三、使用过 Redis 做异步队列么,你是怎么用的?四、使用…

Apache Doris 发展历程、技术特性及云原生时代的未来规划

文章目录 作者介绍 Apache Doris特性极简结构高效自运维高并发场景支持MPP 执行引擎明细与聚合模型的统一便捷数据接入 Apache Doris 极速 1.0 时代极速 关于 Apache Doris 开源社区基于云原生向量数据库 Milvus 的云平台设计实践作者介绍图书推荐 本文节选自《基础软件之路&am…

第六篇【传奇开心果系列】Python文本和语音相互转换库技术点案例示例:深度解读Kaldi库个性化定制语音搜索引擎

传奇开心果短博文系列 系列短博文目录Python文本和语音相互转换库技术点案例示例系列 短博文目录前言一、雏形示例代码二、扩展思路介绍三、数据准备示例代码四、特征提取示例代码五、声学模型训练示例代码六、语言模型训练示例代码七、解码示例代码八、评估和调优示例代码九、…

LeetCode | 寻找两个正序数组的中位数 Python C语言

Problem: 4. 寻找两个正序数组的中位数 文章目录 思路解题方法Code结果结果一些思考 思路 先合并,后排序,最后找中间轴。 解题方法 由解题思路可知 Code 这是python3的代码。 class Solution(object):def findMedianSortedArrays(self, nums1, num…

分享Video.js观看Web视频流

界面效果 HTML结构 <div class"homePopup" ><div class"search_box animate__animated animate__fadeInDown" style"display: none;"><div class"van-search" style"background: rgba(0, 0, 0, 0);">&…

【云原生】Docker consul的容器服务更新与发现

目录 什么是服务注册与发现 什么是consul consul提供的一些关键特性&#xff1a; consul 部署 consul服务器 1. 建立 Consul 服务 设置代理&#xff0c;在后台启动 consul 服务端 2. 查看集群信息 查看members状态 查看集群状态 3. 通过 http api 获取集群信息 regi…
最新文章