Linux云计算 |【第一阶段】SERVICES-DAY5
主要内容:
源码编译安装、rsync同步操作、inotify实时同步、数据库服务基础
实操前骤:(所需tools.tar.gz与users.sql)
1.两台主机设置SELinnx和关闭防火墙
setenforce 0
systemctl stop firewalld.service //停止防火墙
systemctl disable firewalld.service
2.真机远程复制tools.tar.gz到虚拟机1
[root@localhost 桌面]# scp /linux-soft/1/tools.tar.gz root@192.168.4.7:/root
root@192.168.4.7's password:
tools.tar.gz 100% 766KB 6.1MB/s 00:00
一、源码编译安装介绍
源码编译安装是指从软件的源代码开始,通过手动编译和安装过程来部署软件的一种方法。这种方法通常用于需要高度定制化或最新版本的软件,或者在特定操作系统或硬件平台上没有预编译二进制包的情况下。
1、源码包编译安装
1)源码编译安装的基本步骤如下:
获取源代码:通常通过下载软件的源代码压缩包(如.tar.gz或.zip文件)或从版本控制系统(如Git)中克隆代码库。
解压源代码:将下载的源代码压缩包解压到一个目录中。
配置编译选项:运行配置脚本(通常是
./configure
),该脚本会检查系统环境,设置编译选项,并生成Makefile文件。配置脚本通常允许用户通过命令行参数指定安装路径、启用或禁用某些功能等。编译源代码:运行
make
命令,该命令会根据Makefile文件中的指令编译源代码。编译过程可能包括编译源文件、链接库文件等步骤。安装软件:运行
make install
命令,该命令会将编译好的二进制文件、库文件、配置文件等安装到系统中指定的目录(通常是/usr/local
或用户指定的路径)。
2)源码包相较于RPM软件包的优劣势:
RPM包 定义:RPM软件包是一种预编译的二进制包,通常用于基于Red Hat的Linux发行版(如Fedora、CentOS、RHEL等)。包含了编译好的可执行文件、库文件、配置文件和安装脚本等。
优势:
- 易于安装和管理:RPM包可以通过简单的命令(如
rpm -i
或yum install
)进行安装,且支持依赖关系自动解决。- 版本控制:RPM包管理系统可以跟踪已安装的软件包及其版本,方便升级和卸载。
- 一致性:RPM包在特定发行版上编译,确保与系统库和工具的兼容性。
- 安全性:RPM包可以进行数字签名验证,确保来源的可靠性。
缺点:
- 定制性有限:由于是预编译的二进制包,用户无法轻易修改编译选项或功能。
- 版本更新滞后:RPM包通常由发行版维护者提供,可能不会立即提供最新版本的软件。
源码包 定义:包含软件的源代码,通常以压缩文件(如.tar.gz或.zip)的形式分发。用户需要手动编译源代码,生成可执行文件和库文件。
优势:
- 定制化:用户可以根据需要定制编译选项,选择启用或禁用某些功能。
- 最新版本:可以获取和安装软件的最新版本,而不必等待发行版的更新。
- 平台适应性:可以在没有预编译二进制包的平台上安装软件。
缺点:
- 复杂性:相比使用预编译的二进制包,源码编译安装过程更为复杂,需要用户具备一定的技术知识。
- 时间消耗:编译过程可能需要较长时间,特别是对于大型软件项目。
- 依赖管理:可能需要手动解决软件依赖关系,确保所有必要的库和工具都已安装。
总结
- RPM软件包 适合追求安装简便、系统一致性和安全性的用户,特别是在企业环境中。
- 源码包 适合需要高度定制化、追求最新版本或在没有预编译包的平台上安装软件的用户。
2、准备编译环境
开源软件多使用C/C++语言开发,需要 gcc、gcc-c++、make(默认安装)等编译工具
例如:
[root@svr7 ~]# yum -y install gcc make //安装软件包
[root@svr7 ~]# rpm -q gcc
gcc-4.8.5-28.el7.x86_64
[root@svr7 ~]# rpm -q make
make-3.82-23.el7.x86_64
[root@svr7 ~]# gcc --version
gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-28)
Copyright © 2015 Free Software Foundation, Inc.
本程序是自由软件;请参看源代码的版权声明。本软件没有任何担保;
包括没有适销性和某一专用目的下的适用性担保。
实操了解实现过程:
步骤1:安装开发工具gcc与make
步骤2:tar解包,释放源代码至指定目录
步骤3:./configure 配置,指定安装目录/功能模块等选项
步骤4:make 编译,生成可执行的二进制程序文件
步骤5:make install安装,将编译好的文件复制到安装目录
注意:./configure、make、make install的步骤必须要在释放源代码指定的目录以相对目录方式(当前目录)下进行脚本运行、编译二进制可执行程序、安装
步骤1:安装开gcc、make
[root@svr7 ~]# yum -y install gcc make
步骤2:tar解包,释放源代码至指定目录(企业默认/usr/local目录为源代码存放目录)
[root@svr7 ~]# tar -xf /root/tools.tar.gz -C / //释放压缩包到根目录
[root@svr7 ~]# ls /
1.txt boot etc lib media mydvd proc run srv tmp usr
bin dev home lib64 mnt opt root sbin sys tools var
[root@svr7 ~]# ls /tools/
inotify-tools-3.13.tar.gz other[root@svr7 ~]# tar -xf /tools/inotify-tools-3.13.tar.gz -C /usr/local/ //释放指定目录
[root@svr7 ~]# ls /usr/local/
bin games inotify-tools-3.13 lib64 sbin src
etc include lib libexec share
[root@svr7 ~]# ls /usr/local/inotify-tools-3.13/
aclocal.m4 config.h.in COPYING libinotifytools man src
AUTHORS config.sub depcomp ltmain.sh missing
ChangeLog configure INSTALL Makefile.am NEWS
config.guess configure.ac install-sh Makefile.in README
步骤3:运行./configure 配置脚本,指定安装目录
- 作用1:检测当前系统是否安装gcc
- 作用2:指定安装位置与功能
[root@svr7 ~]# cd /usr/local/inotify-tools-3.13/ //必须以当前目录方式运行脚本
[root@svr7 inotify-tools-3.13]# ./configure --prefix=/opt/myrpm //指定安装目录
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
...
补充:[--prefix=指定安装目录],此步骤不产生相应的目录(无需提前创建,make创建)
步骤4:进行make 编译,生成可执行的二进制程序文件(放在内存中)
[root@svr7 inotify-tools-3.13]# make
make all-recursive
make[1]: 进入目录“/usr/local/inotify-tools-3.13”
Making all in libinotifytools
make[2]: 进入目录“/usr/local/inotify-tools-3.13/libinotifytools”
...
补充:make编译,将高级语言转化成低级语言
步骤5:make install 安装,将编译好的文件复制到安装目录
[root@svr7 inotify-tools-3.13]# make install
Making install in libinotifytools
make[1]: 进入目录“/usr/local/inotify-tools-3.13/libinotifytools”
make[2]: 进入目录“/usr/local/inotify-tools-3.13”
...
[root@svr7 inotify-tools-3.13]# ls /opt/
myrpm rh
[root@svr7 inotify-tools-3.13]# ls /opt/myrpm/
bin include lib share
[root@svr7 inotify-tools-3.13]# ls /opt/myrpm/bin/
inotifywait inotifywatch
常见报错:未安装gcc开发工具
checking for gcc... no
checking for cc... no
checking for cl.exe... no
configure: error: no acceptable C compiler found in $PATH
See `config.log' for more details.
二、分步源码编译解析及示例
1)下载及解包(inotify-tools软件工具)
- 使用tar解包,建议释放到/usr/src/目录(/usr/local)
- 标准位置:/usr/src/软件名-版本号/
[root@svr7 ~]# yum -y install gcc make
[root@svr7 ~]# tar -xf /root/tools.tar.gz -C /
[root@svr7 ~]# tar -xf /tools/inotify-tools-3.13.tar.gz -C /usr/local/
2)配置(./configure)
- 执行源码目录下的configure脚本,通过“./configure --help”可以查看帮助
- 典型参数:--prefix=指定安装目录 //不生成目录(make进行生成)
- 作用:检测当前系统是否安装gcc、指定安装位置与功能
[root@svr7 ~]# cd /usr/local/inotify-tools-3.13/
[root@svr7 inotify-tools-3.13]# ./configure --prefix=/opt/myrpm
3)编译及安装(make、make install)
- 命令:make //编译
- 命令:make install //安装
[root@svr7 inotify-tools-3.13]# make && make install
4)结果验证
- 查看安装目录,了解程序的使用方法;
- 运行软件包提供的程序/服务
[root@svr7 inotify-tools-3.13]# ls /opt/myrpm/
bin include lib share
三、Rsync基本使用
rsync
是一种快速、多功能的远程(和本地)文件复制工具。它可以在不同主机之间同步文件和目录,无论是通过本地网络还是通过互联网。rsync
以其高效的数据传输和增量传输特性而闻名,它只传输文件中发生变化的部分,而不是整个文件,从而大大减少了传输时间和带宽消耗。
官网:http://rsync.samba.org/
1、主要特性
- 增量传输:
rsync
会检查文件的变化,只传输变化的部分,而不是整个文件。- 高效传输:通过使用压缩和校验和,
rsync
可以减少传输的数据量。- 支持多种传输模式:可以通过 SSH、rsync 守护进程等方式进行传输。
- 保留文件属性:
rsync
可以保留文件的权限、时间戳、软链接等属性。- 灵活的过滤规则:可以使用 include 和 exclude 规则来控制哪些文件和目录需要同步。
复制与同步的差异:
① 复制(cp):完全拷贝源到目标
② 同步(rsync):增量拷贝,只传输变化过的数据
2、Rsync基本用法
格式:rsync [选项...] 源目录 目标目录
例如,要在本地同步两个目录:
rsync -av /source/directory/ /destination/directory/
要在两台远程主机之间同步文件,可以使用 SSH:
rsync -avz /source/directory/ user@remotehost:/destination/directory/
常用选项:
-a
:归档模式,表示递归传输并保持文件属性(相当于-rlptgoD
)。-v
:详细模式,显示传输过程中的详细信息。-z
:压缩文件数据在传输过程中。-P
:显示传输进度,并在传输中断后可以继续传输。--delete
:删除目标目录中源目录没有的文件。- -n:测试同步过程,不做实际修改
注意:使用 [-av] 的前后顺序尽量不能颠倒,否则无法进行[Tab]补全命令;
本地目录同步(目录后+[ / ],只同步目录下的数据)
- 格式:rsync [选项...] 本地源目录 本地目标目录 //同步整个文件夹
- 格式:rsync [选项...] 本地源目录/ 本地目标目录 //只同步目录下的数据
补充:rsync同步会对源目录进行检验,第一次同步将源目标目录下的所有数据全部拷贝至目标目录;第二次同步将源目录的变化数据拷贝到目标目录
注意:不加选项 [--delete ,只会针对源目录的数据,即使目标目录有其它数据也不会操作;
例如:同步目录本身方式进行同步 [源目录]
[root@svr7 ~]# mkdir /mydir /todir
[root@svr7 ~]# cp /etc/passwd /mydir/
[root@svr7 ~]# touch /mydir/1.txt
[root@svr7 ~]# mkdir /mydir/ABC
[root@svr7 ~]# ls /mydir/ //准备测试需要的目录、文件
1.txt ABC passwd
[root@svr7 ~]# rsync -av /mydir /todir //不带[/],则同步目录本身
sending incremental file list
mydir/
mydir/1.txt
mydir/passwd
mydir/ABC/
sent 2,552 bytes received 66 bytes 5,236.00 bytes/sec
total size is 2,330 speedup is 0.89[root@svr7 ~]# ls /todir/ //查看目标目录同步内容
mydir
例如:同步目录内容方式进行同步 [源目录/]
[root@svr7 ~]# rsync -av /mydir/ /todir //带[/],则同步目录内容
sending incremental file list
./
1.txt
passwd
ABC/
sent 2,540 bytes received 65 bytes 5,210.00 bytes/sec
total size is 2,330 speedup is 0.89[root@svr7 ~]# ls /todir/ //查看目标目录同步内容
1.txt ABC mydir passwd
例如:增加文件,进行同步
[root@svr7 ~]# touch /mydir/2.txt //源目录创建新文件
[root@svr7 ~]# rsync -av /mydir/ /todir/
sending incremental file list
./
2.txt //只同步变化数据
sent 188 bytes received 39 bytes 454.00 bytes/sec
total size is 2,330 speedup is 10.26[root@svr7 ~]# ls /todir/ //查看目标目录同步内容
1.txt 2.txt ABC mydir passwd
例如:修改文件内容,进行同步
[root@svr7 ~]# echo 123 > /mydir/1.txt //源目录文件发生数据修改
[root@svr7 ~]# rsync -av /mydir/ /todir/
sending incremental file list
1.txt //只同步变化数据
sent 193 bytes received 36 bytes 458.00 bytes/sec
total size is 2,334 speedup is 10.19[root@svr7 ~]# ls /todir/ //查看目标目录同步内容
1.txt 2.txt ABC mydir passwd
例如:源目录与目标目录保持内容一致,进行同步 [--delete]
[root@svr7 ~]# ls /mydir/ //源目录内容
1.txt 2.txt ABC passwd
[root@svr7 ~]# ls /todir/ //目标目录内容
1.txt 2.txt ABC mydir passwd
[root@svr7 ~]# rsync -av --delete /mydir/ /todir/ //同步并删除目标目录多余的文档
sending incremental file list
deleting mydir/ABC/
deleting mydir/passwd
deleting mydir/1.txt
deleting mydir/
sent 142 bytes received 68 bytes 420.00 bytes/sec
total size is 2,334 speedup is 11.11[root@svr7 ~]# ls /mydir/ //查看源目录同步内容
1.txt 2.txt ABC passwd
[root@svr7 ~]# ls /todir/ //查看目标目录同步内容
1.txt 2.txt ABC passwd
例如:测试同步过程,不做实际修改 [-n]
[root@svr7 ~]# touch /mydir/c.txt
[root@svr7 ~]# rsync -n -av --delete /mydir/ /todir/
sending incremental file list
./
c.txt
sent 166 bytes received 23 bytes 378.00 bytes/sec
total size is 2,334 speedup is 12.35 (DRY RUN)[root@svr7 ~]# ls /todir/ //查看目标目录同步内容
1.txt 2.txt ABC passwd
四、Rsync+SSH远程同步(rsync负责同步,ssh负责远程)
用法及服务端要求
- 开启sshd服务并提供授权的用户、密码
列出SSH服务端资源
- 命令:rsync user@host:远程目录/
1、与远程的SSH目录保持同步
- 语法(下行):rsync [...] user@host:远程目录 本地目录
- 语法(上行):rsync [...] 本地目录 user@host:远程目录
注意:该方式远程同步,需要密码验证
例如1:远程同步(上行)
主机1:
[root@svr7 ~]# rsync -av --delete /mydir/ root@192.168.4.207:/opt
root@192.168.4.207's password:
sending incremental file list
deleting rh/
./
1.txt
2.txt
passwd
ABC/sent 2,615 bytes received 87 bytes 163.76 bytes/sec
total size is 2,334 speedup is 0.86
主机2:
[root@pc207 ~]# ls /opt/
1.txt 2.txt ABC passwd
例如2:远程同步(上行),增加文件
主机1:
[root@svr7 ~]# touch /mydir/c.txt
[root@svr7 ~]# rsync -av --delete /mydir/ root@192.168.4.207:/opt
root@192.168.4.207's password:
sending incremental file list
./
c.txtsent 211 bytes received 39 bytes 17.24 bytes/sec
total size is 2,334 speedup is 9.34
主机2:
[root@pc207 ~]# ls /opt/
1.txt 2.txt ABC c.txt passwd
例如3:远程同步(下载)
主机2:
[root@pc207 ~]# echo 123 > /mnt/abc.txt
主机1:
[root@svr7 ~]# rsync -av --delete root@192.168.4.207:/mnt/ /opt/
root@192.168.4.207's password:
receiving incremental file list
deleting rh/
deleting myrpm/share/man/man1/inotifywatch.1
...
./
abc.txtsent 46 bytes received 116 bytes 12.00 bytes/sec
total size is 4 speedup is 0.02
[root@svr7 ~]# ls /opt/
abc.txt
[root@svr7 ~]# cat /opt/abc.txt
123
注意:进行远程同步下载时,若加 [-delete] 选项,会将/opt目录下的内容与/mnt目录内容保持一致,所以会对原来在/opt目录下的所有文件全部删除;
2、实现SSH无密码验证(公钥与私钥)
部署公钥与私钥,配对具有唯一性,且每次生成公私钥不一样;(RSA加密算法生成)
- ① 公钥public(锁),对应生成文件id_rsa.pub(公钥)
- ② 私钥private(钥匙),对应生成文件id_rsa(私钥)
- 生成公私钥命令:ssh-keygen
- 传递公钥命令:ssh-copy-id user@host //传递目标主机
- 公私钥存放目录:/root/.ssh/
- 目标主机存放公钥文件:/root/.ssh/authorized_keys //每一行记录代表一条公钥
补充:公钥和私钥由远程管理的主机生成,而被远程管理的主机负责接受公钥;
步骤1:生成公钥与私钥
[root@svr7 ~]# ssh-keygen //生成公钥与私钥(回车即可)
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 公私钥保存目录
Enter passphrase (empty for no passphrase): //公私钥的保险柜密码,不输入为空
Enter same passphrase again: //确认密码为空
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:fnqPfuarIHeeLqDRE6heKLIT+GSjd1cXwjZ8iWd/hkI root@svr7.tedu.cn
The key's randomart image is:
+---[RSA 2048]----+
| |
| |
| . o . . |
| . . B E |
|. o . oSB o . |
|= * o +.. o o o |
|.X o o.++.o. o |
|+ + o .o.*.oo |
| o . . .=B*+. |
+----[SHA256]-----+
[root@svr7 ~]# ls /root/.ssh/ //查看公私钥存放目录
id_rsa id_rsa.pub known_hosts
解释:id_rsa(私钥)、id_rsa.pub(公钥)、known_hosts(记录曾经远程管理过的机器)
补充:在已生成公私钥的情况下,再次对同一主机进行生成,则将原有的公私钥对进行覆盖;
补充:本机可以把公钥对不同的目标主机进行提供,但私钥无法提供给目标主机;其次不同的目标主机都可以接收本机的公钥,当目标主机接受本机的公钥后,本机则可以进行SSH无密码访问目标主机;
步骤2:将公钥传递给主机2(相当于复制)
[root@svr7 ~]# ssh-copy-id root@192.168.4.207 //传递公钥给主机2
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@192.168.4.207's password:Number of key(s) added: 1Now try logging into the machine, with: "ssh 'root@192.168.4.207'"
and check to make sure that only the key(s) you wanted were added.
步骤3:验证SSH无密码验证
主机2:
[root@pc207 ~]# ls /root/.ssh/ //查看目标主机的存放公钥文件
authorized_keys //传递后的公钥文件改名,内容一样
主机1:
[root@svr7 ~]# ssh 192.168.4.207
Last login: Mon Mar 22 08:38:47 2021 from 192.168.4.254 //无需密码认证
[root@pc207 ~]# exit[root@svr7 ~]# rsync -av --delete /mydir/ root@192.168.4.207:/opt //无需密码验证
sending incremental file listsent 165 bytes received 13 bytes 15.48 bytes/sec
total size is 2,334 speedup is 13.11
补充:生产环境下,如果发现/root/.ssh/目录下有authorized_keys文件,说明本机有无密码验证;(删除authorized_keys或dd某一行记录)
五、部署监控环境
同步的实时性:
① 按照固定周期定期同步
- 时间间隔不好固定,同步不及时或资源浪费;
- 实时性较差;
② Linux内核的inotify机制
- 提供事件响应式的文件系统通知机制;
- 安装inotify-tools控制工具可调用此机制实现监控;
1)安装inotify-tools工具
- 下载地址:http://download.sf.net/inotify-tools/
- 标准的源码、编译安装即可(/usr/local/inotify-tools-3.13/bin/目录下)
2)inotifywait监控基本用法(inotifywait报告)
格式:inotifywait [选项] 目标文件夹
常用命令选项:
- [-m] 持续监控(捕获一个事件后不退出)
- [-r] 递归监控、包括子目录及文件(捕获一个事件后退出)
- [-q] 减少屏幕输出信息
- [-e] 指定监视的modfiy、move、create、delete、attrib等事件类别(不加则所有事件都监控)
3)持续跟踪指定文件夹的变化
- 要求1:目标文件夹:/opt
- 要求2:当文档出现监视的事件时,会立即给出相应提示
例如:
[root@svr7 ~]# mkdir /opt/4.txt
[root@svr7 ~]# /opt/myrpm/bin/inotifywait -rq /opt/ //捕获一个事件则退出
/opt/ CREATE,ISDIR 4.txt
例如:
[root@svr7 ~]# mkdir /opt/4.txt
[root@svr7 ~]# mkdir /opt/5.txt
[root@svr7 ~]# /opt/myrpm/bin/inotifywait -mrq /opt/
/opt/ CREATE,ISDIR 4.txt
/opt/ OPEN,ISDIR 4.txt
/opt/ CLOSE_NOWRITE,CLOSE,ISDIR 4.txt
/opt/ CREATE,ISDIR 5.txt
/opt/ OPEN,ISDIR 5.txt
/opt/ CLOSE_NOWRITE,CLOSE,ISDIR 5.txt
六、配置实时同步
1)inotify与rsync的结合
基本思路:利用while循环来反复检查单次监控结果(书写shell脚本)
脚本:可以运行一个文件,实现某种功能;例如:useradd zhangsan
死循环:使用while循环(条件成立则重复执行)
格式:
while 条件
do
重复执行的操作
Done
注释:只要条件成立,则执行do和done之间的“重复执行的操作”
2)编写同步脚本
[root@svr7 ~]# vim /etc/rsync.sh //编写脚本
while /opt/myrpm/bin/inotifywait -rqq /mydir
dorsync -a --delete /mydir/ root@192.168.4.207:/opt
done
[root@svr7 ~]# ls -l /etc/rsync.sh
-rw-r--r--. 1 root root 105 3月 22 16:01 /etc/rsync.sh
[root@svr7 ~]# chmod a+x /etc/rsync.sh //赋予执行权限
[root@svr7 ~]# ls -l /etc/rsync.sh
-rwxr-xr-x. 1 root root 105 3月 22 16:01 /etc/rsync.sh
[root@svr7 ~]# /etc/rsync.sh & //运行脚本程序并放入后台
[1] 2943
[root@svr7 ~]# jobs -l
[1]+ 2943 运行中 /etc/rsync.sh &
[root@svr7 ~]# kill 2943 //停止脚本
3)验证实时同步效果
七、数据库服务基础(数据库管理系统)
- DB数据库:一批数据的集合,主流的数据库多用来存放关系型表格数据;
(关系型数据:以二维表格记录大量实体的属性信息)
- DBMS数据库管理系统:用来操作和管理;
Mariadb的基本使用:
1.Linux系统的管理指令不能使用
2.所有的数据库系统指令都必须以[ ; ]结尾
3.数据库系统的指令大部分不支持tab补全
1、部署Maridb数据库服务器
RHEL7中的MariDB软件包:
- 提供服务端有关的系统程序:mariadb-server
- 提供客户端及管理工具:mariadb
例如:
[root@svr7 ~]# yum -y install mariadb-server mariadb //安装软件包
[root@svr7 ~]# systemctl restart mariadb //重启服务
[root@svr7 ~]# netstat -anptu | grep :3306
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 5955/mysqld
2、访问Mariadb数据库
使用mysql命令,登录交互界面,实现数据库管理操作;
格式:mysql [-u用户名] [-p[密码]]
例如:
[root@svr7 ~]# mysql -uroot //进入数据库系统(默认免密码)
MariaDB [(none)]>
MariaDB [(none)]> show databases; //列出数据库
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
+--------------------+
4 rows in set (0.00 sec)
MariaDB [(none)]> quit
Bye
3、数据库的增删查
MariaDB [(none)]> 交互命令:
- [ show databases; ] 列出数据库
- [ create database 数据库名; ] 创建数据库
- [ drop database 数据库名; ] 删除数据库
- [ use 数据库名; ] 使用/选择数据库
- [ show tables; ] 列出库里有哪些表
- exit 和 quit 都能退出
例如:创建数据库,数据库名为nsd01
[root@svr7 ~]# mysql -uroot
MariaDB [(none)]> create database nsd01; //创建数据库
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> show databases; //列出数据库
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| nsd01 |
| performance_schema |
| test |
+--------------------+
5 rows in set (0.00 sec)
MariaDB [(none)]> drop database nsd01; //删除数据库
Query OK, 0 rows affected (0.00 sec)
例如:切换到mysql数据库并查看数据库表格
[root@svr7 ~]# mysql
MariaDB [(none)]> use mysql; //切换到mysql数据库
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -ADatabase changed
MariaDB [mysql]> show tables; //查看当前库中所有表格
+---------------------------+
| Tables_in_mysql |
+---------------------------+
| columns_priv |
| db |
| event |
| func |
| general_log |
| help_category |
| help_keyword |
| help_relation |
| help_topic |
| host |
| ndb_binlog_index |
| plugin |
| proc |
| procs_priv |
| proxies_priv |
| servers |
| slow_log |
| tables_priv |
| time_zone |
| time_zone_leap_second |
| time_zone_name |
| time_zone_transition |
| time_zone_transition_type |
| user |
+---------------------------+
24 rows in set (0.00 sec)MariaDB [mysql]> use test; //切换到test数据库
Database changed
MariaDB [test]> exit //退出数据库管理系统
Bye
4、为数据库管理系统的管理员设置密码
命令:mysqladmin [-u用户名] password '新密码' //[-u]指的用户为数据库管理员
- ① Linux系统管理员: 对于Linux系统有最高权限,名字为root,能够登陆Linux系统的用户信息,用/etc/passwd进行储存;
- ② 数据库系统管理员:对于数据库系统有最高权限,名字为root,能够登陆数据系统的用户信息,用mysql库中user表进行储存;
补充:由于系统当前为root用户,进入数据库管理系统时,默认会用数据库管理员身份root登录,无需密码验证;
例如:设置数据库管理系统的管理员密码,交互式登录
[root@svr7 ~]# mysqladmin -uroot password '123456' //设置管理员密码
[root@svr7 ~]# mysql -u root -p //交互式登录
Enter password: //输入密码
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 5
...
MariaDB [(none)]> exit
Bye
例如:非交互式登录
[root@svr7 ~]# mysql -uroot -p123456 //非交互式登录
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 6
...
MariaDB [(none)]> exit
Bye
5、已知旧密码的情况下,修改新密码
命令:mysqladmin [-u用户名] [-p[旧密码]]
例如:
[root@svr7 ~]# mysqladmin -uroot -p123456 password '321' //修改密码
[root@svr7 ~]# mysql -u root -p321
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 8
...
MariaDB [(none)]> exit
Bye
常见报错:因为数据库管理员设置密码,在输入密码错误及没有输入密码情况下会有报错
[root@svr7 ~]# mysql
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
[root@svr7 ~]# mysql -u root -p65432
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
6、恢复数据到数据库中
步骤1:创建nsd20数据库
[root@svr7 ~]# mysql -u root -p321
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 12
...
MariaDB [(none)]> create database nsd20;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| nsd20 |
| performance_schema |
| test |
+--------------------+
5 rows in set (0.00 sec)
步骤2:真机拷贝users.sql文件到主机1的/root目录下
[root@localhost 桌面]# scp /root/users.sql root@192.168.4.7:/root
root@192.168.4.7's password:
users.sql 100% 2634 2.5MB/s 00:00
步骤3:将users.sql数据库文件导入nsd20数据库中
[root@svr7 ~]# mysql -u root -p321 nsd20 < /root/users.sql //将数据导入数据库
[root@svr7 ~]# mysql -u root -p321
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 15
...
MariaDB [(none)]> use nsd20;
Database changed
MariaDB [nsd20]> show tables;
+-----------------+
| Tables_in_nsd20 |
+-----------------+
| base |
| location |
+-----------------+
2 rows in set (0.00 sec)
7、表记录基本操作
基本操作:增(insert)、删(delete)、改(update)、查(select)
- 表字段、表记录:
MariaDB [(none)] > 交互指令
- 格式:select * from [数据库.]表名;
- 格式:select 字段1,字段2... from [数据库.]表名;
- 格式:select ... Where 字段1=’值’ and|or 字段2=’值’
— 查(select)
格式: select 表字段,表字段... from库名.表名;
例如:
[root@svr7 ~]# mysql -uroot
MariaDB [(none)]> use nsd20;
MariaDB [nsd20]> show tables;
+-----------------+
| Tables_in_nsd20 |
+-----------------+
| base |
| location |
+-----------------+
2 rows in set (0.00 sec)
MariaDB [nsd20]> select * from base; //查看base所有表字段内容
+------+---------+------------+
| id | name | password |
+------+---------+------------+
| 1 | Tom | 123 |
| 2 | Barbara | 456 |
| 3 | James | solicitous |
| 4 | Smith | tarena |
| 5 | Barbara | pwd123 |
+------+---------+------------+
5 rows in set (0.00 sec)MariaDB [nsd20]> select * from location; //查看location所有表字段内容
+------+-----------+
| id | city |
+------+-----------+
| 1 | Beijing |
| 2 | Paris |
| 3 | Sunnyvale |
| 4 | Berlin |
| 5 | Sunnyvale |
+------+-----------+
5 rows in set (0.00 sec)
例如:在user库中查看nsd20数据库的base表内容;
MariaDB [nsd20]> use test;
MariaDB [test]> select * from nsd20.base;
+------+---------+------------+
| id | name | password |
+------+---------+------------+
| 1 | Tom | 123 |
| 2 | Barbara | 456 |
| 3 | James | solicitous |
| 4 | Smith | tarena |
| 5 | Barbara | pwd123 |
+------+---------+------------+
5 rows in set (0.00 sec)
例如:根据字段查找
MariaDB [test]> use nsd20;
MariaDB [nsd20]> select id,name from base;
+------+---------+
| id | name |
+------+---------+
| 1 | Tom |
| 2 | Barbara |
| 3 | James |
| 4 | Smith |
| 5 | Barbara |
+------+---------+
5 rows in set (0.00 sec)
例如:根据条件查找
MariaDB [nsd20]> select * from base where password='456';
+------+---------+----------+
| id | name | password |
+------+---------+----------+
| 2 | Barbara | 456 |
+------+---------+----------+
1 row in set (0.00 sec)MariaDB [nsd20]> select * from base where id='4';
+------+-------+----------+
| id | name | password |
+------+-------+----------+
| 4 | Smith | tarena |
+------+-------+----------+
1 row in set (0.00 sec)MariaDB [nsd20]> select * from base where id='4' and password='123';
Empty set (0.00 sec)MariaDB [nsd20]> select * from base where id='4' or password='123';
+------+-------+----------+
| id | name | password |
+------+-------+----------+
| 1 | Tom | 123 |
| 4 | Smith | tarena |
+------+-------+----------+
— 增(insert)
格式:insert 表名 values (‘值’,‘值’,‘值’);
例如:增加记录信息
MariaDB [nsd20]> insert base values('10','dc','789');
Query OK, 1 row affected (0.04 sec)MariaDB [nsd20]> insert base values('11','aj','333');
Query OK, 1 row affected (0.01 sec)MariaDB [nsd20]> select * from base;
+------+---------+------------+
| id | name | password |
+------+---------+------------+
| 1 | Tom | 123 |
| 2 | Barbara | 456 |
| 3 | James | solicitous |
| 4 | Smith | tarena |
| 5 | Barbara | pwd123 |
| 10 | dc | 789 |
| 11 | aj | 333 |
+------+---------+------------+
7 rows in set (0.00 sec)
— 改(update)
格式:update 表名 set 表字段=’新值’ where 表字段=’值’;
例如:修改记录信息
MariaDB [nsd20]> update base set password='888' where id='11';
Query OK, 1 row affected (0.02 sec)
Rows matched: 1 Changed: 1 Warnings: 0MariaDB [nsd20]> update base set password='250' where name='dc';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0MariaDB [nsd20]> select * from base;
+------+---------+------------+
| id | name | password |
+------+---------+------------+
| 1 | Tom | 123 |
| 2 | Barbara | 456 |
| 3 | James | solicitous |
| 4 | Smith | tarena |
| 5 | Barbara | pwd123 |
| 10 | dc | 250 |
| 11 | aj | 888 |
+------+---------+------------+
7 rows in set (0.00 sec)
— 删(delete)
例如:根据条件进行删除
MariaDB [nsd20]> delete from base where id='10';
Query OK, 1 row affected (0.02 sec)MariaDB [nsd20]> use test;
MariaDB [test]> delete from nsd20.base where id='11';
Query OK, 1 row affected (0.02 sec)MariaDB [test]> select * from nsd20.base;
+------+---------+------------+
| id | name | password |
+------+---------+------------+
| 1 | Tom | 123 |
| 2 | Barbara | 456 |
| 3 | James | solicitous |
| 4 | Smith | tarena |
| 5 | Barbara | pwd123 |
+------+---------+------------+
5 rows in set (0.00 sec)
扩展:rsync常用选项
小结:
本篇章节为 【第一阶段】SERVICES-DAY5 的学习笔记,可以初步了解到 源码编译安装、rsync同步操作、inotify实时同步、数据库服务基础。
Tip:毕竟两个人的智慧大于一个人的智慧,如果你不理解本章节的内容或需要相关笔记、视频,可私信小安,请不要害羞和回避,可以向他人请教,花点时间直到你真正的理解
相关文章:
Linux云计算 |【第一阶段】SERVICES-DAY5
主要内容: 源码编译安装、rsync同步操作、inotify实时同步、数据库服务基础 实操前骤:(所需tools.tar.gz与users.sql) 1.两台主机设置SELinnx和关闭防火墙 setenforce 0 systemctl stop firewalld.service //停止防火墙 sy…...
IP第一次综合实验
一、实验拓扑 二、实验要求 1、R6为ISP,接口IP地址均为公有地址,该设备只能配置地址之后不能冉对其进行任何配置 2、R1-R5为局域网,私有Ip地址192.168.1.0/24,请合理分配 3、R1、82、R4,各有两个环回IP地址;R5,R6各…...
Could not load dynamic library ‘cudart64_100.dll‘
python代码报错 Could not load dynamic library cudart64_100.dll; dlerror: cudart64_100.dll not found 2024-07-22 14:19:21.931639: I tensorflow/stream_executor/cuda/cudart_stub.cc:29] Ignore above cudart dlerror if you do not have a GPU set up on your machine…...
四大引用——强软弱虚
目录 一、强引用 二、软引用 三、弱引用 四、虚引用 一、强引用 强引用是在程序代码之中普遍存在的,类似于“Object obj new Object()”,obj变量引用Object这个对象,就叫做强引用。当内存空间不足,Java虚拟机宁愿抛出OutOfMe…...
MySQL--索引(2)
InnoDB 1.索引类型 主键索引(Primary Key) 数据表的主键列使用的就是主键索引。 一张数据表有只能有一个主键,并且主键不能为 null,不能重复。 在 mysql 的 InnoDB 的表中,当没有显示的指定表的主键时,InnoDB 会自动先检查表中是…...
JVM类加载机制详解
Java在运行期才对类进行加载到内存、连接、初始化过程。这使得Java应用具有极高的灵活性和拓展性,可以依赖运行期进行动态加载和动态连接。 主要加载哪些?Java中的数据类型分为基本数据类型和引用数据类型,基本数据类型由虚拟机预先定义&…...
【MATLAB实战】基于UNet的肺结节的检测
数据: 训练过程图 算法简介: UNet网络是分割任务中的一个经典模型,因其整体形状与"U"相似而得名,"U"形结构有助于捕获多尺度信息,并促进了特征的精确重建,该网络整体由编码器,解码器以及跳跃连接三部分组成。 编码器由…...
Elasticsearch基础(五):使用Kibana Discover探索数据
文章目录 使用Kibana Discover探索数据 一、添加样例数据 二、数据筛选 三、保存搜索 使用Kibana Discover探索数据 一、添加样例数据 登录Kibana。在Kibana主页的通过添加集成开始使用区域,单击试用样例数据。 在更多添加数据的方式页面下方,单击…...
爬取百度图片,想爬谁就爬谁
前言 既然是做爬虫,那么肯定就会有一些小心思,比如去获取一些自己喜欢的资料等。 去百度图片去抓取图片吧 打开百度图片网站,点击搜索xxx,打开后,滚动滚动条,发现滚动条越来越小,说明图片加载…...
HTTP 缓存
缓存 web缓存是可以自动保存常见的文档副本的HTTP设备,当web请求抵达缓存时,如果本地有已经缓存的副本,就可以从本地存储设备而不是从原始服务器中提取这个文档。使用缓存有如下的优先。 缓存减少了冗余的数据传输缓存环节了网络瓶颈的问题…...
设计模式实战:图形编辑器的设计与实现
简介 本篇文章将介绍如何设计一个图形编辑器系统,系统包括图形对象的创建、组合、操作及撤销等功能。我们将通过这一项目,应用命令模式、组合模式和备忘录模式来解决具体的设计问题。 问题描述 设计一个图形编辑器系统,用户可以创建并操作图形对象,将多个图形对象组合成…...
.NET 情报 | 分析某云系统添加管理员漏洞
01阅读须知 此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失…...
vue检测页面手指滑动距离,执行回调函数,使用混入的语法,多个组件都可以使用
mixin.ts 定义滑动距离的变量和检测触摸开始的方法,滑动方法,并导出两个方法 sendTranslateX.value > 250 && sendTranslateY.value < -100是向上滑动,满足距离后执行回调函数func,并在一秒内不再触发,一…...
opencv 优势
OpenCV(开源计算机视觉库)是一个广泛使用的计算机视觉和机器学习软件框架。它最初由Intel开发,后来由Itseez公司维护,最终于2015年成为非营利组织OpenCV.org的一部分。OpenCV的目的是实现一个易于使用且高效的计算机视觉框架,支持实时视觉应用。 以下是关于OpenCV的一些关…...
1-如何挑选Android编译服务器
前几天,我在我的星球发了一条动态:入手洋垃圾、重操老本行。没错,利用业余时间,我又重新捣鼓捣鼓代码了。在接下来一段时间,我会分享我从服务器的搭建到完成Android产品开发的整个过程。这些东西之前都是折腾过的&…...
【JS逆向课件:第十六课:Scrapy基础2】
ImagePipeLines的请求传参 环境安装:pip install Pillow USER_AGENT Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36需求:将图片的名称和详情页中图片的数据进行爬取&a…...
使用 PowerShell 自动化图像识别与鼠标操作
目录 前言功能概述代码实现1. 引入必要的程序集2. 定义读取文件行的函数3. 定义加载图片的函数4. 定义查找小图像在大图像中的位置的函数5. 定义截取全屏的函数6. 定义模拟鼠标点击的函数7. 定义主函数 配置文件示例运行脚本结语全部代码提示打包exe 下载地址 前言 在日常工作…...
组队学习——支持向量机
本次学习支持向量机部分数据如下所示 IDmasswidthheightcolor_scorefruit_namekind 其中ID:1-59是对应训练集和验证集的数据,60-67是对应测试集的数据,其中水果类别一共有四类包括apple、lemon、orange、mandarin。要求根据1-59的数据集的自…...
【数据中心】数据中心的IP封堵防护:构建网络防火墙的基石
数据中心的IP封堵防护:构建网络防火墙的基石 引言一、理解IP封堵二、IP封堵的功能模块及其核心技术三、实施IP封堵的关键策略四、结论 引言 在当今高度互联的世界里,数据中心成为信息流动和存储的神经中枢,承载着企业和组织的大量关键业务。…...
LangChain的使用详解
一、 概念介绍 1.1 Langchain 是什么? 官方定义是:LangChain是一个强大的框架,旨在帮助开发人员使用语言模型构建端到端的应用程序,它提供了一套工具、组件和接口,可简化创建由大型语言模型 (LLM) 和聊天模型提供…...
Modbus转BACnet/IP网关快速对接Modbus协议设备与BA系统
摘要 在智能建筑和工业自动化领域,Modbus和BACnet/IP协议的集成应用越来越普遍。BA(Building Automation,楼宇自动化)系统作为现代建筑的核心,需要高效地处理来自不同协议的设备数据,负责监控和管理建筑内…...
万字长文之分库分表里无分库分表键如何查询【后端面试题 | 中间件 | 数据库 | MySQL | 分库分表 | 其他查询】
在很多业务里,分库分表键都是根据主要查询筛选出来的,那么不怎么重要的查询怎么解决呢? 比如电商场景下,订单都是按照买家ID来分库分表的,那么商家该怎么查找订单呢?或是买家找客服,客服要找到对…...
如何查看jvm资源占用情况
如何设置jar的内存 java -XX:MetaspaceSize256M -XX:MaxMetaspaceSize256M -XX:AlwaysPreTouch -XX:ReservedCodeCacheSize128m -XX:InitialCodeCacheSize128m -Xss512k -Xmx2g -Xms2g -XX:UseG1GC -XX:G1HeapRegionSize4M -jar your-application.jar以上配置为堆内存4G jar项…...
科研绘图系列:R语言TCGA分组饼图(multiple pie charts)
介绍 在诸如癌症基因组图谱(TCGA)等群体研究项目中,为了有效地表征和比较不同群体的属性分布,科研人员广泛采用饼图作为数据可视化的工具。饼图通过将一个完整的圆形划分为若干个扇形区域,每个扇形区域的面积大小直接对应其代表的属性在整体中的占比。这种图形化的展示方…...
ReadAgent,一款具有要点记忆的人工智能阅读代理
人工智能咨询培训老师叶梓 转载标明出处 现有的大模型(LLMs)在处理长文本时受限于固定的最大上下文长度,并且当输入文本越来越长时,性能往往会下降,即使在没有超出明确上下文窗口的情况下,LLMs 的性能也会随…...
构建智能:利用Gradle项目属性控制构建行为
构建智能:利用Gradle项目属性控制构建行为 Gradle作为一款强大的构建工具,提供了丰富的项目属性管理功能。通过项目属性,开发者可以灵活地控制构建行为,实现条件编译、动态配置和多环境构建等高级功能。本文将详细解释如何在Grad…...
如何通过smtp设置使ONLYOFFICE协作空间服务器可以发送注册邀请邮件
什么是ONLYOFFICE协作空间 ONLYOFFICE协作空间,是Ascensio System SIA公司出品的,基于Web的,开源的,跨平台的,在线文档编辑和协作的解决方案。在线Office包含了最基本的办公三件套:文档编辑器、幻灯片编辑…...
SQL labs靶场-SQL注入入门
靶场及环境配置参考 一,工具准备。 推荐下载火狐浏览器,并下载harkbar插件(v2)版本。hackbar使用教程在此不做过多描述。 补充:url栏内部信息会进行url编码。 二,SQL注入-less1。 1,判断传参…...
HarmonyOS应用开发者高级认证,Next版本发布后最新题库 - 单选题序号4
基础认证题库请移步:HarmonyOS应用开发者基础认证题库 注:有读者反馈,题库的代码块比较多,打开文章时会卡死。所以笔者将题库拆分,单选题20个为一组,多选题10个为一组,题库目录如下,…...
使用LSTM完成时间序列预测
c 在本教程中,我们将介绍一个简单的示例,旨在帮助初学者入门时间序列预测和 PyTorch 的使用。通过这个示例,你可以学习如何使用 LSTMCell 单元来处理时间序列数据。 我们将使用两个 LSTMCell 单元来学习从不同相位开始的正弦波信号。模型在…...
《数据结构:顺序实现二叉树》
文章目录 一、树1、树的结构与概念2、树相关术语 二、二叉树1、概念与结构2、满二叉树3、完全二叉树 三、顺序二叉树存储结构四、实现顺序结构二叉树1、堆的概念与结构2、堆的实现3、堆的排序 一、树 1、树的结构与概念 树是一种非线性的数据结构,它是由nÿ…...
【HarmonyOS】HarmonyOS NEXT学习日记:六、渲染控制、样式结构重用
【HarmonyOS】HarmonyOS NEXT学习日记:六、渲染控制、样式&结构重用 渲染控制包含了条件渲染和循环渲染,所谓条件渲染,即更具状态不同,选择性的渲染不同的组件。 而循环渲染则是用于列表之内的、多个重复元素组成的结构中。 …...
【防火墙】防火墙NAT、智能选路综合实验
实验拓扑 实验要求 7,办公区设备可以通过电信链路和移动链路上网(多对多的NAT,并且需要保留一个公网IP不能用来转换) 8,分公司设备可以通过总公司的移动链路和电信链路访问到Dmz区的http服务器 9,多出口环境基于带宽比例进行选路…...
VUE之---slot插槽
什么是插槽 slot 【插槽】, 是 Vue 的内容分发机制, 组件内部的模板引擎使用slot 元素作为承载分发内容的出口。slot 是子组件的一个模板标签元素, 而这一个标签元素是否显示, 以及怎么显示是由父组件决定的。 VUE中slot【插槽】…...
linux、windows、macos,命令终端清屏
文章目录 LinuxWindowsmacOS 在Linux、Windows和macOS的命令终端中,清屏的命令或方法各不相同。以下是针对这三种系统的清屏方法: Linux clear命令:这是最常用的清空终端屏幕的命令之一。在终端中输入clear命令后,屏幕上的所有内容…...
【RaspberryPi】树莓派Matlab/Simulink支持包安装与使用
官网支持与兼容性 Raspberry Pi Support from MATLAB - Hardware Support - MATLAB & Simulink Raspberry Pi Support from Simulink - Hardware Support - MATLAB & Simulink Matlab与树莓派兼容性 Simulink与树莓派兼容性 树莓派Matlab&Simulink RaspberryPi支…...
嵌入式人工智能(10-基于树莓派4B的DS1302实时时钟RTC)
1、实时时钟(Real Time Clock) RTC,全称为实时时钟(Real Time Clock),是一种能够提供实时时间信息的电子设备。RTC通常包括一个计时器和一个能够记录日期和时间的电池。它可以独立于主控芯片工作ÿ…...
C++ | Leetcode C++题解之第275题H指数II
题目: 题解: class Solution { public:int hIndex(vector<int>& citations) {int n citations.size();int left 0, right n - 1;while (left < right) {int mid left (right - left) / 2;if (citations[mid] > n - mid) {right m…...
编写DockerFile
将自己的项目或者环境通过Docker部署到服务器需要一下几个步骤: 打包项目或者环境 编写Dockerfile文件 运行Dockerfile文件,构建DockerImages镜像,将DockerImages存入DockerHub或者存入阿里云镜像仓库 服务器pull下DockerImages镜像&#…...
TCP并发服务器多线程
1.创建线程‐‐pthread_create int pthread_create( pthread_t *thread, // 线程 ID 无符号长整型 const pthread_attr_t *attr, // 线程属性, NULL void *(*start_routine)(void *), // 线程处理函数 void *arg); // 线程处理函数 参数: pthrea…...
技术速递|C# 13:探索最新的预览功能
作者:Kathleen Dollard 排版:Alan Wang C# 13 已初具雏形,其新特性侧重于灵活性、性能以及使您最喜欢的功能在日常中变得更容易使用。我们以公开的方式构建 C#,在今年的 Microsoft Build 大会上,我们会让您一睹 C# 13 …...
Python设计模式:巧用元类创建单例模式!
✨ 内容: 今天我们来探讨一个高级且实用的Python概念——元类(Metaclasses)。元类是创建类的类,它们可以用来控制类的行为。通过本次练习,我们将学习如何使用元类来实现单例模式,确保某个类在整个程序中只…...
构建自主可控的工业操作系统,筑牢我国工业安全堡垒
构建自主可控的工业操作系统,筑牢我国工业安全堡垒,鸿道(Intewell)操作系统为国家工业发展保驾护航。 7月19日,全球多地安装微软操作系统的电脑设备出现大规模宕机,导致“蓝屏”现象,严重影响了航空、铁路、医疗、金…...
WPF串口通讯程序
目录 一 设计原型 二 后台源码 一 设计原型 二 后台源码 using HardwareCommunications; using System.IO.Ports; using System.Windows;namespace PortTest {/// <summary>/// Interaction logic for MainWindow.xaml/// </summary>public partial class MainW…...
汽车技术智能化程度不断提升,线束可靠性如何设计?
随着汽车技术的高速发展,汽车自动化、智能化程度的逐步提高,人们对汽车的安全性、舒适性、娱乐性等要求也不断提高,加上汽车节能减排法规的不断严峻,整车电气设备不断增加,作为连接汽车各种电器设备“神经网络”的整车…...
实现Nginx的反向代理和负载均衡
一、反向代理和负载均衡简介 1.1、反向代理 反向代理(reverse proxy)指:以代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给Internet上请求连接的客户端。此时代理服务器对外就表现为一个反向代理服务器。 反向代…...
【算法】子集
难度:中等 题目: 给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的 子集(幂集)。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 示例 1: 输入:nums [1,…...
Web前端:HTML篇(一)
HTML简介: 超文本标记语言(英语:HyperText Markup Language,简称:HTML)是一种用于创建网页的标准标记语言。 您可以使用 HTML 来建立自己的 WEB 站点,HTML 运行在浏览器上,由浏览器…...
ActiViz中的选择点vtkWorldPointPicker
文章目录 1. vtkWorldPointPicker简介2. 类的位置和继承关系3. 选择机制4. 返回的信息5. 选择的条件和参数6. 与屏幕空间选择器的比较7. 性能特征8. 应用场景9. 与其他vtk选择器的集成10. 完整示例总结1. vtkWorldPointPicker简介 vtkWorldPointPicker是Visualization Toolkit…...
如何开启或者关闭 Windows 安全登录?
什么是安全登录 什么是 Windows 安全登录呢?安全登录是 Windows 附加的一个组件,它可以在用户需要登录的之前先将登录界面隐藏,只有当用户按下 CtrlAltDelete 之后才出现登录屏幕,这样可以防止那些模拟登录界面的程序获取密码信息…...