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

LDAP配置与安装

LDAP配置与安装

  • 一、安装LDAP
    • 1、安装OpenLDAP及相关依赖包
    • 2、查看OpenLDAP版本
    • 3、配置OpenLDAP数据库
    • 4、设置OpenLDAP的管理员密码
    • 5、修改配置文件
      • 5.1. 修改{2}hdb.ldif文件
      • 5.2. 修改{1}monitor.ldif文件
      • 5.3. 修改{-1}frontend.ldif文件
    • 6、验证LDAP的基本配置
    • 7、修改LDAP文件权限、端口(不强求)
    • 8、启动OpenLDAP服务
    • 9、导入基本Schema
    • 10、修改migrate_common.ph文件
    • 11、配置LDAP基础数据库
    • 12、导入基础数据库
    • 13、添加用户及用户组
    • 14、查询LDAP的相关信息
    • 15、开启OpenLDAP日志访问功能
  • 二、安装PHPldapAdmin管理软件
    • 1、安装
    • 2、修改配置文件
    • 3、启动httpd
  • 三、使用LdapAdmin
  • 四、数据迁移
    • 1、获取数据到指定文件
    • 2、查看数据是否备份成功
    • 3、插入数据
  • 五、卸载LDAP
  • 参考

一、安装LDAP

1、安装OpenLDAP及相关依赖包

[root@nano ~]# yum -y install openldap compat-openldap openldap-clients openldap-servers openldap-servers-sql openldap-devel migrationtools

2、查看OpenLDAP版本

[root@nano ~]# slapd -VV

3、配置OpenLDAP数据库

# OpenLDAP默认使用的数据库是BerkeleyDB,/var/lib/ldap/就是BerkeleyDB数据库默认存储的路径:
[root@localhost cn=config]# cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG

4、设置OpenLDAP的管理员密码

(格式——slappasswd -s [password])

[root@nano ~]# slappasswd -s huawei
{SSHA}TlGs09uMOeFa5UJNhy1LB6cGW9i8N+tt		 	# 记住该密码,下面配置要用

5、修改配置文件

定位到/etc/openldap/slapd.d/cn=config中,修改相关配置文件{1}monitor.ldif、{2}hdb.ldif、{-1}frontend.ldif:

[root@nano ~]# cd /etc/openldap/slapd.d/cn\=config
[root@nano cn=config]# ll
> 总用量 24 drwxr-x---. 2 ldap 4096 32 10:14 cn=schema
> -rw-------. 1 ldap  378 32 10:14 cn=schema.ldif
> -rw-------. 1 ldap  513 32 10:14 olcDatabase={0}config.ldif
> -rw-------. 1 ldap ldap  443 32 10:14 olcDatabase={-1}frontend.ldif
> -rw-------. 1 ldap ldap  562 32 10:14 olcDatabase={1}monitor.ldif
> -rw-------. 1 ldap ldap  609 32 10:14 olcDatabase={2}hdb.ldif

5.1. 修改{2}hdb.ldif文件

[root@nano cn=config]# vim olcDatabase\=\{2\}hdb.ldif
  • 修改域信息: olcSuffix: dc=ss,dc=com olcRootDN: cn=admin,dc=ss,dc=com
  • 定位到最后添加一行密码: olcRootPW: {SSHA}dXgO/Ipy5SQiKFZ0u7m79Xo7uzKIr038
  • 注意:其中cn=admin中的admin表示OpenLDAP管理员的用户名,dc为ldap的服务器域名(dc=ss是自行创建的服务器域名),olcRootPW表示OpenLDAP管理员的密码

5.2. 修改{1}monitor.ldif文件

[root@nano cn=config]# vim olcDatabase\=\{1\}monitor.ldif

5.3. 修改{-1}frontend.ldif文件

[root@localhost cn=config]# vim olcDatabase\=\{-1\}frontend.ldif
# 权限设置,指定用户密码只能由本人和管理员能更改。添加如下两行代码:olcAccess: {0}to attrs=userPassword by self write by anonymous auth by users noneolcAccess: {1}to * by * read

6、验证LDAP的基本配置

# 若出现succeeded就表示成功了
[root@nano cn=config]# slaptest -u

7、修改LDAP文件权限、端口(不强求)

[root@localhost cn=config]# chown -R ldap:ldap /var/lib/ldap/
[root@localhost cn=config]# chown -R ldap:ldap /etc/openldap/# OpenLDAP默认监听的端口是389,我们可在/etc/sysconfig/slapd文件中修改其监听端口,如下修改为4567端口
[root@localhost cn=config]# vim /etc/sysconfig/slapd
SLAPD_URLS= "ldapi://0.0.0.0:4567/ldap://0.0.0.0:4567/"

8、启动OpenLDAP服务

[root@localhost cn=config]# systemctl enable --now slapd		# 设置slapd服务开机自启,并启动# 验证端口状态
# 前提是要安装net-tools才能使用netstat命令
[root@localhost cn=config]# netstat -antup | grep 389

在这里插入图片描述

9、导入基本Schema

导入基本Schema,使用如下命令:

[root@nano cn=config]# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
[root@nano cn=config]# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
[root@nano cn=config]# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif

10、修改migrate_common.ph文件

# migrate_common.ph文件主要是用于生成ldif文件使用,修改migrate_common.ph文件,如下:
[root@localhost cn=config]# vim /usr/share/migrationtools/migrate_common.ph +71

11、配置LDAP基础数据库

# 配置如下信息(修改对应的dc数据值):
[root@localhost ~]# mkdir /root/openldap
[root@localhost ~]# vim openldap/base.ldif
#管理员信息
dn: dc=ss,dc=com
o: ss com
dc: ss
objectClass: top
objectClass: dcObject
objectclass: organizationdn: cn=admin,dc=ss,dc=com
cn: admin
objectClass: organizationalRole
description: Directory Manager#基本分组
dn: ou=People,dc=ss,dc=com
ou: People
objectClass: top
objectClass: organizationalUnitdn: ou=Group,dc=ss,dc=com
ou: Group
objectClass: top
objectClass: organizationalUnit

12、导入基础数据库

# -x 进行简单认证、-D 用来绑定服务器的DN、-w 绑定管理员的密码(最开始设置的)
[root@localhost ~]# ldapadd -x -D 'cn=admin,dc=ss,dc=com' -w '123456' -f /root/openldap/base.ldif

13、添加用户及用户组

默认情况下OpenLDAP是没有普通用户的,只有一个管理员用户(最开始配置的)

[root@localhost ~]# groupadd ldapgroup1
[root@localhost ~]# groupadd ldapgroup2
[root@localhost ~]# useradd -g ldapgroup1 ldapuser1
[root@localhost ~]# useradd -g ldapgroup2 ldapuser2
[root@localhost ~]# echo '123456' | passwd --stdin ldapuser1
[root@localhost ~]# echo '123456' | passwd --stdin ldapuser2# 提取刚添加的用户和用户组相关信息
[root@localhost ~]# grep ":10[0-9][0-9]" /etc/passwd > /root/openldap/users
[root@localhost ~]# grep ":10[0-9][0-9]" /etc/group > /root/openldap/groups
[root@localhost ~]# cat openldap/users
[root@localhost ~]# cat openldap/groups# 使用migrate_passwd.pl文件生成要添加用户和用户组的ldif
[root@localhost ~]# /usr/share/migrationtools/migrate_group.pl /root/openldap/groups > /root/openldap/groups.ldif
[root@localhost ~]# /usr/share/migrationtools/migrate_passwd.pl /root/openldap/users > /root/openldap/users.ldif# 导入用户及用户组到Ldap数据库
[root@localhost ~]# ldapadd -x -w '123456' -D 'cn=admin,dc=ss,dc=com' -f /root/openldap/groups.ldif
[root@localhost ~]# ldapadd -x -w '123456' -D 'cn=admin,dc=ss,dc=com' -f /root/openldap/users.ldif

把LDAP用户加入到用户组

# 尽管我们已经把用户和用户组信息,导入到OpenLDAP数据库中了。但实际上目前OpenLDAP用户和用户组之间是没有任何关联的
# 如果我们要把OpenLDAP数据库中的用户和用户组关联起来的话,我们还需要做另外单独的配置
[root@localhost ~]# cat > /root/openldap/add_user_to_groups.ldif << "EOF"
dn: cn=ldapgroup1,ou=Group,dc=ss,dc=com
changetype: modify
add: memberuid
memberuid: ldapuser1dn: cn=ldapgroup2,ou=Group,dc=ss,dc=com
changetype: modify
add: memberuid
memberuid: ldapuser2
EOF
[root@localhost ~]# ldapadd -x -w '123456' -D 'cn=admin,dc=ss,dc=com' -f /root/openldap/add_user_to_groups.ldif

14、查询LDAP的相关信息

1》 查询LDAP全部信息

[root@localhost ~]# ldapsearch -x -b 'dc=ss,dc=com' -H ldap://127.0.0.1

2》 查询添加的LDAP用户组信息

[root@localhost ~]# ldapsearch -LLL -x -D 'cn=admin,dc=ss,dc=com' -w '123456' -b 'dc=ss,dc=com' 'cn=ldapgroup1'

3》 查询添加的LDAP用户信息

[root@localhost ~]# ldapsearch -LLL -x -D 'cn=admin,dc=ss,dc=com' -w '123456' -b 'dc=ss,dc=com' 'uid=ldapuser1'

15、开启OpenLDAP日志访问功能

默认情况下OpenLDAP是没有启用日志记录功能的,但是在实际使用过程中,我们为了定位问题需要使用到OpenLDAP日志

# 新建日志配置ldif文件,如下:
[root@localhost ~]# cat > /root/openldap/loglevel.ldif << EOF
dn: cn=config
changetype: modify
replace: olcLogLevel
olcLogLevel: stats
EOF
[root@localhost ~]# ldapmodify -Y EXTERNAL -H ldapi:/// -f /root/openldap/loglevel.ldif# 修改rsyslog配置文件,并重启rsyslog服务,如下:
[root@localhost ~]# cat >> /etc/rsyslog.conf << EOF
local4.* /var/log/slapd.log
EOF# 重启服务
[root@localhost ~]# systemctl restart rsyslog
[root@localhost ~]# systemctl restart slapd# 使用ldapuser1认证下
[root@localhost ~]# ldapwhoami -x -D uid=ldapuser1,ou=People,dc=ss,dc=com -w 123456

查看OpenLDAP日志,如下:

[root@localhost ~]# tail /var/log/slapd.log

到此,LDAP已配置完成。


二、安装PHPldapAdmin管理软件

1、安装

先安装Apache和PHP:

[root@localhost ~]# yum -y install httpd php php-ldap php-gd php-mbstring php-pear php-bcmath php-xml

再安装phpldapadmin:

[root@localhost ~]# yum -y install epel-release
[root@localhost ~]# yum --enablerepo=epel -y install phpldapadmin

2、修改配置文件

》修改config.php文件:

[root@nano cn=config]# vim /etc/phpldapadmin/config.php +397
> // 397行取消注释,398行添加注释 
> $servers->setValue('login','attr','dn'); 	
> // $servers->setValue('login','attr','uid');

》修改phpldapadmin.conf文件:

[root@nano cn=config]# vim /etc/httpd/conf.d/phpldapadmin.conf +11
> 	<IfModule mod_authz_core.c>
>  		# Apache 2.4 	
>  		Require local 	
>  		# 添加一行内容,指定可访问的ip段 或者输入:Require all granted 开放外网访问 	
>  		Require ip 192.168.77.0/24
>  </IfModule>

3、启动httpd

修改Apache的端口!一般来说80端口会被占用,所以需要改一下端口,如果不需要的可以跳过此步骤。

vim /etc/httpd/conf/httpd.conf 
将配置文件中的Listen 80 改成Listen 8081

启动httpd

[root@nano cn=config]# systemctl enable --now httpd

浏览器访问 phpldapadmin:

  • url: http://服务器地址/phpldapadmin/
  • 用户名:cn=admin,dc=ss,dc=com
  • 密码:设定的管理员密码

Phpldap使用方法参考:https://blog.csdn.net/u010543388/article/details/107682769


三、使用LdapAdmin

该软件更容易创建用户组、用户和移动等


四、数据迁移

1、获取数据到指定文件

[root@nano cn=config]# ldapsearch -LLL -W -x -D "cn=admin,dc=ss,dc=com" -b "dc=ss,dc=com" > ldap_data_2023.ldif

如果公司有多个域,请将命令执行多次,修改命令中-b 后面的域名就行;
注意: 以上命令只适合数据量小的时候,数据量在10000以内可以这么做,如果超过了请就选择其他方法;

2、查看数据是否备份成功

[root@nano cn=config]# cat ldap_data_2023.ldif

3、插入数据

[root@nano cn=config]# ldapadd -x -D "cn=admin,dc=ss,dc=com" -w "你的密码" -f ldap_data_2023.ldif

若出现如下报错,则证明数据库中已有该条记录,需要到ldap_data_2023.ldif中删除,再继续导入即可
adding new entry "dc=test,dc=com"
ldap_add: Already exists (68)


五、卸载LDAP

1、停止openldap

[root@nano cn=config]# systemctl stop slapd
[root@nano cn=config]# systemctl disable slapd

2、卸载

[root@nano cn=config]# yum -y remove openldap-servers openldap-clients

3、删除残留文件

[root@nano cn=config]# rm -rf /var/lib/ldap

4、删除ldap用户

[root@nano cn=config]# userdel ldap

5、删除openldap目录

[root@nano cn=config]# rm -rf /etc/openldap

参考

  • OpenLDAP安装与配置 -博客园

  • LDAP安装、LDAP数据迁移、LDAP卸载指南及PHPldapAdmin管理软件安装-博客园

  • 在CentOS 7上安装OpenLDAP服务器 - 简书 (jianshu.com)

相关文章:

LDAP配置与安装

LDAP配置与安装 一、安装LDAP1、安装OpenLDAP及相关依赖包2、查看OpenLDAP版本3、配置OpenLDAP数据库4、设置OpenLDAP的管理员密码5、修改配置文件5.1. 修改{2}hdb.ldif文件5.2. 修改{1}monitor.ldif文件5.3. 修改{-1}frontend.ldif文件 6、验证LDAP的基本配置7、修改LDAP文件权…...

1-Linux环境安装JDK

Linux环境安装JDK 准备&#xff1a; ① Linux 环境 本文中Linux环境为 CentOS Linux 7 可使用以下命令查询 linux 系统版本&#xff1a; hostnamectl② 准备JDK包 进入官网 https://www.oracle.com/java/technologies/downloads/#java17下载对应jdk包 此处使用以前下载的旧…...

通胀数据回落助金价小幅回升

现货黄金窄幅震荡&#xff0c;目前交投于2032.92美元/盎司附近。隔夜美国通胀数据弱于市场预期&#xff0c;市场对美联储6月份加息预期降温&#xff0c;美元指数走弱&#xff0c;金价一度冲高至2050关口附近&#xff0c;不过&#xff0c;随后金价回吐全部涨幅&#xff0c;并一度…...

正则表达式的基本语法以及技巧和示例

正则表达式&#xff08;Regular Expression&#xff09;是一种强大的文本模式匹配工具&#xff0c;它使用特定的语法规则来描述和匹配字符串。在实际应用中&#xff0c;正则表达式可以用于搜索、替换、验证和分割文本数据。本文将详细解释正则表达式的语法和常用的使用示例。 …...

蓝牙耳机怎么挑选?小编分享2023畅销蓝牙耳机排行榜

蓝牙耳机怎么挑选&#xff1f;蓝牙、音质、续航、佩戴是蓝牙耳机选购时最重要的四大维度&#xff0c;这几年随着技术的成熟体验有了很大改善&#xff0c;但挑选的时候仍然要仔细对比&#xff0c;不然容易踩雷。小编根据销量整理了蓝牙耳机排行榜&#xff0c;一起看看最受消费者…...

Linux快照太有趣了!

1.首先介绍一下什么是Linux快照 VMware 的菜单栏中有虚拟机快照这个选项&#xff0c;形象来说快照就相当于一个备份文件&#xff0c;记录的是虚拟机运行到某一节点时的状态&#xff0c;在虚拟机的使用过程中如果发生了意外&#xff0c;比如系统崩溃或系统异常&#xff0c;此时…...

【改进粒子群优化算法】自适应惯性权重粒子群算法(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

ROS 下 激光扫描仪 YDLidar-G4 使用

环境配置&#xff1a; ubuntu20.04 LTS ROS noetic 编程工具&#xff1a;vs code&#xff0c;远程通过ssh访问 扫描仪&#xff1a;YDLidar-G4 YDLidar驱动&#xff1a; YDLidar SDK YDLidar ROS 功能包 此环境包含树莓派&#xff0c;以下过程在树莓派3B上测试通过&#xff0c…...

智能边缘:数字化时代的关键战略之一

随着物联网、云计算和人工智能等技术的快速发展&#xff0c;智能边缘已经成为了许多企业和组织中的重要部分。智能边缘旨在将物联网设备、应用程序和数据存储集成到一个统一的、移动的计算环境中&#xff0c;以提高效率、降低成本并增强数据安全性。在本文中&#xff0c;我们将…...

EasyRecovery16中文最新版电脑数据恢复软件下载使用教程

EasyRecovery如果需要使用它来恢复数据&#xff0c;请注意&#xff0c;尤其是当需要恢复的数据文件非常重要时&#xff0c;建议使用软件EasyRecovery以保障数据安全。共有三个版本&#xff0c;分别是个人版、专业版、企业版&#xff0c;这三种都可以免费下载并使用&#xff0c;…...

什么是鉴权?这些postman鉴权方式你又知道多少?

一、什么是鉴权&#xff1f; 鉴权也就是身份认证&#xff0c;就是验证您是否有权限从服务器访问或操作相关数据。发送请求时&#xff0c;通常必须包含相应的检验参数以确保请求具有访问权限并返回所需数据。通俗的讲就是一个门禁&#xff0c;您想要进入室内&#xff0c;必须通过…...

最新的经典mysql面试题及答案

互联网产品必然是需要有架构的&#xff0c;架构包含接入层、储蓄层、逻辑处理等等&#xff0c;其中存储层承载着数据落地和持久化的任务&#xff0c;同时给逻辑处理层提供数据查询功能支持。而一提到储蓄层必然就要说数据库了&#xff0c;对于数据库的掌握也是软件工程师面试时…...

算法修炼之练气篇——练气十九层

博主&#xff1a;命运之光 专栏&#xff1a;算法修炼之练气篇 前言&#xff1a;每天练习五道题&#xff0c;炼气篇大概会练习200道题左右&#xff0c;题目有C语言网上的题&#xff0c;也有洛谷上面的题&#xff0c;题目简单适合新手入门。&#xff08;代码都是命运之光自己写的…...

记录一次Windows7操作系统渗透测试

#本文档仅用于实验&#xff0c;请勿用来使用恶意攻击&#xff01; 《中华人民共和国网络安全法》中&#xff0c;恶意破坏计算机信息系统罪在第二十七条被明确规定&#xff0c;规定内容为&#xff1a; 第二十七条 任何单位和个人不得为达到破坏计算机信息系统安全的目的&#x…...

承诺协议:定义 构造

文章目录 安全性定义方案构造基于 OWP 存在性基于 DL 假设基于 OWF 存在性基于 DDH 假设 总结 安全性定义 承诺协议&#xff08;Commitment Scheme&#xff09;是一个两阶段的两方协议。一方是承诺者&#xff08;Committer&#xff09; C C C&#xff0c;另一方是接收者&#…...

二、easyUI中的layout(布局)组件

1.layout&#xff08;布局&#xff09;组件的概述 布局容器有5个区域&#xff1a;北、南、东、西和中间。中间区域面板是必须的&#xff0c;边缘的面板都是可选的。每个边缘区域面板都可以通过拖拽其边框改变大小&#xff0c;也可以点击折叠按钮将面板折叠起来。布局可以进行嵌…...

MySQL---聚合函数、字符串函数、数学函数、日期函数

1. 聚合函数 数据准备&#xff1a; create database mydb4; use mydb4;create table emp(emp_id int primary key auto_increment comment 编号,emp_name char(20) not null default comment 姓名,salary decimal(10,2) not null default 0 comment 工资,department char(20…...

边缘计算盒子有哪些?边缘计算应用场景

边缘计算&#xff08;Edge Computing&#xff09;是一种分布式计算模型&#xff0c;旨在将数据处理和计算功能从中心数据中心移到数据源附近的边缘设备上。它的目标是在接近数据生成的地方进行实时数据处理和分析&#xff0c;减少数据传输延迟和网络拥塞&#xff0c;提高应用程…...

Linux内核(十四)Input 子系统详解 IV —— 配对的input设备与input事件处理器 input_register_handle

文章目录 input_handle结构体详解配对的input设备与input事件处理器实例input核心层对驱动层和事件层之间的框架建立流程图 本文章中与input子系统相关的结构体可参考input子系统结构体解析 input函数路径&#xff1a;drivers/input/input.c input_handle结构体详解 input_ha…...

Vue2.x源码解析(三)

Platform 函数 Platform 函数是用于与各种浏览器和平台进行交互的函数&#xff0c;它为 Vue 提供了跨平台的支持&#xff0c;例如浏览器、Node.js 等。Platform 函数提供了一些常用的工具和配置项&#xff0c;例如事件的托管、资源请求和异步更新等。下面是 Platform 函数的伪…...

全面理解守护进程的基础概念,以及如何创建一个守护进程(系列文章第三篇)

前言 这个系列的文章有四篇&#xff0c;其目的是为了搞清楚&#xff1a; 进程&#xff0c;shell&#xff0c;shell进程&#xff0c;终端&#xff0c;控制终端&#xff0c;前台进程&#xff0c;后台进程&#xff0c;控制进程&#xff0c;前台进程组&#xff0c;后台进程组&#…...

Leetcode刷题日志5.0

目录 前言&#xff1a; 1.两数相加 2.无重复字符的最长子串 3.整数反转 4.删除链表的倒数第 N 个结点 前言&#xff1a; 今天我又来继续分享最近做的题了&#xff0c;现在开始进入我们快乐的刷题时间吧&#xff01;&#xff08;编程语言Python3.0&#xff0c;难度&#xf…...

母亲节:向世界上最伟大的母爱致敬

在这世间众多的亲情关系中&#xff0c;有一种关系无与伦比&#xff0c;毫不费力地凌驾于其他任何已知的地球关系之上。这种非凡的关系就是母亲与子女之间的关系。 母亲对家庭无尽的爱、奉献和忠诚使这份感情无价。为了向全球所有母亲表示敬意&#xff0c;母亲节在世界46个国家庆…...

Springboot +Flowable,各种历史信息如何查询(二)

一.简介 正在执行的流程信息是保存在以 ACT_RU_ 为前缀的表中&#xff0c;执行完毕的流程信息则保存在以 ACT_HI_ 为前缀的表中&#xff0c;也就是流程历史信息表。 假设有一个流程&#xff0c;流程图如下&#xff1a; 当这个流程执行完毕后&#xff0c;以 ACT_RU_ 为前缀的…...

DataX下载安装使用

文章目录 01.Clickhouse到HBase(Phoenix)数据导入 DataX介绍下载执行同步的组件配置数据同步查看官方读写配置样例创建Hbase和Phoenix表创建ClickHouse表写入ClickHouse测试数据编写ClickHouse2Hbase配置文件执行同步命令 拓展ClickHouse同步到MySQL配置文件 01.Clickhouse到HB…...

PCB多层板 : 磁通对消法有效控制EMC

在PCB的EMC设计考虑中&#xff0c;首先涉及的便是层的设置&#xff1b;单板的层数由电源、地的层数和信号层数组成&#xff1b;在产品的EMC设计中&#xff0c;除了元器件的选择和电路设计之外&#xff0c;良好的PCB设计也是一个非常重要的因素。 PCB的EMC设计的关键&#xff0…...

基于正点原子电机实验的pid调试助手代码解析(速度环控制)

这里写目录标题 下位机与PID调试助手传输的原理代码讲解(基于正点原子)解析数据接受和数据发送的底层函数数据接受数据帧格式环形数组以及怎么找到它的帧头位置crc校验 数据发送数据上传函数 通过前两节文章&#xff0c;我已经了解了基本的pid算法&#xff0c;现在在完成了电机…...

报表设计器Stimulsoft 2023.2提供深色主题和 Monoline 图标包

Stimulsoft Reports 是一款报告编写器&#xff0c;主要用于在桌面和Web上从头开始创建任何复杂的报告。可以在大多数平台上轻松实现部署&#xff0c;如ASP.NET, WinForms, .NET Core, JavaScript, WPF, Angular, Blazor, PHP, Java等&#xff0c;在你的应用程序中嵌入报告设计器…...

文本三剑客之——sed编辑器

sed编辑器 sed编辑器sed基础语法sed查询sed删除sed 替换sed 插入 sed编辑器 sed是文本处理工具&#xff0c;依赖于正则表达式&#xff0c;可以读取文本内容&#xff0c;工具指定条件对数据进行添加、删除、替换等操作&#xff0c;被广泛应用于shell脚本&#xff0c;以完成自动…...

华为OD机试真题 Java 实现【贪心的商人】【2023Q1 100分】

一、题目描述 商人经营一家店铺,有number种商品,由于仓库限制每件商品的最大持有数量是item[index],每种商品的价格在每天是item_price[item_index][day],通过对商品的买进和卖出获取利润,请给出商人在days天内能获取到的最大利润。 注:同一件商品可以反复买进和卖出;…...