小达博客源码

This commit is contained in:
wenyongda 2022-11-18 15:29:59 +08:00
commit 3617bcfaf0
24 changed files with 3114 additions and 0 deletions

7
.github/dependabot.yml vendored Normal file
View File

@ -0,0 +1,7 @@
version: 2
updates:
- package-ecosystem: npm
directory: "/"
schedule:
interval: daily
open-pull-requests-limit: 20

10
.gitignore vendored Normal file
View File

@ -0,0 +1,10 @@
.DS_Store
Thumbs.db
db.json
*.log
node_modules/
public/
.deploy*/
_multiconfig.yml
package-lock.json
yarn.lock

47
_config.butterfly.yml Normal file
View File

@ -0,0 +1,47 @@
canvas_fluttering_ribbon:
enable: true
mobile: true # false 手機端不顯示 true 手機端顯示
# # 點擊出現愛心
# click_heart:
# enable: true
# mobile: false
fireworks:
enable: true
zIndex: -1 # -1 or 9999
mobile: false
# 美化頁面顯示
beautify:
enable: true
field: site # site/post
title-prefix-icon: '\f0c1'
title-prefix-icon-color: "#F47466"
# 加載動畫 Loading Animation
preloader: true
# enable: false
# source
# 1. fullpage-loading
# 2. pace (progress bar)
# source: 1
# pace theme (see https://codebyzach.github.io/pace/)
# pace_css_url:
# 图片格式 background: url(http://xxxxxx.com/xxx.jpg)
# 顔色 background: '#49B202'
# 留空 显示白色
background: '#efefef'
# background: url(https://i.loli.net/2019/09/09/5oDRkWVKctx2b6A.png)
highlight_theme: mac light
highlight_copy: true
highlight_lang: true # show the code language 是否显示代码块语言
highlight_shrink: false #true代码框不展开需点击 '>' 打开 false展开 none不显示'>'按钮,代码块展开
code_word_wrap: true
index_img: https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/BBC19066-E176-47C2-9D22-48C81EE5DF6B.jpeg
archive_img: https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/67239FBB-E15D-4F4F-8EE8-0F1C9F3C4E7C.jpeg
# Footer设置
since: 2022
footer_custom_text: Hi, welcome to my Xiaoda blog!
# footer是否显示图片背景(与top_img一致)
footer_bg: true

0
_config.landscape.yml Normal file
View File

111
_config.yml Normal file
View File

@ -0,0 +1,111 @@
# Hexo Configuration
## Docs: https://hexo.io/docs/configuration.html
## Source: https://github.com/hexojs/hexo/
# Site
title: Xiaoda的博客
#subtitle: 'XiaodaBlog'
description: '欢迎访问小达的博客!'
keywords: 编程
author: Wen Yongda
language: zh-CN
timezone: 'Asia/Shanghai'
# URL
## Set your site url here. For example, if you use GitHub Page, set url as 'https://username.github.io/project'
url: http://example.com
permalink: :year/:month/:day/:title/
permalink_defaults:
pretty_urls:
trailing_index: true # Set to false to remove trailing 'index.html' from permalinks
trailing_html: true # Set to false to remove trailing '.html' from permalinks
# Directory
source_dir: source
public_dir: public
tag_dir: tags
archive_dir: archives
category_dir: categories
code_dir: downloads/code
i18n_dir: :lang
skip_render:
# Writing
new_post_name: :title.md # File name of new posts
default_layout: post
titlecase: false # Transform title into titlecase
external_link:
enable: true # Open external links in new tab
field: site # Apply to the whole site
exclude: ''
filename_case: 0
render_drafts: false
post_asset_folder: true
marked:
prependRoot: true
postAsset: true
relative_link: false
future: true
highlight:
enable: true
line_number: false
auto_detect: false
tab_replace:
# wrap: true
hljs: true
prismjs:
enable: false
preprocess: true
line_number: false
tab_replace: ''
# Home page setting
# path: Root path for your blogs index page. (default = '')
# per_page: Posts displayed per page. (0 = disable pagination)
# order_by: Posts order. (Order by date descending by default)
index_generator:
path: ''
per_page: 10
order_by: -date
# Category & Tag
default_category: uncategorized
category_map:
tag_map:
# Metadata elements
## https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meta
meta_generator: true
# Date / Time format
## Hexo uses Moment.js to parse and display date
## You can customize the date format as defined in
## http://momentjs.com/docs/#/displaying/format/
date_format: YYYY-MM-DD
time_format: HH:mm:ss
## updated_option supports 'mtime', 'date', 'empty'
updated_option: 'mtime'
# Pagination
## Set per_page to 0 to disable pagination
per_page: 10
pagination_dir: page
# Include / Exclude file(s)
## include:/exclude: options only apply to the 'source/' folder
include:
exclude:
ignore:
# Extensions
## Plugins: https://hexo.io/plugins/
## Themes: https://hexo.io/themes/
# theme: landscape
theme: butterfly
# Deployment
## Docs: https://hexo.io/docs/one-command-deployment
deploy:
type: 'git'
repo: https://gitee.com/wenyongda/xiaoda-blog.git
branch: master

33
package.json Normal file
View File

@ -0,0 +1,33 @@
{
"name": "hexo-site",
"version": "0.0.0",
"private": true,
"scripts": {
"build": "hexo generate",
"clean": "hexo clean",
"deploy": "hexo deploy",
"server": "hexo server"
},
"hexo": {
"version": "6.3.0"
},
"dependencies": {
"cheerio": "^0.22.0",
"hexo": "^6.3.0",
"hexo-asset-image": "^1.0.0",
"hexo-deployer-git": "^3.0.0",
"hexo-generator-archive": "^2.0.0",
"hexo-generator-category": "^2.0.0",
"hexo-generator-index": "^3.0.0",
"hexo-generator-json-content": "^4.2.3",
"hexo-generator-tag": "^2.0.0",
"hexo-renderer-ejs": "^2.0.0",
"hexo-renderer-marked": "^6.0.0",
"hexo-renderer-pug": "^3.0.0",
"hexo-renderer-stylus": "^2.1.0",
"hexo-server": "^3.0.0",
"hexo-theme-landscape": "^0.0.3",
"hexo-theme-volantis": "^5.7.6",
"save": "^2.9.0"
}
}

4
scaffolds/draft.md Normal file
View File

@ -0,0 +1,4 @@
---
title: {{ title }}
tags:
---

4
scaffolds/page.md Normal file
View File

@ -0,0 +1,4 @@
---
title: {{ title }}
date: {{ date }}
---

5
scaffolds/post.md Normal file
View File

@ -0,0 +1,5 @@
---
title: {{ title }}
date: {{ date }}
tags:
---

273
source/_posts/Docker.md Normal file
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
source/_posts/Hexo.md Normal file
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
source/_posts/Jenkins.md Normal file
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
source/_posts/Linux.md Normal file
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 addrip a查看主机的ip地址
clear清屏
cd进入指定的目录
ls列出当前目录下的所有文件及目录
ls -l给ls指令传了一个参数l。等同于ll。列出当前目录下的所有文件及目录的详情。
ls binls后可以接目录名要么接绝对路径。
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
Mysqlmysqld
systemctl status network
## 文件详情以home目录为例
d说明当前文件是一个目录- 代表的是文件)
rwxr可读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空间swappiness100的时候表示积极的使用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
source/_posts/Oracle.md Normal file
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
source/_posts/Typora.md Normal file
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
source/_posts/Vue.md Normal file

File diff suppressed because it is too large Load Diff

36
source/_posts/Winform.md Normal file
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

0
themes/.gitkeep Normal file
View File