【Linux】Linux工具(1)
3.Linux工具(1)
文章目录
- 3.Linux工具(1)
- Linux 软件包管理器 yum
- 什么是软件包
- 关于 rzsz
- 查看软件包——yum list命令
- 如何安装软件
- 如何卸载软件
- 补充——yum如何找到要安装软件的下载地址
- Linux开发工具
- Linux编辑器-vim使用
- 1.vim的基本概念
- 2.vim的基本操作
- 3.简单vim配置
- Linux编译器-gcc/g++使用
- 1.背景知识
- 2.gcc如何完成
- 预处理(进行宏替换)
- 编译(生成汇编)
- 汇编(生成机器可识别代码)
- 连接(生成可执行文件或库文件)
- 动态库
- 动态库、动态链接、静态库与静态链接的对比总结
- gcc选项
Linux 软件包管理器 yum
什么是软件包
- 在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序.
- 但是这样太麻烦了, 于是有些人把一些常用的软件提前编译好, 做成软件包(可以理解成windows上的安装程序)放在一个服务器上, 通过包管理器可以很方便的获取到这个编译好的软件包, 直接进行安装.
- 软件包和软件包管理器, 就好比 “App” 和 “应用商店” 这样的关系.
- yum(Yellow dog Updater, Modified)是Linux下非常常用的一种包管理器. 主要应用在Fedora, RedHat,Centos等发行版上.
关于 rzsz
这个工具用于 windows 机器和远端的 Linux 机器通过 XShell 传输文件,安装完毕之后可以通过拖拽的方式将文件上传过去.
- 注意事项
关于 yum 的所有操作必须保证主机(虚拟机)网络畅通!!!
可以通过 ping 指令验证
查看软件包——yum list命令
通过 yum list 命令可以罗列出当前一共有哪些软件包. 由于包的数目可能非常之多, 这里我们需要使用 grep 命令只筛选出我们关注的包. 例如:
[root@hcss-ecs-b735 dir2]# yum list | grep gcc-c++
gcc-c++.x86_64 4.8.5-44.el7 @base
avr-gcc-c++.x86_64 4.9.2-1.el7 epel
gcc-c++-aarch64-linux-gnu.x86_64 4.8.5-16.el7.1 epel
gcc-c++-alpha-linux-gnu.x86_64 4.8.5-16.el7.1 epel
gcc-c++-arm-linux-gnu.x86_64 4.8.5-16.el7.1 epel
gcc-c++-avr32-linux-gnu.x86_64 4.8.5-16.el7.1 epel
gcc-c++-bfin-linux-gnu.x86_64 4.8.5-16.el7.1 epel
gcc-c++-c6x-linux-gnu.x86_64 4.8.5-16.el7.1 epel
gcc-c++-cris-linux-gnu.x86_64 4.8.5-16.el7.1 epel
gcc-c++-frv-linux-gnu.x86_64 4.8.5-16.el7.1 epel
gcc-c++-h8300-linux-gnu.x86_64 4.8.5-16.el7.1 epel
gcc-c++-hppa-linux-gnu.x86_64 4.8.5-16.el7.1 epel
gcc-c++-hppa64-linux-gnu.x86_64 4.8.5-16.el7.1 epel
gcc-c++-ia64-linux-gnu.x86_64 4.8.5-16.el7.1 epel
注意:
- 软件包名称: 主版本号、次版本号、源程序发行号、软件包的发行号、主机平台、cpu架构
x86_64
后缀表示64位系统的安装包,i686
后缀表示32位系统安装包. 选择包时要和系统匹配.el7
表示操作系统发行版的版本,el7
表示的是centos7/redhat7
.el6
表示centos6/redhat6
.- 最后一列,
base
表示的是 “软件源” 的名称, 类似于 “小米应用商店”, “华为应用商店” 这样的概念.
如何安装软件
通过 yum, 我们可以通过很简单的一条命令完成 gcc-c++ 的安装.
[root@hcss-ecs-b735 dir2]# yum install -y gcc-c++ #主要看这里
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
Resolving Dependencies
--> Running transaction check
---> Package gcc-c++.x86_64 0:4.8.5-44.el7 will be installed
--> Processing Dependency: libstdc++-devel = 4.8.5-44.el7 for package: gcc-c++-4.8.5-44.el7.x86_64
--> Running transaction check
---> Package libstdc++-devel.x86_64 0:4.8.5-44.el7 will be installed
--> Finished Dependency ResolutionDependencies Resolved=============================================================================================Package Arch Version Repository Size
=============================================================================================
Installing:gcc-c++ x86_64 4.8.5-44.el7 base 7.2 M
Installing for dependencies:libstdc++-devel x86_64 4.8.5-44.el7 base 1.5 MTransaction Summary
=============================================================================================
Install 1 Package (+1 Dependent package)Total download size: 8.7 M
Installed size: 25 M
Downloading packages:
(1/2): libstdc++-devel-4.8.5-44.el7.x86_64.rpm | 1.5 MB 00:00:00
(2/2): gcc-c++-4.8.5-44.el7.x86_64.rpm | 7.2 MB 00:00:00
---------------------------------------------------------------------------------------------
Total 33 MB/s | 8.7 MB 00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transactionInstalling : libstdc++-devel-4.8.5-44.el7.x86_64 1/2 Installing : gcc-c++-4.8.5-44.el7.x86_64 2/2 Verifying : gcc-c++-4.8.5-44.el7.x86_64 1/2 Verifying : libstdc++-devel-4.8.5-44.el7.x86_64 2/2 Installed:gcc-c++.x86_64 0:4.8.5-44.el7 Dependency Installed:libstdc++-devel.x86_64 0:4.8.5-44.el7 Complete! #主要看这里
yum 会自动找到都有哪些软件包需要下载, 这时候敲 “y” 确认安装.(我这里由于使用了-y选项所以不需要再次确认来继续安装)
出现 “complete” 字样, 说明安装完成.
注意事项:
- 安装软件时由于需要向系统目录中写入内容, 一般需要 sudo 或者切到 root 账户下才能完成.
- yum安装软件只能一个装完了再装另一个. 正在yum安装一个软件的过程中, 如果再尝试用yum安装另外一个软件, yum会报错.
如果 yum 报错, 请自行百度.
如何卸载软件
仍然是一条命令:
yum remove [软件名]
补充——yum如何找到要安装软件的下载地址
当我们在使用yum下载软件的时候我们会发现,我们并不需要向yum提供详细的软件下载地址就可以直接通过软件名下载这个软件。这是因为yum有相应的配置文件,这个配置文件里面会记录yum其他软件有关的下载路径
[root@hcss-ecs-b735 dir2]# ls /etc/yum.repos.d/
CentOS-Base.repo CentOS-fasttrack.repo CentOS-Vault.repo epel.repo.rpmnew
CentOS-CR.repo CentOS-Media.repo CentOS-x86_64-kernel.repo epel-testing.repo
CentOS-Debuginfo.repo CentOS-Sources.repo epel.repo
对于如何切换yum源以及如何对虚拟机上的Linux系统配置yum源,可以在网上进行搜索。在网上找到yum源、直接下载在Linux服务器中的yum源配置文件位置
#!/bin/bash
## 备份 /etc/yum.repos.d/CentOS-Base.repo
sudo cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
## 更换为阿里源
sudo curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
## 安装epel
sudo yum install -y epel-release
## 使用阿里提供的epel源
sudo curl -o /etc/yum.repos.d/epel-7.repo http://mirrors.aliyun.com/repo/epel-7.repo
## 清空yum缓存
sudo yum clean all
## 重建yum缓存
sudo yum makecache
Linux开发工具
Linux编辑器-vim使用
vim是一个多模式的编辑器,不是编译器(不能编译代码)
1.vim的基本概念
vim有很多种模式但这里只简要介绍三种最常用的模式,三种模式分别是命令模式(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.vim的基本操作
vim的操作指令有点多,其实不需要刻意去记忆,用的多了自然就记住了,这里简单列举几个
1. 模式切换
按 Esc
退出其他模式。(进入正常模式)
[正常模式]切换至[插入模式]
-
i
:光标前插入 这个用的最多 -
I
:行首插入 -
a
:光标后插入 -
A
:行尾插入 -
o
:下方新建行插入 -
O
:上方新建行插入 -
v
:字符选择 -
V
:行选择 -
Ctrl+v
:块选择 -
[正常模式]切换至[末行模式]
「shift + ;」, 其实就是输入「:」
2. 光标移动
-
h
← /j
↓ /k
↑ /l
→ 这个基本不用,用键盘上的上下左右键就可以 -
0
:行首 /^
:第一个非空字符 -
$
:行尾 -
gg
:文件开头 -
G
:文件末尾 -
5G
或:5
:跳转到第5行 -
Ctrl+f
:向下翻页 /Ctrl+b
:向上翻页 -
%
:跳转到匹配的括号(如{}
,()
) -
w
光标移动到下一个单词(连续英文字符串) -
b
光标移动到上一个单词(连续英文字符串)
3. 文本编辑
-
shift + r
:进入替换模式,需要用EXC
退回正常模式 -
x
:删除光标指向的字符 -
shift + ~
:大小写切换 -
shift + x
:删除光标之前的字符 -
dw
:删除到单词结尾 -
dd
:删除整行(应该算是一种剪切) -
3dd
:删除3行 -
d$
:删除到行尾 -
yy
:复制当前行 -
3yy
:复制3行 -
p
:粘贴到光标后 /P
:粘贴到光标前 -
u
:撤销 -
Ctrl+r
:重做
4. 搜索与替换
-
/keyword
:向下搜索(注意这个ketword
是你要找的字符) -
?keyword
:向上搜索 -
n
:下一个匹配 /N
:上一个匹配 -
:s/old/new
:替换当前行第一个匹配 -
:s/old/new/g
:替换当前行所有匹配 -
:%s/old/new/g
:替换全文所有匹配 -
:%s/old/new/gc
:替换时逐个确认
5. 保存与退出
:w
:保存:q
:退出:wq
或:x
:保存并退出:q!
:强制退出(不保存):w!
:强制写入wq!
:强制保存并退出ZZ
(Shift+z+z):快速保存退出
6. 分屏与标签页
-
:sp [file]
:水平分屏 -
:vsp [file]
:垂直分屏 -
Ctrl+w + 方向键
:切换分屏 -
:tabnew
:新建标签页 -
gt
:下一个标签 /gT
:上一个标签
7. 其他实用命令
-
>>
:当前行右缩进 /<<
:左缩进 -
gg=G
:自动缩进全文(适合代码) -
:set number
(:set nu
):显示行号 -
:set nowrap
:禁止自动换行 -
:help [command]
:查看帮助(如:help :w
)
8. 可视模式操作
- 选中文本后:
y
:复制选中内容d
:删除选中内容>
:向右缩进 /<
:向左缩进- 块模式下按
I
插入内容,按Esc
应用到所有
9.在vim中编译、执行代码
-
:!gcc
:与之前的gcc 用法是一样的 -
:./[可执行文件名]
:执行当前文件夹中的可执行文件 -
:!
可以执行命令行命令,路径为当前vim打开的文件路径 -
vs + 其他文件名
:打开其他文件支持分屏操作
3.简单vim配置
在网上有许多教我们如何配置vim的教程,我这里就用一个比较简单的方式来进行配置。
- 安装方法
在 shell 中执行指令(想在哪个用户下让vim配置生效, 就在哪个用户下执行这个指令. 强烈 “不推荐” 直接在 root 下执行):
curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o ./install.sh && bash ./install.sh
需要按照提示输入 root 密码. 您的 root 密码不会被上传, 请放心输入.
- 卸载方法
在安装了 VimForCpp 的用户下执行:
bash ~/.VimForCpp/uninstall.sh
Linux编译器-gcc/g++使用
1.背景知识
预处理(进行宏替换)
编译(生成汇编)
汇编(生成机器可识别代码)
连接(生成可执行文件或库文件)
这个内容在C语言学习的时候就已经了解过了,可以去搜索一下
2.gcc如何完成
格式:gcc [选项] 要编译的文件 [选项] [目标文件]
预处理(进行宏替换)
预处理功能主要包括宏定义,文件包含,条件编译,去注释等。预处理指令是以#号开头的代码行。
实例: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 code.s -o code.o
连接(生成可执行文件或库文件)
在成功编译之后,就进入了链接阶段。
实例:gcc hello.o -o hello
动态库
在这里涉及到一个重要的概念:函数库。我们的C程序中,并没有定义“printf”的函数实现,且在预编译中包含的“stdio.h”中也只有该函数的声明,而没有定义函数的实现,那么,是在哪里实“printf”函数的呢?
最后的答案是:系统把这些函数实现都被做到名为 libc.so.6 的库文件中去了,在没有特别指定时,gcc 会到系统默认的搜索路径“/usr/lib”下进行查找,也就是链接到 libc.so.6 库函数中去,这样就能实现函数“printf”了,而这也就是链接的作用
函数库一般分为静态库和动态库两种
-
静态库是指编译链接时,把库文件的代码全部加入到可执行文件中,因此生成的文件比较大,但在运行时也就不再需要库文件了。其后缀名一般为“.a”。在Windows版本中的动态库是
.lib
结尾的文件 -
把码加入到可执行文件中,而是在程序执行时由运行时链接文件加载库,这样可以节省系统的开销。动态库一般后缀名为“.so”,如前面所述的 libc.so.6 就是动态库。gcc 在编译时默认使用动态库。完成了链接之后,gcc 就可以生成可执行文件,如
gcc hello.o -o hello
。还有一个可以提一点的是,在Windows版本中的动态库是.dll
结尾的文件 -
gcc默认生成的二进制程序,是动态链接的,这点可以通过 命令验证。
动态库、动态链接、静态库与静态链接的对比总结
1. 定义
概念 | 说明 |
---|---|
动态库 | 运行时加载的共享库(如 .dll 、.so ),不嵌入程序,可被多个进程共享。 |
动态链接 | 在程序运行时将动态库绑定到进程的过程(自动加载或手动 dlopen )。 |
静态库 | 编译时嵌入程序的库(如 .lib 、.a ),代码直接合并到可执行文件中。 |
静态链接 | 在程序编译时将静态库代码复制到可执行文件中,生成独立文件。 |
2. 特点
特性 | 动态库/动态链接 | 静态库/静态链接 |
---|---|---|
文件大小 | 程序体积小(仅自身代码) | 程序体积大(包含所有依赖库代码) |
内存占用 | 低(多个程序共享同一库) | 高(每个程序独立加载库代码) |
更新维护 | 替换库文件即可生效 | 需重新编译程序 |
依赖管理 | 需处理库版本冲突(依赖地狱) | 无外部依赖,独立运行 |
加载时机 | 运行时加载(延迟绑定) | 编译时嵌入 |
适用场景 | 通用软件、系统级程序(如 glibc ) | 嵌入式系统、独立工具(如 busybox ) |
3. 优缺点对比
动态库与动态链接
- 优点:
- 节省内存和磁盘空间(共享性)。
- 支持热更新(无需重新编译程序)。
- 灵活加载(如插件系统)。
- 缺点:
- 依赖外部环境(库缺失或版本冲突会导致程序崩溃)。
- 首次调用函数时可能有解析延迟(PLT/GOT 机制)。
静态库与静态链接
- 优点:
- 程序独立,无需外部依赖。
- 启动速度快(无运行时加载开销)。
- 避免依赖地狱。
- 缺点:
- 文件体积大(代码冗余)。
- 更新需重新编译分发。
- 内存占用高(多进程无法共享库代码)。
6. 总结
- 动态库与动态链接:
通过共享代码和按需加载优化资源利用,适合通用软件和灵活扩展,但需管理依赖和版本。 - 静态库与静态链接:
以空间换独立性,适合对部署环境要求严格的场景(如嵌入式系统),但牺牲了更新便利性。
注意:
- 在操作系统中一般默认使用的是动态链接,但我们在编译的时候可以指定用静态链接,也就是下面gcc的
-static
选项 - 我们可以用
file
命令查看一个程序的详细信息,包括它是静态链接和动态链接 - 云服务器可能没有安装静态库,去搜索安装
gcc选项
-E 只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里面
-S 编译到汇编语言不进行汇编和链接
-c 编译到目标代码
-o 文件输出到 文件
-static 此选项对生成的文件采用静态链接
-g 生成调试信息。GNU 调试器可利用该信息。
-shared 此选项将尽量使用动态库,所以生成文件比较小,但是需要系统由动态库.
-O0
-O1
-O2
-O3 编译器的优化选项的4个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高-w 不生成任何警告信息。
-Wall 生成所有警告信息。
gcc选项记忆
esc,iso例子。我们一般用的时候都是直接将C语言文件通过gcc hello.c -o hello
直接编译成可执行文件。不需要逐步生成各种中间文件。
相关文章:

【Linux】Linux工具(1)
3.Linux工具(1) 文章目录 3.Linux工具(1)Linux 软件包管理器 yum什么是软件包关于 rzsz查看软件包——yum list命令如何安装软件如何卸载软件补充——yum如何找到要安装软件的下载地址 Linux开发工具Linux编辑器-vim使用1.vim的基…...
探索大语言模型(LLM):词袋法(Bag of Words)原理与实现
文章目录 引言一、词袋法原理1.1 核心思想1.2 实现步骤 二、数学公式2.1 词频表示2.2 TF-IDF加权(可选) 三、示例表格3.1 构建词汇表3.2 文本向量化(词频) 四、Python代码实现4.1 基础实现(手动计算)4.2 输…...
vue引入物理引擎matter.js
vue引入物理引擎matter.js 在 Vue 项目中集成 Matter.js 物理引擎的步骤如下: 1. 安装 Matter.js npm install matter-js # 或 yarn add matter-js2. 创建 Vue 组件 <template><div ref="physicsContainer" class="physics-container"><…...

基于 Spring Boot 瑞吉外卖系统开发(十一)
基于 Spring Boot 瑞吉外卖系统开发(十一) 菜品启售和停售 “批量启售”、“批量停售”、操作列的售卖状态绑定单击事件,触发单击事件时,最终携带需要修改售卖状态的菜品id以post请求方式向“/dish/status/{params.status}”发送…...
支持鸿蒙next的uts插件
*本文共四个功能函数,相当于四个插件。作者为了偷懒写成了一个插件,调对应的函数即可。 1、chooseImageHarmony函数:拉起相册选择图片并转为Base64 2、takePhotoAndConvertToBase64函数:拉起相机拍照并转为Base64 3、openBrows…...

深入理解负载均衡:传输层与应用层的原理与实战
目录 前言1. 传输层(Layer 4)负载均衡1.1 工作层级与核心机制1.2 实现方式详解1.3 优缺点分析1.4 典型实现工具 2. 应用层(Layer 7)负载均衡2.1 工作层级与核心机制2.2 实现方式解析2.3 优缺点分析2.4 常用实现工具 3. Layer 4 与…...

WPF之Slider控件详解
文章目录 1. 概述2. 基本属性2.1 值范围属性2.2 滑动步长属性2.3 刻度显示属性2.4 方向属性2.5 选择范围属性 3. 事件处理3.1 值变化事件3.2 滑块拖动事件 4. 样式和模板自定义4.1 基本样式设置4.2 控件模板自定义 5. 数据绑定5.1 绑定到ViewModel5.2 同步多个控件 6. 实际应用…...
极狐GitLab 如何将项目共享给群组?
极狐GitLab 是 GitLab 在中国的发行版,关于中文参考文档和资料有: 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 共享项目和群组 (BASIC ALL) 在极狐GitLab 16.10 中,更改为在成员页面的成员选项卡上显示被邀请群组成员…...

企业微信自建消息推送应用
企业微信自建应用来推送消息 前言 最近有个给特定部门推送消息的需求,所以配置一个应用专门用来推送消息。实现过程大致为:服务器生成每天的报告,通过调用API来发送消息。以前一直都是发邮件,整个邮箱里全是报告文件,…...
【React】Hooks useReducer 详解,让状态管理更可预测、更高效
1.背景 useReducer是React提供的一个高级Hook,没有它我们也可以正常开发,但是useReducer可以使我们的代码具有更好的可读性,可维护性。 useReducer 跟 useState 一样的都是帮我们管理组件的状态的,但是呢与useState不同的是 useReducer 是集…...

日志之ClickHouse部署及替换ELK中的Elasticsearch
文章目录 1 ELK替换1.1 Elasticsearch vs ClickHouse1.2 环境部署1.2.1 zookeeper 集群部署1.2.2 Kafka 集群部署1.2.3 FileBeat 部署1.2.4 clickhouse 部署1.2.4.1 准备步骤1.2.4.2 添加官方存储库1.2.4.3 部署&启动&连接1.2.4.5 基本配置服务1.2.4.6 测试创建数据库和…...
亚远景-ASPICE vs ISO 21434:汽车软件开发标准的深度对比
ASPICE(Automotive SPICE)和ISO 21434是汽车软件开发领域的两大核心标准,分别聚焦于过程质量与网络安全。以下从核心目标、覆盖范围、实施重点、协同关系及行业价值五个维度进行深度对比分析: 一、核心目标对比 ASPICE࿱…...
51单片机快速成长路径
作为在嵌入式领域深耕18年的工程师,分享一条经过工业验证的51单片机快速成长路径,全程干货无注水: 一、突破认知误区(新手必看) 不要纠结于「汇编还是C」:现代开发90%场景用C,掌握指针和内存管…...
使用 NGINX 实现 HTTP Basic 认证ngx_http_auth_basic_module 模块
一、前言 在 Web 应用中,对部分资源进行访问控制是十分常见的需求。除了基于 IP 限制、JWT 验证、子请求校验等方式外,最经典也最简单的一种方式便是 HTTP Basic Authentication。NGINX 提供的 ngx_http_auth_basic_module 模块支持基于用户名和密码的基…...

解构与重构:自动化测试框架的进阶认知之旅
目录 一、自动化测试的介绍 (一)自动化测试的起源与发展 (二)自动化测试的定义与目标 (三)自动化测试的适用场景 二、什么是自动化测试框架 (一)自动化测试框架的定义 &#x…...

DockerDesktop替换方案
背景 由于DockerDesktop并非开源软件,如果在公司使用,可能就有一些限制,那是不是除了使用DockerDesktop外,就没其它办法了呢,现在咱们来说说替换方案。 WSL WSL是什么,可自行百度,这里引用WS…...

力扣热题100之搜索二维矩阵 II
题目 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性: 每行的元素从左到右升序排列。 每列的元素从上到下升序排列。 代码 方法一:直接全体遍历 这个方法很直接,但是居然没有超时,…...

docker操作镜像-以mysql为例
Docker安装使用-CSDN博客 docker操作镜像-以mysql为例 当安装一个新的镜像时可以登录https://hub.docker.com/直接搜索想要安装的镜像,查看文档 1)拉取镜像 docker pull mysql 或者 docker pull mysql:版本号 然后直接跳到第4)步即可 2…...

使用OpenCV 和 Dlib 进行卷积神经网络人脸检测
文章目录 引言1.准备工作2.代码解析2.1 导入必要的库2.2 加载CNN人脸检测模型2.3 加载并预处理图像2.4 进行人脸检测2.5 绘制检测结果2.6 显示结果 3.完整代码4.性能考虑5.总结 引言 人脸检测是计算机视觉中最基础也最重要的任务之一。今天我将分享如何使用dlib库中的CNN人脸检…...

React 实现 JWT 登录验证的最小可运行示例
下面是一个用 React 实现 JWT 登录验证的最小可运行示例,包含: React 前端:登录、保存 Token、获取用户数据。模拟后端:用 mock API(你也可以接真后端)。 🧱 技术栈 React(使用 Vi…...

Power Query精通指南1:查询结构设计、数据类型、数据导入与迁移(平面文件、Excel、Web)
文章目录 零、Power Query简介0.1 Power Query 主要功能0.2 Power Query 的优势0.3 Power Query 组件 一、Power Query数据处理基本流程1.1 前期准备1.2 提取1.3 转换1.3.1 Power Query 编辑器界面1.3.2 默认转换1.3.3 自定义转换 1.4 加载1.4.1 自动检测数据类型1.4.2 重命名查…...

vue2开发者sass预处理注意
vue2开发者sass预处理注意 sass的预处理器,早年使用node-sass,也就是vue2最初默认的编译器。 sass官方推出了dart-sass来替代。 node-sass已经停维很久了。 vue3默认使用的是dart-sass。 Uniapp的官方文档截图 从 HBuilderX 4.56 ,vue2 …...
淘宝按图搜索商品(拍立淘)Java 爬虫实战指南
在电商领域,按图搜索商品功能为用户提供了更直观、便捷的购物体验。淘宝的拍立淘功能更是凭借其强大的图像识别技术,成为许多开发者和商家关注的焦点。本文将详细介绍如何利用 Java 爬虫技术实现淘宝按图搜索商品功能,包括注册账号、上传图片…...
安卓基础(封装引用)
情况 1:普通 Java 项目(非 Android) src/ ├── com/ │ ├── example/ │ │ ├── utils/ │ │ │ └── A.java // 工具类 A │ │ └── main/ │ │ └── B.java // 主类 B A…...
深入理解 Docker 网络原理:构建高效、灵活的容器网络
在现代软件开发中,Docker 已经成为了容器化技术的代名词,广泛应用于开发、测试和生产环境。Docker 使得开发者能够将应用及其依赖打包成一个轻量级的容器,并通过 Docker 容器化技术来实现高效的部署与管理。 然而,在日常使用 Dock…...

使用 Selenium 爬取动态网页数据 —— 实战与坑点详解
本文记录了笔者在爬取网页数据过程中遇到的各种技术挑战,包括页面动态渲染、JavaScript 注入等问题,并最终给出一个可运行的完整方案。 文章目录 网页获取不到数据🚀 尝试用 Selenium 渲染页面 网页获取不到数据 某网页数据依赖大量 JavaSc…...
React 笔记[1] hello world
React 笔记[1] hello world 明白了!既然你已经安装了 Node.js,我们可以 从零开始搭建一个 React Tailwind CSS 的 Hello World 项目。我将一步步列出操作指令,你只需要在终端里依次执行。 ✅ 第一步:初始化项目 mkdir my-hello…...
Verilog Test Fixture 时钟激励
1、占空比50%时钟产生 always begin<clock> 1b0 ;#<PERIOD/2> ;<clock> 1b1 ;#<PERIOD/2> ; end reg <clock> 1b0 ;alwaysbegin#<PERIOD/2> ;<clock> ~<clock> ;end 2…...

守护数字家园:个人博客安全防护指南
前言 在之前的文章《WordPress个人博客搭建(一)》《WordPress个人博客搭建(二)》《WordPress个人博客搭建(三)》中,我们已经在非凡云云服务器上,借助1Panel搭建起属于自己的数字庭院…...

【网络编程】三、TCP网络套接字编程
文章目录 TCP通信流程Ⅰ. 服务器日志类实现Ⅱ. TCP服务端1、服务器创建流程2、创建套接字 -- socket3、绑定服务器 -- bind🎏4、服务器监听 -- listen🎏5、获取客户端连接请求 -- acceptaccept函数返回的套接字描述符是什么,不是已经有一个了…...