小达博客源码

This commit is contained in:
2022-11-18 15:29:59 +08:00
commit 3617bcfaf0
24 changed files with 3114 additions and 0 deletions
+273
View File
@@ -0,0 +1,273 @@
---
title: Docker
date: 2021-03-23 10:30:31
author: 文永达
top_img: https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/67239FBB-E15D-4F4F-8EE8-0F1C9F3C4E7C.jpeg
---
# Docker
---
Docker:海豚,身上背着一堆集装箱
场景:
传统的服务器 Docker
1G左右 几十兆几百兆
CentOS占CPU Docker CPU引擎占用低
1-2分钟 几秒
安装软件 安装方便
部署应用 部署应用,挂载,数据卷
多个应用放到一起 每个应用服务都是一个容器,相互隔离
一个独立的操作系统 必须依赖于操作系统,推荐使用Linux
## docker安装:
```shell
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
# 另一种方式
curl -sSL https://get.daocloud.io/docker | sh
# 如上述两种方式都不行
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 查看所有可安装版本
yum list docker-ce --showduplicates | sort -r
# 安装
yum install docker-ce-18.03.1.ce
```
1、镜像:image。一个镜像代表一个软件。如:redis镜像,mysql镜像,tomcat镜像。。
特点:只读
2、容器:container。一个镜像只要一启动,称之为启动了一个容器。
3、仓库:repository。存储docker中的镜像具体位置
远程仓库:在全球范围内有一个远程仓库
本地仓库:当前自己机器中下载的镜像存储位置
Docker配置阿里云镜像加速
https://www.cnblogs.com/LUA123/p/11401962.html
## 查看docker 信息
```shell
docker info
```
## 查看docker 镜像 image
```shell
docker images
```
## docker 安装镜像 image
MySQL 5.7
```shell
docker pull mysql:5.7
```
## docker 移除镜像 image
若已有镜像用于容器,请先将容器删除
```shell
docker rm -f <CONTAINER ID>
```
```shell
docker image rm hello-world
docker rmi hello-world
```
```shell
# 第一个8080是外部海豚上的 第二个8080是内部集装箱上的
docker run -p 8080:8080
```
-a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
-d: 后台运行容器,并返回容器 ID;
-i: 以交互模式运行容器,通常与 -t 同时使用;
-P: 随机端口映射,容器内部端口随机映射到主机的端口
-p: 指定端口映射,格式为:主机 (宿主) 端口:容器端口
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
--name="nginx-lb": 为容器指定一个名称;
--dns 8.8.8.8: 指定容器使用的 DNS 服务器,默认和宿主一致;
--dns-search example.com: 指定容器 DNS 搜索域名,默认和宿主一致;
-h "mars": 指定容器的 hostname;
-e username="ritchie": 设置环境变量;
--env-file=[]: 从指定文件读入环境变量;
--cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定 CPU 运行;
-m : 设置容器使用内存最大值;
--net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;
--link=[]: 添加链接到另一个容器;
--expose=[]: 开放一个端口或一组端口;
--volume , -v 绑定一个卷
docker启动容器
```shell
docker start <container id>
```
docker停止容器
```shell
docker stop <container id>
```
docker重启容器
```shell
docker restart <container id>
```
## docker启动MariaDB
拉去mariadb镜像
```shell
docker pull mariadb:10.2
```
```shell
docker images
docker run --name mariadb10.2 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mariadb:10.2
```
## dockerRedis主从复制集群搭建
拉取redis4.0.11镜像
```shell
docker pull redis:4.0.11
```
编辑redis.conf
redis-master.conf
```shell
vim /root/mysoftware/docker-file/redis/redis-master.conf
bind 0.0.0.0 #让redis可以被任意ip访问
daemonize yes #让redis服务后台运行
# 如需设定密码
requirepass masterpassword # 设定密码
```
redis-slave1.conf
```shell
vim /root/mysoftware/docker-file/redis/redis-slave1
bind 0.0.0.0 #让redis可以被任意ip访问
daemonize yes #让redis服务后台运行
# 如需设定密码
requirepass masterpassword # 设定密码
# 设置主机地址端口 redis5.0以上为 replicaof <master-IP> <master-port>
slaveof <master-IP> <master-port>
# 查看master ip
docker inspect <container id>
# 主库有密码必需要配置,<master-password>代表主库的访问密码
masterauth <master-password>
```
运行redis容器
redis-master
```shell
# 运行服务
docker run -it --name redis-master -v /usr/docker/redis/redis-master.conf:/usr/etc/redis/redis.conf -v /usr/docker/redis/data/:/data -d -p 35379:6379 redis:4.0.11 /bin/bash
# 进入容器
docker exec -it redis-master bash
# 加载配置
redis-server /usr/local/etc/redis/redis.conf
# 如报错
mkdir -p /usr/redis/bin
# 测试连接
redis-cli -a <master-password>
```
redis-slave1
```shell
# 运行服务
docker run -it --name redis-slave1 -v /usr/docker/redis/redis-slave1.conf:/usr/etc/redis/redis.conf -v /usr/docker/redis/data/:/data -d -p 35380:6379 redis:4.0.11 /bin/bash
# 进入容器
docker exec -it redis-slave1 bash
# 加载配置
redis-server /usr/local/etc/redis/redis.conf
# 如报错 Can't chdir to '/usr/redis/bin': No such file or directory
mkdir -p /usr/redis/bin
# 测试连接
redis-cli
# 查看主从信息
info Replication
# 密码认证
auth <slave-password>
```
## dockerRedis哨兵高可用集群搭建
## docker的镜像迁移到另一台服务器
```shell
# 找到想要移动的docker容器ID
dockerCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
58ac9237b040 redis:4.0.11 "docker-entrypoint.s…" 5 hours ago Up 2 hours 0.0.0.0:6380->6379/tcp redis-slave1
454bb484f90a redis:4.0.11 "docker-entrypoint.s…" 5 hours ago Up 2 hours 0.0.0.0:6379->6379/tcp redis-master
ps -a
# 提交变更,并且把容器保存成镜像,命名为redis-master
docker commit 454bb484f90a redis-master
# 把redis-master镜像保存成tar文件
docker save redis-master > /root/mysoftware/docker-file/redis/redis-master.tar
# 拷贝到新的机器,执行load命令
docker load < ./redis-master.tar
```
## 修改运行中的docker容器的端口映射和挂载目录
方法一:删除原有容器,重建新容器
参考以上移除容器,启动容器
方法二:修改配置文件,重启docker服务
容器配置文件路径:
/var/lib/docker/containers/[[hash_of_the_container]/hostconfig.json]
其中的hashofthecontainer是docker镜像的hash值,可以通过docker ps或者docker inspect containername查看。(CONTAINER ID就可以看出来)
可以到/var/lib/docker/containers目录下,ls -l
```json
{"Binds":["/usr/docker/redis/redis-slave2.conf:/usr/local/etc/redis/redis.conf"],"ContainerIDFile":"","LogConfig":{"Type":"json-file","Config":{}},"NetworkMode":"default","PortBindings":{"6379/tcp":[{"HostIp":"","HostPort":"6381"}]},"RestartPolicy":{"Name":"no","MaximumRetryCount":0},"AutoRemove":false,"VolumeDriver":"","VolumesFrom":null,"CapAdd":null,"CapDrop":null,"Dns":[],"DnsOptions":[],"DnsSearch":[],"ExtraHosts":null,"GroupAdd":null,"IpcMode":"shareable","Cgroup":"","Links":null,"OomScoreAdj":0,"PidMode":"","Privileged":false,"PublishAllPorts":false,"ReadonlyRootfs":false,"SecurityOpt":null,"UTSMode":"","UsernsMode":"","ShmSize":67108864,"Runtime":"runc","ConsoleSize":[0,0],"Isolation":"","CpuShares":0,"Memory":0,"NanoCpus":0,"CgroupParent":"","BlkioWeight":0,"BlkioWeightDevice":[],"BlkioDeviceReadBps":null,"BlkioDeviceWriteBps":null,"BlkioDeviceReadIOps":null,"BlkioDeviceWriteIOps":null,"CpuPeriod":0,"CpuQuota":0,"CpuRealtimePeriod":0,"CpuRealtimeRuntime":0,"CpusetCpus":"","CpusetMems":"","Devices":[],"DeviceCgroupRules":null,"DiskQuota":0,"KernelMemory":0,"MemoryReservation":0,"MemorySwap":0,"MemorySwappiness":null,"OomKillDisable":false,"PidsLimit":0,"Ulimits":null,"CpuCount":0,"CpuPercent":0,"IOMaximumIOps":0,"IOMaximumBandwidth":0}
```
重启docker服务,再启动容器服务就可以了。
```shell
systemctl restart docker
docker ps -a
docker start <container id>
```
## docker安装code-server
```shell
# 拉取镜像
docker pull codercom/code-server
# 创建宿主机目录
mkdir /usr/docker/codeserver
# 创建配置文件
vim /usr/docker/codeserver/config.yaml
bind-addr: 127.0.0.1:8080
auth: password
password: 123456
cert: false
# 创建并启动容器 # -u 表示以 root用户运行
docker run -d -u root -p 8088:8080 --name code-server -v /usr/docker/codeserver/config.yaml:/root/.config/code-server/config.yaml -v /usr/docker/codeserver:/home/code codercom/code-server
```
+28
View File
@@ -0,0 +1,28 @@
---
title: Hexo
date: 2022-11-18 10:30:31
author: 文永达
---
# Hexo
启动本地开发服务器
```shell
hexo server
# or
hexo s
```
清空本地缓存
```shell
hexo clean
```
发布到Git上
```shell
hexo g -d
```
+27
View File
@@ -0,0 +1,27 @@
---
title: Jenkins
date: 2022-11-09 10:30:31
author: 文永达
top_img: https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/B18FCBB3-67FD-48CC-B4F3-457BA145F17A.jpeg
---
# Jenkins
```powershell
# 删除文件夹
rmdir /q /s C:\Program" "Files\nginx-1.23.2\html\dist
# 复制文件夹到指定目录
xcopy /y /e /i C:\Users\Administrator\Documents\source\XiaoDaERP-Vben\dist C:\Program" "Files\nginx-1.23.2\html\dist
# 发送文件(文件夹)到Linux远程服务器上
pscp -r -l root -pw Wyd210213 C:\Users\Administrator\Documents\source\XiaoDaERP-Vben\dist 8.140.174.251:/usr/local/nginx/html
```
```shell
docker run -d -p 80:80 -p 443:443 --name nginxweb --privileged=true
-v /usr/local/nginx/html/:/usr/share/nginx/html
-v /usr/local/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
-v /usr/local/nginx/conf/conf.d:/etc/nginx/conf.d
-v /usr/local/nginx/logs:/var/log/nginx nginx
ps aux | grep "nginx: worker process" | awk '{print $1}'
```
+535
View File
@@ -0,0 +1,535 @@
---
title: Linux
author: 文永达
top_img: https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/00E0F0ED-9F1C-407A-9AA6-545649D919F4.jpeg
---
# Linux
---
## 简介
在linux系统中,没有盘符的概念。
一个盘。/根目录
没有图形化界面
通过指令操作
linux指令是可以传参数的。
在Linux系统下,万事万物皆文件。
## Linux的文件结构(19个)
bin:存放的是二进制的可以执行文件。(重点)
sbin:存放的是二进制的可以执行文件。super,只有root用户才能访问
etc:存放系统配置文件(重点)
usr:用来存放共享的系统资源
home:家目录(重点)
root:就是root用户的家目录
dev:存放设备文件
## Linux指令
ip addr(ip a):查看主机的ip地址
clear:清屏
cd:进入指定的目录
ls:列出当前目录下的所有文件及目录
ls -l:给ls指令传了一个参数l。等同于ll。列出当前目录下的所有文件及目录的详情。
ls bin:ls后可以接目录名,要么接绝对路径。
tab键:提示作用。自动补全。
cd (cd ~):代表回到家目录
pwd:查看当前所在的目录
方向键↑和↓:浏览历史指令
mkdir:创建目录
mkdir -p:创建多级目录
cp aa.txt init:复制粘贴。把aa.txt复制到init目录下
cp -r init spring:复制粘贴。把init目录以及包含的文件复制到spring目录下
mv aa.txt xiaoqiang.txt:重命名。把aa.txt重命名为xiaoqiang.txt。
mv bb.txt spring:移动。把bb.txt移动到spring目录。
mv -f spring aaaaa:在覆盖前不提示
mv -r aaaaa bbbbb:强行覆盖。前提是被覆盖的目录和覆盖的目录要结构相同。(慎用)
rm xiaoqiang.txt:删除xiaoqiang.txt
rm -f spring.xml:强行删除spring.xml,没有确认提示
rm -r init:递归删除init目录
rm -rf bbbbb:递归删除bbbbb并且没有确认提示(慎用)
rmdir aa:删除空目录aa(用的很少)
rm -rf *:删除所有的目录及文件(慎用)
cat:显示文本文件的内容(一部分)。.java,.py,.c++,.xml,.html,.js,.css
more:分页显示文本文件的内容。只能向下查看,不能向上翻页。
less:分页显示文本文件的内容。上下翻页。通过PgUp和PgDn进行上下翻页,↑和↓一行一行的查看。输入q退出查看。
top -n 10 xxxx:查看文本文件的前10行
tail -n 10 xxxx:查看文本文件的后10行
tail -f xxxx:实时监控文本文件的变化
Ctrl + c:几乎可以退出所有的操作
echo:打印输出一句话。也可以用作向文本文件内写入信息。会自动追加并换行。
### 压缩:
1、打包,把多个文件打成一个包。
2、压缩,把文件占用的大小进行压缩。
tar命令:用来进行压缩和解压缩的。
-c 建立一个压缩文件(打包)
-x 解开一个压缩文件(解包)
-z 是否需要使用gzip压缩
-v 压缩过程中是否显示文件日志
-f 使用的文件名
tar -cf:只打包,不压缩,不显示日志
tar -xf:解压文件,不显示日志
tar -cvf:只打包,不压缩,显示日志
tar -xvf:解压文件,显示日志。
tar -zcvf:打包压缩,显示日志
tar -zxvf:解压(最常用)
### 系统服务:
systemstl:操作系统服务。
status:查看某个服务的状态
stop:终止某个服务
start:启动某个服务
restart:重启某个服务
```shell
systemctl status mysqld
```
网络服务:network
防火墙服务:firewalld
Mysql:mysqld
systemctl status network
## 文件详情:(以home目录为例)
d:说明当前文件是一个目录(- 代表的是文件)
rwx:r,可读;w,可写;x,可执行。(代表当前文件的创建者的权限)
r-x:代表的是和文件创建者的同组的用户的权限
r-x:代表的是其他用户
2:链接数
root:创建者
root:创建者所在的组
6:文件占用空间的大小(字节)
Apr 11 2018:最后一次修改时间
home:文件名或目录名
## 进程管理
ps 查看前台进程
ps -aux 查看所有进程详细信息 UID 用户 PID 进程ID
ps -ef 查看所有进程详细信息 UID 用户 PID 进程ID PPID 父进程ID
父进程id为1 为系统进程
top 动态显示进程
ps -aux|grep network 查看所有进程详细信息,并搜索network进程
kill 根据PID,终止进程
kill -9 强制终止
## vi命令 编辑器
i 切换到编辑模式
ESC 切换到命令模式
:wq 保存并退出
:q 不保存退出
:w 保存
:q! 强制不保存退出
:wq! 强制保存退出
a 在光标后插入
A 在光标当前行的行尾插入
i 在光标前插入
I 在光标当前行的行头插入
:set nu 显示行号
:set nonu 取消显示行号
gg 到文本的第一行
G 到文本的最后一行
u 后退一步 相当于 Ctrl + z
Ctrl + r 前进一步
Shift + zz 保存退出 跟:wq一样
起始行号,结束行号 del 删除对应范围内的行
安装vim编辑器
```shell
yum install -y vim
```
## 配置网络
```shell
cd /etc/sysconfig/network-scripts
vi ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=08913b58-0bc2-42c5-8b59-6782e0029d7b
DEVICE=ens33
ONBOOT=yes
# 修改ONBOOT=yes
systemctl restart network
ip addr
```
## 软件安装
rpm 本地安装
yum centos安装软件 需要源
安装screenFetch
```shell
#使用wget 下载安装包
wget https://github.com/KittyKatt/screenFetch/archive/master.zip
#使用unzip解压,unzip需要安装
yum install unzip
unzip master.zip
#移动
mv screenFetch-master/screenfetch-dev /usr/bin/screenfetch
```
## 用户
who am i 查看当前用户
who --count 查看当前登录用户数量
exit 退出登录
groupadd 创建用户组
groupdel 删除用户组
useradd xiaoqiang -g user 创建一个用户xiaoqiang,并指定用户组user
passwd xiaoqiangf 给xiaoqiang用户指定密码
su 切换用户 从root切换到其他用户不需要输入密码 如果从其他用户切换到root用户,需要输入密码
### 权限管理
Linux 下文件有三种权限 r 读 w写 x可执行
---
```shell
chmod 755 file
```
## 安装MySQL
有些Linux会自带MariaDB数据库,所以需要先卸载
列出安装的MariaDB的包
```shell
rpm -qa | grep mariadb
```
得到查看到的包名
卸载包 后面加上包名
```shell
rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64
```
自此下载MariaDB已经完成了
切换到home目录下
```shell
cd /home/
```
安装 wget 并下载yum库
```shell
yum install wget -y
wget https://repo.mysql.com//mysql80-community-release-el7-1.noarch.rpm
rpm -Uvh mysql80-community-release-el7-1.noarch.rpm
cd /etc/yum.repos.d/
vim mysql-community.repo
```
选择要安装的MySQL版本
```shell
[mysql57-community]
name=MySQL 5.7 Community Server
baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/7/$basearch/
enabled=0 // 将这里的0改为1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
[mysql80-community]
name=MySQL 8.0 Community Server
baseurl=http://repo.mysql.com/yum/mysql-8.0-community/el/7/$basearch/
enabled=1 //将这里的1改为0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
```
enabled=0为禁用对应版本的YUM库,enabled=1为启用,默认8.0的配置为enabled=1,安装5.7的话,我们就把8.0的enabled=1修改为enabled=0,然后把5.7的enabled=0修改为enabled=1
安装MySQL并启动
```shell
yum install mysql-community-server
service mysqld start
```
第一步安装成功之后,然后启动MySQL
如果失败了,提示GPG
RPM 维护一个单独的密钥环,因为它是一个系统范围的应用程序,而用户的 GPG 公钥环是一个用户特定的文件。要将 MySQL 公钥导入 RPM 密钥环,首先获取密钥,然后使用 rpm --import 导入密钥
```shell
# centos
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
# Ubuntu:
wget -q -O - https://repo.mysql.com/RPM-GPG-KEY-mysql-2022 | apt-key add -
yum install mysql-community-server
```
查看MySQL初始密码
```shell
sudo grep 'temporary password' /var/log/mysqld.log
```
登录MySQL
```shell
mysql -u root -p
```
设置密码的验证强度等级
```shell
set global validate_password_policy=LOW;
```
设置密码长度为6位
```shell
set global validate_password_length=6;
```
修改MySQL初始密码
```shell
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
```
给root权限开启远程登录
```shell
use mysql;
select user,host from user;
update user set host = '%' where user = 'root';
flush privileges;
```
---
## 配置Java环境变量
将tar.gz格式的jdk解压后移动到/usr目录下
```shell
mv jdk1.8.0_301/ /usr/
```
编辑/etc目录下profile文件 G到最后一行
```shell
vim /etc/profile
export JAVA_HOME=/usr/jdk1.8.0_301
export PATH=$PATH:$JAVA_HOME/bin
```
:wq保存退出
重新加载配置文件
```shell
source /etc/profile
```
---
## CentOS7防火墙
放行特定端口
```shell
firewall-cmd --add-port=6379/tcp --permanent
```
重新加载防火墙
```shell
firewall-cmd --reload
```
查看防火墙开放的端口
```shell
firewall-cmd --list-all
```
指定作用域开发防火墙端口
```shell
firewall-cmd --zone=public --add-port=3306/tcp --permanent
# -zone 作用域
# -add-port 添加端口,格式为端口/协议
# -permanent 永久生效,没有此参数重启后失效
```
## 分配Swap
查看分区大小
```shell
free -h
```
使用dd命令创建一个swap分区
```shell
dd if=/dev/zero of=/home/swap bs=1024 count=4194304
```
count的值是:size(多少M)* 1024
格式化swap分区
```shell
mkswap /home/swap
```
把格式化后的文件分区设置为swap分区
```shell
swapon /home/swap
```
swap分区自动挂载
```shell
vim /etc/fstab
# G 在文件末尾加上
/home/swap swap swap default 0 0
```
关闭Swap
```shell
swapoff /home/swap
```
### 修改swap使用率
swappiness的值的大小对如何使用swap分区是有着很大的联系的。swappiness=0的时候表示最大限度使用物理内存,然后才是 swap空间,swappiness=100的时候表示积极的使用swap分区,并且把内存上的数据及时的搬运到swap空间里面。两个极端
查看swappiness
```shell
cat /proc/sys/vm/swappiness
```
修改swappiness值为60
```shell
sysctl vm.swappiness=60
```
但是这只是临时性的修改,还要做一步
```shell
vim /etc/sysctl.conf
# 编辑这行
vm.swappiness=60
```
## Windows Linux子系统
### WSL2
打开 Windows Terminal PowerShell
#### 安装
```powershell
wsl --install
```
微软官方文档 [安装 WSL | Microsoft Docs](https://docs.microsoft.com/zh-cn/windows/wsl/install)
默认安装Ubuntu 20.04 LTS版
更改默认安装的Linux发行版
```powershell
wsl --install -d <Distribution Name>
```
/mnt目录下是Windows系统的挂载盘,可直接访问Windows磁盘文件
#### 通过FinalShell连接WSL2
1. 需要先删除ssh,再安装ssh
```shell
apt-get remove --purge openssh-server #先删ssh
apt-get install openssh-server #再安装ssh
rm /etc/ssh/ssh_config
service ssh --full-restart #重启ssh服务
```
2. 修改配置文件
```shell
vim /etc/ssh/sshd_config
Port 6666 # 指定连接端口 6666
ListenAddress 0.0.0.0 # 指定连接的IP
PasswordAuthentication yes # 开启密码认证
PermitRootLogin yes # 开启root用户登录
```
3. 重启ssh(每次重启wsl都要执行该语句)
```shell
service ssh --full-restart
```
4. 重新生成host key
```shell
dpkg-reconfigure openssh-serve
```
FinalShell就可以连接WSL2了
## 安装Nginx
```shell
tar -zxvf nginx-1.21.4.tar.gz
cd nginx-1.21.4/
./configure
make
make install
```
+450
View File
@@ -0,0 +1,450 @@
---
title: Oracle
date: 2021-03-23 10:30:31
author: 文永达
---
# Oracle
## 1.1 安装Oracle 19c
### 1.1.1 Linux下安装
#### 1.1.1.1 rpm方式 `没成功`
从Oracle官网下载安装包 Linux x86-64 RPM
https://www.oracle.com/database/technologies/oracle-database-software-downloads.html
安装帮助文档
https://docs.oracle.com/en/database/oracle/oracle-database/19/ladbi/preface.html#GUID-071A6B76-11E3-4421-963E-41DA6F2EF07A
下载地址
https://yum.oracle.com/repo/OracleLinux/OL7/latest/x86_64/index.html,浏览器搜索-19c
安装,首先执行
```shell
yum install oracle-database-preinstall-19c-1.0-3.el7.x86_64.rpm
```
会提示缺少依赖
可以去RPM源网站下载
http://www.rpmfind.net/linux/rpm2html/search.php?query=compat-libcap1(x86-64)
安装
```shell
rpm -ivh compat-libcap1-1.10-7.el7.x86_64.rpm
```
再次执行
```shell
yum install oracle-database-preinstall-19c-1.0-3.el7.x86_64.rpm
```
安装数据库
```shell
yum install oracle-database-ee-19c-1.0-1.x86_64.rpm
```
如果发生错误
```shell
Exception java.lang.UnsatisfiedLinkError: /opt/oracle/product/19c/dbhome_1/oui/lib/linux64/liboraInstaller.so: libnsl.so.1: cannot open shared object file: No such file or directory occurred..
java.lang.UnsatisfiedLinkError: /opt/oracle/product/19c/dbhome_1/oui/lib/linux64/liboraInstaller.so: libnsl.so.1: cannot open shared object file: No such file or directory
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1941)
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1857)
at java.lang.Runtime.loadLibrary0(Runtime.java:870)
at java.lang.System.loadLibrary(System.java:1122)
at oracle.sysman.oii.oiip.osd.unix.OiipuUnixOps.loadNativeLib(OiipuUnixOps.java:388)
at oracle.sysman.oii.oiip.osd.unix.OiipuUnixOps.<clinit>(OiipuUnixOps.java:130)
at oracle.sysman.oii.oiip.oiipg.OiipgEnvironment.getEnv(OiipgEnvironment.java:201)
at oracle.sysman.oii.oiix.OiixIniPair.instantiateEnvVars(OiixIniPair.java:299)
at oracle.sysman.oii.oiix.OiixIniPair.updateValue(OiixIniPair.java:230)
at oracle.sysman.oii.oiix.OiixIniPair.<init>(OiixIniPair.java:148)
at oracle.sysman.oii.oiix.OiixIniFile.readFile(OiixIniFile.java:809)
at oracle.sysman.oii.oiix.OiixIniFile.readIniFile(OiixIniFile.java:978)
at oracle.sysman.oii.oiix.OiixIniFile.getProfileString(OiixIniFile.java:385)
at oracle.sysman.oii.oiix.OiixOraparam.getOraparamProfileString(OiixOraparam.java:338)
at oracle.sysman.oii.oiix.OiixOraparam.getOraparamProfileString(OiixOraparam.java:296)
at oracle.sysman.oii.oiix.OiixOraparam.usePrereqChecker(OiixOraparam.java:416)
at oracle.sysman.oii.oiic.OiicSessionContext.setVariables(OiicSessionContext.java:1325)
at oracle.sysman.oii.oiic.OiicBaseInventoryApp.execute(OiicBaseInventoryApp.java:771)
at oracle.sysman.oii.oiic.OiicBaseInventoryApp.main_helper(OiicBaseInventoryApp.java:690)
at oracle.sysman.oii.oiic.OiicDetachHome.main(OiicDetachHome.java:420)
'DetachHome' failed.
Exception in thread "main" java.lang.NullPointerException
at oracle.sysman.oii.oiic.OiicBaseInventoryApp.main_helper(OiicBaseInventoryApp.java:706)
at oracle.sysman.oii.oiic.OiicDetachHome.main(OiicDetachHome.java:420)
Exception java.lang.NoClassDefFoundError: Could not initialize class oracle.sysman.oii.oiip.osd.unix.OiipuUnixOps occurred..
java.lang.NoClassDefFoundError: Could not initialize class oracle.sysman.oii.oiip.osd.unix.OiipuUnixOps
at oracle.sysman.oii.oiip.oiipg.OiipgEnvironment.getEnv(OiipgEnvironment.java:201)
at oracle.sysman.oii.oiix.OiixIniPair.instantiateEnvVars(OiixIniPair.java:299)
at oracle.sysman.oii.oiix.OiixIniPair.updateValue(OiixIniPair.java:230)
at oracle.sysman.oii.oiix.OiixIniPair.<init>(OiixIniPair.java:148)
at oracle.sysman.oii.oiix.OiixIniFile.readFile(OiixIniFile.java:809)
at oracle.sysman.oii.oiix.OiixIniFile.readIniFile(OiixIniFile.java:978)
at oracle.sysman.oii.oiix.OiixIniFile.getProfileString(OiixIniFile.java:385)
at oracle.sysman.oii.oiix.OiixOraparam.getOraparamProfileString(OiixOraparam.java:338)
at oracle.sysman.oii.oiix.OiixOraparam.getOraparamProfileString(OiixOraparam.java:296)
at oracle.sysman.oii.oiix.OiixOraparam.usePrereqChecker(OiixOraparam.java:416)
at oracle.sysman.oii.oiic.OiicSessionContext.setVariables(OiicSessionContext.java:1325)
at oracle.sysman.oii.oiic.OiicBaseInventoryApp.execute(OiicBaseInventoryApp.java:771)
at oracle.sysman.oii.oiic.OiicBaseInventoryApp.main_helper(OiicBaseInventoryApp.java:690)
at oracle.sysman.oii.oiic.OiicAttachHome.main(OiicAttachHome.java:696)
'AttachHome' failed.
Exception in thread "main" java.lang.NullPointerException
at oracle.sysman.oii.oiic.OiicBaseInventoryApp.main_helper(OiicBaseInventoryApp.java:706)
at oracle.sysman.oii.oiic.OiicAttachHome.main(OiicAttachHome.java:696)
[SEVERE] An error occurred while registering the Oracle home. Verify logs in /var/log/oracle-database-ee-19c/results/oraInstall.log and /opt/oracle/oraInventory for more details and try again.
warning: %post(oracle-database-ee-19c-1.0-1.x86_64) scriptlet failed, exit status 1
```
解决办法
```shell
yum -y install /lib64/libnsl.so.1
```
再次执行安装
```shell
# 需要先删除 /opt/oracle/*
rm -rf /opt/oracle/*
# 再次执行安装 需要加上 --force
rpm -ivh oracle-database-ee-19c-1.0-1.x86_64.rpm --force
```
配置数据库
```shell
/etc/init.d/oracledb_ORCLCDB-19c configure
```
过程较长,等待即可
可能会JDK报错
```shell
yum install libnsl
```
配置号后设置当前用户下的环境变量
```shell
vi ~/.bashrc
# 追加oracle环境变量信息
export ORACLE_HOME=/opt/oracle/product/19c/dbhome_1
export ORACLE_SID=ORCLCDBexport
PATH=$ORACLE_HOME/bin:$PATH
# 保存退出,执行
source ~/.bashrc
```
验证安装是否正确
```shell
su oracle
sqlplus / as sysdba
# 提示
SQL*Plus: Release 19.0.0.0.0 - Production on Mon Oct 17 12:25:27 2022
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
Connected to an idle instance.
```
启动监听
![image-20221017123327552](image/Oracle/image-20221017123327552.png)
#### 1.1.1.2 Docker方式
安装Docker
```shell
sudo wget -qO- https://get.docker.com/ | bash
docker --version
systemctl start docker
systemctl status docker
systemctl enable docker
```
拉取镜像 `quay.io/maksymbilenko/oracle-12c`
```shell
docker pull quay.io/maksymbilenko/oracle-12c
```
如果有本地镜像则使用
```shell
docker build -t quay.io/maksymbilenko/oracle-12c .
```
构建容器
```shell
# 首先创建本地目录
mkdir /oracle/data
# 授予权限
chmod -R 777 /oracle/data
docker run --name o12c -d -p 8080:8080 -p 1521:1521 -v /oracle/data:/u01/app/oracle quay.io/maksymbilenko/oracle-12c
# 查看日志
docker logs -f # 字符串ID
```
![image-20221017145702216](image/Oracle/image-20221017145702216.png)
安装完成
数据库连接信息
```yaml
hostname: localhost
port: 1521
sid: xe
service name: xe
username: system
password: oracle
```
进入容器修改账号密码设置
```shell
# 查看所有容器信息
docker ps -a
docker exec -it [containerID] /bin/bash
# 切换成oracle用户
su oracle
# 进入sqlplus
$ORACLE_HOME/bin/sqlplus / as sysdba
SQL*Plus: Release 12.1.0.2.0 Production on Sun Aug 1 03:15:37 2021
Copyright (c) 1982, 2014, Oracle. All rights reserved.
Connected to:
Oracle Database 12c Standard Edition Release 12.1.0.2.0 - 64bit Production
# 设置密码有效期为无限制
SQL> ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;
Profile altered.
SQL> alter user SYSTEM account unlock;
User altered.
# 创建一个账号为act_test的用户密码设置为test
SQL> create user act_test identified by test;
User created.
# 为这个用户赋予管理员的权限
SQL> grant dba to act_test;
Grant succeeded.
# ctrl + p + q 退出容器(注意不要exit退出,防止容器直接关闭了)
```
## 2.1 Oracle SQL Developer
### 2.1.1 设置自动提示
工具栏 -> 工具 -> 首选项 -> 代码编辑器 -> 完成设置
![image-20221017111632399](image/Oracle/image-20221017111632399.png)
### 2.1.2 设置代码模板
工具栏 -> 工具 -> 首选项 -> 代码编辑器 -> 代码模板
![image-20221017112825105](image/Oracle/image-20221017112825105.png)
### 2.1.3 同时打开多个表
工具栏 -> 工具 -> 首选项 -> 数据库 ->对象查看器
![image-20221020141231505](image/Oracle/image-20221020141231505.png)
## 3.1 SQL PLUS
### 3.1.1 解决控制台输错命令删除
使用`Ctrl + backspace`代替`backspace`
### 3.1.2 登录
```shell
# 以oracle账号登录
su oracle
$ORACLE_HOME/bin/sqlplus / as sysdba
```
## 4.1 语法
### 4.1.1 新建表空间
```sql
CREATE TABLESPACE ACT_DEV
DATAFILE
'\oracle\data\oradata\xe\FILE_SPECIFICATION1.dbf' SIZE 52428800 AUTOEXTEND ON NEXT 52428800 MAXSIZE 2147483648
EXTENT MANAGEMENT LOCAL;
```
### 4.1.2 解除占用
```sql
select l.session_id,o.owner,o.object_name
from v$locked_object l,dba_objects o
where l.object_id=o.object_id;
SELECT sid, serial#, username, osuser FROM v$session where sid = sid;
alter system kill session 'sid,serial#';
```
### 4.1.3 修改表
```sql
-- 表重命名
ALTER TABLE BOOK
RENAME TO BIND_PHONE_NUMBER;
-- 添加表字段Column
ALTER TABLE BIND_PHONE_NUMBER
ADD (USERNAME VARCHAR2(20) );
-- 修改表字段Column名
ALTER TABLE BIND_PHONE_NUMBER RENAME COLUMN NAME TO APPNAME;
```
### 4.1.4 使用关键字做完表名,列名
使用""形式,如"INDEX"
## 5.1 内连接与外连接
### 5.1.1 内连接
合并具有同一列的两个以上的表的行,结果集中不包含一个表与另一个表不匹配的行
语法:
```sql
SELECT 字段列表
FROM A表 INNER JOIN B表
ON 关联条件
WHERE 条件;
```
类似于:
```sql
方式一
SELECT e.employee_id, e.last_name, e.department_id,
d.department_id, d.location_id
FROM employees e JOIN departments d
ON (e.department_id = d.department_id);
方式二:
SELECT employee_id,department_name
FROM employees e,departments d
WHERE e.`department_id` = d.department_id;
```
这种查询方式,它会把所有的符合where条件的字段查询出来。但是有这样一种情况,就是两张表的数据有的不存在某种关系。
缺点:如果我们想要把不满足条件的数据也查询出来,内连接就做不到。
于是引入外连接。
### 5.1.2 外连接
查询多表时一般要求中出现:查询所有的数据时,就一定会用到外连接。
两个表在连接过程中除了返回满足连接条件的行以外还返回左(或右)表中不满足条件的行,这种连接称为左(或右)外连接。没有匹配的行时,结果表中相应的列为空(NULL)。
#### 5.1.2.1 满外连接
`FULL JOIN`
`LEFT JOIN UNION RIGHT JOIN`
#### 5.1.2.2 左外连接
语法:
```sql
SELECT 字段列表
FROM A表 LEFT JOIN B表
ON 关联条件
WHERE 条件;
```
类似于:
```sql
SELECT e.last_name, e.department_id, d.department_name
FROM employees e
LEFT OUTER JOIN departments d
ON (e.department_id = d.department_id) ;
```
`employees`表中的数据会全部显示出来
#### 5.1.2.3 右外连接
语法:
```sql
SELECT 字段列表
FROM A表 RIGHT JOIN B表
ON 关联条件
WHERE 条件;
```
类似于:
```sql
SELECT e.last_name, e.department_id, d.department_name
FROM employees e
RIGHT OUTER JOIN departments d
ON (e.department_id = d.department_id) ;
```
`departments`表中的数据会全部显示出来
### 5.1.3 UNION的使用
·语法:
```sql
SELECT column,... FROM table1
UNION [ALL]
SELECT column,... FROM table2
```
UNION 操作符返回两个查询的结果集的并集,去除重复记录。
UNION ALL操作符返回两个查询的结果集的并集。对于两个结果集的重复部分,不去重。
+64
View File
@@ -0,0 +1,64 @@
---
title: Typora
date: 2022-11-18 14:48:31
author: 文永达
top_img: https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/B951AE18-D431-417F-B3FE-A382403FF21B.jpeg
---
# Typora
## 设置引用图片存储路径
![image-20221118150139161](image/Typora/image-20221118150139161.png)
## Typora添加右键新建Markdown文件
### 步骤
新建一个txt文本文件,写入:
```shell
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\.md]
@="Typora.md"
"Content Type"="text/markdown"
"PerceivedType"="text"
[HKEY_CLASSES_ROOT\.md\ShellNew]
"NullFile"=""
```
然后修改.txt后缀为.reg的注册表文件
然后双击运行
## 几点说明
这个方法要先安装`Typora`。如果不安装`Typora`,只是导入上述注册表,在很久以前是可以生效的,但自从某次`Windows`更新之后就失效了,之后的 Windows 要求`[HKEY__ROOT\.md]`项的`@ 值 xxx`必须对应于注册表项`[HKEY_CLASSES_ROOT\xxx]`,这里填写`Typora.md`,是因为`Typora `已经为我们生成了`[HKEY_CLASSES_ROOT\Typora.md]`,可以不用再重入导入,这个项的`@ 值`代表右键新建该类型的名称显示。如果是自定义其他的类型,则必须导入一遍,比如要添加`.py`类型,一个最简的注册表如下:
```shell
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\.py]
@="PythonFile"
[HKEY_CLASSES_ROOT\.py\ShellNew]
"NullFile"=""
[HKEY_CLASSES_ROOT\PythonFile]
@="Python 脚本"
```
## 可能遇到的问题
右键新建markdown文件以后,可能会发现文件有几十MB那么大。
解决方法:`win+R`打开“运行”输入`regedit`打开注册表,打开路径`\HKEY_CLASSES_ROOT\.md\ShellNew`
删除多余的文件(尤其是有一个什么Markdown File),只保留如下的两项。然后关闭注册表,即可修复bug
![img](https://www.likecs.com/default/index/img?u=aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTYwNDA5My8yMDIwMDIvMTYwNDA5My0yMDIwMDIyNTIzNDk1MDM5MS0xOTgzNTc3NDQxLnBuZw%3D%3D)
+1480
View File
File diff suppressed because it is too large Load Diff
+36
View File
@@ -0,0 +1,36 @@
---
title: Winform
date: 2022-11-18 14:48:31
author: 文永达
top_img: https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/B951AE18-D431-417F-B3FE-A382403FF21B.jpeg
---
# Winform
## 1 .Net Framework
### 1.1 控件属性
#### 1.1.1 Name
表示控件名
```c#
this.button1.Name = "button1";
```
#### 1.1.2 Text
表示控件文本显示
```c#
this.button.Text = "button1";
```
### 1.2 控件事件
#### 1.2.1 button按钮
##### 1.2.1.1 click
​
Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB