2022年11月27日星期日

前端 CDNJS 库及 Google Fonts、Ajax 和 Gravatar 国内加速服务

1、CDNJS 开源 JS 库

采用的方法是每天定时同步 CDNJS 的 Github

所有的 JS/CSS 库可以在这儿找到您需要的链接

https://cdnjs.loli.net/ajax/libs/

如果您使用 cdnjs.com 只需要替换 cdnjs.cloudflare.com 为 cdnjs.loli.net 即可,如

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>

替换成

<script src="https://cdnjs.loli.net/ajax/libs/jquery/3.2.1/jquery.min.js"></script>

CDNJS 的 API 开发文档请摸这里

2、Google Fonts

我们采用的方法是万能的 Nginx 反代 + 关键词替换

使用的时候,您只需要替换 fonts.googleapis.com 为 fonts.loli.net 即可,如

<link href="https://fonts.googleapis.com/css?family=Open+Sans" rel="stylesheet">

替换成

<link href='https://fonts.loli.net/css?family=Open+Sans' rel='stylesheet'>

如果需要 Material icons ,把

<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">

替换成

<link href="https://fonts.loli.net/icon?family=Material+Icons" rel="stylesheet">

如果需要 Early Access,把

@import url(https://fonts.googleapis.com/earlyaccess/notosanskannada.css);

替换成

@import url(https://fonts.loli.net/earlyaccess/notosanskannada.css);

如果需要下载单个字体,您只需要把 fonts.gstatic.com 替换成 gstatic.loli.net 或 themes.googleusercontent.com 替换成 themes.loli.net 即可

比如

https://fonts.gstatic.com/s/opensans/v14/K88pR3goAWT7BTt32Z01mxJtnKITppOI_IvcXXDNrsc.woff2

替换成

https://gstatic.loli.net/s/opensans/v14/K88pR3goAWT7BTt32Z01mxJtnKITppOI_IvcXXDNrsc.woff2

或者

https://themes.googleusercontent.com/static/fonts/anonymouspro/v3/Zhfjj_gat3waL4JSju74E-V_5zh5b-_HiooIRUBwn1A.ttf

替换成

https://themes.loli.net/static/fonts/anonymouspro/v3/Zhfjj_gat3waL4JSju74E-V_5zh5b-_HiooIRUBwn1A.ttf

Google Fonts 的 API 文档请摸这里

3、Google 前端公共库

方法同上,直接替换 ajax.googleapis.com 为 ajax.loli.net 即可,如

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>

替换成

<script type="text/javascript" src="https://ajax.loli.net/ajax/libs/jquery/3.2.1/jquery.min.js"></script>

Google 前端库 API 开发文档摸这儿

4、Gravatar 头像

方法还是同上,直接替换 *.gravatar.com 为 gravatar.loli.net 即可,如

https://secure.gravatar.com/avatar/8406d089bc81b664a2610b8d214c1428

替换成

https://gravatar.loli.net/avatar/8406d089bc81b664a2610b8d214c1428

5、赞助商

国内外 CDN, GeoDNS、域名、SSL 证书等基础服务均由 Riven Cloud 赞助

6、加速域名列表

所有国内加速服务的域名列表如下,只需要修改程序里的原域名即可

原域名加速域名制作方法
cdnjs.cloudflare.comcdnjs.loli.net每日同步 Github
ajax.googleapis.comajax.loli.netNginx 反代
fonts.googleapis.comfonts.loli.netNginx 反代
fonts.gstatic.comgstatic.loli.netNginx 反代
themes.googleusercontent.comthemes.loli.netNginx 反代
secure.gravatar.comgravatar.loli.netNginx 反代

注意: 个别国内的网络环境可能无法使用本服务,请自行检查。

Debian 11 自动更新系统

本文将指导如何设置 Debian 11 下无人值守自动更新系统。

准备工作

除非你是物理服务器,以及没有用过奇奇怪怪定制或修改的内核的 KVM 构架的 VPS 和云主机,否则升级系统更新内核是有一定机率导致 Grub 加载失败的,切记备份重要数据!

再强调一遍,一定要备份重要数据!

以下操作需要在 root 用户下完成,请使用 sudo -i 或 su root 切换到 root 用户进行操作。

安装必要软件

首先需要安装 unattended-upgrades 和 apt-listchanges 包:
apt update
apt install unattended-upgrades apt-listchanges -y

默认情况下 unattended-upgrades 服务会自动启动并生效:

root@debian ~ # systemctl status unattended-upgrades
● unattended-upgrades.service - Unattended Upgrades Shutdown
Loaded: loaded (/lib/systemd/system/unattended-upgrades.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2022-05-03 09:50:36 UTC; 1 months 13 days ago
Docs: man:unattended-upgrade(8)
Main PID: 697 (unattended-upgr)
Tasks: 2 (limit: 1059)
Memory: 8.5M
CPU: 69ms
CGroup: /system.slice/unattended-upgrades.service
└─697 /usr/bin/python3 /usr/share/unattended-upgrades/unattended-upgrade-shutdown --wait-for-signal

如果没有生效可以执行 systemctl enable --now unattended-upgrades 让其生效并开机自动启动。

配置 50unattended-upgrades 文件

我们直接编辑 /etc/apt/apt.conf.d/50unattended-upgrades 文件并输入以下内容:

cat > /etc/apt/apt.conf.d/50unattended-upgrades << EOF
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";
APT::Periodic::Verbose "1";
APT::Periodic::AutocleanInterval "7";

Unattended-Upgrade::Mail "root";

Unattended-Upgrade::Origins-Pattern {
"origin=Debian,codename=\${distro_codename},label=Debian";
"origin=Debian,codename=\${distro_codename},label=Debian-Security";
"origin=Debian,codename=\${distro_codename}-security,label=Debian-Security";
};

Unattended-Upgrade::Package-Blacklist {
};

Unattended-Upgrade::Automatic-Reboot "false";
EOF

然后重启服务:

systemctl restart unattended-upgrades

上述配置中, APT::Periodic::Update-Package-Lists "1"; 和 APT::Periodic::Unattended-Upgrade "1"; 代表打开了自动更新,如果设置 0 则不会自动更新。

APT::Periodic::AutocleanInterval "7"; 这个配置代表残留的无用依赖包保留 7 天,7 天后自动清理。

Unattended-Upgrade::Origins-Pattern 代表需要更新的 apt 源,我们仅更新包含 debian 和 debian-security 的仓库,如果您还需要更新某些第三方 apt 源安装软件,也可以加入自定义 origin 比如:

"origin=PowerDNS";

至于如何获取 origin,可以直接查看这个软件仓库的 Release 文件,比如 PowerDNS 仓库的这个 Release

root@debian ~ # curl -s https://repo.powerdns.com/debian/dists/bullseye-auth-master/Release | grep Origin
Origin: PowerDNS

Unattended-Upgrade::Package-Blacklist 是黑名单,可以把不需要自动更新的软件加进去,比如:

Unattended-Upgrade::Package-Blacklist {
// 不自动更新所有 linux- 开头的包
"linux-";
// 不自动更新 Apache 2
"apache2";
// 也支持正则,这个规则不更新所有包含 xen,xenstore 以及 libxen 开头的包,比如 xen-system-amd64, xen-utils-4.1, xenstore-utils 和 libxenstore3.0
"(lib)?xen(store)?";
};

APT::Periodic::Verbose "1"; 默认情况下这个设置是 0,代表不发送任何报告,1 代表进度报告。

Unattended-Upgrade::Mail "root"; 则是发送邮件给 root 用户,可以根据需求自定义。

Unattended-Upgrade::Automatic-Reboot "false"; 则是不自动重启,特么服务器没事重启干嘛……

测试配置

我们可以运行这个命令测试规则是否正确:

unattended-upgrades --dry-run --debug

如果没有报错即代表没问题,这样我们就配置好了 Debian 的无人值守自动更新,再也不用担心出安全漏洞无法及时更新系统咯。

需要查看日志可以使用 journalctl -u apt-daily.service | tail 命令:

root@debian ~ # journalctl -u apt-daily.service | tail
Jun 18 08:06:23 debian apt.systemd.daily[510126]: verbose level 1
Jun 18 08:06:26 debian apt.systemd.daily[510126]: download updated metadata (success).
Jun 18 08:06:26 debian apt.systemd.daily[510126]: download upgradable (not run)
Jun 18 08:06:28 debian apt.systemd.daily[510126]: unattended-upgrade -d (success)
Jun 18 08:06:28 debian systemd[1]: apt-daily.service: Succeeded.
Jun 18 08:06:28 debian systemd[1]: Finished Daily apt download activities.

我们看到 download updated metadata (success). 和 unattended-upgrade -d (success) 即为成功。

浏览器插件推荐

浏览器插件推荐

SmartProxy

SmartProxy是基于WebExtensions/Chrome Extensions技术的浏览器扩展。 将根据可自定义的模式自动为您访问的网站启用/禁用代理。使用智能代理,无需手动更改代理并将其打开和关闭。当访问该特定网站时,SmartProxy 将采取行动,而无需您执行任何操作。
为Edge安装 Edge Extension    ;  

为Chrome安装  Chrome Extension 安装 

为Firefox 桌面安装  Firefox Extension 安装 ; 为Firefox 安卓安装  Firefox Android Extension 安装

在线规则订阅:

官方的gfwlist在这里


      混淆模式:Base64
      格式:AutoProxy/GFWList

本地排除规则列表:

localhost;127.*;10.*;172.16.*;172.17.*;172.18.*;172.19.*;172.20.*;172.21.*;172.22.*;172.23.*;172.24.*;172.25.*;172.26.*;172.27.*;172.28.*;172.29.*;172.30.*;172.31.*;192.168.*

窗口切换快捷键

 “Alt+Tab”键按顺序切换窗口:我们首先按住Alt键,不要松开,然后按Tab键,第一次按的时候会切换到当前窗口的下一个窗口,


如何利用快捷键切换窗口

如果此时我们还没松开Alt键,那么以后每次按Tab键都会按顺序往下切换一个窗口,直到我们松开Alt键,就会打开我们当前选择的窗口。


如何利用快捷键切换窗口

“Shift+Alt+Tab”键逆序切换窗口:和上一种方法不一样的是,我们每次需要将Alt键换成“Shift+Alt”键,


如何利用快捷键切换窗口

最后这样做会使得切换顺序与上面相反。


如何利用快捷键切换窗口

“Alt+Esc”键按顺序切换窗口:我们每按一次“Alt+Esc”键,都会在任务栏上使窗口切换到当前窗口的下一个窗口,


如何利用快捷键切换窗口

但如果这个窗口之前已经被我们最小化了,那么它现在也只能是最小化的状态,如果我们需要打开该窗口,按回车键即可。

2022年11月26日星期六

编译tank云盘软件

前端项目打包

apt install git

git  clone  https://github.com/eyebluecn/tank-front.git

安装依赖项


apt install npm

npm install --legacy-peer-deps

执行打包命令


npm run build

通过前面三步可以在~/build/html文件夹下得到打包后的静态文件,将html目录下的所有文件拷贝到后端项目的build/html文件夹下。


后端项目打包

apt install git

git  clone https://github.com/eyebluecn/tank

安装Golang,


apt install golang

配置环境变量GOPATH (因为使用go module,所以对GOPATH路径没有要求)

vim /root/.bashrc

末尾加入


export GOPATH=$HOME/go

export PATH=$PATH:$GOPATH/bin

打包


windows平台双击运行 tank/build/pack/build.bat,成功之后可在tank/dist下看到tank-x.x.x文件夹,该文件夹即为最终安装包。


linux平台运行如下命令:


cd tank/build/pack/

./build.sh

成功之后可在tank/tmp下看到tank-x.x.x.linux-xxx.tar.gz


利用得到的安装包即可参考安装一节进行安装。


提示:

如果你在安装依赖时,发现速度太慢,那么可以尝试修改脚本中的GOPROXY,常用的GOPROXY值有:

https://athens.azurefd.net

https://goproxy.io

https://goproxy.cn


官方文档

https://tank-doc.eyeblue.cn/

https://github.com/eyebluecn/tank

apt install git
git clone https://github.com/eyebluecn/tank-front.git
安装依赖项

apt install npm
npm install --legacy-peer-deps
执行打包命令

npm run build
通过前面三步可以在~/build/html文件夹下得到打包后的静态文件,将html目录下的所有文件拷贝到后端项目的build/html文件夹下。

后端项目打包
apt install git
git clone https://github.com/eyebluecn/tank
安装Golang,

apt install golang
配置环境变量GOPATH (因为使用go module,所以对GOPATH路径没有要求)
vim /root/.bashrc
末尾加入

export GOPATH=$HOME/go
export PATH=$PATH:$GOPATH/bin
打包

windows平台双击运行 tank/build/pack/build.bat,成功之后可在tank/dist下看到tank-x.x.x文件夹,该文件夹即为最终安装包。

linux平台运行如下命令:

cd tank/build/pack/
./build.sh
成功之后可在tank/tmp下看到tank-x.x.x.linux-xxx.tar.gz

利用得到的安装包即可参考安装一节进行安装。

提示:
如果你在安装依赖时,发现速度太慢,那么可以尝试修改脚本中的GOPROXY,常用的GOPROXY值有:
https://athens.azurefd.net
https://goproxy.io
https://goproxy.cn

官方文档
https://tank-doc.eyeblue.cn/
https://github.com/eyebluecn/tank

2022年11月14日星期一

MySQL数据库数据导出

数据库的安装: 安装mariadb数据库

数据库其他操作:

一、导出命令

  1. 导出所有数据库:
mysqldump -u [数据库用户名] -p -A>[备份文件的保存路径]
  1. 导出数据和数据结构:
mysqldump -u [数据库用户名] -p [要备份的数据库名称]>[备份文件的保存路径]
mysqldump -u root -p test>d:\test.sql
mysql -hlocalhost -u root -p databasename > databasename.sql;

注意:此备份只备份数据和数据结构,没有备份存储过程和触发器

  1. 只导出数据不导出数据结构:
mysqldump -u [数据库用户名] -p -t [要备份的数据库名称]>[备份文件的保存路径]
  1. 导出数据库结构(不包括数据,只有创建数据表语句):
mysql -hlocalhost -u root -p databasename -d databaseename > databasename.sql
  1. 导出数据库中的Events
mysqldump -u [数据库用户名] -p -E [数据库用户名]>[备份文件的保存路径]
  1. 导出数据库中的存储过程和函数
mysqldump -u [数据库用户名] -p -R [数据库用户名]>[备份文件的保存路径]
  1. 附件继续补充

二、操作步骤:

  • 进入MySQL目录下的bin文件夹:cd MySQL中到bin文件夹的目录
  • 导出数据库:mysqldump -u 用户名 -p 数据库名 > 导出的文件名
  • 会看到文件news.sql自动生成到bin文件下

数据库数据导入

  1. 将SQL脚本导入执行
mysql -u用户名 -p 数据库名 < 数据库名.sql
mysql -uabc_f -p abc < abc.sql
  1. 直接拷贝
  • 2.1 解压
    在临时目录中解压
cd /tmp
tar zxf mydb.tar.gz
  • 2.2 拷贝
    将解压后的数据库文件拷贝到相关目录
cd mydb/
cp * /var/lib/mysql/mydb/
  • 2.3 将拷贝过去的文件的属主改为mysql:mysql,权限改为660
chown mysql:mysql /var/lib/mysql/mydb/*
chmod 660 /var/lib/mysql/mydb/*

操作步骤:

  • 在命令窗口输入mysql -hlocalhost -u root -p,
  • 接着输入show databases;
  • 接着输入:use db;
  • 然后执行source D:\db.sql(sql文件路径根据自己的实际情况)即可成功导入sql文件。

MySQL数据库备份和还原

  1. 备份MySQL数据库的命令
mysqldump -hhostname -uusername -ppassword databasename > backupfile.sql
  1. 备份MySQL数据库为带删除表的格式备份MySQL数据库为带删除表的格式,能够让该备份覆盖已有数据库而不需要手动删除原有数据库。
mysqldump ---add-drop-table -uusername -ppassword databasename > backupfile.sql
  1. 直接将MySQL数据库压缩备份
mysqldump -hhostname -uusername -ppassword databasename | gzip > backupfile.sql.gz
  1. 备份MySQL数据库某个(些)表
mysqldump -hhostname -uusername -ppassword databasename specific_table1 specific_table2 > backupfile.sql
  1. 同时备份多个MySQL数据库
mysqldump -hhostname -uusername -ppassword --databases databasename1 databasename2 databasename3 > multibackupfile.sql
  1. 仅仅备份数据库结构
mysqldump --no-data --databases databasename1 databasename2 databasename3 > structurebackupfile.sql
  1. 备份服务器上所有数据库
mysqldump --all-databases  allbackupfile.sql
  1. 还原MySQL数据库的命令
mysql -hhostname -uusername -ppassword databasename < backupfile.sql
  1. 还原压缩的MySQL数据库
gunzip < backupfile.sql.gz | mysql -uusername -ppassword databasename
  1. 将数据库转移到新服务器
mysqldump \-uusername \-ppassword databasename \| mysql \--host=*.*.*.\* \-C databasename

压缩备份

  1. 备份并用gzip压缩:
mysqldump < mysqldump options> | gzip > outputfile.sql.gz
  1. 从gzip备份恢复:
gunzip < outputfile.sql.gz | mysql < mysql options>
  1. 备份并用bzip压缩:
mysqldump < mysqldump options> | bzip2 > outputfile.sql.bz2
  1. 从bzip2备份恢复:
bunzip2 < outputfile.sql.bz2 | mysql < mysql options>

附件

1、导出所有库

mysqldump -uusername -ppassword --all-databases > all.sql

2、导入所有库

mysql>source all.sql;

3、导出某些库

mysqldump -uusername -ppassword --databases db1 db2 > db1db2.sql

4、导入某些库

mysql>source db1db2.sql;

5、导入某个库

mysql -uusername -ppassword db1 < db1.sql;
mysql>source db1.sql;

6、导出某些数据表

mysqldump -uusername -ppassword db1 table1 table2 > tb1tb2.sql

7、导入某些数据表

mysql -uusername -ppassword db1 < tb1tb2.sql
mysql>
user db1;
source tb1tb2.sql;

8、mysqldump字符集设置

mysqldump -uusername -ppassword --default-character-set=gb2312 db1 table1 > tb1.sql