Compare commits

..

63 Commits

Author SHA1 Message Date
dichgrem
14a54b2f7b clean:history 2025-11-21 19:20:24 +08:00
dichgrem
845850871a style:add_highlight 2025-11-21 18:49:55 +08:00
dichgrem
f59ce84988 clean:backup 2025-11-21 14:05:49 +08:00
dichgrem
d80a243878 add:linux_android 2025-11-20 14:18:37 +08:00
dichgrem
9d0fc8768a update:lazyvim 2025-11-20 12:01:52 +08:00
dichgrem
08cebea624 update:stm32 2025-11-20 11:57:24 +08:00
dichgrem
171d867f21 add:linux_0 2025-11-17 18:51:43 +08:00
dichgrem
1f325ce9a3 update:stm32 2025-11-17 16:30:44 +08:00
dichgrem
c5ff247d7e update:stm32 2025-11-15 19:33:11 +08:00
dichgrem
7ba1088bc2 update:py 2025-11-13 14:37:35 +08:00
dichgrem
0fe644e4b7 update:git 2025-11-10 10:37:22 +08:00
dichgrem
faf43c3e1c update:git 2025-11-06 20:24:00 +08:00
dichgrem
4f48f01b73 chore:backup 2025-11-02 16:09:14 +08:00
dichgrem
d532bb0513 update:openwrt 2025-11-01 10:42:24 +08:00
dichgrem
f8247b7b65 add:mirror_workflow 2025-10-31 10:48:44 +08:00
dichgrem
b8bc69f0cb add:stm32 2025-10-29 15:20:26 +08:00
dichgrem
1be2f70fd6 update:win_auto 2025-10-29 14:57:32 +08:00
dichgrem
22e848ef8b update:docker 2025-10-24 21:53:06 +08:00
dichgrem
01cbcbf9ee update:win_4 2025-10-16 12:30:13 +08:00
dichgrem
63ea6e613b remove:gpg_key 2025-10-15 20:19:15 +08:00
dichgrem
290570c778 add:linux_1 2025-10-15 20:08:49 +08:00
dichgrem
5899eff867 update:op 2025-10-05 19:30:56 +08:00
dichgrem
8e2f579ed7 update:win_5_py 2025-09-27 14:40:07 +08:00
dichgrem
b88b56879d update:virtual 2025-09-16 20:21:11 +08:00
dichgrem
981ac7358a add:virtual 2025-09-11 14:40:02 +08:00
dichgrem
fa8f570549 update:windows-4-auto 2025-09-10 11:48:56 +08:00
dichgrem
baeda9f1f2 update:windows-1 2025-09-02 11:51:37 +08:00
dichgrem
9fad7502a3 update:android-tv 2025-08-29 21:18:45 +08:00
dichgrem
b407b86945 update:android-root 2025-08-29 11:09:02 +08:00
dichgrem
d7d9103e4d fix:cumulative_layout_shift 2025-08-28 16:00:12 +08:00
dichgrem
98728f35b2 style:color&&font 2025-08-28 15:30:48 +08:00
dichgrem
fd06c5a402 fix:index_html 2025-08-28 15:08:34 +08:00
dichgrem
a33789bb25 fix:all_tags 2025-08-28 14:51:28 +08:00
dichgrem
a49713d90f fix:scale 2025-08-28 10:48:12 +08:00
dichgrem
8147523c19 fix:page.html 2025-08-28 10:09:59 +08:00
dichgrem
a8a1f8e1a9 fix:justfile 2025-08-28 10:05:30 +08:00
dichgrem
bebfe13851 style:tabs 2025-08-28 09:58:50 +08:00
dichgrem
a910695a09 feat:add_ssh 2025-08-27 20:54:59 +08:00
dichgrem
d217308abc update:atv 2025-08-27 15:39:51 +08:00
dichgrem
f1659ca18a update:yt-dlp 2025-08-27 14:04:53 +08:00
dichgrem
dd808adc38 update:aria2 2025-08-27 10:51:04 +08:00
dichgrem
f0cbca1045 add:yt-dlp 2025-08-25 13:03:43 +08:00
dichgrem
f6543a51df update:sports 2025-08-05 21:41:34 +08:00
dichgrem
b0c2825c6b feat:add_flake 2025-08-04 19:10:59 +08:00
dichgrem
ca222a05e8 update:ventoy 2025-08-02 21:59:55 +08:00
dichgrem
e9b3d1407b update:openwrt 2025-07-26 11:29:30 +08:00
dichgrem
39282f6184 update:linux 2025-07-21 09:54:11 +08:00
dichgrem
69d74d0de3 update:openwrt 2025-07-20 14:35:09 +08:00
dichgrem
2818f64dd3 update:openwrt 2025-07-15 15:48:52 +08:00
dichgrem
19fa0be7d6 update:openwrt 2025-07-15 09:57:46 +08:00
dichgrem
534104b60c update:openwrt 2025-07-14 22:58:19 +08:00
dichgrem
ca0c9fc210 update:arch 2025-07-14 19:28:09 +08:00
dichgrem
2f77984240 update:openwrt 2025-07-14 19:12:53 +08:00
dichgrem
e1fb8ecee6 update:openwrt 2025-07-14 14:34:19 +08:00
dichgrem
3e03623d57 update:win-all 2025-07-13 20:30:53 +08:00
dichgrem
d25fc202b4 update:arch 2025-07-11 10:10:24 +08:00
dichgrem
d11e75dd3e update:links 2025-07-10 19:43:21 +08:00
dichgrem
fe9343dea7 update:arch 2025-07-10 12:07:30 +08:00
dichgrem
f75b90ee08 update:arch 2025-07-10 10:47:08 +08:00
dichgrem
6fc01e7a9d update:arch 2025-07-08 18:51:47 +08:00
Dich
3866b3b27c update:all 2025-07-05 15:03:43 +08:00
Dich
c74cf1bb3f update:android 2025-07-04 20:36:12 +08:00
Dich
51998fa861 update:blog 2025-06-18 21:26:58 +08:00
78 changed files with 2104 additions and 2099 deletions

View File

@@ -120,7 +120,7 @@ DKIM (DomainKeys Identified Mail) 的缩写,允许发送者通过在邮件的
经过了 SPF 和 DKIM 的保证,是不是就可以完美的发送接收邮件了?其实并不能,我们通过邮件后台来看一下邮件的原始文本。 经过了 SPF 和 DKIM 的保证,是不是就可以完美的发送接收邮件了?其实并不能,我们通过邮件后台来看一下邮件的原始文本。
```` ````bash
MIME-Version: 1.0 MIME-Version: 1.0
Return-Path: xxx@fake.com Return-Path: xxx@fake.com
DKIM-Signature: d=fake.com,b=adceabkekd12 DKIM-Signature: d=fake.com,b=adceabkekd12

View File

@@ -13,15 +13,15 @@ tags = ["Network"]
## VPS上的配置 ## VPS上的配置
### 修改VPS hostname ### 修改VPS hostname
``` ```bash
hostnamectl set-hostname mail.your-domain.com hostnamectl set-hostname mail.your-domain.com
``` ```
### 修改hosts文件 ### 修改hosts文件
``` ```bash
vim /etc/hosts vim /etc/hosts
``` ```
添加一行 添加一行
``` ```bash
127.0.1.1 localhost.localdomain mail.your-domain.com 127.0.1.1 localhost.localdomain mail.your-domain.com
``` ```
@@ -30,7 +30,7 @@ vim /etc/hosts
docker compose文件示例 docker compose文件示例
``` ```yaml
version: '3.7' version: '3.7'
services: services:

View File

@@ -68,7 +68,7 @@ nexttrace --queries 3 --parallel-requests 4 example.com
nexttrace --table --no-rdns www.example.org nexttrace --table --no-rdns www.example.org
``` ```
### 示例 ### 示例
``` ```bash
nexttrace 38.207.170.5x nexttrace 38.207.170.5x
NextTrace v1.4.0 2025-04-16T01:10:07Z dccc41b NextTrace v1.4.0 2025-04-16T01:10:07Z dccc41b
[NextTrace API] preferred API IP - 198.18.0.61 - 601.41ms - 🐠 (Relay) → Misaka.HKG [NextTrace API] preferred API IP - 198.18.0.61 - 601.41ms - 🐠 (Relay) → Misaka.HKG

View File

@@ -36,7 +36,7 @@ Aria2 有以下几个特点:
首先下载[aria2-1.37.0-win-64bit-build1.zip](https://github.com/aria2/aria2/releases/tag/release-1.37.0),将下载好的文件解压并放到你喜欢的目录下,设置系统环境变量,类似``D:\DATA\Data\AriaNg-1.3.10-AllInOne``,随后即可在 CMD 中使用``aria2c -v``查看Aria2 。 首先下载[aria2-1.37.0-win-64bit-build1.zip](https://github.com/aria2/aria2/releases/tag/release-1.37.0),将下载好的文件解压并放到你喜欢的目录下,设置系统环境变量,类似``D:\DATA\Data\AriaNg-1.3.10-AllInOne``,随后即可在 CMD 中使用``aria2c -v``查看Aria2 。
然后创建一个配置文件``C:\Users\<你>\.aria2\aria2.conf``,内容如下: 然后创建一个配置文件``C:\Users\<你>\.aria2\aria2.conf``,内容如下:
``` ```conf
# 下载目录 # 下载目录
dir=C:/Users/<你>/Downloads dir=C:/Users/<你>/Downloads
@@ -53,7 +53,7 @@ rpc-secret=<你的密码>
``` ```
随后在这个项目中[winsw](https://github.com/winsw/winsw)下载 WinSW-x64.exe到一个目录并重命名为 aria2-service.exe并在同目录下创建``aria2-service.xml``,内容如下: 随后在这个项目中[winsw](https://github.com/winsw/winsw)下载 WinSW-x64.exe到一个目录并重命名为 aria2-service.exe并在同目录下创建``aria2-service.xml``,内容如下:
``` ```xml
<service> <service>
<id>aria2</id> <id>aria2</id>
<name>Aria2 Service</name> <name>Aria2 Service</name>
@@ -71,16 +71,16 @@ rpc-secret=<你的密码>
Arch linux 和大部分常规发行版可以适用此方法。 Arch linux 和大部分常规发行版可以适用此方法。
首先安装aria2本体: 首先安装aria2本体:
``` ```bash
paru -S aria2 paru -S aria2
``` ```
随后创建配置文件 随后创建配置文件
``` ```bash
nano /home/<you-username>/.config/aria2/aria2.conf nano /home/<you-username>/.config/aria2/aria2.conf
``` ```
内容为 内容为
``` ```conf
enable-rpc=true enable-rpc=true
rpc-listen-all=true rpc-listen-all=true
rpc-allow-origin-all=true rpc-allow-origin-all=true
@@ -92,11 +92,11 @@ save-session=/home/<you-username>/.config/aria2/aria2.session
save-session-interval=60 save-session-interval=60
``` ```
保存退出;随后创建守护进程以便开机自启动: 保存退出;随后创建守护进程以便开机自启动:
``` ```bash
nano ~/.config/systemd/user/aria2.service nano ~/.config/systemd/user/aria2.service
``` ```
写入: 写入:
``` ```conf
[Unit] [Unit]
Description=Aria2 Daemon Description=Aria2 Daemon
After=network.target After=network.target
@@ -110,18 +110,18 @@ WantedBy=default.target
``` ```
在更新配置文件和服务文件后,执行以下命令以重启服务: 在更新配置文件和服务文件后,执行以下命令以重启服务:
``` ```bash
systemctl --user daemon-reload systemctl --user daemon-reload
systemctl --user enable aria2.service systemctl --user enable aria2.service
systemctl --user start aria2.service systemctl --user start aria2.service
``` ```
使用以下命令检查服务状态: 使用以下命令检查服务状态:
``` ```bash
systemctl --user status aria2.service systemctl --user status aria2.service
``` ```
### Nixos ### Nixos
``` ```nix
{ lib, pkgs, username, ... }: { lib, pkgs, username, ... }:
{ {
services.aria2.enable = false; services.aria2.enable = false;
@@ -151,6 +151,7 @@ systemctl --user status aria2.service
}; };
} }
``` ```
## 命令行用法 ## 命令行用法
如果你不想用浏览器插件或者面板,也可以直接使用命令行操作: 如果你不想用浏览器插件或者面板,也可以直接使用命令行操作:

View File

@@ -182,7 +182,7 @@ Netlify在考虑到CDN成本以及可用性的情况下选择了以下这些地
> 需要注意的是有些CDN的回源IP并不用作节点IP比如Cloudflare的回源IP仅作回源IP使用如果要获取Cloudflare的节点IP可前往https://bgp.tools/as/13335#prefixes。而有些CDN的回源IP同时被用作CDN节点比如BunnyCDN和Gcore CDN。 > 需要注意的是有些CDN的回源IP并不用作节点IP比如Cloudflare的回源IP仅作回源IP使用如果要获取Cloudflare的节点IP可前往https://bgp.tools/as/13335#prefixes。而有些CDN的回源IP同时被用作CDN节点比如BunnyCDN和Gcore CDN。
Cloudflare Cloudflare
``` ```bash
# https://www.cloudflare.com/ips-v4 # https://www.cloudflare.com/ips-v4
103.21.244.0/22 103.21.244.0/22
103.22.200.0/22 103.22.200.0/22
@@ -210,45 +210,45 @@ Cloudflare
2c0f:f248::/32 2c0f:f248::/32
``` ```
Gcore Gcore
``` ```bash
https://api.gcore.com/cdn/public-ip-list https://api.gcore.com/cdn/public-ip-list
``` ```
BunnyCDN BunnyCDN
``` ```bash
https://api.bunny.net/system/edgeserverlist https://api.bunny.net/system/edgeserverlist
https://api.bunny.net/system/edgeserverlist/plain https://api.bunny.net/system/edgeserverlist/plain
``` ```
Cloudfront Cloudfront
``` ```bash
https://d7uri8nf7uskq.cloudfront.net/tools/list-cloudfront-ips https://d7uri8nf7uskq.cloudfront.net/tools/list-cloudfront-ips
https://files.imunify360.com/static/whitelist/v2/cloudfront-cdn.txt https://files.imunify360.com/static/whitelist/v2/cloudfront-cdn.txt
``` ```
CDN77 CDN77
``` ```bash
https://files.imunify360.com/static/whitelist/v2/cdn77.txt https://files.imunify360.com/static/whitelist/v2/cdn77.txt
``` ```
Fastly Fastly
``` ```bash
https://api.fastly.com/public-ip-list https://api.fastly.com/public-ip-list
``` ```
Keycdn Keycdn
``` ```bash
https://www.keycdn.com/shield-prefixes.json https://www.keycdn.com/shield-prefixes.json
``` ```
quic.cloud quic.cloud
``` ```bash
https://quic.cloud/ips https://quic.cloud/ips
``` ```
Google CDN Google CDN
``` ```bash
https://files.imunify360.com/static/whitelist/v2/google-cdn.txt https://files.imunify360.com/static/whitelist/v2/google-cdn.txt
``` ```
CacheFly CacheFly
``` ```bash
https://cachefly.cachefly.net/ips/cdn.txt https://cachefly.cachefly.net/ips/cdn.txt
``` ```
Akaima Akaima
``` ```bash
https://techdocs.akamai.com/origin-ip-acl/docs/update-your-origin-server https://techdocs.akamai.com/origin-ip-acl/docs/update-your-origin-server
``` ```
--- ---

View File

@@ -13,7 +13,7 @@ tags = ["Network"]
这里以Debian12为例 这里以Debian12为例
- 官方安装脚本: - 官方安装脚本:
``` ```bash
curl -fsSL https://get.docker.com -o get-docker.sh curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh sudo sh get-docker.sh
``` ```
@@ -21,31 +21,31 @@ sudo sh get-docker.sh
使用以下命令安装此方法的先决条件: 使用以下命令安装此方法的先决条件:
```` ````bash
sudo apt update && sudo apt install ca-certificates curl gnupg sudo apt update && sudo apt install ca-certificates curl gnupg
```` ````
创建一个目录来存储密钥环: 创建一个目录来存储密钥环:
```` ````bash
sudo install -m 0755 -d /etc/apt/keyrings sudo install -m 0755 -d /etc/apt/keyrings
```` ````
使用给定的命令下载 GPG 密钥并将其存储在 `/etc/apt/keyrings/etc/apt/keyrings` 目录中: 使用给定的命令下载 GPG 密钥并将其存储在 `/etc/apt/keyrings/etc/apt/keyrings` 目录中:
```` ````bash
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
```` ````
使用 chmod 命令更改 docker.gpg 文件的权限: 使用 chmod 命令更改 docker.gpg 文件的权限:
```` ````bash
sudo chmod a+r /etc/apt/keyrings/docker.gpg sudo chmod a+r /etc/apt/keyrings/docker.gpg
```` ````
使用以下命令为 Docker 设置存储库: 使用以下命令为 Docker 设置存储库:
```` ````bash
echo \ echo \
"deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \ "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \ "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
@@ -53,7 +53,7 @@ echo \
```` ````
现在可以使用以下命令更新存储库索引并安装 Docker 现在可以使用以下命令更新存储库索引并安装 Docker
```` ````bash
sudo apt update && sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin sudo apt update && sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
```` ````
@@ -177,34 +177,34 @@ sudo apt update && sudo apt-get install docker-ce docker-ce-cli containerd.io do
> 删除所有 Docker 容器和 Docker 本身 > 删除所有 Docker 容器和 Docker 本身
1. 首先停止所有正在运行的容器: 1. 首先停止所有正在运行的容器:
``` ```bash
docker stop $(docker ps -aq) docker stop $(docker ps -aq)
``` ```
2. 删除所有容器 2. 删除所有容器
删除所有容器(包括停止的容器): 删除所有容器(包括停止的容器):
``` ```bash
docker rm $(docker ps -aq) docker rm $(docker ps -aq)
``` ```
3. 删除所有镜像 3. 删除所有镜像
``` ```bash
docker rmi $(docker images -q) docker rmi $(docker images -q)
``` ```
4. 删除所有网络 4. 删除所有网络
``` ```bash
docker network prune -f docker network prune -f
``` ```
5. 删除所有未使用的卷 5. 删除所有未使用的卷
``` ```bash
docker volume prune -f docker volume prune -f
``` ```
6. 卸载 Docker 6. 卸载 Docker
如果您希望完全删除 Docker 本身,可以执行以下命令: 如果您希望完全删除 Docker 本身,可以执行以下命令:
``` ```bash
sudo apt-get purge docker-ce docker-ce-cli containerd.io sudo apt-get purge docker-ce docker-ce-cli containerd.io
sudo apt-get autoremove --purge sudo apt-get autoremove --purge
sudo rm -rf /var/lib/docker sudo rm -rf /var/lib/docker
@@ -221,7 +221,7 @@ sudo rm -rf /etc/docker
- 方法:创建两个 docker-compose 文件,并``使用同一个外部 Docker 网络``使两个服务互联。 - 方法:创建两个 docker-compose 文件,并``使用同一个外部 Docker 网络``使两个服务互联。
0. 首先``创建好工作目录``,例如: 0. 首先``创建好工作目录``,例如:
``` ```bash
. .
└── docker └── docker
├── docker-compose.nginx.yml ├── docker-compose.nginx.yml
@@ -234,13 +234,13 @@ sudo rm -rf /etc/docker
``` ```
1. 在启动服务前,首先创建一个 Docker 外部网络(例如命名为 nginx 1. 在启动服务前,首先创建一个 Docker 外部网络(例如命名为 nginx
``` ```bash
docker network create nginx docker network create nginx
``` ```
这样,无论是哪个 docker-compose 项目中的容器,只要加入此网络,就能直接通信。 这样,无论是哪个 docker-compose 项目中的容器,只要加入此网络,就能直接通信。
2. 编写 searxng 的 docker-compose 文件 2. 编写 searxng 的 docker-compose 文件
``` ```yaml
version: '3' version: '3'
services: services:
@@ -268,7 +268,7 @@ networks:
3. 编写 Nginx 的 docker-compose 文件 3. 编写 Nginx 的 docker-compose 文件
创建 nginx 的 docker-compose 文件,例如: 创建 nginx 的 docker-compose 文件,例如:
``` ```yaml
version: '3' version: '3'
services: services:
@@ -291,7 +291,7 @@ networks:
external: true external: true
``` ```
4. 编写 Nginx 配置文件 4. 编写 Nginx 配置文件
``` ```conf
server { server {
listen 80; listen 80;
server_name searxng.dich.bid; server_name searxng.dich.bid;
@@ -320,11 +320,11 @@ server {
5. 启动服务 5. 启动服务
- 启动 searxng 服务: - 启动 searxng 服务:
``` ```bash
docker-compose -f docker-compose.searxng.yml up -d docker-compose -f docker-compose.searxng.yml up -d
``` ```
- 启动 nginx 服务: - 启动 nginx 服务:
``` ```bash
docker-compose -f docker-compose.nginx.yml up -d docker-compose -f docker-compose.nginx.yml up -d
``` ```
由于两者都加入了外部网络 nginxnginx 内的``proxy_pass http://searxng:8080``就能解析到 searxng 容器,实现反向代理效果。现在,访问``http://ip:18080``就可以访问Searxng搜索引擎。 由于两者都加入了外部网络 nginxnginx 内的``proxy_pass http://searxng:8080``就能解析到 searxng 容器,实现反向代理效果。现在,访问``http://ip:18080``就可以访问Searxng搜索引擎。
@@ -337,7 +337,7 @@ docker-compose -f docker-compose.nginx.yml up -d
1. 证书生成 1. 证书生成
- 如果只是用于测试可以生成自签名证书: - 如果只是用于测试可以生成自签名证书:
``` ```bash
mkdir -p /home/dich/docker/nginx/certs mkdir -p /home/dich/docker/nginx/certs
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \ openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /home/dich/docker/nginx/certs/privkey.pem \ -keyout /home/dich/docker/nginx/certs/privkey.pem \
@@ -346,7 +346,7 @@ openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
``` ```
2. 更改searxng.conf: 2. 更改searxng.conf:
``` ```conf
server { server {
listen 443 ssl; listen 443 ssl;
server_name searxng.dich.bid; server_name searxng.dich.bid;
@@ -385,7 +385,7 @@ server {
``` ```
3. 更改docker-compose.nginx.yml 3. 更改docker-compose.nginx.yml
``` ```yaml
version: '3' version: '3'
services: services:
@@ -412,11 +412,11 @@ networks:
4. 启动新配置 4. 启动新配置
- 重启容器 - 重启容器
``` ```bash
sudo docker compose -f docker-compose.nginx.yml up -d sudo docker compose -f docker-compose.nginx.yml up -d
``` ```
- 查看日志 - 查看日志
``` ```bash
sudo docker logs searxng sudo docker logs searxng
``` ```
## Caddy ## Caddy
@@ -424,7 +424,7 @@ sudo docker logs searxng
> Caddy 自 2015 年起用 Go 语言重写,定位为“开箱即用”的现代 Web 服务器,内置自动 Lets Encrypt 证书管理和续期,默认支持 HTTP/2 及 HTTP/3QUIC并通过简洁明了的 Caddyfile 语法极大降低配置成本. > Caddy 自 2015 年起用 Go 语言重写,定位为“开箱即用”的现代 Web 服务器,内置自动 Lets Encrypt 证书管理和续期,默认支持 HTTP/2 及 HTTP/3QUIC并通过简洁明了的 Caddyfile 语法极大降低配置成本.
0. 示例结构: 0. 示例结构:
``` ```bash
. .
└── compose └── compose
├── certs ├── certs
@@ -437,11 +437,11 @@ sudo docker logs searxng
└── Caddyfile └── Caddyfile
``` ```
1. 同样创建名为Caddy的docker网络 1. 同样创建名为Caddy的docker网络
``` ```bash
docker network create caddy docker network create caddy
``` ```
2. 编写Caddy的compose可以看到caddy可以自带签发证书 2. 编写Caddy的compose可以看到caddy可以自带签发证书
``` ```yaml
version: '3.7' version: '3.7'
# 自动签发模式 # 自动签发模式
@@ -498,7 +498,7 @@ networks:
external: true external: true
``` ```
3. 编写Caddyfile可以看到自动开启HTTPS模式 3. 编写Caddyfile可以看到自动开启HTTPS模式
``` ```conf
# 自动签发模式 # 自动签发模式
searxng.dich.bid { searxng.dich.bid {
reverse_proxy searxng:8080 { reverse_proxy searxng:8080 {

View File

@@ -28,7 +28,7 @@ SSH 1 协议存在一些安全漏洞,所以``1996年又提出了 SSH 2 协议
李华是一个大学生现在他买了一台服务器公网IPv4为114.514.114.514,李华打算连到上面看看: 李华是一个大学生现在他买了一台服务器公网IPv4为114.514.114.514,李华打算连到上面看看:
``` ```bash
ssh -p 22 root@114.514.114.514 ssh -p 22 root@114.514.114.514
``` ```
随后命令行弹出了密码输入李华输入了初始密码114514,成功登录了进去;现在每次登录只要输入一行命令就可以,大功告成! 随后命令行弹出了密码输入李华输入了初始密码114514,成功登录了进去;现在每次登录只要输入一行命令就可以,大功告成!
@@ -39,7 +39,7 @@ ssh -p 22 root@114.514.114.514
于是,李华查阅了资料,发现有一篇博客[乱七八糟:服务器初始化与安全设置](https://blog.dich.bid/about-server-set/)于是他将openssh-server的端口改成了2333,并开启了fail2ban这下应该安全了 于是,李华查阅了资料,发现有一篇博客[乱七八糟:服务器初始化与安全设置](https://blog.dich.bid/about-server-set/)于是他将openssh-server的端口改成了2333,并开启了fail2ban这下应该安全了
``` ```bash
### 更换SSH端口 ### 更换SSH端口
使用root账户或已经有sudo权限的用户登录到系统。 使用root账户或已经有sudo权限的用户登录到系统。
@@ -88,7 +88,7 @@ sudo systemctl status fail2ban
但是服务器依然在被爆破,李华又又研究了以下教程,决定将自己的服务器由密码登录改为密钥登录,这下没有牛马来爆破了! 但是服务器依然在被爆破,李华又又研究了以下教程,决定将自己的服务器由密码登录改为密钥登录,这下没有牛马来爆破了!
``` ```bash
#### 执行以下命令生成.pub后缀的公钥和无后缀的密钥 #### 执行以下命令生成.pub后缀的公钥和无后缀的密钥
ssh-keygen ssh-keygen
@@ -140,7 +140,7 @@ sudo cat /etc/ssh/sshd_config | grep -E 'PasswordAuthentication|PubkeyAuthentica
随后,李华在.ssh文件夹下创建了一个文件名为``config``,并在其中写入以下内容: 随后,李华在.ssh文件夹下创建了一个文件名为``config``,并在其中写入以下内容:
``` ```bash
Host US Host US
HostName 114.514.114.514 HostName 114.514.114.514
User root User root
@@ -167,7 +167,7 @@ Host US
首先,将.ssh文件夹中的config进行修改,把私钥文件改为公钥文件,同时创建对应的``~/.ssh/US.pub``公钥文件里面是以ssh-ed25519或者ssh-rsa开头的公钥. 首先,将.ssh文件夹中的config进行修改,把私钥文件改为公钥文件,同时创建对应的``~/.ssh/US.pub``公钥文件里面是以ssh-ed25519或者ssh-rsa开头的公钥.
``` ```bash
Host US Host US
HostName 114.514.114.514 HostName 114.514.114.514
User root User root

View File

@@ -54,7 +54,7 @@ python3 -m pip install -U yt-dlp
- Arch / Manjaro`sudo pacman -S yt-dlp` - Arch / Manjaro`sudo pacman -S yt-dlp`
- Fedora`sudo dnf install yt-dlp` - Fedora`sudo dnf install yt-dlp`
- Nixos: - Nixos:
``` ```nix
{pkgs, ...}: { {pkgs, ...}: {
home.packages = with pkgs; [ home.packages = with pkgs; [
peazip peazip
@@ -74,7 +74,7 @@ python3 -m pip install -U yt-dlp
- **下载B站带字幕视频**: - **下载B站带字幕视频**:
``` ```bash
yt-dlp "https://www.bilibili.com/video/BVxxxxx" --write-subs --embed-subs --sub-langs all,-live_chat yt-dlp "https://www.bilibili.com/video/BVxxxxx" --write-subs --embed-subs --sub-langs all,-live_chat
--write-subs: 将字幕文件下载为单独文件 (如 .vtt 或 .ass) --write-subs: 将字幕文件下载为单独文件 (如 .vtt 或 .ass)
@@ -87,11 +87,11 @@ yt-dlp "https://www.bilibili.com/video/BVxxxxx" --write-subs --embed-subs --sub-
- **下载YouTube视频** - **下载YouTube视频**
先使用这个命令查看可用格式: 先使用这个命令查看可用格式:
``` ```bash
yt-dlp -F https://www.youtube.com/watch?v=xxxxxxxxxxxx yt-dlp -F https://www.youtube.com/watch?v=xxxxxxxxxxxx
``` ```
然后它会列举出所有可用的格式,如下: 然后它会列举出所有可用的格式,如下:
``` ```bash
[youtube] MgtOAVOXBWo: Downloading webpage [youtube] MgtOAVOXBWo: Downloading webpage
[youtube] MgtOAVOXBWo: Downloading tv client config [youtube] MgtOAVOXBWo: Downloading tv client config
[youtube] MgtOAVOXBWo: Downloading tv player API JSON [youtube] MgtOAVOXBWo: Downloading tv player API JSON
@@ -121,13 +121,13 @@ sb0 mhtml 160x90 0 │ mhtml │ images
623 mp4 2560x1440 60 │ ~ 1.00GiB 8945k m3u8 │ vp09.00.50.08 8945k video only Untested 623 mp4 2560x1440 60 │ ~ 1.00GiB 8945k m3u8 │ vp09.00.50.08 8945k video only Untested
``` ```
我们下载312和233,即视频和音频,使用以下命令: 我们下载312和233,即视频和音频,使用以下命令:
``` ```bash
yt-dlp -f "312+233" -o "<新视频的名字,要短一点>.%(ext)s" https://www.youtube.com/watch?v=xxxxxxxxxxxx yt-dlp -f "312+233" -o "<新视频的名字,要短一点>.%(ext)s" https://www.youtube.com/watch?v=xxxxxxxxxxxx
``` ```
这行命令会自动将下载的312的1080p/H.264的视频和233的音频合并为一个mp4视频注意新的名称不能太长否则会下载失败。 这行命令会自动将下载的312的1080p/H.264的视频和233的音频合并为一个mp4视频注意新的名称不能太长否则会下载失败。
如果要下载带字幕的视频,则使用 如果要下载带字幕的视频,则使用
``` ```bash
yt-dlp -f "312+233" --write-subs --write-auto-subs --embed-subs --sub-langs "zh.*,en.*" -o "<新视频的名字,要短一点>.%(ext)s" https://www.youtube.com/watch?v=xxxxxxxxxxx yt-dlp -f "312+233" --write-subs --write-auto-subs --embed-subs --sub-langs "zh.*,en.*" -o "<新视频的名字,要短一点>.%(ext)s" https://www.youtube.com/watch?v=xxxxxxxxxxx
``` ```
这个命令会: 这个命令会:
@@ -139,7 +139,7 @@ yt-dlp -f "312+233" --write-subs --write-auto-subs --embed-subs --sub-langs "zh.
- 参数说明 - 参数说明
``` ```bash
--write-subs: 下载手动字幕 --write-subs: 下载手动字幕
--write-auto-subs: 下载自动生成的字幕 --write-auto-subs: 下载自动生成的字幕
--embed-subs: 将字幕嵌入到视频中 --embed-subs: 将字幕嵌入到视频中

View File

@@ -103,35 +103,35 @@ tags = ["乱七八糟"]
8. **Docker日志文件**: 8. **Docker日志文件**:
使用 `docker ps -a` 命令查找你感兴趣的容器的 ID。 使用 `docker ps -a` 命令查找你感兴趣的容器的 ID。
```` ````bash
docker ps -a docker ps -a
```` ````
进入容器的日志目录,路径类似于 `/var/lib/docker/containers/<container-id>/`。 进入容器的日志目录,路径类似于 `/var/lib/docker/containers/<container-id>/`。
```` ````bash
cd /var/lib/docker/containers/<container-id>/ cd /var/lib/docker/containers/<container-id>/
```` ````
使用命令清理或删除日志文件。你可以删除所有日志文件,或者只删除特定的日志文件。 使用命令清理或删除日志文件。你可以删除所有日志文件,或者只删除特定的日志文件。
```` ````bash
# 删除所有日志文件 # 删除所有日志文件
rm *.log rm *.log
# 删除特定日志文件(例如 stdout 和 stderr # 删除特定日志文件(例如 stdout 和 stderr
rm *-json.log rm *-json.log
```` ````
## **Arch Linux 安装备份** ## **Arch Linux 安装备份**
你可以定期备份 Arch Linux 安装的软件列表,以便在需要时轻松还原。 你可以定期备份 Arch Linux 安装的软件列表,以便在需要时轻松还原。
```` ````bash
pacman -Qqe > package-list.txt pacman -Qqe > package-list.txt
```` ````
这将列出所有已安装的软件包,并将其保存到文件 `package-list.txt` 中。在还原系统时,你可以使用以下命令: 这将列出所有已安装的软件包,并将其保存到文件 `package-list.txt` 中。在还原系统时,你可以使用以下命令:
```` ````bash
sudo pacman -S --needed - < package-list.txt sudo pacman -S --needed - < package-list.txt
```` ````

View File

@@ -141,7 +141,7 @@ RSS客户端非常丰富包括 Android 端IOS 端Windows 端linux
3在文件中写入以下内容并保存 3在文件中写入以下内容并保存
``` ```yaml
version: '3.4' version: '3.4'
services: services:

View File

@@ -18,7 +18,7 @@ tags = ["乱七八糟"]
> 作者Bill Bynum/Tracy Camp 威廉玛丽学院/科罗拉多矿业学院 2002年11月5日 > 作者Bill Bynum/Tracy Camp 威廉玛丽学院/科罗拉多矿业学院 2002年11月5日
## 目录 ## 目录
``` ```bash
1. 引言 1. 引言
2. C-- 编译器语法 2. C-- 编译器语法
3. 并发结构 3. 并发结构
@@ -238,7 +238,7 @@ v(sem);
为帮助解释信号量的使用,我们提供以下简短示例: 为帮助解释信号量的使用,我们提供以下简短示例:
``` ```java
BACI System: C-- to PCODE Compiler, 09:24 2 May 2002 BACI System: C-- to PCODE Compiler, 09:24 2 May 2002
Source file: semexample.cm Sun Apr 28 20:40:12 2002 Source file: semexample.cm Sun Apr 28 20:40:12 2002
line pc line pc
@@ -277,7 +277,7 @@ line pc
我们使用以下命令生成上述编译器列表: 我们使用以下命令生成上述编译器列表:
``` ```bash
prompt% bacc semexample prompt% bacc semexample
Pcode and tables are stored in semexample.pco Pcode and tables are stored in semexample.pco
Compilation listing is stored in semexample.lst Compilation listing is stored in semexample.lst
@@ -285,7 +285,7 @@ Compilation listing is stored in semexample.lst
然后可以使用 BACI PCODE 解释器执行 semexample.pco 文件: 然后可以使用 BACI PCODE 解释器执行 semexample.pco 文件:
``` ```bash
prompt% bainterp semexample prompt% bainterp semexample
Source file: semexample.cm Sun Apr 28 20:40:12 2002 Source file: semexample.cm Sun Apr 28 20:40:12 2002
Executing PCODE ... Executing PCODE ...
@@ -295,7 +295,7 @@ before p(count) value of count is 1
这是程序可能产生的三种可能输出之一。另外两种可能的程序输出是: 这是程序可能产生的三种可能输出之一。另外两种可能的程序输出是:
``` ```bash
prompt% bainterp semexample prompt% bainterp semexample
Source file: semexample.cm Sun Apr 28 20:40:12 2002 Source file: semexample.cm Sun Apr 28 20:40:12 2002
Executing PCODE ... Executing PCODE ...
@@ -303,7 +303,7 @@ before p(count) value of count is 0
before v(count) value of count is 0 before v(count) value of count is 0
``` ```
``` ```bash
prompt% bainterp semexample prompt% bainterp semexample
Source file: semexample.cm Sun Apr 28 20:40:12 2002 Source file: semexample.cm Sun Apr 28 20:40:12 2002
Executing PCODE ... Executing PCODE ...
@@ -534,7 +534,7 @@ sprintf(x,".%12d. .%-20s. .%q. .%08X.",202,y,z,0x3c03);
以下列表由 C-- BACI 编译器生成。行号右侧的数字是开始该行的指令的 PCODE 偏移量。BACI 编译器从文件 "incremen.cm" 创建此列表。该列表被放置在文件 "incremen.lst" 中。还创建了一个 "incremen.pco" 文件;此文件由解释器使用。 以下列表由 C-- BACI 编译器生成。行号右侧的数字是开始该行的指令的 PCODE 偏移量。BACI 编译器从文件 "incremen.cm" 创建此列表。该列表被放置在文件 "incremen.lst" 中。还创建了一个 "incremen.pco" 文件;此文件由解释器使用。
``` ```java
BACI System: C-- to PCODE Compiler, 09:24 2 May 2002 BACI System: C-- to PCODE Compiler, 09:24 2 May 2002
Source file: incremen.cm Wed Oct 22 21:18:02 1997 Source file: incremen.cm Wed Oct 22 21:18:02 1997
line pc line pc
@@ -566,7 +566,7 @@ line pc
以下列表由 BACI 解释器生成。解释器执行编译到文件 "incremen.pco" 中的程序。 以下列表由 BACI 解释器生成。解释器执行编译到文件 "incremen.pco" 中的程序。
``` ```java
Source file: incremen.cm Wed Oct 22 21:18:02 1997 Source file: incremen.cm Wed Oct 22 21:18:02 1997
Executing PCODE ... Executing PCODE ...
C n =1 i =A n =1 C2 i = C n =1 i =A n =1 C2 i =
@@ -600,7 +600,7 @@ dos2unix ~/Git/java/baci/scripts/baci
``` ```
- 编写baci脚本 - 编写baci脚本
``` ```bash
#!/usr/bin/env bash #!/usr/bin/env bash
# 定位到项目根目录(包含 javabaci 子目录的目录) # 定位到项目根目录(包含 javabaci 子目录的目录)
BASEDIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" BASEDIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
@@ -613,19 +613,19 @@ exec java -cp "$CLASSPATH" "$@"
``` ```
- 给baci授予可执行权限 - 给baci授予可执行权限
``` ```bash
chmod +x ~/Git/java/baci/scripts/baci chmod +x ~/Git/java/baci/scripts/baci
``` ```
- 添加系统环境变量 - 添加系统环境变量
``` ```bash
fish_add_path ~/Git/java/baci/scripts fish_add_path ~/Git/java/baci/scripts
``` ```
- 查看baci是否存在 - 查看baci是否存在
``` ```bash
which baci which baci
``` ```
- 现在即可编译运行 - 现在即可编译运行
``` ```bash
baci bacc ex3_1.cm baci bacc ex3_1.cm
baci bainterp ex3_1 baci bainterp ex3_1
``` ```

View File

@@ -24,7 +24,7 @@ tags = ["乱七八糟"]
- 首先你需要有一台自己的云服务器建议在1核1G以上配置并安装Debian系统 - 首先你需要有一台自己的云服务器建议在1核1G以上配置并安装Debian系统
- 随后我们安装1panel执行以下命令一键安装 - 随后我们安装1panel执行以下命令一键安装
``` ```bash
curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && sudo bash quick_start.sh curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && sudo bash quick_start.sh
``` ```
> 1panel依赖于docker如果实现没有安装docker脚本会帮你安装。 > 1panel依赖于docker如果实现没有安装docker脚本会帮你安装。
@@ -54,33 +54,33 @@ curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_
1. **安装Hugo**:选择好你的框架与主题后这里以hugo为例子随后安装hugo以及对应的依赖 1. **安装Hugo**:选择好你的框架与主题后这里以hugo为例子随后安装hugo以及对应的依赖
- **Windows** - **Windows**
``` ```bash
# 打开以管理员模式运行的PowerShell,输入命令安装 Hugo Extended # 打开以管理员模式运行的PowerShell,输入命令安装 Hugo Extended
winget install Hugo.Hugo.Extended winget install Hugo.Hugo.Extended
``` ```
- **Arch linux** - **Arch linux**
``` ```bash
paru -S hugo paru -S hugo
``` ```
- **检查版本** - **检查版本**
``` ```bash
hugo version hugo version
``` ```
2. **创建新的 Hugo 站点**:选择一个文件夹打开命令行,执行: 2. **创建新的 Hugo 站点**:选择一个文件夹打开命令行,执行:
``` ```bash
hugo new site myblog hugo new site myblog
``` ```
该命令会在``myblog``文件夹下生成hugo的基础目录。 该命令会在``myblog``文件夹下生成hugo的基础目录。
3. **安装主题**,这里以[hugo-blog-awesome](https://jamstackthemes.dev/theme/hugo-blog-awesome/)主题为例: 3. **安装主题**,这里以[hugo-blog-awesome](https://jamstackthemes.dev/theme/hugo-blog-awesome/)主题为例:
``` ```bash
cd myblog cd myblog
git clone https://github.com/hugo-sid/hugo-blog-awesome.git themes/hugo-blog-awesome git clone https://github.com/hugo-sid/hugo-blog-awesome.git themes/hugo-blog-awesome
``` ```
并在``hugo.toml``顶层添加: 并在``hugo.toml``顶层添加:
``` ```bash
theme = "hugo-blog-awesome" theme = "hugo-blog-awesome"
``` ```
这样 Hugo 在构建时会从 themes/ 目录加载主题文件。后续可使用``git pull``获取主题更新。 这样 Hugo 在构建时会从 themes/ 目录加载主题文件。后续可使用``git pull``获取主题更新。
@@ -88,7 +88,7 @@ theme = "hugo-blog-awesome"
> 你也可以直接用theme中的文件夹替换掉项目根目录下的同名文件夹并再次修改。 > 你也可以直接用theme中的文件夹替换掉项目根目录下的同名文件夹并再次修改。
4. **写入文章**:使用 Hugo 提供的命令创建新文章: 4. **写入文章**:使用 Hugo 提供的命令创建新文章:
``` ```bash
hugo new posts/hello-world.md hugo new posts/hello-world.md
``` ```
该命令会在``content/posts/``下生成 Markdown 文件,打开后修改``title、date、tags``等前缀然后撰写 Markdown 正文, Markdown 编辑器参考[前文](https://blog.dich.bid/about-markdown/)。 该命令会在``content/posts/``下生成 Markdown 文件,打开后修改``title、date、tags``等前缀然后撰写 Markdown 正文, Markdown 编辑器参考[前文](https://blog.dich.bid/about-markdown/)。
@@ -96,7 +96,7 @@ hugo new posts/hello-world.md
> 注意md文章头部和正文之间得使用``<!-- more -->``隔断 > 注意md文章头部和正文之间得使用``<!-- more -->``隔断
5. **本地测试**:在项目根目录运行: 5. **本地测试**:在项目根目录运行:
``` ```bash
hugo server -D hugo server -D
``` ```
然后在浏览器访问``http://localhost:1313``即可实时预览并查看更新效果。 然后在浏览器访问``http://localhost:1313``即可实时预览并查看更新效果。
@@ -136,7 +136,7 @@ hugo server -D
由于我所使用的平台不支持zola因此我直接在本地编译public并推送这样时间久了.git文件夹大小会非常大记录public的变化我又不想将zola的二进制包放入目录下因此有了这个办法 由于我所使用的平台不支持zola因此我直接在本地编译public并推送这样时间久了.git文件夹大小会非常大记录public的变化我又不想将zola的二进制包放入目录下因此有了这个办法
``` ```bash
# 安装git-filter-repo工具 # 安装git-filter-repo工具
paru git-filter-repo paru git-filter-repo
# 清理public相关的历史 # 清理public相关的历史

View File

@@ -26,19 +26,19 @@ tags = ["乱七八糟"]
## 免密码运行TUN模式: ## 免密码运行TUN模式:
- 检查 polkit 服务是否正在运行 - 检查 polkit 服务是否正在运行
``` ```bash
systemctl status polkit systemctl status polkit
``` ```
- 若返回状态为除 active (running) 之外的结果,运行 - 若返回状态为除 active (running) 之外的结果,运行
``` ```bash
sudo systemctl enable --now polkit sudo systemctl enable --now polkit
``` ```
- 创建 polkit 策略 - 创建 polkit 策略
``` ```bash
sudo vi /etc/polkit-1/rules.d/99-nopassword.rules sudo vi /etc/polkit-1/rules.d/99-nopassword.rules
``` ```
- 添加以下内容并保存退出 - 添加以下内容并保存退出
``` ```bash
polkit.addRule(function (action, subject) { polkit.addRule(function (action, subject) {
if ( if (
(action.id == "org.freedesktop.resolve1.set-domains" || (action.id == "org.freedesktop.resolve1.set-domains" ||
@@ -53,11 +53,11 @@ polkit.addRule(function (action, subject) {
}); });
``` ```
- 将当前用户添加至 wheel 组中,注意Debian 与衍生系统需要先创建 wheel 组,然后运行: - 将当前用户添加至 wheel 组中,注意Debian 与衍生系统需要先创建 wheel 组,然后运行:
``` ```bash
sudo usermod -G wheel 当前用户 sudo usermod -G wheel 当前用户
``` ```
- 重新加载 polkit 使更改生效 - 重新加载 polkit 使更改生效
``` ```bash
sudo systemctl restart polkit sudo systemctl restart polkit
``` ```

View File

@@ -32,13 +32,13 @@ tags = ["乱七八糟"]
**方法一** **方法一**
创建新文件夹,在你的项目目录中运行以下命令: 创建新文件夹,在你的项目目录中运行以下命令:
``` ```bash
git init --initial-branch=main git init --initial-branch=main
``` ```
这里设置默认仓库主分支名称为 main,避免因为 main/master 名称不同导致的推送问题。 这里设置默认仓库主分支名称为 main,避免因为 main/master 名称不同导致的推送问题。
> Git目前默认的主分支为 master和 github 默认分支 main 不同,这使得默认配置下 git 往往连接失败。除了创建的时候设定外还可以通过以下方法改变默认分支。 > Git目前默认的主分支为 master和 github 默认分支 main 不同,这使得默认配置下 git 往往连接失败。除了创建的时候设定外还可以通过以下方法改变默认分支。
``` ```bash
git config --global init.defaultBranch main //将默认分支修改成main git config --global init.defaultBranch main //将默认分支修改成main
``` ```
**方法二** **方法二**
@@ -55,25 +55,25 @@ git config --global init.defaultBranch main //将默认分支修改成main
Git的设置文件为.gitconfig它可以在用户主目录下全局配置也可以在项目目录下项目配置 Git的设置文件为.gitconfig它可以在用户主目录下全局配置也可以在项目目录下项目配置
- 显示当前的Git配置 - 显示当前的Git配置
``` ```bash
git config --list git config --list
``` ```
- 编辑Git配置文件 - 编辑Git配置文件
``` ```bash
git config -e [--global] git config -e [--global]
``` ```
- 设置提交代码时的用户信息 - 设置提交代码时的用户信息
``` ```bash
git config [--global] user.name "[name]" git config [--global] user.name "[name]"
git config [--global] user.email "[email address]" git config [--global] user.email "[email address]"
``` ```
- 设置大小写敏感windows不区分大小写的解决办法 - 设置大小写敏感windows不区分大小写的解决办法
``` ```bash
git config core.ignorecase false git config core.ignorecase false
``` ```
- 配置git默认使用的编辑器 - 配置git默认使用的编辑器
``` ```bash
git config --global core.editor "nvim" git config --global core.editor "nvim"
``` ```
@@ -82,18 +82,18 @@ git config --global core.editor "nvim"
连接到远程仓库并推送需要证明你有权写入仓库。早期Github可以使用密码认证现在则使用密钥认证。 连接到远程仓库并推送需要证明你有权写入仓库。早期Github可以使用密码认证现在则使用密钥认证。
- 生成密钥: - 生成密钥:
``` ```bash
ssh-keygen -t rsa -b 4096 -C "your_email@example.com" ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
``` ```
- 生成的文件位于``~/.ssh/config``路径下,带.pub后缀的文件为公钥不带.pub后缀的为私钥使用``cat ~/.ssh/id_rsa.pub``将公钥添加到github/gitee的设置-SSH中。 - 生成的文件位于``~/.ssh/config``路径下,带.pub后缀的文件为公钥不带.pub后缀的为私钥使用``cat ~/.ssh/id_rsa.pub``将公钥添加到github/gitee的设置-SSH中。
- 随后使用 `ssh-add` 命令将生成的密钥添加到 SSH 代理中。 - 随后使用 `ssh-add` 命令将生成的密钥添加到 SSH 代理中。
``` ```bash
ssh-add ~/.ssh/github_key ssh-add ~/.ssh/github_key
ssh-add ~/.ssh/gitee_key ssh-add ~/.ssh/gitee_key
``` ```
- 在 `~/.ssh/config` 文件中配置不同的主机别名以及相应的密钥文件。编辑该文件并添加内容,例如: - 在 `~/.ssh/config` 文件中配置不同的主机别名以及相应的密钥文件。编辑该文件并添加内容,例如:
``` ```bash
# GitHub repository 1 # GitHub repository 1
Host github1 Host github1
@@ -116,32 +116,32 @@ Host github2
``` ```
- 连接到github - 连接到github
``` ```bash
ssh -T git@github.com ssh -T git@github.com
``` ```
- 添加远程仓库: - 添加远程仓库:
``` ```bash
git remote add origin <remote_repository_url> git remote add origin <remote_repository_url>
# 例如git remote add origin git@github.com:Dichgrem/dichos.git # 例如git remote add origin git@github.com:Dichgrem/dichos.git
``` ```
> 如果你运行``git remote -v``发现URL为HTTP格式则可以用下面的命令改为Git格式 > 如果你运行``git remote -v``发现URL为HTTP格式则可以用下面的命令改为Git格式
``` ```bash
# 例如git remote set-url origin git@github.com:Dichgrem/dichos.git # 例如git remote set-url origin git@github.com:Dichgrem/dichos.git
``` ```
## 创建分支 ## 创建分支
``` ```bash
git branch main git branch main
``` ```
这将创建一个名为 main 的分支。 这将创建一个名为 main 的分支。
- 删除分支 - 删除分支
``` ```bash
git branch -d master git branch -d master
``` ```
- 使用大写强制删除 - 使用大写强制删除
``` ```bash
git branch -D master git branch -D master
``` ```
@@ -149,56 +149,56 @@ git branch -D master
## 添加和提交 ## 添加和提交
你可以提出更改(把它们添加到暂存区),使用如下命令: 你可以提出更改(把它们添加到暂存区),使用如下命令:
``` ```bash
git add <filename> git add <filename>
git add * git add *
``` ```
这是 git 基本工作流程的第一步;使用如下命令以实际提交改动: 这是 git 基本工作流程的第一步;使用如下命令以实际提交改动:
``` ```bash
git commit -m "代码提交信息" git commit -m "代码提交信息"
# 例如git commit -m "Initial commit" # 例如git commit -m "Initial commit"
``` ```
现在,你的改动已经提交到了 **HEAD**,但是还没到你的远端仓库。 现在,你的改动已经提交到了 **HEAD**,但是还没到你的远端仓库。
- 添加指定文件到暂存区 - 添加指定文件到暂存区
``` ```bash
git add [file1] [file2] ... git add [file1] [file2] ...
``` ```
- 添加指定目录到暂存区,包括子目录 - 添加指定目录到暂存区,包括子目录
``` ```bash
git add [dir] git add [dir]
``` ```
- 添加当前目录的所有文件到暂存区 - 添加当前目录的所有文件到暂存区
``` ```bash
git add . git add .
``` ```
添加每个变化前,都会要求确认 添加每个变化前,都会要求确认
- 对于同一个文件的多处变化,可以实现分次提交 - 对于同一个文件的多处变化,可以实现分次提交
``` ```bash
git add -p git add -p
``` ```
- 删除工作区文件,并且将这次删除放入暂存区 - 删除工作区文件,并且将这次删除放入暂存区
``` ```bash
git rm [file1] [file2] ... git rm [file1] [file2] ...
``` ```
- 停止追踪指定文件,但该文件会保留在工作区 - 停止追踪指定文件,但该文件会保留在工作区
``` ```bash
git rm --cached [file] git rm --cached [file]
``` ```
- 改名文件,并且将这个改名放入暂存区 - 改名文件,并且将这个改名放入暂存区
``` ```bash
git mv [file-original] [file-renamed] git mv [file-original] [file-renamed]
``` ```
## 推送改动 ## 推送改动
你的改动现在已经在本地仓库的 **HEAD** 中了。执行如下命令以将这些改动提交到远端仓库: 你的改动现在已经在本地仓库的 **HEAD** 中了。执行如下命令以将这些改动提交到远端仓库:
``` ```bash
git push origin main git push origin main
``` ```
可以把 **main** 换成你想要推送的任何分支,如**master**或者**test** 可以把 **main** 换成你想要推送的任何分支,如**master**或者**test**
如果你的远程仓库是最新的,可以使用以下命令更新本地仓库: 如果你的远程仓库是最新的,可以使用以下命令更新本地仓库:
``` ```bash
git pull git pull
``` ```
@@ -208,7 +208,7 @@ git pull
- GPG方式 - GPG方式
``` ```bash
sudo pacman -S gnupg //安装 GPG sudo pacman -S gnupg //安装 GPG
gpg --full-generate-key //生成 GPG 密钥 gpg --full-generate-key //生成 GPG 密钥
gpg --list-secret-keys --keyid-format=long //查看你生成的密钥 ID gpg --list-secret-keys --keyid-format=long //查看你生成的密钥 ID
@@ -221,7 +221,7 @@ gpg --armor --export ABCDEF1234567890 //导出公钥并添加到 GitHub
- SSH方式 - SSH方式
可以用你平时登录 GitHub 的同一个 SSH 密钥: 可以用你平时登录 GitHub 的同一个 SSH 密钥:
``` ```bash
git config --global gpg.format ssh //让 Git 使用 SSH 格式签名 git config --global gpg.format ssh //让 Git 使用 SSH 格式签名
git config --global user.signingkey ~/.ssh/Github.pub //指定使用的 SSH 公钥 git config --global user.signingkey ~/.ssh/Github.pub //指定使用的 SSH 公钥
git config --global commit.gpgsign true //表示自动签名所有提交 git config --global commit.gpgsign true //表示自动签名所有提交
@@ -231,17 +231,17 @@ git config --global commit.gpgsign true //表示自动签名所有提交
- 本地查看 - 本地查看
首先创建这个文件: 首先创建这个文件:
``` ```bash
mkdir -p ~/.ssh mkdir -p ~/.ssh
nano ~/.ssh/allowed_signers nano ~/.ssh/allowed_signers
``` ```
写入你的 ``test@mail.com ssh-ed25519 AAAABBBBBBBBBBBBBBBBxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx``并保存。 写入你的 ``test@mail.com ssh-ed25519 AAAABBBBBBBBBBBBBBBBxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx``并保存。
随后配置Git信任该文件 随后配置Git信任该文件
``` ```bash
git config --global gpg.ssh.allowedSignersFile ~/.ssh/allowed_signers git config --global gpg.ssh.allowedSignersFile ~/.ssh/allowed_signers
``` ```
随后使用``git log --show-signature``即可查看本地log中的 随后使用``git log --show-signature``即可查看本地log中的
``` ```bash
Good "git" signature for test@mail.com with ED25519 key SHA256:ssh-ed25519 AAAABBBBBBBBBBBBBBBBBBBBB Good "git" signature for test@mail.com with ED25519 key SHA256:ssh-ed25519 AAAABBBBBBBBBBBBBBBBBBBBB
``` ```
@@ -250,24 +250,24 @@ Good "git" signature for test@mail.com with ED25519 key SHA256:ssh-ed25519 AAAAB
分支是用来将特性开发绝缘开来的。比如你在本地的test分支新增了一个功能想要合并到主分支中。 分支是用来将特性开发绝缘开来的。比如你在本地的test分支新增了一个功能想要合并到主分支中。
创建一个叫做“test”的分支并切换过去 创建一个叫做“test”的分支并切换过去
``` ```bash
git checkout -b test git checkout -b test
``` ```
新增某些功能后切换回主分支: 新增某些功能后切换回主分支:
``` ```bash
git checkout master git checkout master
``` ```
在主分支上执行合并操作,将 test 分支的改动合并到主分支: 在主分支上执行合并操作,将 test 分支的改动合并到主分支:
``` ```bash
git merge test git merge test
``` ```
推送完成后可以把新建的分支删掉: 推送完成后可以把新建的分支删掉:
``` ```bash
git branch -d test git branch -d test
``` ```
### 分支常用操作 ### 分支常用操作
``` ```bash
- 列出所有本地分支 - 列出所有本地分支
git branch git branch
@@ -351,36 +351,36 @@ Git 提供两种类型的标签:
- 创建附注标签 - 创建附注标签
使用 -a 参数表示“annotated”并用 -m 提供标签说明。例如,给当前提交创建一个名为 v1.0 的附注标签: 使用 -a 参数表示“annotated”并用 -m 提供标签说明。例如,给当前提交创建一个名为 v1.0 的附注标签:
``` ```bash
git tag -a v1.0 -m "发布版本 v1.0" git tag -a v1.0 -m "发布版本 v1.0"
``` ```
这会在 Git 数据库中生成一个完整的标签对象,可通过 git show v1.0 查看标签信息和对应的提交详情。 这会在 Git 数据库中生成一个完整的标签对象,可通过 git show v1.0 查看标签信息和对应的提交详情。
如果需要给旧提交贴标签,可以在命令末尾指定提交的 SHA 值(部分 SHA 也可): 如果需要给旧提交贴标签,可以在命令末尾指定提交的 SHA 值(部分 SHA 也可):
``` ```bash
git tag -a v1.0 <commit-sha> -m "发布版本 v1.0" git tag -a v1.0 <commit-sha> -m "发布版本 v1.0"
``` ```
- 创建轻量标签 - 创建轻量标签
直接指定标签名即可,不加任何参数: 直接指定标签名即可,不加任何参数:
``` ```bash
git tag v1.0-light git tag v1.0-light
``` ```
轻量标签仅仅是一个提交引用,因此查看时不会显示附加信息。 轻量标签仅仅是一个提交引用,因此查看时不会显示附加信息。
### 列出标签 ### 列出标签
- 列出所有标签 - 列出所有标签
``` ```bash
git tag git tag
``` ```
- 还可以使用通配符过滤: - 还可以使用通配符过滤:
``` ```bash
git tag -l "v1.*" git tag -l "v1.*"
``` ```
这样便于管理和筛选大量标签。 这样便于管理和筛选大量标签。
- 查看标签详细信息 - 查看标签详细信息
``` ```bash
git show v1.0 git show v1.0
``` ```
这会显示标签对象的元数据以及对应的提交记录。 这会显示标签对象的元数据以及对应的提交记录。
@@ -388,45 +388,45 @@ git show v1.0
### 推送标签 ### 推送标签
``默认情况下git push 不会将本地标签推送到远程仓库。推送标签有两种方式:`` ``默认情况下git push 不会将本地标签推送到远程仓库。推送标签有两种方式:``
- 推送单个标签 - 推送单个标签
``` ```bash
git push origin v1.0 git push origin v1.0
``` ```
- 一次性推送所有标签 - 一次性推送所有标签
``` ```bash
git push origin --tags git push origin --tags
``` ```
### 删除标签 ### 删除标签
- 删除本地标签 - 删除本地标签
``` ```bash
git tag -d v1.0 git tag -d v1.0
``` ```
- 删除远程标签 - 删除远程标签
``` ```bash
git push origin --delete v1.0 git push origin --delete v1.0
``` ```
## 日志 ## 日志
如果你想了解本地仓库的历史记录,最简单的命令就是使用: 如果你想了解本地仓库的历史记录,最简单的命令就是使用:
``` ```bash
git log git log
``` ```
- 只看某一个人的提交记录: - 只看某一个人的提交记录:
``` ```bash
git log --author=bob git log --author=bob
``` ```
- 一个压缩后的每一条提交记录只占一行的输出: - 一个压缩后的每一条提交记录只占一行的输出:
``` ```bash
git log --pretty=oneline git log --pretty=oneline
``` ```
- 看看哪些文件改变了: - 看看哪些文件改变了:
``` ```bash
git log --name-status git log --name-status
``` ```
## 生成补丁 ## 生成补丁
比如你修改了项目中的``fs/proc/base.c``,然后 比如你修改了项目中的``fs/proc/base.c``,然后
``` ```bash
git add fs/proc/base.c git add fs/proc/base.c
git commit -m "fix:base" git commit -m "fix:base"
git format-patch origin/16.0 git format-patch origin/16.0
@@ -435,13 +435,13 @@ git format-patch origin/16.0
## 删除前一个提交记录 ## 删除前一个提交记录
有时候手滑或者不想使用一个commit说明可以用以下命令撤销上一个 commit 有时候手滑或者不想使用一个commit说明可以用以下命令撤销上一个 commit
``` ```bash
git reset --soft HEAD~1 git reset --soft HEAD~1
``` ```
这个命令会撤销上一个 commit但保留文件修改代码仍然在工作区。适用于 想要重新提交amend或调整 commit 的情况。 这个命令会撤销上一个 commit但保留文件修改代码仍然在工作区。适用于 想要重新提交amend或调整 commit 的情况。
如果你想彻底删除更改(不保留代码修改),可以使用: 如果你想彻底删除更改(不保留代码修改),可以使用:
``` ```bash
git reset --hard HEAD~1 git reset --hard HEAD~1
``` ```
> 注意:--hard 会清除未提交的更改,无法恢复。 > 注意:--hard 会清除未提交的更改,无法恢复。
@@ -450,7 +450,7 @@ git reset --hard HEAD~1
### 📁 `.git` 目录结构概览 ### 📁 `.git` 目录结构概览
``` ```bash
.git/ .git/
├── HEAD ├── HEAD
├── config ├── config
@@ -527,7 +527,7 @@ Fixes #123
这可以在提交后自动关闭相关问题。 这可以在提交后自动关闭相关问题。
### 常见的 Commit 类型 ### 常见的 Commit 类型
``` ```bash
- feat新功能的添加 - feat新功能的添加
示例feat(user): 添加用户注册功能 示例feat(user): 添加用户注册功能

View File

@@ -52,19 +52,19 @@ tags = ["乱七八糟"]
## 安装 GnuPG ## 安装 GnuPG
``` ```bash
paru -S gnupg paru -S gnupg
``` ```
## 生成公钥与私钥 ## 生成公钥与私钥
使用如下命令: 使用如下命令:
``` ```bash
gpg --full-generate-key gpg --full-generate-key
``` ```
生成流程: 生成流程:
``` ```bash
gpg (GnuPG) 2.4.7; Copyright (C) 2024 g10 Code GmbH gpg (GnuPG) 2.4.7; Copyright (C) 2024 g10 Code GmbH
This is free software: you are free to change and redistribute it. This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. There is NO WARRANTY, to the extent permitted by law.
@@ -116,7 +116,7 @@ generator a better chance to gain enough entropy.
``` ```
## 列出密钥 ## 列出密钥
``` ```bash
gpg --list-secret-keys --keyid-format long gpg --list-secret-keys --keyid-format long
``` ```
@@ -126,18 +126,18 @@ gpg --list-secret-keys --keyid-format long
例如上传你的 key 例如上传你的 key
``` ```bash
gpg --send-keys <你的LongKeyID> gpg --send-keys <你的LongKeyID>
``` ```
默认为你的 gpg.conf 中配置的 keyserver也可以显式指定 默认为你的 gpg.conf 中配置的 keyserver也可以显式指定
``` ```bash
gpg --keyserver hkps://keys.openpgp.org --send-keys <KeyID> gpg --keyserver hkps://keys.openpgp.org --send-keys <KeyID>
``` ```
也可以使用如下命令导出公钥为可读 ASCII 格式类似ssh-keys随后即可发布在个人博客上等等。 也可以使用如下命令导出公钥为可读 ASCII 格式类似ssh-keys随后即可发布在个人博客上等等。
``` ```bash
gpg --armor --export <KeyID> > mypubkey.asc gpg --armor --export <KeyID> > mypubkey.asc
``` ```
@@ -145,7 +145,7 @@ gpg --armor --export <KeyID> > mypubkey.asc
如果怀疑密钥被泄露或被中间人替换立即发布“撤销证书”revocation certificate并上传到 keyserver。 如果怀疑密钥被泄露或被中间人替换立即发布“撤销证书”revocation certificate并上传到 keyserver。
``` ```bash
gpg --gen-revoke <KeyID> > revoke.asc gpg --gen-revoke <KeyID> > revoke.asc
``` ```
上传撤销证书后,所有人都能知道该公钥已不再可信。 上传撤销证书后,所有人都能知道该公钥已不再可信。

View File

@@ -19,27 +19,27 @@ tags = ["乱七八糟"]
## 安装 ## 安装
首先安装neovim,在arch linux上是 首先安装neovim,在arch linux上是
``` ```bash
paru -S neovim paru -S neovim
``` ```
在Ubuntu上是 在Ubuntu上是
``` ```bash
sudo add-apt-repository ppa:neovim-ppa/unstable sudo add-apt-repository ppa:neovim-ppa/unstable
sudo apt update sudo apt update
sudo apt install -y \ neovim git curl unzip build-essential ripgrep fd-find sudo apt install -y \ neovim git curl unzip build-essential ripgrep fd-find
``` ```
备份现有配置: 备份现有配置:
``` ```bash
mv ~/.config/nvim ~/.config/nvim.bak mv ~/.config/nvim ~/.config/nvim.bak
mv ~/.local/share/nvim ~/.local/share/nvim.bak mv ~/.local/share/nvim ~/.local/share/nvim.bak
``` ```
克隆 LazyVim Starter 模板: 克隆 LazyVim Starter 模板:
``` ```bash
git clone https://github.com/LazyVim/starter ~/.config/nvim git clone https://github.com/LazyVim/starter ~/.config/nvim
``` ```
启动 Neovim 启动 Neovim
``` ```bash
nvim nvim
``` ```
首次启动时LazyVim 会自动安装并配置所需的插件。 首次启动时LazyVim 会自动安装并配置所需的插件。
@@ -47,7 +47,7 @@ nvim
## 结构 ## 结构
LazyVim 的配置目录通常位于``~/.config/nvim/``中: LazyVim 的配置目录通常位于``~/.config/nvim/``中:
``` ``` bash
~/.config/nvim ~/.config/nvim
tree tree
. .
@@ -231,7 +231,7 @@ LazyVim 默认使用``<space> 作为 <leader>``\ 作为``<localleader>``
在``~/config/nvim/lua/plugins/``下新建一个mp.lua写入如下配置 在``~/config/nvim/lua/plugins/``下新建一个mp.lua写入如下配置
``` ```lua
return { return {
{ {
"iamcco/markdown-preview.nvim", "iamcco/markdown-preview.nvim",
@@ -243,7 +243,7 @@ return {
``` ```
随后即可在 Neovim 中打开一个 Markdown 文件,执行以下命令启动预览:​ 随后即可在 Neovim 中打开一个 Markdown 文件,执行以下命令启动预览:​
``` ```bash
:MarkdownPreview :MarkdownPreview
``` ```

View File

@@ -19,7 +19,7 @@ tags = ["乱七八糟"]
## 三.解决方法 ## 三.解决方法
既然是高低电平表述的错误那么我们只需建立DSDT 表副本,将其修改,然后让它优先启动,从而让键盘配置正常;另外还存在 BIOS 修复,内核编译的方法,比较复杂,这里不做说明。 既然是高低电平表述的错误那么我们只需建立DSDT 表副本,将其修改,然后让它优先启动,从而让键盘配置正常;另外还存在 BIOS 修复,内核编译的方法,比较复杂,这里不做说明。
``` ```bash
首先建立一个DSDT文件夹 首先建立一个DSDT文件夹
sudo su sudo su
mkdir -p /home/dsdt mkdir -p /home/dsdt
@@ -75,7 +75,7 @@ reboot
### 修复wifi驱动 ### 修复wifi驱动
``` ```bash
# 内核小于5.18的 # 内核小于5.18的
git clone https://github.com/HRex39/rtl8852be.git git clone https://github.com/HRex39/rtl8852be.git
# 内核大于等于5.18的 # 内核大于等于5.18的
@@ -89,7 +89,7 @@ sudo modprobe 8852be
### 修复蓝牙驱动 ### 修复蓝牙驱动
``` ```bash
# 内核=5.15 # 内核=5.15
git clone https://github.com/HRex39/rtl8852be_bt.git -b 5.15 git clone https://github.com/HRex39/rtl8852be_bt.git -b 5.15
# 内核=5.18 # 内核=5.18
@@ -104,13 +104,13 @@ sudo make install
首先去amd官网下载最新的linux-amd驱动 首先去amd官网下载最新的linux-amd驱动
```` ````bash
https://www.amd.com/zh-hans/support/linux-drivers // 22.20 for Ubuntu 20.04.5 HWE https://www.amd.com/zh-hans/support/linux-drivers // 22.20 for Ubuntu 20.04.5 HWE
```` ````
修改Deepin为ubuntu 修改Deepin为ubuntu
```` ````bash
sudo vim /etc/os-release // ID=Deepin => ID=ubuntu sudo vim /etc/os-release // ID=Deepin => ID=ubuntu
sudo apt install ./amdgpu-install_22.20.50200-1_all.deb sudo apt install ./amdgpu-install_22.20.50200-1_all.deb
@@ -128,7 +128,7 @@ sudo apt install inxi clinfo
`inxi -G` `inxi -G`
```` ````bash
Graphics: Device-1: AMD Rembrandt driver: amdgpu v: kernel Graphics: Device-1: AMD Rembrandt driver: amdgpu v: kernel
Display: x11 server: X.Org 1.20.11 driver: amdgpu,ati unloaded: fbdev,modesetting,vesa Display: x11 server: X.Org 1.20.11 driver: amdgpu,ati unloaded: fbdev,modesetting,vesa
resolution: 1920x1080~60Hz resolution: 1920x1080~60Hz
@@ -138,14 +138,14 @@ Graphics: Device-1: AMD Rembrandt driver: amdgpu v: kernel
最后还原最初的修改: 最后还原最初的修改:
```` ````bash
sudo vim /etc/os-release // ID=ubuntu => ID=Deepin sudo vim /etc/os-release // ID=ubuntu => ID=Deepin
sudo apt purge amdgpu-install sudo apt purge amdgpu-install
```` ````
看下效果图: 看下效果图:
```` ````bash
➜ ~ glxinfo -B ➜ ~ glxinfo -B
name of display: :0 name of display: :0
display: :0 screen: 0 display: :0 screen: 0
@@ -193,7 +193,7 @@ OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.20
安装下面的三方电源管理工具 `Boost Changer`,选择 `Performance`策略即可 安装下面的三方电源管理工具 `Boost Changer`,选择 `Performance`策略即可
```` ````bash
wget https://github.com/nbebaw/boostchanger/releases/download/v4.4.0/boostchanger_4.4.0_amd64.deb wget https://github.com/nbebaw/boostchanger/releases/download/v4.4.0/boostchanger_4.4.0_amd64.deb
```` ````
## 参考 ## 参考

View File

@@ -22,7 +22,7 @@ tags = ["乱七八糟"]
- **cn 域名有被停用的风险**。2008 年,有人以跳水奥运冠军吴敏霞拼音注册了 wuminxia.cn[结果被中国互联网络信息中心CNNIC回收了域名](https://www.cnbeta.com/articles/tech/62209.htm),并转交给国家体育总局。此域名在 2021 年 2 月 28 日被优视科技[注册](https://whois.cnnic.cn/WhoisServlet?queryType=Domain&domain=wuminxia.cn)呵呵。2009 年,牛博网被域名注册商万网停止解析。 - **cn 域名有被停用的风险**。2008 年,有人以跳水奥运冠军吴敏霞拼音注册了 wuminxia.cn[结果被中国互联网络信息中心CNNIC回收了域名](https://www.cnbeta.com/articles/tech/62209.htm),并转交给国家体育总局。此域名在 2021 年 2 月 28 日被优视科技[注册](https://whois.cnnic.cn/WhoisServlet?queryType=Domain&domain=wuminxia.cn)呵呵。2009 年,牛博网被域名注册商万网停止解析。
## VPS ## VPS
``` ```bash
# 更新系统 # 更新系统
apt update && apt upgrade -y apt update && apt upgrade -y
apt install wget curl vim sudo neofetch apt install wget curl vim sudo neofetch
@@ -33,15 +33,15 @@ sudo usermod -aG sudo xxx
## BBR ## BBR
- 查询系统所支持的拥塞控制算法 - 查询系统所支持的拥塞控制算法
```` ````bash
sysctl net.ipv4.tcp_available_congestion_control sysctl net.ipv4.tcp_available_congestion_control
```` ````
- 查询正在使用中的拥塞控制算法Linux 绝大部分系统默认为 Cubic 算法) - 查询正在使用中的拥塞控制算法Linux 绝大部分系统默认为 Cubic 算法)
```` ````bash
sysctl net.ipv4.tcp_congestion_control sysctl net.ipv4.tcp_congestion_control
```` ````
- 指定拥塞控制算法为 bbr - 指定拥塞控制算法为 bbr
```` ````bash
echo net.ipv4.tcp_congestion_control=bbr >> /etc/sysctl.conf && sysctl -p echo net.ipv4.tcp_congestion_control=bbr >> /etc/sysctl.conf && sysctl -p
```` ````
@@ -56,43 +56,43 @@ echo net.ipv4.tcp_congestion_control=bbr >> /etc/sysctl.conf && sysctl -p
打开SSH配置文件`sshd_config`可以使用文本编辑器如nano或vi。以下是使用nano编辑器的示例 打开SSH配置文件`sshd_config`可以使用文本编辑器如nano或vi。以下是使用nano编辑器的示例
```` ````bash
sudo vim /etc/ssh/sshd_config sudo vim /etc/ssh/sshd_config
```` ````
在配置文件中找到以下行: 在配置文件中找到以下行:
```` ````bash
Port 22 Port 22
```` ````
这是SSH默认的端口号你可以将其更改为你想要的任何未被占用的端口号。例如将端口更改为2222 这是SSH默认的端口号你可以将其更改为你想要的任何未被占用的端口号。例如将端口更改为2222
```` ````bash
Port 2222 Port 2222
```` ````
保存并关闭文本编辑器。重新启动SSH服务以应用更改 保存并关闭文本编辑器。重新启动SSH服务以应用更改
```` ````bash
sudo service ssh restart sudo service ssh restart
```` ````
或者如果你的系统使用systemd可以使用以下命令 或者如果你的系统使用systemd可以使用以下命令
```` ````bash
sudo systemctl restart ssh sudo systemctl restart ssh
```` ````
### 安装 UFW ### 安装 UFW
```` ````bash
sudo apt install ufw sudo apt install ufw
```` ````
**如果你在远程位置连接你的服务器,在启用 UFW 防火墙之前,你必须显式允许进来的 SSH 连接。否则,你将永远都无法连接到机器上。** **如果你在远程位置连接你的服务器,在启用 UFW 防火墙之前,你必须显式允许进来的 SSH 连接。否则,你将永远都无法连接到机器上。**
```` ````bash
sudo ufw allow 22/tcp sudo ufw allow 22/tcp
```` ````
@@ -100,37 +100,37 @@ sudo ufw allow 22/tcp
**启动 UFW** **启动 UFW**
```` ````bash
sudo ufw enable sudo ufw enable
```` ````
### 安装 Fail2ban ### 安装 Fail2ban
```` ````bash
sudo apt-get install fail2ban sudo apt-get install fail2ban
```` ````
**2、Debian 12 及以上的版本需要手动安装 rsyslog** **2、Debian 12 及以上的版本需要手动安装 rsyslog**
```` ````bash
sudo apt-get install rsyslog sudo apt-get install rsyslog
```` ````
**3、启动 Fail2ban 服务** **3、启动 Fail2ban 服务**
```` ````bash
sudo systemctl start fail2ban sudo systemctl start fail2ban
```` ````
**4、开机自启动** **4、开机自启动**
```` ````bash
sudo systemctl enable fail2ban sudo systemctl enable fail2ban
```` ````
**5、查看 Fail2ban 服务状态。** **5、查看 Fail2ban 服务状态。**
```` ````bash
sudo systemctl status fail2ban sudo systemctl status fail2ban
```` ````
@@ -139,7 +139,7 @@ sudo systemctl status fail2ban
### 改为密钥登录 ### 改为密钥登录
- 执行以下命令生成.pub后缀的公钥和无后缀的密钥 - 执行以下命令生成.pub后缀的公钥和无后缀的密钥
``` ```bash
ssh-keygen ssh-keygen
``` ```
注意不同密钥对名称不能相同;同时可以为这两个文件用密码加密; 注意不同密钥对名称不能相同;同时可以为这两个文件用密码加密;
@@ -147,11 +147,11 @@ ssh-keygen
- 随后将.pub后缀的公钥中的内容写入服务器的``~/.ssh/authorized_keys``中; - 随后将.pub后缀的公钥中的内容写入服务器的``~/.ssh/authorized_keys``中;
- 使用以下命令编译服务器的SSH配置 - 使用以下命令编译服务器的SSH配置
``` ```bash
vim /etc/ssh/sshd_config vim /etc/ssh/sshd_config
``` ```
将其中的该行改为``PasswordAuthentication no``,保存退出;随后使用 将其中的该行改为``PasswordAuthentication no``,保存退出;随后使用
``` ```bash
sudo systemctl restart sshd sudo systemctl restart sshd
``` ```
重启SSH即可禁用密码登录 重启SSH即可禁用密码登录
@@ -159,7 +159,7 @@ sudo systemctl restart sshd
- 将**PermitRootLogin**一栏改为**PermitRootLogin prohibit-password**即可实现仅root用户密钥登录 - 将**PermitRootLogin**一栏改为**PermitRootLogin prohibit-password**即可实现仅root用户密钥登录
- 使用以下命令查看输出, - 使用以下命令查看输出,
``` ```bash
sudo cat /etc/ssh/sshd_config | grep -E 'PasswordAuthentication|PubkeyAuthentication' sudo cat /etc/ssh/sshd_config | grep -E 'PasswordAuthentication|PubkeyAuthentication'
``` ```
如有**PasswordAuthentication no → 禁用密码登录**以及**PubkeyAuthentication yes → 允许密钥登录**则成功。 如有**PasswordAuthentication no → 禁用密码登录**以及**PubkeyAuthentication yes → 允许密钥登录**则成功。
@@ -170,33 +170,33 @@ sudo cat /etc/ssh/sshd_config | grep -E 'PasswordAuthentication|PubkeyAuthentica
- ALL - ALL
``` ```bash
apt install curl wget gpg vim nano sudo neofetch openssh-server apt install curl wget gpg vim nano sudo neofetch openssh-server
``` ```
- C/C++ - C/C++
``` ```bash
sudo apt install build-essential gdb cmake clangd clang-format libstdc++-dev sudo apt install build-essential gdb cmake clangd clang-format libstdc++-dev
``` ```
- Miniconda - Miniconda
``` ```bash
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh bash Miniconda3-latest-Linux-x86_64.sh
``` ```
- UV - UV
``` ```bash
curl -LsSf https://astral.sh/uv/install.sh | sh curl -LsSf https://astral.sh/uv/install.sh | sh
``` ```
- Docker - Docker
``` ```bash
curl -fsSL https://get.docker.com -o get-docker.sh curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh sudo sh get-docker.sh
``` ```
- OpenCV - OpenCV
``` ```bash
sudo apt install tree libx11-dev libgtk-3-dev freeglut3-dev libopencv-dev libdlib-dev sudo apt install tree libx11-dev libgtk-3-dev freeglut3-dev libopencv-dev libdlib-dev
``` ```
- Vmware - Vmware
``` ```bash
sudo apt install open-vm-tools sudo apt install open-vm-tools
sudo apt install open-vm-tools-desktop sudo apt install open-vm-tools-desktop
``` ```
@@ -211,7 +211,7 @@ Set-Content "$env:USERPROFILE\.ssh\known_hosts"
执行如下命令一键安装 1Panel: 执行如下命令一键安装 1Panel:
```` ````bash
curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && sudo bash quick_start.sh curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && sudo bash quick_start.sh
```` ````
@@ -220,27 +220,27 @@ curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_
### 禁用 IPv6 ### 禁用 IPv6
手动 禁用 VPS 的 IPv6 命令: 手动 禁用 VPS 的 IPv6 命令:
``` ```bash
sysctl -w net.ipv6.conf.all.disable_ipv6=1 sysctl -w net.ipv6.conf.all.disable_ipv6=1
sysctl -w net.ipv6.conf.default.disable_ipv6=1 sysctl -w net.ipv6.conf.default.disable_ipv6=1
``` ```
如果想重启系统也生效, 执行: 如果想重启系统也生效, 执行:
``` ```bash
echo 'net.ipv6.conf.all.disable_ipv6=1' >> /etc/sysctl.conf echo 'net.ipv6.conf.all.disable_ipv6=1' >> /etc/sysctl.conf
echo 'net.ipv6.conf.default.disable_ipv6=1' >> /etc/sysctl.conf echo 'net.ipv6.conf.default.disable_ipv6=1' >> /etc/sysctl.conf
``` ```
手动 启用 VPS 的 IPv6 命令: 手动 启用 VPS 的 IPv6 命令:
``` ```bash
sysctl -w net.ipv6.conf.all.disable_ipv6=0 sysctl -w net.ipv6.conf.all.disable_ipv6=0
sysctl -w net.ipv6.conf.default.disable_ipv6=0 sysctl -w net.ipv6.conf.default.disable_ipv6=0
``` ```
重新载入 sysctl 配置 重新载入 sysctl 配置
``` ```bash
sysctl --system # reload sysctl sysctl --system # reload sysctl
``` ```
如果重载, 还无效果, 可能要 reboot 重启下. 如果重载, 还无效果, 可能要 reboot 重启下.
查看 VPS 的 IPv6 信息 查看 VPS 的 IPv6 信息
``` ```bash
ip -6 addr show scope global ip -6 addr show scope global
或者 curl ipv6.ip.sb 或者 curl ipv6.ip.sb
@@ -253,13 +253,13 @@ ip -6 addr show scope global
- 然后在VPS上输入以下命令 - 然后在VPS上输入以下命令
``` ```bash
mkdir -p ./.well-known/pki-validation mkdir -p ./.well-known/pki-validation
``` ```
- 随后在ZeroSSL中将所给出的类似**B992F08CB46748D02E4C553A4038BC.txt**复制; - 随后在ZeroSSL中将所给出的类似**B992F08CB46748D02E4C553A4038BC.txt**复制;
- 将从ZeroSSL下载得到的文件打开复制里面的东西形成以下的格式:``将pki-validation/之后EOF之前的内容``替换为你自己的。 - 将从ZeroSSL下载得到的文件打开复制里面的东西形成以下的格式:``将pki-validation/之后EOF之前的内容``替换为你自己的。
``` ```bash
cat << EOF | sudo tee ./.well-known/pki-validation/B992F08CB46748D02E4C553A4038BC.txt cat << EOF | sudo tee ./.well-known/pki-validation/B992F08CB46748D02E4C553A4038BC.txt
254563C20918258D661E7D43D6A43A2A258857E191977DD5F740FBB9ABD25279 254563C20918258D661E7D43D6A43A2A258857E191977DD5F740FBB9ABD25279
comodoca.com comodoca.com
@@ -268,7 +268,7 @@ EOF
``` ```
随后在VPS上运行该命令。 随后在VPS上运行该命令。
- 开启一个临时HTTP服务器 - 开启一个临时HTTP服务器
``` ```bash
python3 -m http.server 80 python3 -m http.server 80
``` ```
- 随后即可在ZeroSSL中验证证书并开启SSL。 - 随后即可在ZeroSSL中验证证书并开启SSL。
@@ -285,15 +285,15 @@ python3 -m http.server 80
- 进入恢复模式后,选择`root Drop to root shell prompt`进入 root shell不需要密码 - 进入恢复模式后,选择`root Drop to root shell prompt`进入 root shell不需要密码
- 挂载文件系统为可写模式: - 挂载文件系统为可写模式:
``` ```bash
mount -o remount,rw / mount -o remount,rw /
``` ```
- 将用户添加到 sudo 组: - 将用户添加到 sudo 组:
``` ```bash
usermod -aG sudo 用户名 usermod -aG sudo 用户名
``` ```
- 重启计算机: - 重启计算机:
``` ```bash
reboot reboot
``` ```
@@ -315,7 +315,7 @@ sudo apt update
``` ```
3. 搜索可用内核 3. 搜索可用内核
``` ```bash
apt search xanmod apt search xanmod
sudo apt install linux-image-6.8.6-x64v3-xanmod1 linux-headers-6.8.6-x64v3-xanmod1 sudo apt install linux-image-6.8.6-x64v3-xanmod1 linux-headers-6.8.6-x64v3-xanmod1
``` ```

View File

@@ -72,13 +72,13 @@ Hyper-V 是微软内建的虚拟化平台native hypervisor。开启后
* PowerShell以管理员权限运行 * PowerShell以管理员权限运行
``` ```bash
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All
``` ```
* DISM部署映像服务和管理工具 * DISM部署映像服务和管理工具
``` ```bash
DISM /Online /Enable-Feature /All /FeatureName:Microsoft-Hyper-V DISM /Online /Enable-Feature /All /FeatureName:Microsoft-Hyper-V
``` ```
@@ -90,23 +90,23 @@ DISM /Online /Enable-Feature /All /FeatureName:Microsoft-Hyper-V
## 关闭 Hyper-V ## 关闭 Hyper-V
* PowerShell管理员权限 * PowerShell管理员权限
``` ```bash
Disable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-All Disable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-All
``` ```
* DISM * DISM
``` ```bash
DISM /Online /Disable-Feature:Microsoft-Hyper-V DISM /Online /Disable-Feature:Microsoft-Hyper-V
``` ```
* 用 bcdedit 修改启动配置,使系统启动时不加载 HypervisorHyper-V 的虚拟化内核)但保留功能安装: * 用 bcdedit 修改启动配置,使系统启动时不加载 HypervisorHyper-V 的虚拟化内核)但保留功能安装:
``` ```bash
bcdedit /set hypervisorlaunchtype off bcdedit /set hypervisorlaunchtype off
``` ```
若要恢复加载,则: 若要恢复加载,则:
``` ```bash
bcdedit /set hypervisorlaunchtype auto bcdedit /set hypervisorlaunchtype auto
``` ```
* Windows 功能 GUI 中,取消勾选 Hyper-V 相应项。 * Windows 功能 GUI 中,取消勾选 Hyper-V 相应项。
@@ -118,21 +118,21 @@ bcdedit /set hypervisorlaunchtype auto
1. **给 VMware 或 VirtualBox 使用环境临时关闭 Hyper-V** 1. **给 VMware 或 VirtualBox 使用环境临时关闭 Hyper-V**
``` ```bash
bcdedit /set hypervisorlaunchtype off bcdedit /set hypervisorlaunchtype off
``` ```
然后重启 Windows就能让这些软件正常启动虚拟机。要还原 Hyper-V改为 `auto` 或 `on`: 然后重启 Windows就能让这些软件正常启动虚拟机。要还原 Hyper-V改为 `auto` 或 `on`:
``` ```bash
bcdedit /set hypervisorlaunchtype auto bcdedit /set hypervisorlaunchtype auto
``` ```
2. **从命令行完全关闭 Hyper-V 功能** 2. **从命令行完全关闭 Hyper-V 功能**
```powershell ```bash
Disable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-All Disable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-All
``` ```
或者用 DISM 或者用 DISM
``` ```bash
DISM /Online /Disable-Feature:Microsoft-Hyper-V DISM /Online /Disable-Feature:Microsoft-Hyper-V
``` ```

View File

@@ -52,14 +52,14 @@ MCSManager 面板简称MCSM 面板)是一款全中文,轻量级,开
## 换源 ## 换源
**禁用 Ceph 企业仓库:** **禁用 Ceph 企业仓库:**
``` ```bash
nano /etc/apt/sources.list.d/ceph.list nano /etc/apt/sources.list.d/ceph.list
``` ```
将文件内容注释掉或删除。 将文件内容注释掉或删除。
**编辑仓库源文件:** **编辑仓库源文件:**
``` ```bash
nano /etc/apt/sources.list.d/pve-enterprise.list nano /etc/apt/sources.list.d/pve-enterprise.list
``` ```
将文件内容注释掉或删除; 将文件内容注释掉或删除;
@@ -67,11 +67,11 @@ nano /etc/apt/sources.list.d/pve-enterprise.list
**启用社区仓库:** **启用社区仓库:**
确保社区仓库已启用。编辑社区仓库文件: 确保社区仓库已启用。编辑社区仓库文件:
``` ```bash
nano /etc/apt/sources.list.d/pve-no-subscription.list nano /etc/apt/sources.list.d/pve-no-subscription.list
``` ```
确保文件内容如下: 确保文件内容如下:
``` ```bash
deb http://download.proxmox.com/debian/pve bookworm pve-no-subscription deb http://download.proxmox.com/debian/pve bookworm pve-no-subscription
``` ```
## 二.新建虚拟机并安装Debian ## 二.新建虚拟机并安装Debian
@@ -95,12 +95,12 @@ deb http://download.proxmox.com/debian/pve bookworm pve-no-subscription
在安装步骤进入到选择安装的桌面环境和软件时, 键入 Ctrl+Alt+F2 可以看到从图形界面转到了tty命令终端, 键入 Enter 在安装步骤进入到选择安装的桌面环境和软件时, 键入 Ctrl+Alt+F2 可以看到从图形界面转到了tty命令终端, 键入 Enter
这里修改软件源配置文件 这里修改软件源配置文件
``` ```bash
nano /target/etc/apt/sources.list nano /target/etc/apt/sources.list
``` ```
修改debian-security源地址  `http://mirrors.ustc.edu.cn ` 目测最快 修改debian-security源地址  `http://mirrors.ustc.edu.cn ` 目测最快
``` ```bash
deb http://mirrors.ustc.edu.cn/debian-security bullseye-security main deb http://mirrors.ustc.edu.cn/debian-security bullseye-security main
``` ```
修改后 Ctrl+X 退出保存,然后退出终端重新进入界面继续安装,键入 Ctrl+Alt+F5。 修改后 Ctrl+X 退出保存,然后退出终端重新进入界面继续安装,键入 Ctrl+Alt+F5。
@@ -144,7 +144,7 @@ deb http://mirrors.ustc.edu.cn/debian-security bullseye-security main
在 PVE-防火墙中打开它们。如果还是不行,执行如下命令: 在 PVE-防火墙中打开它们。如果还是不行,执行如下命令:
``` ```bash
systemctl stop firewalld systemctl stop firewalld
systemctl disable firewalld systemctl disable firewalld

View File

@@ -79,7 +79,7 @@ X86还是Arm两者之间各有优点截止到今天各种Arm电视盒子
- 随后在设置 > 设备首选项 > 关于 > 状态中找到并记下IP 地址然后用ADB连接上去这里使用命令``adb connect <IP 地址>:<端口> ``随后在ATV端授权连接例如 - 随后在设置 > 设备首选项 > 关于 > 状态中找到并记下IP 地址然后用ADB连接上去这里使用命令``adb connect <IP 地址>:<端口> ``随后在ATV端授权连接例如
``` ```bash
adb connect 192.168.1.666:9527 adb connect 192.168.1.666:9527
connected to 192.168.1.666:9527 connected to 192.168.1.666:9527
@@ -93,7 +93,7 @@ xxxxxxxxx sideload
**一些 ADB 常用命令** **一些 ADB 常用命令**
``` ```bash
adb reboot #将重启 Android 设备。 adb reboot #将重启 Android 设备。
adb reboot recovery #将设备重新启动到恢复模式。 adb reboot recovery #将设备重新启动到恢复模式。
@@ -136,13 +136,13 @@ adb kill server #切断 PC 和 Android TV 之间的连接。
1. ADB连接连接到ADB成功后我们使用``adb shell``进入shell随后使用命令``pm list packages``列出所有软件包; 1. ADB连接连接到ADB成功后我们使用``adb shell``进入shell随后使用命令``pm list packages``列出所有软件包;
``` ```bash
pm list packages -s 列出系统软件包 pm list packages -s 列出系统软件包
pm list packages -3 列出第三方软件包 pm list packages -3 列出第三方软件包
``` ```
2. 获取包名:对于暂时无法确定包名的软件,可以先打开,再使用 2. 获取包名:对于暂时无法确定包名的软件,可以先打开,再使用
``` ```bash
adb shell dumpsys activity activities | grep mResumedActivity adb shell dumpsys activity activities | grep mResumedActivity
``` ```
@@ -150,13 +150,13 @@ adb shell dumpsys activity activities | grep mResumedActivity
3. 删除软件:可以先使用 3. 删除软件:可以先使用
``` ```bash
pm disable-user --user 0 com.dangbei1.tvlauncher pm disable-user --user 0 com.dangbei1.tvlauncher
``` ```
禁用软件,确认没有问题之后再用 禁用软件,确认没有问题之后再用
``` ```bash
pm uninstall -k --user 0 com.dangbei1.tvlauncher pm uninstall -k --user 0 com.dangbei1.tvlauncher
``` ```
@@ -164,20 +164,20 @@ pm uninstall -k --user 0 com.dangbei1.tvlauncher
4. 备份软件对于想要备份的软件可以使用1和2中的方法获取软件包名然后使用例如以下命令 4. 备份软件对于想要备份的软件可以使用1和2中的方法获取软件包名然后使用例如以下命令
``` ```bash
adb shell pm path org.videolan.vlc adb shell pm path org.videolan.vlc
package:/data/app/~~hY2Y0_PdaDlasfVwkUNcoQ==/org.videolan.vlc-WnNhCJLQUJdZYYzUxzBNBA==/base.apk package:/data/app/~~hY2Y0_PdaDlasfVwkUNcoQ==/org.videolan.vlc-WnNhCJLQUJdZYYzUxzBNBA==/base.apk
``` ```
获取到安装路径随后将apk包拿走就可以 获取到安装路径随后将apk包拿走就可以
``` ```bash
adb pull /data/app/~~hY2Y0_PdaDlasfVwkUNcoQ==/org.videolan.vlc-WnNhCJLQUJdZYYzUxzBNBA==/base.apk ./Downloads/ adb pull /data/app/~~hY2Y0_PdaDlasfVwkUNcoQ==/org.videolan.vlc-WnNhCJLQUJdZYYzUxzBNBA==/base.apk ./Downloads/
``` ```
5. 备份分区如果你想要修改当前系统的img可以用adb提取并导出 5. 备份分区如果你想要修改当前系统的img可以用adb提取并导出
``` ```bash
# 确定分区对应关系 # 确定分区对应关系
ls -l /dev/block ls -l /dev/block
ls -l /dev/block/platform ls -l /dev/block/platform
@@ -202,7 +202,7 @@ adb pull /sdcard/odm.img
``` ```
5. 修改桌面可以进入安卓原生设置里面将默认主屏幕应用改为ATV代替掉自带的桌面,并使用 5. 修改桌面可以进入安卓原生设置里面将默认主屏幕应用改为ATV代替掉自带的桌面,并使用
``` ```bash
adb shell pm disable-user --user 0 com.google.android.tvlauncher adb shell pm disable-user --user 0 com.google.android.tvlauncher
adb shell pm disable-user --user 0 com.google.android.tungsten.setupwraith adb shell pm disable-user --user 0 com.google.android.tungsten.setupwraith
``` ```

View File

@@ -140,12 +140,12 @@ tags = ["综合工程"]
**使用adb备份分区** **使用adb备份分区**
``` ```bash
adb shell ls -l /dev/block/bootdevice/by-name adb shell ls -l /dev/block/bootdevice/by-name
``` ```
可以看到有很多分区,例如这些 可以看到有很多分区,例如这些
``` ```bash
... ...
lrwxrwxrwx 1 root root 15 1970-12-24 11:30 frp -> /dev/block/sda5 lrwxrwxrwx 1 root root 15 1970-12-24 11:30 frp -> /dev/block/sda5
lrwxrwxrwx 1 root root 16 1970-12-24 11:30 fsc -> /dev/block/sdf13 lrwxrwxrwx 1 root root 16 1970-12-24 11:30 fsc -> /dev/block/sdf13
@@ -156,14 +156,14 @@ lrwxrwxrwx 1 root root 16 1970-12-24 11:30 hyp_b -> /dev/block/sde40
``` ```
随后使用root备份分区到手机上 随后使用root备份分区到手机上
``` ```bash
adb root adb root
adb shell "dd if=/dev/block/sda2 of=/sdcard/partition_backup/persist.img" adb shell "dd if=/dev/block/sda2 of=/sdcard/partition_backup/persist.img"
``` ```
然后可以上传到PC端 然后可以上传到PC端
``` ```bash
adb pull /sdcard/partition_backup/ ./backup/ adb pull /sdcard/partition_backup/ ./backup/
``` ```

View File

@@ -31,7 +31,7 @@ tags = ["综合工程"]
随后安装常用开源软件(KDE环境省略file和wayland) 随后安装常用开源软件(KDE环境省略file和wayland)
``` ```bash
# gui # gui
paru -S floorp-bin keepassxc qemu-full virt-manager materialgram-bin legcord-bin onlyoffice-bin localsend-bin kazumi-bin foliate vlc krita qtscrcpy strawberry oculante obs-studio paru -S floorp-bin keepassxc qemu-full virt-manager materialgram-bin legcord-bin onlyoffice-bin localsend-bin kazumi-bin foliate vlc krita qtscrcpy strawberry oculante obs-studio
@@ -90,7 +90,7 @@ paru -S hyprland waybar wofi network-manager-applet swww wl-gammarelay-rs bright
输入法我们采用雾凇拼音即前面我们安装的fcitx5系列软件包的一个输入方案这里我们使用[自动部署脚本](https://github.com/Mark24Code/rime-auto-deploy) 输入法我们采用雾凇拼音即前面我们安装的fcitx5系列软件包的一个输入方案这里我们使用[自动部署脚本](https://github.com/Mark24Code/rime-auto-deploy)
``` ```bash
# step1: 克隆/下载 latest 最新的稳定版到本地 # step1: 克隆/下载 latest 最新的稳定版到本地
git clone --depth=1 https://github.com/Mark24Code/rime-auto-deploy.git --branch latest git clone --depth=1 https://github.com/Mark24Code/rime-auto-deploy.git --branch latest
# step2: 进入项目目录 # step2: 进入项目目录
@@ -109,7 +109,7 @@ cd rime-auto-deploy
安装完毕后可以看到KDE的界面较为简陋这里给出笔者的美化配置 安装完毕后可以看到KDE的界面较为简陋这里给出笔者的美化配置
- 在设置中找到Colors&Themes分别设置为 - 在设置中找到Colors&Themes分别设置为
``` ```bash
- ColorBreeze Dark - ColorBreeze Dark
- Application StyleBreeze - Application StyleBreeze
- Plasma StyleSweet - Plasma StyleSweet
@@ -164,27 +164,27 @@ V2EX PolishV站美化
如果Grub引导菜单中没有windows选项可以通过以下方法添加 如果Grub引导菜单中没有windows选项可以通过以下方法添加
- 安装 os-prober首先确保系统中安装了 os-prober这是一个用于检测其他操作系统的工具。 - 安装 os-prober首先确保系统中安装了 os-prober这是一个用于检测其他操作系统的工具。
``` ```bash
sudo pacman -S os-prober sudo pacman -S os-prober
sudo os-prober sudo os-prober
``` ```
- 打开 /etc/default/grub 文件进行编辑: - 打开 /etc/default/grub 文件进行编辑:
``` ```bash
sudo nano /etc/default/grub sudo nano /etc/default/grub
# 确保 GRUB_DISABLE_OS_PROBER 设置为 false # 确保 GRUB_DISABLE_OS_PROBER 设置为 false
``` ```
- 保存文件并退出编辑器后,运行以下命令更新 GRUB 配置: - 保存文件并退出编辑器后,运行以下命令更新 GRUB 配置:
``` ```bash
sudo grub-mkconfig -o /boot/grub/grub.cfg sudo grub-mkconfig -o /boot/grub/grub.cfg
``` ```
或者``手动添加`` 或者``手动添加``
``` ```bash
nano /etc/grub.d/40_custom nano /etc/grub.d/40_custom
``` ```
``` ```bash
#!/bin/sh #!/bin/sh
exec tail -n +3 $0 exec tail -n +3 $0
# This file provides an easy way to add custom menu entries. Simply type the # This file provides an easy way to add custom menu entries. Simply type the
@@ -204,26 +204,26 @@ menuentry "Windows 11 (Manual)" {
如果virt-manager报错无法找到Qemu 如果virt-manager报错无法找到Qemu
- ​如果 libvirtd 服务未运行virt-manager 将无法连接到虚拟化环境。​ - ​如果 libvirtd 服务未运行virt-manager 将无法连接到虚拟化环境。​
``` ```bash
sudo systemctl start libvirtd sudo systemctl start libvirtd
sudo systemctl enable libvirtd sudo systemctl enable libvirtd
``` ```
- 用户权限问题:​​将当前用户添加到 libvirt 组,以获得必要的权限。​ - 用户权限问题:​​将当前用户添加到 libvirt 组,以获得必要的权限。​
``` ```bash
sudo usermod -aG libvirt $(whoami) sudo usermod -aG libvirt $(whoami)
``` ```
- 虚拟网络未激活virt-manager 可能无法连接到默认的虚拟网络。​ - 虚拟网络未激活virt-manager 可能无法连接到默认的虚拟网络。​
``` ```bash
sudo virsh net-start default sudo virsh net-start default
``` ```
默认网络在系统启动时自动启动,可以执行: 默认网络在系统启动时自动启动,可以执行:
``` ```bash
sudo virsh net-autostart default sudo virsh net-autostart default
``` ```
- 配置文件权限问题:​配置文件的权限设置可能导致访问问题。 - 配置文件权限问题:​配置文件的权限设置可能导致访问问题。
``` ```bash
sudo chown $(whoami):libvirt /var/run/libvirt/libvirt-sock sudo chown $(whoami):libvirt /var/run/libvirt/libvirt-sock
``` ```
随后安装虚拟机,流程大概为``选择镜像和系统类型--设置CPU/内存--设置空间大小--编辑配置项--开启UEFI引导和3D加速``. 随后安装虚拟机,流程大概为``选择镜像和系统类型--设置CPU/内存--设置空间大小--编辑配置项--开启UEFI引导和3D加速``.
@@ -231,7 +231,7 @@ sudo chown $(whoami):libvirt /var/run/libvirt/libvirt-sock
**开启3D加速** **开启3D加速**
- NIC - NIC
``` ```xml
<graphics type="spice"> <graphics type="spice">
<listen type="none"/> <listen type="none"/>
<image compression="off"/> <image compression="off"/>
@@ -240,7 +240,7 @@ sudo chown $(whoami):libvirt /var/run/libvirt/libvirt-sock
``` ```
- video virtio - video virtio
``` ```xml
<video> <video>
<model type="virtio" heads="1" primary="yes"> <model type="virtio" heads="1" primary="yes">
<acceleration accel3d="yes"/> <acceleration accel3d="yes"/>
@@ -255,17 +255,17 @@ sudo chown $(whoami):libvirt /var/run/libvirt/libvirt-sock
如果安装了多个linux内核可以使用以下方法调整启动顺序 如果安装了多个linux内核可以使用以下方法调整启动顺序
- 使用以下命令查看内核名称: - 使用以下命令查看内核名称:
``` ```bash
ls /boot/vmlinuz* ls /boot/vmlinuz*
``` ```
- 在 /etc/default/grub 中添加或修改如下行: - 在 /etc/default/grub 中添加或修改如下行:
``` ```bash
GRUB_TOP_LEVEL="/boot/vmlinuz-linux-cachyos" GRUB_TOP_LEVEL="/boot/vmlinuz-linux-cachyos"
``` ```
需要注意,这种方法会关闭 GRUB 的“记住上次启动项”的功能。 需要注意,这种方法会关闭 GRUB 的“记住上次启动项”的功能。
- 修改完 /etc/default/grub 后,记得重新生成 GRUB 配置文件: - 修改完 /etc/default/grub 后,记得重新生成 GRUB 配置文件:
``` ```bash
sudo grub-mkconfig -o /boot/grub/grub.cfg sudo grub-mkconfig -o /boot/grub/grub.cfg
``` ```
**图形界面更改方法:** **图形界面更改方法:**
@@ -273,12 +273,12 @@ sudo grub-mkconfig -o /boot/grub/grub.cfg
可以使用grub-customizer来修改Grub这里以ubuntu为例子 可以使用grub-customizer来修改Grub这里以ubuntu为例子
- 添加PPA源并更新软件列表 - 添加PPA源并更新软件列表
``` ```bash
sudo add-apt-repository ppa:danielrichter2007/grub-customizer sudo add-apt-repository ppa:danielrichter2007/grub-customizer
sudo apt update sudo apt update
``` ```
- 安装GRUB Customizer - 安装GRUB Customizer
``` ```bash
sudo apt install grub-customizer sudo apt install grub-customizer
``` ```
随后在grub-customizer中将要默认启动的选项放在首位即可。 随后在grub-customizer中将要默认启动的选项放在首位即可。
@@ -286,13 +286,13 @@ sudo apt install grub-customizer
## 开机自启动 ## 开机自启动
**设置Syncthing开机自启动** **设置Syncthing开机自启动**
``` ```bash
sudo systemctl enable --now syncthing@<username>.service sudo systemctl enable --now syncthing@<username>.service
``` ```
**设置Aria2开机自启动** **设置Aria2开机自启动**
``` ```conf
[Unit] [Unit]
Description=Aria2c - lightweight multi-protocol & multi-source command-line download utility Description=Aria2c - lightweight multi-protocol & multi-source command-line download utility
After=network.target After=network.target
@@ -315,41 +315,41 @@ WantedBy=multi-user.target
## 开启BBR ## 开启BBR
- 确保你的内核版本 >= 4.9 - 确保你的内核版本 >= 4.9
``` ```bash
uname -r uname -r
``` ```
- 启用 BBR - 启用 BBR
你只需要设置两个 sysctl 参数即可: 你只需要设置两个 sysctl 参数即可:
``` ```bash
sudo sysctl -w net.core.default_qdisc=fq sudo sysctl -w net.core.default_qdisc=fq
sudo sysctl -w net.ipv4.tcp_congestion_control=bbr sudo sysctl -w net.ipv4.tcp_congestion_control=bbr
``` ```
要让它们永久生效,把它们写入配置文件: 要让它们永久生效,把它们写入配置文件:
``` ```bash
sudo nano /etc/sysctl.d/99-bbr.conf sudo nano /etc/sysctl.d/99-bbr.conf
``` ```
加入以下内容: 加入以下内容:
``` ```bash
net.core.default_qdisc = fq net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr net.ipv4.tcp_congestion_control = bbr
``` ```
然后重新加载配置: 然后重新加载配置:
``` ```bash
sudo sysctl --system sudo sysctl --system
``` ```
- 验证 BBR 是否启用 - 验证 BBR 是否启用
``` ```bash
sysctl net.ipv4.tcp_congestion_control sysctl net.ipv4.tcp_congestion_control
``` ```
应该输出: 应该输出:
``` ```bash
net.ipv4.tcp_congestion_control = bbr net.ipv4.tcp_congestion_control = bbr
``` ```
## 性能模式切换 ## 性能模式切换
需要安装``power-profiles-daemon`` 需要安装``power-profiles-daemon``
``` ```bash
# 查看可用的电源配置文件profiles # 查看可用的电源配置文件profiles
powerprofilesctl list powerprofilesctl list
@@ -367,7 +367,7 @@ sudo powerprofilesctl set power-saver
``` ```
## 其他性能优化 ## 其他性能优化
``` ```bash
Profilesyncdaemon Profilesyncdaemon
将浏览器配置文件和缓存挂载到内存,退出时再写回磁盘: 将浏览器配置文件和缓存挂载到内存,退出时再写回磁盘:
@@ -395,7 +395,7 @@ sudo systemctl enable --now ananicy-cpp
## 常用命令 ## 常用命令
``` ```bash
更新系统sudo pacman -Syu 更新系统sudo pacman -Syu
重新安装所有软件包sudo pacman -Qq | sudo pacman -S - 重新安装所有软件包sudo pacman -Qq | sudo pacman -S -
@@ -426,28 +426,28 @@ sudo reflector --latest 10 --sort rate --save /etc/pacman.d/mirrorlist
## 在Arch Linux上安装Docker ## 在Arch Linux上安装Docker
一般推荐在qemu虚拟机中安装这里仅做示例 一般推荐在qemu虚拟机中安装这里仅做示例
``` ```bash
sudo pacman -S docker sudo pacman -S docker
``` ```
安装完成后需要启动Docker服务并设置为开机自启 安装完成后需要启动Docker服务并设置为开机自启
``` ```bash
sudo systemctl start docker sudo systemctl start docker
sudo systemctl enable docker sudo systemctl enable docker
``` ```
运行以下命令来验证Docker是否正常工作 运行以下命令来验证Docker是否正常工作
``` ```bash
sudo docker run hello-world sudo docker run hello-world
``` ```
默认情况下只有root用户才能运行Docker命令。为了避免每次运行Docker命令时都需要使用sudo可以将当前用户添加到docker组 默认情况下只有root用户才能运行Docker命令。为了避免每次运行Docker命令时都需要使用sudo可以将当前用户添加到docker组
``` ```bash
sudo usermod -aG docker $USER sudo usermod -aG docker $USER
``` ```
之后,需要注销并重新登录,或者重启系统以使更改生效。 之后,需要注销并重新登录,或者重启系统以使更改生效。
安装Docker Compose 安装Docker Compose
``` ```bash
sudo pacman -S docker-compose sudo pacman -S docker-compose
``` ```
--- ---

View File

@@ -129,7 +129,7 @@ uci commit luci
- **编译依赖** - **编译依赖**
``` ```bash
sudo apt update sudo apt update
sudo apt install -y \ sudo apt install -y \
ack antlr3 asciidoc autoconf automake autopoint binutils bison build-essential \ ack antlr3 asciidoc autoconf automake autopoint binutils bison build-essential \
@@ -147,32 +147,32 @@ sudo apt install -y \
``` ```
- **清理** - **清理**
``` ```bash
sudo apt autoremove --purge sudo apt autoremove --purge
sudo apt clean sudo apt clean
``` ```
- **新建一个用户,用于编译固件(可选)** - **新建一个用户,用于编译固件(可选)**
``` ```bash
useradd -m openwrt # 新建一个名为 openwrt 的用户 useradd -m openwrt # 新建一个名为 openwrt 的用户
``` ```
> 不可以使用Root用户进行编译!!! > 不可以使用Root用户进行编译!!!
- **修改用户默认的 Shell** - **修改用户默认的 Shell**
``` ```bash
apt install -y sudo apt install -y sudo
usermod -s /bin/bash openwrt usermod -s /bin/bash openwrt
``` ```
- **切换用户** - **切换用户**
``` ```bash
su openwrt su openwrt
cd ~ cd ~
``` ```
- **拉取源码,这里用的是 ImmortalWrt 24.10 分支源码:** - **拉取源码,这里用的是 ImmortalWrt 24.10 分支源码:**
``` ```bash
git clone https://github.com/immortalwrt/immortalwrt.git git clone https://github.com/immortalwrt/immortalwrt.git
cd immortalwrt cd immortalwrt
``` ```
@@ -180,11 +180,11 @@ cd immortalwrt
- **选择分支** - **选择分支**
如果你想要编译稳定版(stable),使用 如果你想要编译稳定版(stable),使用
``` ```bash
git checkout xxx #例如git checkout v24.10.2 git checkout xxx #例如git checkout v24.10.2
``` ```
如果你想要编译最新版(snapshot),使用 如果你想要编译最新版(snapshot),使用
``` ```bash
git switch xxx #例如git switch openwrt-24.10 git switch xxx #例如git switch openwrt-24.10
``` ```
@@ -211,19 +211,19 @@ git switch xxx #例如git switch openwrt-24.10
- **添加软件源,可自行添加软件源至 feeds.conf.default 文件** - **添加软件源,可自行添加软件源至 feeds.conf.default 文件**
``` ```bash
vim feeds.conf.default vim feeds.conf.default
``` ```
**常用源** **常用源**
``` ```bash
src-git kenzo https://github.com/kenzok8/openwrt-packages src-git kenzo https://github.com/kenzok8/openwrt-packages
src-git small https://github.com/kenzok8/small src-git small https://github.com/kenzok8/small
src-git haibo https://github.com/haiibo/openwrt-packages src-git haibo https://github.com/haiibo/openwrt-packages
src-git liuran001 https://github.com/liuran001/openwrt-packages src-git liuran001 https://github.com/liuran001/openwrt-packages
``` ```
**常用仓库** **常用仓库**
``` ```bash
src/gz kwrt_core https://dl.openwrt.ai/releases/24.10/targets/x86/64/6.6.83 src/gz kwrt_core https://dl.openwrt.ai/releases/24.10/targets/x86/64/6.6.83
src/gz kwrt_base https://dl.openwrt.ai/releases/24.10/packages/x86_64/base src/gz kwrt_base https://dl.openwrt.ai/releases/24.10/packages/x86_64/base
src/gz kwrt_packages https://dl.openwrt.ai/releases/24.10/packages/x86_64/packages src/gz kwrt_packages https://dl.openwrt.ai/releases/24.10/packages/x86_64/packages
@@ -234,12 +234,12 @@ src/gz kwrt_kiddin9 https://dl.openwrt.ai/releases/24.10/packages/x86_64/kiddin9
- **单独添加**(在更新并安装插件之前执行)例如: - **单独添加**(在更新并安装插件之前执行)例如:
``` ```bash
git clone https://github.com/chenmozhijin/turboacc.git git clone https://github.com/chenmozhijin/turboacc.git
``` ```
- **更新并安装插件** - **更新并安装插件**
``` ```bash
./scripts/feeds clean ./scripts/feeds clean
./scripts/feeds update -a ./scripts/feeds update -a
./scripts/feeds install -a ./scripts/feeds install -a
@@ -251,7 +251,7 @@ git clone https://github.com/chenmozhijin/turboacc.git
- **自定义配置** - **自定义配置**
``` ```bash
#!/usr/bin/env bash #!/usr/bin/env bash
# diy-part2.sh — 在镜像生成时注入默认设置和定制 SSH 横幅及模型修复 # diy-part2.sh — 在镜像生成时注入默认设置和定制 SSH 横幅及模型修复
@@ -319,7 +319,7 @@ chmod +x package/base-files/files/etc/uci-defaults/99-model-fix
### **编译配置菜单说明(部分)** ### **编译配置菜单说明(部分)**
``` ```bash
Target System (x86) # 选择目标平台 Target System (x86) # 选择目标平台
└── Subtarget (x86_64) # 选择 64-bit 子架构 └── Subtarget (x86_64) # 选择 64-bit 子架构
└── Target Profile (Generic) # “Generic” 表示通用 x86_64 设备 └── Target Profile (Generic) # “Generic” 表示通用 x86_64 设备
@@ -369,21 +369,21 @@ Xorg # 桌面环境支持X11 图形系统)
``` ```
- **预下载编译所需的软件包** - **预下载编译所需的软件包**
``` ```bash
make download -j8 make download -j8
``` ```
- **检查文件完整性** - **检查文件完整性**
``` ```bash
find dl -size -1024c -exec ls -l {} \; find dl -size -1024c -exec ls -l {} \;
``` ```
检查文件完整性命令可以列出下载不完整的文件小于1k的文件属于下载不完整如果存在则用下面的命令删除然后重新下载编译所需的软件包再次检查.确认所有文件完整可大大提高编译成功率,避免浪费时间 检查文件完整性命令可以列出下载不完整的文件小于1k的文件属于下载不完整如果存在则用下面的命令删除然后重新下载编译所需的软件包再次检查.确认所有文件完整可大大提高编译成功率,避免浪费时间
``` ```bash
find dl -size -1024c -exec rm -f {} \; find dl -size -1024c -exec rm -f {} \;
``` ```
- **最后编译固件(-j 后面是线程数首次编译推荐用单线程编译完成后输出路径是bin/targets.** - **最后编译固件(-j 后面是线程数首次编译推荐用单线程编译完成后输出路径是bin/targets.**
``` ```bash
make V=s -j1 make V=s -j1
或者使用 make world -j1 V=s 2>&1 | tee world_debug.log 或者使用 make world -j1 V=s 2>&1 | tee world_debug.log
@@ -411,7 +411,7 @@ make V=s -j1
| `make distclean` | 删除 `make dirclean` 的所有内容 + feeds 下载文件 + `.config`、patch 等所有状态 | 只有源码目录保持不变 | 专用于回到一个“零配置、重做一切”的状态,完全从头开始构建。 | | `make distclean` | 删除 `make dirclean` 的所有内容 + feeds 下载文件 + `.config`、patch 等所有状态 | 只有源码目录保持不变 | 专用于回到一个“零配置、重做一切”的状态,完全从头开始构建。 |
恢复所有修改(包括未跟踪文件): 恢复所有修改(包括未跟踪文件):
``` ```bash
git clean -fd git clean -fd
git restore --source=v24.10.2 --staged --worktree . git restore --source=v24.10.2 --staged --worktree .
``` ```
@@ -437,26 +437,26 @@ git restore --source=v24.10.2 --staged --worktree .
要启用的软件包: 要启用的软件包:
**base** **base**
``` ```bash
autocore base-files bash block-mount ca-bundle coremark curl dnsmasq-full dropbear ds-lite e2fsprogs fdisk firewall4 fstools grub2-bios-setup htop kmod-8139cp kmod-8139too kmod-amazon-ena kmod-amd-xgbe kmod-atlantic kmod-bnx2 kmod-bnx2x kmod-button-hotplug kmod-drm-amdgpu kmod-drm-i915 kmod-dwmac-intel kmod-e1000 kmod-e1000e kmod-forcedeth kmod-fs-f2fs kmod-fs-vfat kmod-i40e kmod-iavf kmod-igb kmod-igbvf kmod-igc kmod-ixgbe kmod-ixgbevf kmod-lib-zstd kmod-mlx4-core kmod-mlx5-core kmod-mmc kmod-pcnet32 kmod-phy-broadcom kmod-r8101 kmod-r8125 kmod-r8126 kmod-r8168 kmod-sdhci kmod-tcp-bbr kmod-tg3 kmod-tulip kmod-usb-hid kmod-vmxnet3 libc libgcc libustream-mbedtls lm-sensors-detect logd lsblk luci-app-fan luci-app-filemanager luci-app-firewall luci-app-log-viewer luci-app-package-manager luci-app-syscontrol luci-app-upnp luci-base luci-compat luci-lib-fs luci-lib-ipkg mkf2fs mtd nano netifd odhcp6c odhcpd-ipv6only openssh-sftp-server opkg partx-utils pciutils ppp ppp-mod-pppoe resolveip swconfig uci uclient-fetch urandom-seed urngd usbutils wget-ssl zram-swap autocore base-files bash block-mount ca-bundle coremark curl dnsmasq-full dropbear ds-lite e2fsprogs fdisk firewall4 fstools grub2-bios-setup htop kmod-8139cp kmod-8139too kmod-amazon-ena kmod-amd-xgbe kmod-atlantic kmod-bnx2 kmod-bnx2x kmod-button-hotplug kmod-drm-amdgpu kmod-drm-i915 kmod-dwmac-intel kmod-e1000 kmod-e1000e kmod-forcedeth kmod-fs-f2fs kmod-fs-vfat kmod-i40e kmod-iavf kmod-igb kmod-igbvf kmod-igc kmod-ixgbe kmod-ixgbevf kmod-lib-zstd kmod-mlx4-core kmod-mlx5-core kmod-mmc kmod-pcnet32 kmod-phy-broadcom kmod-r8101 kmod-r8125 kmod-r8126 kmod-r8168 kmod-sdhci kmod-tcp-bbr kmod-tg3 kmod-tulip kmod-usb-hid kmod-vmxnet3 libc libgcc libustream-mbedtls lm-sensors-detect logd lsblk luci-app-fan luci-app-filemanager luci-app-firewall luci-app-log-viewer luci-app-package-manager luci-app-syscontrol luci-app-upnp luci-base luci-compat luci-lib-fs luci-lib-ipkg mkf2fs mtd nano netifd odhcp6c odhcpd-ipv6only openssh-sftp-server opkg partx-utils pciutils ppp ppp-mod-pppoe resolveip swconfig uci uclient-fetch urandom-seed urngd usbutils wget-ssl zram-swap
``` ```
**cli** **cli**
``` ```bash
btop iperf3 tcpdump btop iperf3 tcpdump
``` ```
**luci** **luci**
``` ```bash
luci-app-argon luci-app-upnp luci-app-ttyd luci-app-eqosplus luci-app-timecontrol luci-app-parentcontrol luci-app-homeproxy luci-app-daed luci-app-argon luci-app-upnp luci-app-ttyd luci-app-eqosplus luci-app-timecontrol luci-app-parentcontrol luci-app-homeproxy luci-app-daed
``` ```
**lib** **lib**
``` ```bash
kmod-ipt-conntrack kmod-ipt-nat kmod-nft-compat kmod-ipt-fullconenat kmod-ip6tables ca-certificates kmod-ipt-conntrack kmod-ipt-nat kmod-nft-compat kmod-ipt-fullconenat kmod-ip6tables ca-certificates
``` ```
## 使用SDK快速编译包 ## 使用SDK快速编译包
首先新建一个文件夹并将SDK克隆下来 首先新建一个文件夹并将SDK克隆下来
``` ```bash
mkdir imwrt-sdk mkdir imwrt-sdk
cd ./imwrt-sdk cd ./imwrt-sdk
wget https://downloads.immortalwrt.org/snapshots/targets/mediatek/filogic/immortalwrt-sdk-mediatek-filogic_gcc-14.3.0_musl.Linux-x86_64.tar.zst wget https://downloads.immortalwrt.org/snapshots/targets/mediatek/filogic/immortalwrt-sdk-mediatek-filogic_gcc-14.3.0_musl.Linux-x86_64.tar.zst
@@ -464,13 +464,13 @@ wget https://downloads.immortalwrt.org/snapshots/targets/mediatek/filogic/immort
新版本的SDK使用ZSTD压缩因此解压的命令为 新版本的SDK使用ZSTD压缩因此解压的命令为
``` ```bash
tar -I zstd -xvf ./immortalwrt-sdk-mediatek-filogic_gcc-14.3.0_musl.Linux-x86_64.tar.zst tar -I zstd -xvf ./immortalwrt-sdk-mediatek-filogic_gcc-14.3.0_musl.Linux-x86_64.tar.zst
``` ```
随后进入该目录并和一般流程一样更新Feeds 随后进入该目录并和一般流程一样更新Feeds
``` ```bash
cd ./immortalwrt-sdk-mediatek-filogic_gcc-14.3.0_musl.Linux-x86_64/ cd ./immortalwrt-sdk-mediatek-filogic_gcc-14.3.0_musl.Linux-x86_64/
./scripts/feeds update -a ./scripts/feeds update -a
./scripts/feeds install -a ./scripts/feeds install -a
@@ -478,7 +478,7 @@ cd ./immortalwrt-sdk-mediatek-filogic_gcc-14.3.0_musl.Linux-x86_64/
更新完成后克隆你要编译的包的源码到package下 更新完成后克隆你要编译的包的源码到package下
``` ```bash
cd ./package/ cd ./package/
git clone https://github.com/Dichgrem/luci-app-nyn.git git clone https://github.com/Dichgrem/luci-app-nyn.git
cp ./luci-app-nyn/luci-app-zzz ./ cp ./luci-app-nyn/luci-app-zzz ./
@@ -489,7 +489,7 @@ cd ../
随后开始编译编译结果在对应架构的base目录下 随后开始编译编译结果在对应架构的base目录下
``` ```bash
make package/luci-app-zzz/compile V=s make package/luci-app-zzz/compile V=s
~/imwrt-sdk/immortalwrt-sdk-24.10.3-x86-64_gcc-13.3.0_musl.Linux-x86_64 dich@uos ~/imwrt-sdk/immortalwrt-sdk-24.10.3-x86-64_gcc-13.3.0_musl.Linux-x86_64 dich@uos
@@ -498,7 +498,7 @@ make package/luci-app-zzz/compile V=s
``` ```
## 常用命令: ## 常用命令:
``` ```bash
# 更新软件列表 # 更新软件列表
opkg update opkg update

View File

@@ -28,21 +28,21 @@ Waydroid是Anbox配合Halium技术开发的LXC Android容器可在GNU/Linux
目前Waydroid只支持Intel和AMD的显卡对于 NVIDIA 显卡(除 Tegra 系列外Waydroid 不支持硬件加速推荐使用软件渲染或QEMU方案。 目前Waydroid只支持Intel和AMD的显卡对于 NVIDIA 显卡(除 Tegra 系列外Waydroid 不支持硬件加速推荐使用软件渲染或QEMU方案。
- Waydroid必须使用Wayland用此命令检查当前系统是否为Wayland - Waydroid必须使用Wayland用此命令检查当前系统是否为Wayland
``` ```bash
echo $XDG_SESSION_TYPE echo $XDG_SESSION_TYPE
``` ```
若显示X11代表不是Wayland。GNOME和KDE可在登入画面切换至Wayland工作阶段。 若显示X11代表不是Wayland。GNOME和KDE可在登入画面切换至Wayland工作阶段。
- Waydroid要求Linux核心支持binder核心模组但Arch Linux预设的linux核心並无开启此选项因此需要从AUR安装binder_linux-dkms补齐。 - Waydroid要求Linux核心支持binder核心模组但Arch Linux预设的linux核心並无开启此选项因此需要从AUR安装binder_linux-dkms补齐。
``` ```bash
paru -S binder_linux-dkms paru -S binder_linux-dkms
``` ```
- 安装后载入binder核心模组 - 安装后载入binder核心模组
``` ```bash
sudo modprobe binder-linux devices=binder,hwbinder,vndbinder sudo modprobe binder-linux devices=binder,hwbinder,vndbinder
``` ```
- 设定开机自动载入核心模组 - 设定开机自动载入核心模组
``` ```bash
echo "binder_linux" | sudo tee -a /etc/modules-load.d/binder_linux.conf echo "binder_linux" | sudo tee -a /etc/modules-load.d/binder_linux.conf
echo "options binder_linux devices=binder,hwbinder,vndbinder" | sudo tee -a /etc/modprobe.d/binder_linux.conf echo "options binder_linux devices=binder,hwbinder,vndbinder" | sudo tee -a /etc/modprobe.d/binder_linux.conf
@@ -51,36 +51,36 @@ echo "options binder_linux devices=binder,hwbinder,vndbinder" | sudo tee -a /etc
## 安装Waydroid ## 安装Waydroid
- 安装以下软件包让Linux与Waydroid共享剪切板 - 安装以下软件包让Linux与Waydroid共享剪切板
``` ```bash
paru -S wl-clipboard xclip paru -S wl-clipboard xclip
paru -S python-pyclip paru -S python-pyclip
``` ```
- 安装Waydroid - 安装Waydroid
``` ```bash
paru -S waydroid paru -S waydroid
``` ```
- 初始化Waydroid下载含有GAPPS的Android系统映像档 - 初始化Waydroid下载含有GAPPS的Android系统映像档
``` ```bash
sudo waydroid init -s GAPPS -f sudo waydroid init -s GAPPS -f
``` ```
- 启动Waydroid容器服务 - 启动Waydroid容器服务
``` ```bash
sudo systemctl start waydroid-container sudo systemctl start waydroid-container
``` ```
## 常用命令 ## 常用命令
- 开机自动启动 - 开机自动启动
``` ```bash
sudo systemctl enable waydroid-container sudo systemctl enable waydroid-container
``` ```
- 点选应用列表的「Waydroid」图示开启主画面或者使用命令 - 点选应用列表的「Waydroid」图示开启主画面或者使用命令
``` ```bash
waydroid show-full-ui waydroid show-full-ui
``` ```
- 若Waydroid无法连上网路开放UFW防火墙 - 若Waydroid无法连上网路开放UFW防火墙
``` ```bash
sudo ufw allow 53 sudo ufw allow 53
sudo ufw allow 67 sudo ufw allow 67
sudo ufw default allow FORWARD sudo ufw default allow FORWARD
@@ -88,21 +88,21 @@ sudo ufw reload
sudo systemctl restart waydroid-container sudo systemctl restart waydroid-container
``` ```
- 重启Waydroid - 重启Waydroid
``` ```bash
sudo systemctl restart waydroid-container sudo systemctl restart waydroid-container
``` ```
- 启动/停止Waydroid容器服务 - 启动/停止Waydroid容器服务
``` ```bash
sudo systemctl start waydroid-container sudo systemctl start waydroid-container
sudo systemctl stop waydroid-container sudo systemctl stop waydroid-container
``` ```
- 用命令开启Waydroid主画面 - 用命令开启Waydroid主画面
``` ```bash
waydroid show-full-ui waydroid show-full-ui
``` ```
- 查看系统错误讯息 - 查看系统错误讯息
``` ```bash
waydroid log waydroid log
sudo waydroid logcat sudo waydroid logcat
``` ```
@@ -116,35 +116,35 @@ sudo waydroid logcat
安装Package Manager用於查看APP的软件包名称。 安装Package Manager用於查看APP的软件包名称。
部份APP会要求开启Wifi才能上网那么就如它所愿开启fake wifi 部份APP会要求开启Wifi才能上网那么就如它所愿开启fake wifi
``` ```bash
waydroid prop set persist.waydroid.fake_wifi "软件包名称" waydroid prop set persist.waydroid.fake_wifi "软件包名称"
``` ```
例如给Fate/Go游戏开启模拟Wifi 例如给Fate/Go游戏开启模拟Wifi
``` ```bash
waydroid prop set persist.waydroid.fake_wifi "com.aniplex.fategrandorder" waydroid prop set persist.waydroid.fake_wifi "com.aniplex.fategrandorder"
``` ```
- 模拟触控功能 - 模拟触控功能
安装Package Manager用於查看APP的软件包名称。有些APP认不到鼠标点击需要启用模拟触控(fake touch) 安装Package Manager用於查看APP的软件包名称。有些APP认不到鼠标点击需要启用模拟触控(fake touch)
``` ```bash
waydroid prop set persist.waydroid.fake_touch "软件包名称" waydroid prop set persist.waydroid.fake_touch "软件包名称"
``` ```
例如给Fate/Go游戏开启模拟触控 例如给Fate/Go游戏开启模拟触控
``` ```bash
waydroid prop set persist.waydroid.fake_touch "com.aniplex.fategrandorder" waydroid prop set persist.waydroid.fake_touch "com.aniplex.fategrandorder"
``` ```
- 用命令安装APK - 用命令安装APK
``` ```bash
waydroid app install <APK档案路径>.apk waydroid app install <APK档案路径>.apk
``` ```
- 进入ADB Shell - 进入ADB Shell
``` ```bash
sudo waydroid shell sudo waydroid shell
``` ```
- 开启多视窗模式 - 开启多视窗模式
Waydroid的多视窗模式看起来像Linux的原生应用。启动后按F11改回来。 Waydroid的多视窗模式看起来像Linux的原生应用。启动后按F11改回来。
``` ```bash
waydroid prop set persist.waydroid.multi_windows true waydroid prop set persist.waydroid.multi_windows true
sudo systemctl restart waydroid-container sudo systemctl restart waydroid-container
``` ```
@@ -154,13 +154,13 @@ sudo systemctl restart waydroid-container
Waydroid第一次开机可能会收到``Device is not Play Protect certified``的通知无法登入Google账号。 Waydroid第一次开机可能会收到``Device is not Play Protect certified``的通知无法登入Google账号。
用以下命令取得Waydroid的装置ID。该命令会印出一长串数字。 用以下命令取得Waydroid的装置ID。该命令会印出一长串数字。
``` ```bash
sudo waydroid shell sudo waydroid shell
ANDROID_RUNTIME_ROOT=/apex/com.android.runtime ANDROID_DATA=/data ANDROID_TZDATA_ROOT=/apex/com.android.tzdata ANDROID_I18N_ROOT=/apex/com.android.i18n sqlite3 /data/data/com.google.android.gsf/databases/gservices.db "select * from main where name = \"android_id\";" ANDROID_RUNTIME_ROOT=/apex/com.android.runtime ANDROID_DATA=/data ANDROID_TZDATA_ROOT=/apex/com.android.tzdata ANDROID_I18N_ROOT=/apex/com.android.i18n sqlite3 /data/data/com.google.android.gsf/databases/gservices.db "select * from main where name = \"android_id\";"
``` ```
开启装置注册页面登入Google账号输入装置ID注册等个半小时应该就能登入Google账号了。如果还是不行就重新启动Waydroid容器服务 开启装置注册页面登入Google账号输入装置ID注册等个半小时应该就能登入Google账号了。如果还是不行就重新启动Waydroid容器服务
``` ```bash
sudo systemctl restart waydroid-container sudo systemctl restart waydroid-container
``` ```
现在可以安装APP了Google Play和F-Droid会自动筛出適合x86架构的APP。 现在可以安装APP了Google Play和F-Droid会自动筛出適合x86架构的APP。
@@ -267,18 +267,18 @@ ReDroidRemote-Android是一款开源的容器化 Android 解决方案,
## 日常使用 ## 日常使用
- **ADB 连接与屏幕镜像** - **ADB 连接与屏幕镜像**
```bash ```bash
adb connect localhost:5555 adb connect localhost:5555
scrcpy -s localhost:5555 --audio-codec=aac scrcpy -s localhost:5555 --audio-codec=aac
``` ```
- **安装 APK** - **安装 APK**
- 使用 `adb install your_app.apk` - 使用 `adb install your_app.apk`
- 或在 Scrcpy 界面中拖拽 APK 文件进行安装 - 或在 Scrcpy 界面中拖拽 APK 文件进行安装
- **停止与重启** - **停止与重启**
```bash ```bash
sudo docker compose down sudo docker compose down
sudo docker compose up -d sudo docker compose up -d
``` ```
- **数据持久化**:所有数据保存在 `~/redroid/redroid-11-data`,可备份或运行多实例。 - **数据持久化**:所有数据保存在 `~/redroid/redroid-11-data`,可备份或运行多实例。
## 高级操作与安全建议 ## 高级操作与安全建议

View File

@@ -211,7 +211,7 @@ Linux 的权限可以简单理解为``UGO+RWX``.
- Linux命令查询[linux-command](https://wangchujiang.com/linux-command/hot.html) - Linux命令查询[linux-command](https://wangchujiang.com/linux-command/hot.html)
- Linux常用命令表[Quick Reference](https://wangchujiang.com/reference/docs/linux-command.html) - Linux常用命令表[Quick Reference](https://wangchujiang.com/reference/docs/linux-command.html)
``` ```bash
date date
Sun Nov 16 09:16:15 PM +08 2025 Sun Nov 16 09:16:15 PM +08 2025
uname -a uname -a
@@ -243,7 +243,7 @@ which ls
- 在一些精简 Linux例如 Alpine、OpenWrt中命令不来自 GNU coreutils而来自一个叫 **BusyBox** 的单程序。BusyBox 只一个二进制文件,但内部包含了上百个命令,这种方式体积小,适用于嵌入式设备。 - 在一些精简 Linux例如 Alpine、OpenWrt中命令不来自 GNU coreutils而来自一个叫 **BusyBox** 的单程序。BusyBox 只一个二进制文件,但内部包含了上百个命令,这种方式体积小,适用于嵌入式设备。
``` ```bash
/bin/busybox ls /bin/busybox ls
/bin/busybox cp /bin/busybox cp
/bin/busybox tar /bin/busybox tar

View File

@@ -15,7 +15,7 @@ tags = ["Linux"]
- **Ubuntu** - **Ubuntu**
以ubuntu24.04为例,首先安装这些包,包括连接工具,工具链和调试器等等。 以ubuntu24.04为例,首先安装这些包,包括连接工具,工具链和调试器等等。
```shell ```bash
sudo apt update sudo apt update
sudo apt install -y git python3 scons openocd stlink-tools gcc-arm-none-eabi gdb-multiarch sudo apt install -y git python3 scons openocd stlink-tools gcc-arm-none-eabi gdb-multiarch
``` ```
@@ -58,7 +58,7 @@ sudo apt install -y git python3 scons openocd stlink-tools gcc-arm-none-eabi gdb
随后使用Git拉取项目源码 随后使用Git拉取项目源码
```shell ```bash
git clone https://github.com/RT-Thread-Studio/sdk-bsp-stm32f407-spark.git git clone https://github.com/RT-Thread-Studio/sdk-bsp-stm32f407-spark.git
``` ```
@@ -66,7 +66,7 @@ git clone https://github.com/RT-Thread-Studio/sdk-bsp-stm32f407-spark.git
使用Git拉取RT-Thread配套的linux开发环境并添加Shell变量。 使用Git拉取RT-Thread配套的linux开发环境并添加Shell变量。
```shell ```bash
# 克隆仓库 # 克隆仓库
git clone https://github.com/RT-Thread/env.git ~/env git clone https://github.com/RT-Thread/env.git ~/env
# 将 ~/env 添加到 PATH # 将 ~/env 添加到 PATH
@@ -79,7 +79,7 @@ type pkgs
随后可以使用PKG初始化并安装两个必要的包 随后可以使用PKG初始化并安装两个必要的包
```shell ```bash
pkgs --update pkgs --update
pip install kconfiglib pip install kconfiglib
pip install scons pip install scons
@@ -88,14 +88,14 @@ pip install scons
## 连接 ## 连接
使用USB线连接开发板和开发PC并使用lsusb命令查看是否出现 使用USB线连接开发板和开发PC并使用lsusb命令查看是否出现
```shell ```bash
lsusb lsusb
Bus 001 Device 004: ID 0483:374b STMicroelectronics ST-LINK/V2.1 Bus 001 Device 004: ID 0483:374b STMicroelectronics ST-LINK/V2.1
``` ```
添加成功后可以使用这个命令来检测是否连接成功: 添加成功后可以使用这个命令来检测是否连接成功:
```shell ```bash
st-info --probe st-info --probe
Found 1 stlink programmers Found 1 stlink programmers
version: V2J35S26 version: V2J35S26
@@ -149,11 +149,11 @@ elif CROSS_TOOL == 'llvm-arm':
## 编译 ## 编译
在完成以上设置之后我们可以开始编译。STM32使用scons编译系统同样是menuconfig命令 在完成以上设置之后我们可以开始编译。STM32使用scons编译系统同样是menuconfig命令
```shell ```bash
scons --menuconfig scons --menuconfig
``` ```
修改配置并保存退出后即可开始编译,$(nproc)代表使用全部CPU线程来编译 修改配置并保存退出后即可开始编译,$(nproc)代表使用全部CPU线程来编译
```shell ```bash
scons -j$(nproc) scons -j$(nproc)
``` ```
@@ -163,18 +163,18 @@ scons -j$(nproc)
在烧入之前,我们可以备份一下原来的系统: 在烧入之前,我们可以备份一下原来的系统:
```shell ```bash
st-flash read firmware_backup.bin 0x08000000 0x100001 st-flash read firmware_backup.bin 0x08000000 0x100001
``` ```
随后使用如下命令烧入系统: 随后使用如下命令烧入系统:
```shell ```bash
st-flash write rtthread.bin 0x08000000 st-flash write rtthread.bin 0x08000000
``` ```
## 串口 ## 串口
除了USB之外我们还可以使用串口连接 除了USB之外我们还可以使用串口连接
```shell ```bash
sudo apt install picocom sudo apt install picocom
picocom -b 115200 /dev/ttyACM0 picocom -b 115200 /dev/ttyACM0
``` ```

View File

@@ -113,7 +113,7 @@ keytool -genkey -v \
``` ```
- 修改app/build.gradle.kts - 修改app/build.gradle.kts
```bash ```java
signingConfigs { signingConfigs {
create("release") { create("release") {
storeFile = System.getenv("KEYSTORE_FILE")?.let { file(it) } storeFile = System.getenv("KEYSTORE_FILE")?.let { file(it) }

View File

@@ -13,11 +13,11 @@ tags = ["Windows"]
开机之前先断网然后输入Shift+F10会弹出命令行界面并输入 开机之前先断网然后输入Shift+F10会弹出命令行界面并输入
`` ``bash
oobe\BypassNRO.cmd oobe\BypassNRO.cmd
`` ``
回车之后会重启,之后就可以跳过联网了,选择 回车之后会重启,之后就可以跳过联网了,选择
`` ``bash
I don't have internet I don't have internet
`` ``
即可。 即可。
@@ -36,7 +36,7 @@ I don't have internet
## 激活windows ## 激活windows
这里使用MAS的脚本: 这里使用MAS的脚本:
``` ```bash
irm https://get.activated.win | iex irm https://get.activated.win | iex
``` ```
@@ -48,7 +48,7 @@ irm https://get.activated.win | iex
3.然后就可以使用脚本彻底关闭更新:将以下命令保存为.bat文件运行即可。 3.然后就可以使用脚本彻底关闭更新:将以下命令保存为.bat文件运行即可。
``` ```bat
::Windows auomatic updates ::Windows auomatic updates
reg add HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU /v AutoInstallMinorUpdates /t REG_DWORD /d 1 /f reg add HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU /v AutoInstallMinorUpdates /t REG_DWORD /d 1 /f
reg add HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU /v NoAutoUpdate /t REG_DWORD /d 1 /f reg add HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU /v NoAutoUpdate /t REG_DWORD /d 1 /f
@@ -71,7 +71,7 @@ reg add HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings /v Pause
reg add HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings /v PauseQualityUpdatesEndTime /t REG_SZ /d "2100-01-01T00:00:00Z" /f reg add HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings /v PauseQualityUpdatesEndTime /t REG_SZ /d "2100-01-01T00:00:00Z" /f
``` ```
如果要恢复更新,使用以下命令,同样保存为.bat运行 如果要恢复更新,使用以下命令,同样保存为.bat运行
``` ```bat
::Windows auomatic updates ::Windows auomatic updates
reg add HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU /v AutoInstallMinorUpdates /t REG_DWORD /d 0 /f reg add HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU /v AutoInstallMinorUpdates /t REG_DWORD /d 0 /f
reg add HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU /v NoAutoUpdate /t REG_DWORD /d 0 /f reg add HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU /v NoAutoUpdate /t REG_DWORD /d 0 /f
@@ -103,17 +103,17 @@ Win11的`显示更多选项`的二级菜单过于繁琐,怎么设置才能将
**步骤2.** 输入以下命令并按**Enter**键执行。 **步骤2.** 输入以下命令并按**Enter**键执行。
``` ```bash
reg add HKCU\Software\Classes\CLSID{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32 /ve /d “” /f reg add HKCU\Software\Classes\CLSID{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32 /ve /d “” /f
``` ```
或者 或者
``` ```bash
reg add "HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32" /f /ve reg add "HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32" /f /ve
taskkill /f /im explorer.exe taskkill /f /im explorer.exe
start explorer.exe start explorer.exe
``` ```
如果想要重新打开Win11新样式的右键菜单的话以同样的方式在命令提示符中执行此命令 如果想要重新打开Win11新样式的右键菜单的话以同样的方式在命令提示符中执行此命令
``` ```bash
reg delete "HKCU\Software\Classes\CLSID{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}" /f reg delete "HKCU\Software\Classes\CLSID{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}" /f
``` ```
## Win11关闭 Windows Defender ## Win11关闭 Windows Defender
@@ -151,7 +151,7 @@ pool.ntp.org一个公共的 NTP 时间服务器池)
应用更改:点击 "更新现在",然后 "确定" 保存设置。 应用更改:点击 "更新现在",然后 "确定" 保存设置。
- 如果有linux/win双系统可以让 Windows 使用 UTC 作为硬件时钟时间: - 如果有linux/win双系统可以让 Windows 使用 UTC 作为硬件时钟时间:
``` ```bash
# 在 Windows 中以管理员权限运行命令提示符,执行: # 在 Windows 中以管理员权限运行命令提示符,执行:
reg add "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TimeZoneInformation" /v RealTimeIsUniversal /t REG_DWORD /d 1 /f reg add "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TimeZoneInformation" /v RealTimeIsUniversal /t REG_DWORD /d 1 /f
``` ```
@@ -159,11 +159,11 @@ reg add "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TimeZoneInformation
## 调整网络优先级 ## 调整网络优先级
- 查看当前优先级PowerShell/管理员) - 查看当前优先级PowerShell/管理员)
``` ```bash
Get-NetIPInterface Get-NetIPInterface
``` ```
你会看到类似: 你会看到类似:
``` ```bash
IfIndex InterfaceMetric InterfaceAlias IfIndex InterfaceMetric InterfaceAlias
------- -------------- -------------- ------- -------------- --------------
15 25 Wi-Fi 15 25 Wi-Fi
@@ -174,15 +174,15 @@ IfIndex InterfaceMetric InterfaceAlias
- 修改网络优先级 - 修改网络优先级
将有线网络(以太网) 设为更高优先级(值更小): 将有线网络(以太网) 设为更高优先级(值更小):
``` ```bash
Set-NetIPInterface -InterfaceIndex 3 -InterfaceMetric 10 Set-NetIPInterface -InterfaceIndex 3 -InterfaceMetric 10
``` ```
- 将 WiFi 设为更低优先级: - 将 WiFi 设为更低优先级:
``` ```bash
Set-NetIPInterface -InterfaceIndex 15 -InterfaceMetric 25 Set-NetIPInterface -InterfaceIndex 15 -InterfaceMetric 25
``` ```
- 重启网络 - 重启网络
``` ```bash
Restart-NetAdapter -Name "以太网" Restart-NetAdapter -Name "以太网"
``` ```
这样当网线插入时Windows 会优先使用有线网络;断开网线后,自动切换到 WiFi。 这样当网线插入时Windows 会优先使用有线网络;断开网线后,自动切换到 WiFi。
@@ -191,7 +191,7 @@ Restart-NetAdapter -Name "以太网"
- 如需永久设置,可修改注册表: - 如需永久设置,可修改注册表:
Win + R 输入 regedit 打开注册表编辑器,进入路径: Win + R 输入 regedit 打开注册表编辑器,进入路径:
``` ```bash
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces
``` ```
在 Interfaces 里找到你的有线网卡和无线网卡(可以根据 IP 或 MAC 地址确认)。 在 Interfaces 里找到你的有线网卡和无线网卡(可以根据 IP 或 MAC 地址确认)。
@@ -207,7 +207,7 @@ HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces
> 保存为.bat格式 > 保存为.bat格式
``` ```bat
@echo off @echo off
REM 清理代理设置 REM 清理代理设置
REG DELETE "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable /f REG DELETE "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable /f
@@ -219,7 +219,7 @@ echo 代理设置已清除
> 保存为.reg格式 > 保存为.reg格式
开启3D加速 开启3D加速
``` ```bat
Windows Registry Editor Version 5.00 Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DirectDraw] [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DirectDraw]
"EmulationOnly"=dword:00000000 "EmulationOnly"=dword:00000000
@@ -232,7 +232,7 @@ Windows Registry Editor Version 5.00
``` ```
关闭3D加速 关闭3D加速
``` ```bat
Windows Registry Editor Version 5.00 Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DirectDraw] [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DirectDraw]
"EmulationOnly"=dword:00000001 "EmulationOnly"=dword:00000001

View File

@@ -28,7 +28,7 @@ Python是一种跨平台的编程语言,社区生态丰富,有许多现成的
安装好了Anaconda就相当于同时有了Python、环境管理器、包管理器以及一大堆开箱即用的科学计算工具包。 安装好了Anaconda就相当于同时有了Python、环境管理器、包管理器以及一大堆开箱即用的科学计算工具包。
> linux中安装Miniconda > linux中安装Miniconda
``` ```bash
# Miniconda安装脚本 # Miniconda安装脚本
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
# 执行以下命令启动安装程序: # 执行以下命令启动安装程序:
@@ -40,39 +40,39 @@ conda --version
## 使用 ## 使用
- 创建环境后面的python=3.6是指定python的版本 - 创建环境后面的python=3.6是指定python的版本
``` ```bash
conda create --name env_name python=3.6 conda create --name env_name python=3.6
``` ```
- 创建包含某些包的环境(也可以加上版本信息) - 创建包含某些包的环境(也可以加上版本信息)
``` ```bash
conda create --name env_name python=3.7 numpy scrapy conda create --name env_name python=3.7 numpy scrapy
``` ```
- 激活某个环境 - 激活某个环境
``` ```bash
conda activate env_name conda activate env_name
``` ```
- 关闭某个环境 - 关闭某个环境
``` ```bash
conda deactivate env_name conda deactivate env_name
``` ```
- 复制某个环境 - 复制某个环境
``` ```bash
conda create --name new_env_name --clone old_env_name conda create --name new_env_name --clone old_env_name
``` ```
- 删除某个环境 - 删除某个环境
``` ```bash
conda remove --name env_name --all conda remove --name env_name --all
``` ```
- 生成需要分享环境的yml文件需要在虚拟环境中执行 - 生成需要分享环境的yml文件需要在虚拟环境中执行
``` ```bash
conda env export > environment.yml conda env export > environment.yml
``` ```
- 在本地使用yml文件创建虚拟环境 - 在本地使用yml文件创建虚拟环境
``` ```bash
conda env create -f environment.yml conda env create -f environment.yml
``` ```
- 列出本机的所有环境如下可见当前有2个环境当前激活的是test环境 - 列出本机的所有环境如下可见当前有2个环境当前激活的是test环境
``` ```bash
(test) ➜ ~ conda info -e (test) ➜ ~ conda info -e
- conda environments: - conda environments:
# #
@@ -83,47 +83,47 @@ test * /Volumes/300g/opt/anaconda3/envs/test
### 包管理 ### 包管理
- 列出当前环境下所有安装的包 - 列出当前环境下所有安装的包
``` ```bash
conda list conda list
``` ```
- 列举一个指定环境下的所有包 - 列举一个指定环境下的所有包
``` ```bash
conda list -n env_name conda list -n env_name
``` ```
- 查询库 - 查询库
``` ```bash
conda search scrapys conda search scrapys
``` ```
- 安装库安装时可以指定版本例如scrapy=1.5.0 - 安装库安装时可以指定版本例如scrapy=1.5.0
``` ```bash
conda install scrapy conda install scrapy
``` ```
- 为指定环境安装某个包 - 为指定环境安装某个包
``` ```bash
conda install --name target_env_name package_name conda install --name target_env_name package_name
``` ```
- 更新安装的库 - 更新安装的库
``` ```bash
conda update scrapy conda update scrapy
``` ```
- 更新指定环境某个包 - 更新指定环境某个包
``` ```bash
conda update -n target_env_name package_name conda update -n target_env_name package_name
``` ```
- 更新所有包 - 更新所有包
``` ```bash
conda update --all conda update --all
``` ```
- 删除已经安装的库 - 删除已经安装的库
``` ```bash
conda remove scrapy conda remove scrapy
``` ```
- 删除指定环境某个包 - 删除指定环境某个包
``` ```bash
conda remove -n target_env_name package_name conda remove -n target_env_name package_name
``` ```
- 更多命令请查看官方文档或者查询帮助命令: - 更多命令请查看官方文档或者查询帮助命令:
``` ```bash
conda --help conda --help
conda install --help conda install --help
@@ -134,11 +134,11 @@ conda install --help
安装Anaconda并启动一个环境之后如何让Jupyter Notebook在我们要的环境中启动呢 安装Anaconda并启动一个环境之后如何让Jupyter Notebook在我们要的环境中启动呢
- 安装jupyter - 安装jupyter
``` ```bash
conda install jupyter notebook conda install jupyter notebook
``` ```
- 配置虚拟机中允许宿主机访问 - 配置虚拟机中允许宿主机访问
``` ```bash
# 生成配置 # 生成配置
jupyter notebook --generate-config jupyter notebook --generate-config
# 编辑配置 # 编辑配置
@@ -155,20 +155,20 @@ jupyter notebook
为了让 Jupyter Notebook 能识别该环境中的 Python 解释器,你需要在该环境中安装 ipykernel 为了让 Jupyter Notebook 能识别该环境中的 Python 解释器,你需要在该环境中安装 ipykernel
``` ```bash
conda install ipykernel conda install ipykernel
``` ```
- 注册环境内核 - 注册环境内核
将该环境注册为 Jupyter 的一个内核kernel这样启动 Jupyter Notebook 后就能选择这个内核: 将该环境注册为 Jupyter 的一个内核kernel这样启动 Jupyter Notebook 后就能选择这个内核:
``` ```bash
python -m ipykernel install --user --name myenv --display-name "Python (myenv)" python -m ipykernel install --user --name myenv --display-name "Python (myenv)"
``` ```
这里 --name 指定内核的名称,--display-name 是在 Jupyter Notebook 界面中显示的名称,你可以根据需要自定义。 这里 --name 指定内核的名称,--display-name 是在 Jupyter Notebook 界面中显示的名称,你可以根据需要自定义。
- 启动 Jupyter Notebook依然在激活后的环境中启动 Jupyter Notebook启动后你在新建 notebook 时可以选择刚刚注册的内核 “Python (myenv)” 来确保使用该环境的 Python 解释器。 - 启动 Jupyter Notebook依然在激活后的环境中启动 Jupyter Notebook启动后你在新建 notebook 时可以选择刚刚注册的内核 “Python (myenv)” 来确保使用该环境的 Python 解释器。
``` ```bash
jupyter notebook jupyter notebook
``` ```
@@ -176,7 +176,7 @@ jupyter notebook
Jupyter Notebook 本身没有官方语言包,但可以用第三方扩展 ``jupyter_contrib_nbextensions``和``notebook-translation``来实现部分汉化 Jupyter Notebook 本身没有官方语言包,但可以用第三方扩展 ``jupyter_contrib_nbextensions``和``notebook-translation``来实现部分汉化
``` ```bash
pip install jupyter_contrib_nbextensions pip install jupyter_contrib_nbextensions
jupyter contrib nbextension install --user jupyter contrib nbextension install --user
pip install jupyter-notebook-translation pip install jupyter-notebook-translation
@@ -282,12 +282,12 @@ uv pip uninstall numpy
## ipynb转markdown ## ipynb转markdown
首先安装 nbformat 和 nbconvert包 首先安装 nbformat 和 nbconvert包
``` ```bash
conda install nbformat nbconvert -y conda install nbformat nbconvert -y
touch ipynb2md.py && nano ipynb2md.py touch ipynb2md.py && nano ipynb2md.py
``` ```
写入以下脚本: 写入以下脚本:
``` ```python
import nbformat import nbformat
from nbconvert import MarkdownExporter from nbconvert import MarkdownExporter
from pathlib import Path from pathlib import Path
@@ -319,7 +319,7 @@ if __name__ == "__main__":
batch_convert(input_dir=".") batch_convert(input_dir=".")
``` ```
运行脚本: 运行脚本:
``` ```bash
python ipynb2md.py python ipynb2md.py
``` ```
脚本会自动扫描当前目录下的所有 .ipynb 文件,并把 .md 文件输出到 markdown_output/ 文件夹。 脚本会自动扫描当前目录下的所有 .ipynb 文件,并把 .md 文件输出到 markdown_output/ 文件夹。

View File

@@ -44,7 +44,7 @@ tags = ["Windows"]
## 配置JSON ## 配置JSON
- 回到 Visual Studio Code 继续配置。点击左侧的资源管理器,点击打开文件夹,创建一个``.cpp``文件,里面代码可以是 - 回到 Visual Studio Code 继续配置。点击左侧的资源管理器,点击打开文件夹,创建一个``.cpp``文件,里面代码可以是
``` ```bash
#include <iostream> #include <iostream>
int main() { int main() {

View File

@@ -130,34 +130,34 @@
<p>作者Bill Bynum/Tracy Camp 威廉玛丽学院/科罗拉多矿业学院 2002年11月5日</p> <p>作者Bill Bynum/Tracy Camp 威廉玛丽学院/科罗拉多矿业学院 2002年11月5日</p>
</blockquote> </blockquote>
<h2 id="mu-lu">目录</h2> <h2 id="mu-lu">目录</h2>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>1. 引言 <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">1.</span><span> 引言
</span><span>2. C-- 编译器语法 </span><span style="color:#ffb964;">2.</span><span> C-- 编译器语法
</span><span>3. 并发结构 </span><span style="color:#ffb964;">3.</span><span> 并发结构
</span><span> 3.1 cobegin 块 </span><span> </span><span style="color:#ffb964;">3.1</span><span> cobegin 块
</span><span> 3.2 信号量 </span><span> </span><span style="color:#ffb964;">3.2</span><span> 信号量
</span><span> 3.2.1 初始化信号量 </span><span> </span><span style="color:#ffb964;">3.2.1</span><span> 初始化信号量
</span><span> 3.2.2 p (或 wait) 和 v (或 signal) 函数 </span><span> </span><span style="color:#ffb964;">3.2.2</span><span> p (或 wait) </span><span style="color:#ffb964;"></span><span> v (或 signal) </span><span style="color:#ffb964;">函数
</span><span> 3.2.3 信号量使用示例 </span><span> </span><span style="color:#ffb964;">3.2.3</span><span> 信号量使用示例
</span><span> 3.3 管程 </span><span> </span><span style="color:#ffb964;">3.3</span><span> 管程
</span><span> 3.3.1 条件变量 </span><span> </span><span style="color:#ffb964;">3.3.1</span><span> 条件变量
</span><span> 3.3.2 waitc 和 signalc 函数 </span><span> </span><span style="color:#ffb964;">3.3.2</span><span> waitc 和 signalc 函数
</span><span> 3.3.3 立即恢复要求 </span><span> </span><span style="color:#ffb964;">3.3.3</span><span> 立即恢复要求
</span><span> 3.3.4 管程示例 </span><span> </span><span style="color:#ffb964;">3.3.4</span><span> 管程示例
</span><span> 3.4 其他并发结构 </span><span> </span><span style="color:#ffb964;">3.4</span><span> 其他并发结构
</span><span> 3.4.1 atomic 关键字 </span><span> </span><span style="color:#ffb964;">3.4.1</span><span> atomic 关键字
</span><span> 3.4.2 void suspend( void ); </span><span> </span><span style="color:#ffb964;">3.4.2</span><span> void suspend( void );
</span><span> 3.4.3 void revive( int process_number ); </span><span> </span><span style="color:#ffb964;">3.4.3</span><span> void revive( int process_number );
</span><span> 3.4.4 int which_proc( void ); </span><span> </span><span style="color:#ffb964;">3.4.4</span><span> int which_proc( void );
</span><span> 3.4.5 int random( int range ); </span><span> </span><span style="color:#ffb964;">3.4.5</span><span> int random( int range );
</span><span>4. 内置字符串处理函数 </span><span style="color:#ffb964;">4.</span><span> 内置字符串处理函数
</span><span> 4.1 void stringCopy(string dest, string src); </span><span> </span><span style="color:#ffb964;">4.1</span><span> void stringCopy(string dest, string src);
</span><span> 4.2 void stringConcat(string dest, string src); </span><span> </span><span style="color:#ffb964;">4.2</span><span> void stringConcat(string dest, string src);
</span><span> 4.3 int stringCompare(string x, string y); </span><span> </span><span style="color:#ffb964;">4.3</span><span> int stringCompare(string x, string y);
</span><span> 4.4 int stringLength(string x); </span><span> </span><span style="color:#ffb964;">4.4</span><span> int stringLength(string x);
</span><span> 4.5 int sscanf(string x, rawstring fmt,...); </span><span> </span><span style="color:#ffb964;">4.5</span><span> int sscanf(string x, rawstring fmt,...);
</span><span> 4.6 void sprintf(string x, rawstring fmt,...); </span><span> </span><span style="color:#ffb964;">4.6</span><span> void sprintf(string x, rawstring fmt,...);
</span><span>5. 使用 BACI C-- 编译器和 PCODE 解释器 </span><span style="color:#ffb964;">5.</span><span> 使用 BACI C-- 编译器和 PCODE 解释器
</span><span>6. 示例程序和输出 </span><span style="color:#ffb964;">6.</span><span> 示例程序和输出
</span></code></pre> </span></code></pre>
<h2 id="1-yin-yan">1. 引言</h2> <h2 id="1-yin-yan">1. 引言</h2>
<p>本文档旨在简要描述 C-- BACI 编译器和并发 PCODE 解释器程序并说明如何使用它们。C-- 编译器首先将用户程序编译成一种称为 PCODE 的中间目标代码然后由解释器执行。C-- 编译器支持二进制和计数信号量以及 Hoare 管程。解释器模拟并发进程执行。</p> <p>本文档旨在简要描述 C-- BACI 编译器和并发 PCODE 解释器程序并说明如何使用它们。C-- 编译器首先将用户程序编译成一种称为 PCODE 的中间目标代码然后由解释器执行。C-- 编译器支持二进制和计数信号量以及 Hoare 管程。解释器模拟并发进程执行。</p>
@@ -305,64 +305,64 @@
</ul> </ul>
<h4 id="3-2-3-xin-hao-liang-shi-yong-shi-li">3.2.3 信号量使用示例</h4> <h4 id="3-2-3-xin-hao-liang-shi-yong-shi-li">3.2.3 信号量使用示例</h4>
<p>为帮助解释信号量的使用,我们提供以下简短示例:</p> <p>为帮助解释信号量的使用,我们提供以下简短示例:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>BACI System: C-- to PCODE Compiler, 09:24 2 May 2002 <pre data-lang="java" style="background-color:#151515;color:#e8e8d3;" class="language-java "><code class="language-java" data-lang="java"><span style="color:#7697d6;">BACI </span><span style="color:#ffb964;">System</span><span>: </span><span style="color:#ffb964;">C</span><span>-- to </span><span style="color:#7697d6;">PCODE </span><span style="color:#ffb964;">Compiler</span><span>, </span><span style="color:#cf6a4c;">09</span><span>:</span><span style="color:#cf6a4c;">24 2 </span><span style="color:#ffb964;">May </span><span style="color:#cf6a4c;">2002
</span><span>Source file: semexample.cm Sun Apr 28 20:40:12 2002 </span><span style="color:#ffb964;">Source</span><span> file: semexample.cm </span><span style="color:#ffb964;">Sun Apr </span><span style="color:#cf6a4c;">28 20</span><span>:</span><span style="color:#cf6a4c;">40</span><span>:</span><span style="color:#cf6a4c;">12 2002
</span><span>line pc </span><span>line pc
</span><span>1 0 // C-- 信号量使用示例 </span><span style="color:#cf6a4c;">1 0 </span><span style="color:#888888;">// C-- 信号量使用示例
</span><span>2 0 </span><span style="color:#cf6a4c;">2 0
</span><span>3 0 semaphore count; // 一个&quot;通用&quot;信号量 </span><span style="color:#cf6a4c;">3 0</span><span> semaphore count; </span><span style="color:#888888;">// 一个&quot;通用&quot;信号量
</span><span>4 0 binarysem output; // 一个二进制0 或 1信号量用于解除输出混乱 </span><span style="color:#cf6a4c;">4 0</span><span> binarysem output; </span><span style="color:#888888;">// 一个二进制0 或 1信号量用于解除输出混乱
</span><span>5 0 </span><span style="color:#cf6a4c;">5 0
</span><span>6 0 void increment() </span><span style="color:#cf6a4c;">6 0</span><span> void </span><span style="color:#ffb964;">increment</span><span>()
</span><span>7 0 { </span><span style="color:#cf6a4c;">7 0 </span><span>{
</span><span>8 0 p(output); // 获取对标准输出的独占访问权 </span><span style="color:#cf6a4c;">8 0 </span><span style="color:#ffb964;">p</span><span>(output); </span><span style="color:#888888;">// 获取对标准输出的独占访问权
</span><span>9 2 cout &lt;&lt; &quot;before v(count) value of count is &quot; &lt;&lt; count &lt;&lt; endl; </span><span style="color:#cf6a4c;">9 2</span><span> cout &lt;&lt; </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">before v(count) value of count is </span><span style="color:#556633;">&quot; </span><span>&lt;&lt; count &lt;&lt; endl;
</span><span>10 6 v(output); </span><span style="color:#cf6a4c;">10 6 </span><span style="color:#ffb964;">v</span><span>(output);
</span><span>11 8 v(count); // 增加信号量 </span><span style="color:#cf6a4c;">11 8 </span><span style="color:#ffb964;">v</span><span>(count); </span><span style="color:#888888;">// 增加信号量
</span><span>12 10 } // increment </span><span style="color:#cf6a4c;">12 10 </span><span>} </span><span style="color:#888888;">// increment
</span><span>13 11 </span><span style="color:#cf6a4c;">13 11
</span><span>14 11 void decrement() </span><span style="color:#cf6a4c;">14 11</span><span> void </span><span style="color:#ffb964;">decrement</span><span>()
</span><span>15 11 { </span><span style="color:#cf6a4c;">15 11 </span><span>{
</span><span>16 11 p(output); // 获取对标准输出的独占访问权 </span><span style="color:#cf6a4c;">16 11 </span><span style="color:#ffb964;">p</span><span>(output); </span><span style="color:#888888;">// 获取对标准输出的独占访问权
</span><span>17 13 cout &lt;&lt; &quot;before p(count) value of count is &quot; &lt;&lt; count &lt;&lt; endl; </span><span style="color:#cf6a4c;">17 13</span><span> cout &lt;&lt; </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">before p(count) value of count is </span><span style="color:#556633;">&quot; </span><span>&lt;&lt; count &lt;&lt; endl;
</span><span>18 17 v(output); </span><span style="color:#cf6a4c;">18 17 </span><span style="color:#ffb964;">v</span><span>(output);
</span><span>19 19 p(count); // 减少信号量(或停止 -- 见手册文本) </span><span style="color:#cf6a4c;">19 19 </span><span style="color:#ffb964;">p</span><span>(count); </span><span style="color:#888888;">// 减少信号量(或停止 -- 见手册文本)
</span><span>20 21 } // decrement </span><span style="color:#cf6a4c;">20 21 </span><span>} </span><span style="color:#888888;">// decrement
</span><span>21 22 </span><span style="color:#cf6a4c;">21 22
</span><span>22 22 main() </span><span style="color:#cf6a4c;">22 22 </span><span style="color:#ffb964;">main</span><span>()
</span><span>23 23 { </span><span style="color:#cf6a4c;">23 23 </span><span>{
</span><span>24 23 initialsem(count,0); </span><span style="color:#cf6a4c;">24 23 </span><span style="color:#ffb964;">initialsem</span><span>(count,</span><span style="color:#cf6a4c;">0</span><span>);
</span><span>25 26 initialsem(output,1); </span><span style="color:#cf6a4c;">25 26 </span><span style="color:#ffb964;">initialsem</span><span>(output,</span><span style="color:#cf6a4c;">1</span><span>);
</span><span>26 29 cobegin { </span><span style="color:#cf6a4c;">26 29</span><span> cobegin {
</span><span>27 30 decrement(); increment(); </span><span style="color:#cf6a4c;">27 30 </span><span style="color:#ffb964;">decrement</span><span>(); </span><span style="color:#ffb964;">increment</span><span>();
</span><span>28 36 } </span><span style="color:#cf6a4c;">28 36 </span><span>}
</span><span>29 37 } // main </span><span style="color:#cf6a4c;">29 37 </span><span>} </span><span style="color:#888888;">// main
</span></code></pre> </span></code></pre>
<p>该程序使用两个信号量。一个信号量 count 属于 semaphore 类型,这向 BACI 系统表明该信号量将被允许具有任何非负值。两个并发过程 increment 和 decrement 通过 count 信号量相互"发送信号"。另一个信号量 output 属于 binarysem 类型,这向 BACI 系统表明该信号量应始终具有值 0 或 1任何其他值都会导致运行时异常。该信号量用于防止两个并发执行的过程 increment 和 decrement 的输出混合在一起。</p> <p>该程序使用两个信号量。一个信号量 count 属于 semaphore 类型,这向 BACI 系统表明该信号量将被允许具有任何非负值。两个并发过程 increment 和 decrement 通过 count 信号量相互"发送信号"。另一个信号量 output 属于 binarysem 类型,这向 BACI 系统表明该信号量应始终具有值 0 或 1任何其他值都会导致运行时异常。该信号量用于防止两个并发执行的过程 increment 和 decrement 的输出混合在一起。</p>
<p>我们使用以下命令生成上述编译器列表:</p> <p>我们使用以下命令生成上述编译器列表:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>prompt% bacc semexample <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">prompt%</span><span> bacc semexample
</span><span>Pcode and tables are stored in semexample.pco </span><span style="color:#ffb964;">Pcode</span><span> and tables are stored in semexample.pco
</span><span>Compilation listing is stored in semexample.lst </span><span style="color:#ffb964;">Compilation</span><span> listing is stored in semexample.lst
</span></code></pre> </span></code></pre>
<p>然后可以使用 BACI PCODE 解释器执行 semexample.pco 文件:</p> <p>然后可以使用 BACI PCODE 解释器执行 semexample.pco 文件:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>prompt% bainterp semexample <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">prompt%</span><span> bainterp semexample
</span><span>Source file: semexample.cm Sun Apr 28 20:40:12 2002 </span><span style="color:#ffb964;">Source</span><span> file: semexample.cm Sun Apr 28 20:40:12 2002
</span><span>Executing PCODE ... </span><span style="color:#ffb964;">Executing</span><span> PCODE ...
</span><span>before v(count) value of count is 0 </span><span style="color:#ffb964;">before</span><span> v(count) </span><span style="color:#ffb964;">value</span><span> of count is 0
</span><span>before p(count) value of count is 1 </span><span style="color:#ffb964;">before</span><span> p(count) </span><span style="color:#ffb964;">value</span><span> of count is 1
</span></code></pre> </span></code></pre>
<p>这是程序可能产生的三种可能输出之一。另外两种可能的程序输出是:</p> <p>这是程序可能产生的三种可能输出之一。另外两种可能的程序输出是:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>prompt% bainterp semexample <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">prompt%</span><span> bainterp semexample
</span><span>Source file: semexample.cm Sun Apr 28 20:40:12 2002 </span><span style="color:#ffb964;">Source</span><span> file: semexample.cm Sun Apr 28 20:40:12 2002
</span><span>Executing PCODE ... </span><span style="color:#ffb964;">Executing</span><span> PCODE ...
</span><span>before p(count) value of count is 0 </span><span style="color:#ffb964;">before</span><span> p(count) </span><span style="color:#ffb964;">value</span><span> of count is 0
</span><span>before v(count) value of count is 0 </span><span style="color:#ffb964;">before</span><span> v(count) </span><span style="color:#ffb964;">value</span><span> of count is 0
</span></code></pre> </span></code></pre>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>prompt% bainterp semexample <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">prompt%</span><span> bainterp semexample
</span><span>Source file: semexample.cm Sun Apr 28 20:40:12 2002 </span><span style="color:#ffb964;">Source</span><span> file: semexample.cm Sun Apr 28 20:40:12 2002
</span><span>Executing PCODE ... </span><span style="color:#ffb964;">Executing</span><span> PCODE ...
</span><span>before v(count) value of count is 0 </span><span style="color:#ffb964;">before</span><span> v(count) </span><span style="color:#ffb964;">value</span><span> of count is 0
</span><span>before p(count) value of count is 0 </span><span style="color:#ffb964;">before</span><span> p(count) </span><span style="color:#ffb964;">value</span><span> of count is 0
</span></code></pre> </span></code></pre>
<p>有兴趣的读者可能会发现,提供这三种程序输出生成方式的解释,并证明这三种输出是唯一可能的输出,是很有指导意义的。</p> <p>有兴趣的读者可能会发现,提供这三种程序输出生成方式的解释,并证明这三种输出是唯一可能的输出,是很有指导意义的。</p>
<h3 id="3-3-guan-cheng">3.3 管程</h3> <h3 id="3-3-guan-cheng">3.3 管程</h3>
@@ -511,53 +511,53 @@
<p>每次用 bainterp 执行 .pco 文件时,不必重新编译源文件。有一个 shell 脚本 baccint它将为您调用编译器然后调用解释器。它会将您给它的选项见上文传递给解释器。</p> <p>每次用 bainterp 执行 .pco 文件时,不必重新编译源文件。有一个 shell 脚本 baccint它将为您调用编译器然后调用解释器。它会将您给它的选项见上文传递给解释器。</p>
<h2 id="6-shi-li-cheng-xu-he-shu-chu">6. 示例程序和输出</h2> <h2 id="6-shi-li-cheng-xu-he-shu-chu">6. 示例程序和输出</h2>
<p>以下列表由 C-- BACI 编译器生成。行号右侧的数字是开始该行的指令的 PCODE 偏移量。BACI 编译器从文件 "incremen.cm" 创建此列表。该列表被放置在文件 "incremen.lst" 中。还创建了一个 "incremen.pco" 文件;此文件由解释器使用。</p> <p>以下列表由 C-- BACI 编译器生成。行号右侧的数字是开始该行的指令的 PCODE 偏移量。BACI 编译器从文件 "incremen.cm" 创建此列表。该列表被放置在文件 "incremen.lst" 中。还创建了一个 "incremen.pco" 文件;此文件由解释器使用。</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>BACI System: C-- to PCODE Compiler, 09:24 2 May 2002 <pre data-lang="java" style="background-color:#151515;color:#e8e8d3;" class="language-java "><code class="language-java" data-lang="java"><span style="color:#7697d6;">BACI </span><span style="color:#ffb964;">System</span><span>: </span><span style="color:#ffb964;">C</span><span>-- to </span><span style="color:#7697d6;">PCODE </span><span style="color:#ffb964;">Compiler</span><span>, </span><span style="color:#cf6a4c;">09</span><span>:</span><span style="color:#cf6a4c;">24 2 </span><span style="color:#ffb964;">May </span><span style="color:#cf6a4c;">2002
</span><span>Source file: incremen.cm Wed Oct 22 21:18:02 1997 </span><span style="color:#ffb964;">Source</span><span> file: incremen.cm </span><span style="color:#ffb964;">Wed Oct </span><span style="color:#cf6a4c;">22 21</span><span>:</span><span style="color:#cf6a4c;">18</span><span>:</span><span style="color:#cf6a4c;">02 1997
</span><span>line pc </span><span>line pc
</span><span>1 0 const int m = 5; </span><span style="color:#cf6a4c;">1 0 </span><span>const </span><span style="color:#8fbfdc;">int</span><span> m = </span><span style="color:#cf6a4c;">5</span><span>;
</span><span>2 0 int n; </span><span style="color:#cf6a4c;">2 0 </span><span style="color:#8fbfdc;">int</span><span> n;
</span><span>3 0 </span><span style="color:#cf6a4c;">3 0
</span><span>4 0 void incr(char id) </span><span style="color:#cf6a4c;">4 0</span><span> void </span><span style="color:#ffb964;">incr</span><span>(</span><span style="color:#8fbfdc;">char</span><span> id)
</span><span>5 0 { </span><span style="color:#cf6a4c;">5 0 </span><span>{
</span><span>6 0 int i; </span><span style="color:#cf6a4c;">6 0 </span><span style="color:#8fbfdc;">int</span><span> i;
</span><span>7 0 </span><span style="color:#cf6a4c;">7 0
</span><span>8 0 for(i = 1; i &lt;= m; i = i + 1) </span><span style="color:#cf6a4c;">8 0 </span><span style="color:#8fbfdc;">for</span><span>(i = </span><span style="color:#cf6a4c;">1</span><span>; i &lt;= m; i = i + </span><span style="color:#cf6a4c;">1</span><span>)
</span><span>9 14 { </span><span style="color:#cf6a4c;">9 14 </span><span>{
</span><span>10 14 n = n + 1; </span><span style="color:#cf6a4c;">10 14</span><span> n = n + </span><span style="color:#cf6a4c;">1</span><span>;
</span><span>11 19 cout &lt;&lt; id &lt;&lt; &quot; n =&quot; &lt;&lt; n &lt;&lt; &quot; i =&quot;; </span><span style="color:#cf6a4c;">11 19</span><span> cout &lt;&lt; id &lt;&lt; </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;"> n =</span><span style="color:#556633;">&quot; </span><span>&lt;&lt; n &lt;&lt; </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;"> i =</span><span style="color:#556633;">&quot;</span><span>;
</span><span>12 25 cout &lt;&lt; i &lt;&lt; &quot; &quot; &lt;&lt; id &lt;&lt; endl; </span><span style="color:#cf6a4c;">12 25</span><span> cout &lt;&lt; i &lt;&lt; </span><span style="color:#556633;">&quot; &quot; </span><span>&lt;&lt; id &lt;&lt; endl;
</span><span>13 31 } </span><span style="color:#cf6a4c;">13 31 </span><span>}
</span><span>14 32 } </span><span style="color:#cf6a4c;">14 32 </span><span>}
</span><span>15 33 </span><span style="color:#cf6a4c;">15 33
</span><span>16 33 main() </span><span style="color:#cf6a4c;">16 33 </span><span style="color:#ffb964;">main</span><span>()
</span><span>17 34 { </span><span style="color:#cf6a4c;">17 34 </span><span>{
</span><span>18 34 n = 0; </span><span style="color:#cf6a4c;">18 34</span><span> n = </span><span style="color:#cf6a4c;">0</span><span>;
</span><span>19 37 cobegin </span><span style="color:#cf6a4c;">19 37</span><span> cobegin
</span><span>20 38 { </span><span style="color:#cf6a4c;">20 38 </span><span>{
</span><span>21 38 incr( &#39;A&#39;); incr( &#39;B&#39; ); incr(&#39;C&#39;); </span><span style="color:#cf6a4c;">21 38 </span><span style="color:#ffb964;">incr</span><span>( </span><span style="color:#556633;">&#39;</span><span style="color:#99ad6a;">A</span><span style="color:#556633;">&#39;</span><span>); </span><span style="color:#ffb964;">incr</span><span>( </span><span style="color:#556633;">&#39;</span><span style="color:#99ad6a;">B</span><span style="color:#556633;">&#39; </span><span>); </span><span style="color:#ffb964;">incr</span><span>(</span><span style="color:#556633;">&#39;</span><span style="color:#99ad6a;">C</span><span style="color:#556633;">&#39;</span><span>);
</span><span>22 50 } </span><span style="color:#cf6a4c;">22 50 </span><span>}
</span><span>23 51 cout &lt;&lt; &quot;The sum is &quot; &lt;&lt; n &lt;&lt; endl; </span><span style="color:#cf6a4c;">23 51</span><span> cout &lt;&lt; </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">The sum is </span><span style="color:#556633;">&quot; </span><span>&lt;&lt; n &lt;&lt; endl;
</span><span>24 55 } </span><span style="color:#cf6a4c;">24 55 </span><span>}
</span></code></pre> </span></code></pre>
<p>以下列表由 BACI 解释器生成。解释器执行编译到文件 "incremen.pco" 中的程序。</p> <p>以下列表由 BACI 解释器生成。解释器执行编译到文件 "incremen.pco" 中的程序。</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>Source file: incremen.cm Wed Oct 22 21:18:02 1997 <pre data-lang="java" style="background-color:#151515;color:#e8e8d3;" class="language-java "><code class="language-java" data-lang="java"><span style="color:#ffb964;">Source</span><span> file: incremen.cm </span><span style="color:#ffb964;">Wed Oct </span><span style="color:#cf6a4c;">22 21</span><span>:</span><span style="color:#cf6a4c;">18</span><span>:</span><span style="color:#cf6a4c;">02 1997
</span><span>Executing PCODE ... </span><span style="color:#ffb964;">Executing </span><span style="color:#7697d6;">PCODE </span><span>...
</span><span>C n =1 i =A n =1 C2 i = </span><span style="color:#ffb964;">C</span><span> n =</span><span style="color:#cf6a4c;">1</span><span> i =</span><span style="color:#ffb964;">A</span><span> n =</span><span style="color:#cf6a4c;">1 </span><span style="color:#7697d6;">C2</span><span> i =
</span><span>1 A </span><span style="color:#cf6a4c;">1 </span><span style="color:#ffb964;">A
</span><span>C n =4 i =2 C </span><span style="color:#ffb964;">C</span><span> n =</span><span style="color:#cf6a4c;">4</span><span> i =</span><span style="color:#cf6a4c;">2 </span><span style="color:#ffb964;">C
</span><span>B n =A n =5 i =24 A </span><span style="color:#ffb964;">B</span><span> n =</span><span style="color:#ffb964;">A</span><span> n =</span><span style="color:#cf6a4c;">5</span><span> i =</span><span style="color:#cf6a4c;">24 </span><span style="color:#ffb964;">A
</span><span>i =1 B </span><span>i =</span><span style="color:#cf6a4c;">1 </span><span style="color:#ffb964;">B
</span><span>AC n = n =6 i =3 C6 i =3 </span><span style="color:#7697d6;">AC</span><span> n = n =</span><span style="color:#cf6a4c;">6</span><span> i =</span><span style="color:#cf6a4c;">3 </span><span style="color:#7697d6;">C6</span><span> i =</span><span style="color:#cf6a4c;">3
</span><span>A </span><span style="color:#ffb964;">A
</span><span>C n =7 i =4 C </span><span style="color:#ffb964;">C</span><span> n =</span><span style="color:#cf6a4c;">7</span><span> i =</span><span style="color:#cf6a4c;">4 </span><span style="color:#ffb964;">C
</span><span>B n =9 i =2 BA n =8 </span><span style="color:#ffb964;">B</span><span> n =</span><span style="color:#cf6a4c;">9</span><span> i =</span><span style="color:#cf6a4c;">2 </span><span style="color:#7697d6;">BA</span><span> n =</span><span style="color:#cf6a4c;">8
</span><span>i =4 A </span><span>i =</span><span style="color:#cf6a4c;">4 </span><span style="color:#ffb964;">A
</span><span>C n =8 i =5 A n =9C </span><span style="color:#ffb964;">C</span><span> n =</span><span style="color:#cf6a4c;">8</span><span> i =</span><span style="color:#cf6a4c;">5 </span><span style="color:#ffb964;">A</span><span> n =9C
</span><span>i =5 A </span><span>i =</span><span style="color:#cf6a4c;">5 </span><span style="color:#ffb964;">A
</span><span>B n =10 i =3 B </span><span style="color:#ffb964;">B</span><span> n =</span><span style="color:#cf6a4c;">10</span><span> i =</span><span style="color:#cf6a4c;">3 </span><span style="color:#ffb964;">B
</span><span>B n =11 i =4 B </span><span style="color:#ffb964;">B</span><span> n =</span><span style="color:#cf6a4c;">11</span><span> i =</span><span style="color:#cf6a4c;">4 </span><span style="color:#ffb964;">B
</span><span>B n =12 i =5 B </span><span style="color:#ffb964;">B</span><span> n =</span><span style="color:#cf6a4c;">12</span><span> i =</span><span style="color:#cf6a4c;">5 </span><span style="color:#ffb964;">B
</span><span>The sum is 12 </span><span style="color:#ffb964;">The</span><span> sum is </span><span style="color:#cf6a4c;">12
</span></code></pre> </span></code></pre>
<h1 id="linuxhuan-jing-yun-xing-baci">linux环境运行baci</h1> <h1 id="linuxhuan-jing-yun-xing-baci">linux环境运行baci</h1>
<ul> <ul>
@@ -573,36 +573,36 @@
<ul> <ul>
<li>编写baci脚本</li> <li>编写baci脚本</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>#!/usr/bin/env bash <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#888888;">#!/usr/bin/env bash
</span><span># 定位到项目根目录(包含 javabaci 子目录的目录) </span><span style="color:#888888;"># 定位到项目根目录(包含 javabaci 子目录的目录)
</span><span>BASEDIR=&quot;$(cd &quot;$(dirname &quot;${BASH_SOURCE[0]}&quot;)/..&quot; &amp;&amp; pwd)&quot; </span><span style="color:#ffb964;">BASEDIR</span><span>=</span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">$(cd </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">$(</span><span style="color:#ffb964;">dirname </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">${</span><span style="color:#ffb964;">BASH_SOURCE[</span><span style="color:#cf6a4c;">0</span><span style="color:#ffb964;">]</span><span style="color:#99ad6a;">}</span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">)/..</span><span style="color:#556633;">&quot; </span><span style="color:#99ad6a;">&amp;&amp; </span><span style="color:#ffb964;">pwd</span><span style="color:#99ad6a;">)</span><span style="color:#556633;">&quot;
</span><span> </span><span>
</span><span># 将 javabaci/bin默认包类和项目根目录javabaci 包根)加入 classpath </span><span style="color:#888888;"># 将 javabaci/bin默认包类和项目根目录javabaci 包根)加入 classpath
</span><span>CLASSPATH=&quot;$BASEDIR/javabaci/bin:$BASEDIR&quot; </span><span style="color:#ffb964;">CLASSPATH</span><span>=</span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">$</span><span style="color:#ffb964;">BASEDIR</span><span style="color:#99ad6a;">/javabaci/bin:$</span><span style="color:#ffb964;">BASEDIR</span><span style="color:#556633;">&quot;
</span><span> </span><span>
</span><span># 将所有参数原样传递给 java 运行 </span><span style="color:#888888;"># 将所有参数原样传递给 java 运行
</span><span>exec java -cp &quot;$CLASSPATH&quot; &quot;$@&quot; </span><span>exec java -cp </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">$</span><span style="color:#ffb964;">CLASSPATH</span><span style="color:#556633;">&quot; &quot;</span><span style="color:#99ad6a;">$</span><span style="color:#ffb964;">@</span><span style="color:#556633;">&quot;
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>给baci授予可执行权限</li> <li>给baci授予可执行权限</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>chmod +x ~/Git/java/baci/scripts/baci <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">chmod</span><span> +x </span><span style="color:#ffb964;">~</span><span>/Git/java/baci/scripts/baci
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>添加系统环境变量</li> <li>添加系统环境变量</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>fish_add_path ~/Git/java/baci/scripts <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">fish_add_path ~</span><span>/Git/java/baci/scripts
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>查看baci是否存在</li> <li>查看baci是否存在</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>which baci <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">which</span><span> baci
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>现在即可编译运行</li> <li>现在即可编译运行</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>baci bacc ex3_1.cm <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">baci</span><span> bacc ex3_1.cm
</span><span>baci bainterp ex3_1 </span><span style="color:#ffb964;">baci</span><span> bainterp ex3_1
</span></code></pre> </span></code></pre>
<hr /> <hr />
<p><strong>Done.</strong></p> <p><strong>Done.</strong></p>

View File

@@ -135,7 +135,7 @@
<li>首先你需要有一台自己的云服务器建议在1核1G以上配置并安装Debian系统</li> <li>首先你需要有一台自己的云服务器建议在1核1G以上配置并安装Debian系统</li>
<li>随后我们安装1panel执行以下命令一键安装</li> <li>随后我们安装1panel执行以下命令一键安装</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh &amp;&amp; sudo bash quick_start.sh <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">curl -sSL</span><span> https://resource.fit2cloud.com/1panel/package/quick_start.sh</span><span style="color:#ffb964;"> -o</span><span> quick_start.sh &amp;&amp; </span><span style="color:#ffb964;">sudo</span><span> bash quick_start.sh
</span></code></pre> </span></code></pre>
<blockquote> <blockquote>
<p>1panel依赖于docker如果实现没有安装docker脚本会帮你安装。</p> <p>1panel依赖于docker如果实现没有安装docker脚本会帮你安装。</p>
@@ -178,33 +178,33 @@
<ul> <ul>
<li><strong>Windows</strong></li> <li><strong>Windows</strong></li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span># 打开以管理员模式运行的PowerShell,输入命令安装 Hugo Extended <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#888888;"># 打开以管理员模式运行的PowerShell,输入命令安装 Hugo Extended
</span><span>winget install Hugo.Hugo.Extended </span><span style="color:#ffb964;">winget</span><span> install Hugo.Hugo.Extended
</span></code></pre> </span></code></pre>
<ul> <ul>
<li><strong>Arch linux</strong></li> <li><strong>Arch linux</strong></li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>paru -S hugo <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">paru -S</span><span> hugo
</span></code></pre> </span></code></pre>
<ul> <ul>
<li><strong>检查版本</strong></li> <li><strong>检查版本</strong></li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>hugo version <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">hugo</span><span> version
</span></code></pre> </span></code></pre>
<ol start="2"> <ol start="2">
<li><strong>创建新的 Hugo 站点</strong>:选择一个文件夹打开命令行,执行:</li> <li><strong>创建新的 Hugo 站点</strong>:选择一个文件夹打开命令行,执行:</li>
</ol> </ol>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>hugo new site myblog <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">hugo</span><span> new site myblog
</span></code></pre> </span></code></pre>
<p>该命令会在<code>myblog</code>文件夹下生成hugo的基础目录。</p> <p>该命令会在<code>myblog</code>文件夹下生成hugo的基础目录。</p>
<ol start="3"> <ol start="3">
<li><strong>安装主题</strong>,这里以<a href="https://jamstackthemes.dev/theme/hugo-blog-awesome/">hugo-blog-awesome</a>主题为例:</li> <li><strong>安装主题</strong>,这里以<a href="https://jamstackthemes.dev/theme/hugo-blog-awesome/">hugo-blog-awesome</a>主题为例:</li>
</ol> </ol>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>cd myblog <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span>cd myblog
</span><span>git clone https://github.com/hugo-sid/hugo-blog-awesome.git themes/hugo-blog-awesome </span><span style="color:#ffb964;">git</span><span> clone https://github.com/hugo-sid/hugo-blog-awesome.git themes/hugo-blog-awesome
</span></code></pre> </span></code></pre>
<p>并在<code>hugo.toml</code>顶层添加:</p> <p>并在<code>hugo.toml</code>顶层添加:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>theme = &quot;hugo-blog-awesome&quot; <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">theme</span><span> = </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">hugo-blog-awesome</span><span style="color:#556633;">&quot;
</span></code></pre> </span></code></pre>
<p>这样 Hugo 在构建时会从 themes/ 目录加载主题文件。后续可使用<code>git pull</code>获取主题更新。</p> <p>这样 Hugo 在构建时会从 themes/ 目录加载主题文件。后续可使用<code>git pull</code>获取主题更新。</p>
<blockquote> <blockquote>
@@ -213,7 +213,7 @@
<ol start="4"> <ol start="4">
<li><strong>写入文章</strong>:使用 Hugo 提供的命令创建新文章:</li> <li><strong>写入文章</strong>:使用 Hugo 提供的命令创建新文章:</li>
</ol> </ol>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>hugo new posts/hello-world.md <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">hugo</span><span> new posts/hello-world.md
</span></code></pre> </span></code></pre>
<p>该命令会在<code>content/posts/</code>下生成 Markdown 文件,打开后修改<code>title、date、tags</code>等前缀然后撰写 Markdown 正文, Markdown 编辑器参考<a href="https://blog.dich.bid/about-markdown/">前文</a></p> <p>该命令会在<code>content/posts/</code>下生成 Markdown 文件,打开后修改<code>title、date、tags</code>等前缀然后撰写 Markdown 正文, Markdown 编辑器参考<a href="https://blog.dich.bid/about-markdown/">前文</a></p>
<blockquote> <blockquote>
@@ -222,7 +222,7 @@
<ol start="5"> <ol start="5">
<li><strong>本地测试</strong>:在项目根目录运行:</li> <li><strong>本地测试</strong>:在项目根目录运行:</li>
</ol> </ol>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>hugo server -D <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">hugo</span><span> server</span><span style="color:#ffb964;"> -D
</span></code></pre> </span></code></pre>
<p>然后在浏览器访问<code>http://localhost:1313</code>即可实时预览并查看更新效果。</p> <p>然后在浏览器访问<code>http://localhost:1313</code>即可实时预览并查看更新效果。</p>
<ol start="6"> <ol start="6">
@@ -262,14 +262,14 @@
<p><strong>以上的功能和需求是否对SEO和界面相应时间造成影响</strong></p> <p><strong>以上的功能和需求是否对SEO和界面相应时间造成影响</strong></p>
<h2 id="xiao-ji">小记</h2> <h2 id="xiao-ji">小记</h2>
<p>由于我所使用的平台不支持zola因此我直接在本地编译public并推送这样时间久了.git文件夹大小会非常大记录public的变化我又不想将zola的二进制包放入目录下因此有了这个办法</p> <p>由于我所使用的平台不支持zola因此我直接在本地编译public并推送这样时间久了.git文件夹大小会非常大记录public的变化我又不想将zola的二进制包放入目录下因此有了这个办法</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span># 安装git-filter-repo工具 <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#888888;"># 安装git-filter-repo工具
</span><span>paru git-filter-repo </span><span style="color:#ffb964;">paru</span><span> git-filter-repo
</span><span># 清理public相关的历史 </span><span style="color:#888888;"># 清理public相关的历史
</span><span>git clone git@github.com:Dichgrem/Blog.git blog1 &amp;&amp; cd blog1 </span><span style="color:#ffb964;">git</span><span> clone git@github.com:Dichgrem/Blog.git blog1 &amp;&amp; cd blog1
</span><span>git filter-repo --path public --invert-paths </span><span style="color:#ffb964;">git</span><span> filter-repo</span><span style="color:#ffb964;"> --path</span><span> public</span><span style="color:#ffb964;"> --invert-paths
</span><span>git gc --aggressive --prune=now </span><span style="color:#ffb964;">git</span><span> gc</span><span style="color:#ffb964;"> --aggressive --prune</span><span>=now
</span><span># 重新推送到github </span><span style="color:#888888;"># 重新推送到github
</span><span>git push --force --mirror </span><span style="color:#ffb964;">git</span><span> push</span><span style="color:#ffb964;"> --force --mirror
</span></code></pre> </span></code></pre>
<h2 id="link">🔗</h2> <h2 id="link">🔗</h2>
<ul> <ul>

View File

@@ -139,43 +139,43 @@
<ul> <ul>
<li>检查 polkit 服务是否正在运行</li> <li>检查 polkit 服务是否正在运行</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>systemctl status polkit <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">systemctl</span><span> status polkit
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>若返回状态为除 active (running) 之外的结果,运行</li> <li>若返回状态为除 active (running) 之外的结果,运行</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo systemctl enable --now polkit <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">sudo</span><span> systemctl enable</span><span style="color:#ffb964;"> --now</span><span> polkit
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>创建 polkit 策略</li> <li>创建 polkit 策略</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo vi /etc/polkit-1/rules.d/99-nopassword.rules <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">sudo</span><span> vi /etc/polkit-1/rules.d/99-nopassword.rules
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>添加以下内容并保存退出</li> <li>添加以下内容并保存退出</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>polkit.addRule(function (action, subject) { <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">polkit.addRule</span><span>(function (action, subject) {
</span><span> if ( </span><span> </span><span style="color:#8fbfdc;">if </span><span>(
</span><span> (action.id == &quot;org.freedesktop.resolve1.set-domains&quot; || </span><span> (</span><span style="color:#ffb964;">action.id</span><span> == </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">org.freedesktop.resolve1.set-domains</span><span style="color:#556633;">&quot; </span><span>||
</span><span> action.id == &quot;org.freedesktop.resolve1.set-default-route&quot; || </span><span> </span><span style="color:#ffb964;">action.id</span><span> == </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">org.freedesktop.resolve1.set-default-route</span><span style="color:#556633;">&quot; </span><span>||
</span><span> action.id == &quot;org.freedesktop.resolve1.set-dns-servers&quot;) &amp;&amp; </span><span> </span><span style="color:#ffb964;">action.id</span><span> == </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">org.freedesktop.resolve1.set-dns-servers</span><span style="color:#556633;">&quot;</span><span>) &amp;&amp;
</span><span> subject.local &amp;&amp; </span><span> </span><span style="color:#ffb964;">subject.local </span><span>&amp;&amp;
</span><span> subject.active &amp;&amp; </span><span> </span><span style="color:#ffb964;">subject.active </span><span>&amp;&amp;
</span><span> subject.isInGroup(&quot;wheel&quot;) </span><span> </span><span style="color:#ffb964;">subject.isInGroup</span><span>(</span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">wheel</span><span style="color:#556633;">&quot;</span><span>)
</span><span> ) { </span><span> ) {
</span><span> return polkit.Result.YES; </span><span> </span><span style="color:#8fbfdc;">return</span><span> polkit.Result.YES;
</span><span> } </span><span> }
</span><span>}); </span><span>});
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>将当前用户添加至 wheel 组中,注意Debian 与衍生系统需要先创建 wheel 组,然后运行:</li> <li>将当前用户添加至 wheel 组中,注意Debian 与衍生系统需要先创建 wheel 组,然后运行:</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo usermod -G wheel 当前用户 <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">sudo</span><span> usermod</span><span style="color:#ffb964;"> -G</span><span> wheel 当前用户
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>重新加载 polkit 使更改生效</li> <li>重新加载 polkit 使更改生效</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo systemctl restart polkit <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">sudo</span><span> systemctl restart polkit
</span></code></pre> </span></code></pre>
<hr /> <hr />
<p><strong>Done.</strong></p> <p><strong>Done.</strong></p>

View File

@@ -142,13 +142,13 @@
</ul> </ul>
<p><strong>方法一</strong> <p><strong>方法一</strong>
创建新文件夹,在你的项目目录中运行以下命令:</p> 创建新文件夹,在你的项目目录中运行以下命令:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>git init --initial-branch=main <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> init</span><span style="color:#ffb964;"> --initial-branch</span><span>=main
</span></code></pre> </span></code></pre>
<p>这里设置默认仓库主分支名称为 main,避免因为 main/master 名称不同导致的推送问题。</p> <p>这里设置默认仓库主分支名称为 main,避免因为 main/master 名称不同导致的推送问题。</p>
<blockquote> <blockquote>
<p>Git目前默认的主分支为 master和 github 默认分支 main 不同,这使得默认配置下 git 往往连接失败。除了创建的时候设定外还可以通过以下方法改变默认分支。</p> <p>Git目前默认的主分支为 master和 github 默认分支 main 不同,这使得默认配置下 git 往往连接失败。除了创建的时候设定外还可以通过以下方法改变默认分支。</p>
</blockquote> </blockquote>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>git config --global init.defaultBranch main //将默认分支修改成main <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> config</span><span style="color:#ffb964;"> --global</span><span> init.defaultBranch main //将默认分支修改成main
</span></code></pre> </span></code></pre>
<p><strong>方法二</strong></p> <p><strong>方法二</strong></p>
<p>克隆远端服务器上的仓库:</p> <p>克隆远端服务器上的仓库:</p>
@@ -164,35 +164,35 @@
<ul> <ul>
<li>显示当前的Git配置</li> <li>显示当前的Git配置</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>git config --list <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> config</span><span style="color:#ffb964;"> --list
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>编辑Git配置文件</li> <li>编辑Git配置文件</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>git config -e [--global] <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> config</span><span style="color:#ffb964;"> -e </span><span style="color:#8fbfdc;">[</span><span>--global</span><span style="color:#8fbfdc;">]
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>设置提交代码时的用户信息</li> <li>设置提交代码时的用户信息</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>git config [--global] user.name &quot;[name]&quot; <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> config </span><span style="color:#8fbfdc;">[</span><span>--global</span><span style="color:#8fbfdc;">]</span><span> user.name </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">[name]</span><span style="color:#556633;">&quot;
</span><span>git config [--global] user.email &quot;[email address]&quot; </span><span style="color:#ffb964;">git</span><span> config </span><span style="color:#8fbfdc;">[</span><span>--global</span><span style="color:#8fbfdc;">]</span><span> user.email </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">[email address]</span><span style="color:#556633;">&quot;
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>设置大小写敏感windows不区分大小写的解决办法</li> <li>设置大小写敏感windows不区分大小写的解决办法</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>git config core.ignorecase false <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> config core.ignorecase false
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>配置git默认使用的编辑器</li> <li>配置git默认使用的编辑器</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>git config --global core.editor &quot;nvim&quot; <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> config</span><span style="color:#ffb964;"> --global</span><span> core.editor </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">nvim</span><span style="color:#556633;">&quot;
</span></code></pre> </span></code></pre>
<h2 id="lian-jie-yuan-cheng-cang-ku">连接远程仓库</h2> <h2 id="lian-jie-yuan-cheng-cang-ku">连接远程仓库</h2>
<p>连接到远程仓库并推送需要证明你有权写入仓库。早期Github可以使用密码认证现在则使用密钥认证。</p> <p>连接到远程仓库并推送需要证明你有权写入仓库。早期Github可以使用密码认证现在则使用密钥认证。</p>
<ul> <ul>
<li>生成密钥:</li> <li>生成密钥:</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>ssh-keygen -t rsa -b 4096 -C &quot;your_email@example.com&quot; <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">ssh-keygen -t</span><span> rsa</span><span style="color:#ffb964;"> -b</span><span> 4096</span><span style="color:#ffb964;"> -C </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">your_email@example.com</span><span style="color:#556633;">&quot;
</span></code></pre> </span></code></pre>
<ul> <ul>
<li> <li>
@@ -202,116 +202,116 @@
<p>随后使用 <code>ssh-add</code> 命令将生成的密钥添加到 SSH 代理中。</p> <p>随后使用 <code>ssh-add</code> 命令将生成的密钥添加到 SSH 代理中。</p>
</li> </li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>ssh-add ~/.ssh/github_key <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">ssh-add ~</span><span>/.ssh/github_key
</span><span>ssh-add ~/.ssh/gitee_key </span><span style="color:#ffb964;">ssh-add ~</span><span>/.ssh/gitee_key
</span></code></pre> </span></code></pre>
<ul> <ul>
<li><code>~/.ssh/config</code> 文件中配置不同的主机别名以及相应的密钥文件。编辑该文件并添加内容,例如:</li> <li><code>~/.ssh/config</code> 文件中配置不同的主机别名以及相应的密钥文件。编辑该文件并添加内容,例如:</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span># GitHub repository 1 <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#888888;"># GitHub repository 1
</span><span> </span><span>
</span><span>Host github1 </span><span style="color:#ffb964;">Host</span><span> github1
</span><span> </span><span>
</span><span> HostName github.com </span><span> </span><span style="color:#ffb964;">HostName</span><span> github.com
</span><span> </span><span>
</span><span> User git </span><span> </span><span style="color:#ffb964;">User</span><span> git
</span><span> </span><span>
</span><span> IdentityFile ~/.ssh/github_key </span><span> </span><span style="color:#ffb964;">IdentityFile ~</span><span>/.ssh/github_key
</span><span> </span><span>
</span><span># GitHub repository 2 </span><span style="color:#888888;"># GitHub repository 2
</span><span> </span><span>
</span><span>Host github2 </span><span style="color:#ffb964;">Host</span><span> github2
</span><span> </span><span>
</span><span> HostName gitee.com </span><span> </span><span style="color:#ffb964;">HostName</span><span> gitee.com
</span><span> </span><span>
</span><span> User git </span><span> </span><span style="color:#ffb964;">User</span><span> git
</span><span> </span><span>
</span><span> IdentityFile ~/.ssh/gitee_key </span><span> </span><span style="color:#ffb964;">IdentityFile ~</span><span>/.ssh/gitee_key
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>连接到github</li> <li>连接到github</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>ssh -T git@github.com <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">ssh -T</span><span> git@github.com
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>添加远程仓库:</li> <li>添加远程仓库:</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>git remote add origin &lt;remote_repository_url&gt; <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> remote add origin &lt;remote_repository_url&gt;
</span><span> </span><span>
</span><span># 例如git remote add origin git@github.com:Dichgrem/dichos.git </span><span style="color:#888888;"># 例如git remote add origin git@github.com:Dichgrem/dichos.git
</span></code></pre> </span></code></pre>
<blockquote> <blockquote>
<p>如果你运行<code>git remote -v</code>发现URL为HTTP格式则可以用下面的命令改为Git格式</p> <p>如果你运行<code>git remote -v</code>发现URL为HTTP格式则可以用下面的命令改为Git格式</p>
</blockquote> </blockquote>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span># 例如git remote set-url origin git@github.com:Dichgrem/dichos.git <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#888888;"># 例如git remote set-url origin git@github.com:Dichgrem/dichos.git
</span></code></pre> </span></code></pre>
<h2 id="chuang-jian-fen-zhi">创建分支</h2> <h2 id="chuang-jian-fen-zhi">创建分支</h2>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>git branch main <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> branch main
</span></code></pre> </span></code></pre>
<p>这将创建一个名为 main 的分支。</p> <p>这将创建一个名为 main 的分支。</p>
<ul> <ul>
<li>删除分支</li> <li>删除分支</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>git branch -d master <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> branch</span><span style="color:#ffb964;"> -d</span><span> master
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>使用大写强制删除</li> <li>使用大写强制删除</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>git branch -D master <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> branch</span><span style="color:#ffb964;"> -D</span><span> master
</span></code></pre> </span></code></pre>
<h2 id="tian-jia-he-ti-jiao">添加和提交</h2> <h2 id="tian-jia-he-ti-jiao">添加和提交</h2>
<p>你可以提出更改(把它们添加到暂存区),使用如下命令:</p> <p>你可以提出更改(把它们添加到暂存区),使用如下命令:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>git add &lt;filename&gt; <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> add &lt;filename&gt;
</span><span>git add * </span><span style="color:#ffb964;">git</span><span> add *
</span></code></pre> </span></code></pre>
<p>这是 git 基本工作流程的第一步;使用如下命令以实际提交改动:</p> <p>这是 git 基本工作流程的第一步;使用如下命令以实际提交改动:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>git commit -m &quot;代码提交信息&quot; <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> commit</span><span style="color:#ffb964;"> -m </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">代码提交信息</span><span style="color:#556633;">&quot;
</span><span># 例如git commit -m &quot;Initial commit&quot; </span><span style="color:#888888;"># 例如git commit -m &quot;Initial commit&quot;
</span></code></pre> </span></code></pre>
<p>现在,你的改动已经提交到了 <strong>HEAD</strong>,但是还没到你的远端仓库。</p> <p>现在,你的改动已经提交到了 <strong>HEAD</strong>,但是还没到你的远端仓库。</p>
<ul> <ul>
<li>添加指定文件到暂存区</li> <li>添加指定文件到暂存区</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>git add [file1] [file2] ... <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> add </span><span style="color:#8fbfdc;">[</span><span>file1</span><span style="color:#8fbfdc;">] [</span><span>file2</span><span style="color:#8fbfdc;">]</span><span> ...
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>添加指定目录到暂存区,包括子目录</li> <li>添加指定目录到暂存区,包括子目录</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>git add [dir] <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> add </span><span style="color:#8fbfdc;">[</span><span>dir</span><span style="color:#8fbfdc;">]
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>添加当前目录的所有文件到暂存区</li> <li>添加当前目录的所有文件到暂存区</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>git add . <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> add .
</span></code></pre> </span></code></pre>
<p>添加每个变化前,都会要求确认</p> <p>添加每个变化前,都会要求确认</p>
<ul> <ul>
<li>对于同一个文件的多处变化,可以实现分次提交</li> <li>对于同一个文件的多处变化,可以实现分次提交</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>git add -p <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> add</span><span style="color:#ffb964;"> -p
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>删除工作区文件,并且将这次删除放入暂存区</li> <li>删除工作区文件,并且将这次删除放入暂存区</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>git rm [file1] [file2] ... <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> rm </span><span style="color:#8fbfdc;">[</span><span>file1</span><span style="color:#8fbfdc;">] [</span><span>file2</span><span style="color:#8fbfdc;">]</span><span> ...
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>停止追踪指定文件,但该文件会保留在工作区</li> <li>停止追踪指定文件,但该文件会保留在工作区</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>git rm --cached [file] <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> rm</span><span style="color:#ffb964;"> --cached </span><span style="color:#8fbfdc;">[</span><span>file</span><span style="color:#8fbfdc;">]
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>改名文件,并且将这个改名放入暂存区</li> <li>改名文件,并且将这个改名放入暂存区</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>git mv [file-original] [file-renamed] <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> mv </span><span style="color:#8fbfdc;">[</span><span>file-original</span><span style="color:#8fbfdc;">] [</span><span>file-renamed</span><span style="color:#8fbfdc;">]
</span></code></pre> </span></code></pre>
<h2 id="tui-song-gai-dong">推送改动</h2> <h2 id="tui-song-gai-dong">推送改动</h2>
<p>你的改动现在已经在本地仓库的 <strong>HEAD</strong> 中了。执行如下命令以将这些改动提交到远端仓库:</p> <p>你的改动现在已经在本地仓库的 <strong>HEAD</strong> 中了。执行如下命令以将这些改动提交到远端仓库:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>git push origin main <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> push origin main
</span></code></pre> </span></code></pre>
<p>可以把 <strong>main</strong> 换成你想要推送的任何分支,如<strong>master</strong>或者<strong>test</strong></p> <p>可以把 <strong>main</strong> 换成你想要推送的任何分支,如<strong>master</strong>或者<strong>test</strong></p>
<p>如果你的远程仓库是最新的,可以使用以下命令更新本地仓库:</p> <p>如果你的远程仓库是最新的,可以使用以下命令更新本地仓库:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>git pull <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> pull
</span></code></pre> </span></code></pre>
<blockquote> <blockquote>
<p>Verified</p> <p>Verified</p>
@@ -320,116 +320,116 @@
<ul> <ul>
<li>GPG方式</li> <li>GPG方式</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo pacman -S gnupg //安装 GPG <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">sudo</span><span> pacman</span><span style="color:#ffb964;"> -S</span><span> gnupg //安装 GPG
</span><span>gpg --full-generate-key //生成 GPG 密钥 </span><span style="color:#ffb964;">gpg --full-generate-key</span><span> //生成 GPG 密钥
</span><span>gpg --list-secret-keys --keyid-format=long //查看你生成的密钥 ID </span><span style="color:#ffb964;">gpg --list-secret-keys --keyid-format</span><span>=long //查看你生成的密钥 ID
</span><span>git config --global user.signingkey ABCDEF1234567890 //让 Git 使用该密钥签名 </span><span style="color:#ffb964;">git</span><span> config</span><span style="color:#ffb964;"> --global</span><span> user.signingkey ABCDEF1234567890 //让 Git 使用该密钥签名
</span><span>git config --global commit.gpgsign true //启用自动签名所有提交 </span><span style="color:#ffb964;">git</span><span> config</span><span style="color:#ffb964;"> --global</span><span> commit.gpgsign true //启用自动签名所有提交
</span><span>gpg --armor --export ABCDEF1234567890 //导出公钥并添加到 GitHub </span><span style="color:#ffb964;">gpg --armor --export</span><span> ABCDEF1234567890 //导出公钥并添加到 GitHub
</span></code></pre> </span></code></pre>
<p>然后前往<code>GitHub → Settings → SSH and GPG keys → New GPG key</code>粘贴并保存。</p> <p>然后前往<code>GitHub → Settings → SSH and GPG keys → New GPG key</code>粘贴并保存。</p>
<ul> <ul>
<li>SSH方式</li> <li>SSH方式</li>
</ul> </ul>
<p>可以用你平时登录 GitHub 的同一个 SSH 密钥:</p> <p>可以用你平时登录 GitHub 的同一个 SSH 密钥:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>git config --global gpg.format ssh //让 Git 使用 SSH 格式签名 <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> config</span><span style="color:#ffb964;"> --global</span><span> gpg.format ssh //让 Git 使用 SSH 格式签名
</span><span>git config --global user.signingkey ~/.ssh/Github.pub //指定使用的 SSH 公钥 </span><span style="color:#ffb964;">git</span><span> config</span><span style="color:#ffb964;"> --global</span><span> user.signingkey </span><span style="color:#ffb964;">~</span><span>/.ssh/Github.pub //指定使用的 SSH 公钥
</span><span>git config --global commit.gpgsign true //表示自动签名所有提交 </span><span style="color:#ffb964;">git</span><span> config</span><span style="color:#ffb964;"> --global</span><span> commit.gpgsign true //表示自动签名所有提交
</span></code></pre> </span></code></pre>
<p>然后前往<code>Settings → SSH and GPG keys → New SSH key → Signing key</code>粘贴并保存。</p> <p>然后前往<code>Settings → SSH and GPG keys → New SSH key → Signing key</code>粘贴并保存。</p>
<ul> <ul>
<li>本地查看</li> <li>本地查看</li>
</ul> </ul>
<p>首先创建这个文件:</p> <p>首先创建这个文件:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>mkdir -p ~/.ssh <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">mkdir -p ~</span><span>/.ssh
</span><span>nano ~/.ssh/allowed_signers </span><span style="color:#ffb964;">nano ~</span><span>/.ssh/allowed_signers
</span></code></pre> </span></code></pre>
<p>写入你的 <code>test@mail.com ssh-ed25519 AAAABBBBBBBBBBBBBBBBxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx</code>并保存。 <p>写入你的 <code>test@mail.com ssh-ed25519 AAAABBBBBBBBBBBBBBBBxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx</code>并保存。
随后配置Git信任该文件</p> 随后配置Git信任该文件</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>git config --global gpg.ssh.allowedSignersFile ~/.ssh/allowed_signers <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> config</span><span style="color:#ffb964;"> --global</span><span> gpg.ssh.allowedSignersFile </span><span style="color:#ffb964;">~</span><span>/.ssh/allowed_signers
</span></code></pre> </span></code></pre>
<p>随后使用<code>git log --show-signature</code>即可查看本地log中的</p> <p>随后使用<code>git log --show-signature</code>即可查看本地log中的</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>Good &quot;git&quot; signature for test@mail.com with ED25519 key SHA256:ssh-ed25519 AAAABBBBBBBBBBBBBBBBBBBBB <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">Good </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">git</span><span style="color:#556633;">&quot;</span><span> signature for test@mail.com with ED25519 key SHA256:ssh-ed25519 AAAABBBBBBBBBBBBBBBBBBBBB
</span></code></pre> </span></code></pre>
<h2 id="he-bing-fen-zhi">合并分支</h2> <h2 id="he-bing-fen-zhi">合并分支</h2>
<p>分支是用来将特性开发绝缘开来的。比如你在本地的test分支新增了一个功能想要合并到主分支中。</p> <p>分支是用来将特性开发绝缘开来的。比如你在本地的test分支新增了一个功能想要合并到主分支中。</p>
<p>创建一个叫做“test”的分支并切换过去</p> <p>创建一个叫做“test”的分支并切换过去</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>git checkout -b test <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> checkout</span><span style="color:#ffb964;"> -b</span><span> test
</span></code></pre> </span></code></pre>
<p>新增某些功能后切换回主分支:</p> <p>新增某些功能后切换回主分支:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>git checkout master <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> checkout master
</span></code></pre> </span></code></pre>
<p>在主分支上执行合并操作,将 test 分支的改动合并到主分支:</p> <p>在主分支上执行合并操作,将 test 分支的改动合并到主分支:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>git merge test <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> merge test
</span></code></pre> </span></code></pre>
<p>推送完成后可以把新建的分支删掉:</p> <p>推送完成后可以把新建的分支删掉:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>git branch -d test <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> branch</span><span style="color:#ffb964;"> -d</span><span> test
</span></code></pre> </span></code></pre>
<h3 id="fen-zhi-chang-yong-cao-zuo">分支常用操作</h3> <h3 id="fen-zhi-chang-yong-cao-zuo">分支常用操作</h3>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>- 列出所有本地分支 <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">-</span><span> 列出所有本地分支
</span><span>git branch </span><span style="color:#ffb964;">git</span><span> branch
</span><span> </span><span>
</span><span>- 列出所有远程分支 </span><span style="color:#ffb964;">-</span><span> 列出所有远程分支
</span><span>git branch -r </span><span style="color:#ffb964;">git</span><span> branch</span><span style="color:#ffb964;"> -r
</span><span> </span><span>
</span><span>- 列出所有本地分支和远程分支 </span><span style="color:#ffb964;">-</span><span> 列出所有本地分支和远程分支
</span><span>git branch -a </span><span style="color:#ffb964;">git</span><span> branch</span><span style="color:#ffb964;"> -a
</span><span> </span><span>
</span><span>- 列出所有本地分支,并展示没有分支最后一次提交的信息 </span><span style="color:#ffb964;">-</span><span> 列出所有本地分支,并展示没有分支最后一次提交的信息
</span><span>git branch -v </span><span style="color:#ffb964;">git</span><span> branch</span><span style="color:#ffb964;"> -v
</span><span> </span><span>
</span><span>- 列出所有本地分支,并展示没有分支最后一次提交的信息和远程分支的追踪情况 </span><span style="color:#ffb964;">-</span><span> 列出所有本地分支,并展示没有分支最后一次提交的信息和远程分支的追踪情况
</span><span>git branch -vv </span><span style="color:#ffb964;">git</span><span> branch</span><span style="color:#ffb964;"> -vv
</span><span> </span><span>
</span><span>- 列出所有已经合并到当前分支的分支 </span><span style="color:#ffb964;">-</span><span> 列出所有已经合并到当前分支的分支
</span><span>git branch --merged </span><span style="color:#ffb964;">git</span><span> branch</span><span style="color:#ffb964;"> --merged
</span><span> </span><span>
</span><span>- 列出所有还没有合并到当前分支的分支 </span><span style="color:#ffb964;">-</span><span> 列出所有还没有合并到当前分支的分支
</span><span>git branch --no-merged </span><span style="color:#ffb964;">git</span><span> branch</span><span style="color:#ffb964;"> --no-merged
</span><span> </span><span>
</span><span>- 新建一个分支,但依然停留在当前分支 </span><span style="color:#ffb964;">-</span><span> 新建一个分支,但依然停留在当前分支
</span><span>git branch [branch-name] </span><span style="color:#ffb964;">git</span><span> branch </span><span style="color:#8fbfdc;">[</span><span>branch-name</span><span style="color:#8fbfdc;">]
</span><span> </span><span>
</span><span>- 新建一个分支,并切换到该分支 </span><span style="color:#ffb964;">-</span><span> 新建一个分支,并切换到该分支
</span><span>git checkout -b [branch] </span><span style="color:#ffb964;">git</span><span> checkout</span><span style="color:#ffb964;"> -b </span><span style="color:#8fbfdc;">[</span><span>branch</span><span style="color:#8fbfdc;">]
</span><span> </span><span>
</span><span>- 新建一个与远程分支同名的分支,并切换到该分支 </span><span style="color:#ffb964;">-</span><span> 新建一个与远程分支同名的分支,并切换到该分支
</span><span>git checkout --track [branch-name] </span><span style="color:#ffb964;">git</span><span> checkout</span><span style="color:#ffb964;"> --track </span><span style="color:#8fbfdc;">[</span><span>branch-name</span><span style="color:#8fbfdc;">]
</span><span> </span><span>
</span><span>- 新建一个分支指向指定commit </span><span style="color:#ffb964;">-</span><span> 新建一个分支指向指定commit
</span><span>git branch [branch] [commit] </span><span style="color:#ffb964;">git</span><span> branch </span><span style="color:#8fbfdc;">[</span><span>branch</span><span style="color:#8fbfdc;">] [</span><span>commit</span><span style="color:#8fbfdc;">]
</span><span> </span><span>
</span><span>- 新建一个分支,与指定的远程分支建立追踪关系 </span><span style="color:#ffb964;">-</span><span> 新建一个分支,与指定的远程分支建立追踪关系
</span><span>git branch --track [branch] [remote-branch] </span><span style="color:#ffb964;">git</span><span> branch</span><span style="color:#ffb964;"> --track </span><span style="color:#8fbfdc;">[</span><span>branch</span><span style="color:#8fbfdc;">] [</span><span>remote-branch</span><span style="color:#8fbfdc;">]
</span><span> </span><span>
</span><span>- 切换到指定分支,并更新工作区 </span><span style="color:#ffb964;">-</span><span> 切换到指定分支,并更新工作区
</span><span>git checkout [branch-name] </span><span style="color:#ffb964;">git</span><span> checkout </span><span style="color:#8fbfdc;">[</span><span>branch-name</span><span style="color:#8fbfdc;">]
</span><span> </span><span>
</span><span>- 切换到上一个分支 </span><span style="color:#ffb964;">-</span><span> 切换到上一个分支
</span><span>git checkout - </span><span style="color:#ffb964;">git</span><span> checkout -
</span><span> </span><span>
</span><span>- 建立追踪关系,在现有分支与指定的远程分支之间 </span><span style="color:#ffb964;">-</span><span> 建立追踪关系,在现有分支与指定的远程分支之间
</span><span>git branch --set-upstream-to=[remote-branch] </span><span style="color:#ffb964;">git</span><span> branch</span><span style="color:#ffb964;"> --set-upstream-to</span><span>=</span><span style="color:#8fbfdc;">[</span><span>remote-branch</span><span style="color:#8fbfdc;">]
</span><span>git branch --set-upstream [branch] [remote-branch] - 已被弃用 </span><span style="color:#ffb964;">git</span><span> branch</span><span style="color:#ffb964;"> --set-upstream </span><span style="color:#8fbfdc;">[</span><span>branch</span><span style="color:#8fbfdc;">] [</span><span>remote-branch</span><span style="color:#8fbfdc;">]</span><span> - 已被弃用
</span><span> </span><span>
</span><span>- 合并指定分支到当前分支 </span><span style="color:#ffb964;">-</span><span> 合并指定分支到当前分支
</span><span>git merge [branch] </span><span style="color:#ffb964;">git</span><span> merge </span><span style="color:#8fbfdc;">[</span><span>branch</span><span style="color:#8fbfdc;">]
</span><span> </span><span>
</span><span>- 中断此次合并(你可能不想处理冲突) </span><span style="color:#ffb964;">-</span><span> 中断此次合并(你可能不想处理冲突)
</span><span>git merge --abort </span><span style="color:#ffb964;">git</span><span> merge</span><span style="color:#ffb964;"> --abort
</span><span> </span><span>
</span><span>- 选择一个commit合并进当前分支 </span><span style="color:#ffb964;">-</span><span> 选择一个commit合并进当前分支
</span><span>git cherry-pick [commit] </span><span style="color:#ffb964;">git</span><span> cherry-pick </span><span style="color:#8fbfdc;">[</span><span>commit</span><span style="color:#8fbfdc;">]
</span><span> </span><span>
</span><span>- 删除分支 </span><span style="color:#ffb964;">-</span><span> 删除分支
</span><span>git branch -d [branch-name] </span><span style="color:#ffb964;">git</span><span> branch</span><span style="color:#ffb964;"> -d </span><span style="color:#8fbfdc;">[</span><span>branch-name</span><span style="color:#8fbfdc;">]
</span><span> </span><span>
</span><span>#新增远程分支 远程分支需先在本地创建,再进行推送 </span><span style="color:#888888;">#新增远程分支 远程分支需先在本地创建,再进行推送
</span><span>git push origin [branch-name] </span><span style="color:#ffb964;">git</span><span> push origin </span><span style="color:#8fbfdc;">[</span><span>branch-name</span><span style="color:#8fbfdc;">]
</span><span> </span><span>
</span><span>- 删除远程分支 </span><span style="color:#ffb964;">-</span><span> 删除远程分支
</span><span>git push origin --delete [branch-name] </span><span style="color:#ffb964;">git</span><span> push origin</span><span style="color:#ffb964;"> --delete </span><span style="color:#8fbfdc;">[</span><span>branch-name</span><span style="color:#8fbfdc;">]
</span><span>git branch -dr [remote/branch] </span><span style="color:#ffb964;">git</span><span> branch</span><span style="color:#ffb964;"> -dr </span><span style="color:#8fbfdc;">[</span><span>remote/branch</span><span style="color:#8fbfdc;">]
</span></code></pre> </span></code></pre>
<h2 id="biao-qian">标签</h2> <h2 id="biao-qian">标签</h2>
<p>Git 的 tag 功能主要用于<code>给仓库历史中的某个特定提交打上“标签”</code>,通常用于标记版本发布点(例如 v1.0、v2.0 等),以<code>便于后续的版本定位、回溯和发布管理</code></p> <p>Git 的 tag 功能主要用于<code>给仓库历史中的某个特定提交打上“标签”</code>,通常用于标记版本发布点(例如 v1.0、v2.0 等),以<code>便于后续的版本定位、回溯和发布管理</code></p>
@@ -448,35 +448,35 @@
<li>创建附注标签</li> <li>创建附注标签</li>
</ul> </ul>
<p>使用 -a 参数表示“annotated”并用 -m 提供标签说明。例如,给当前提交创建一个名为 v1.0 的附注标签:</p> <p>使用 -a 参数表示“annotated”并用 -m 提供标签说明。例如,给当前提交创建一个名为 v1.0 的附注标签:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>git tag -a v1.0 -m &quot;发布版本 v1.0&quot; <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> tag</span><span style="color:#ffb964;"> -a</span><span> v1.0</span><span style="color:#ffb964;"> -m </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">发布版本 v1.0</span><span style="color:#556633;">&quot;
</span></code></pre> </span></code></pre>
<p>这会在 Git 数据库中生成一个完整的标签对象,可通过 git show v1.0 查看标签信息和对应的提交详情。</p> <p>这会在 Git 数据库中生成一个完整的标签对象,可通过 git show v1.0 查看标签信息和对应的提交详情。</p>
<p>如果需要给旧提交贴标签,可以在命令末尾指定提交的 SHA 值(部分 SHA 也可):</p> <p>如果需要给旧提交贴标签,可以在命令末尾指定提交的 SHA 值(部分 SHA 也可):</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>git tag -a v1.0 &lt;commit-sha&gt; -m &quot;发布版本 v1.0&quot; <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> tag</span><span style="color:#ffb964;"> -a</span><span> v1.0 &lt;commit-sha&gt; -m </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">发布版本 v1.0</span><span style="color:#556633;">&quot;
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>创建轻量标签</li> <li>创建轻量标签</li>
</ul> </ul>
<p>直接指定标签名即可,不加任何参数:</p> <p>直接指定标签名即可,不加任何参数:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>git tag v1.0-light <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> tag v1.0-light
</span></code></pre> </span></code></pre>
<p>轻量标签仅仅是一个提交引用,因此查看时不会显示附加信息。</p> <p>轻量标签仅仅是一个提交引用,因此查看时不会显示附加信息。</p>
<h3 id="lie-chu-biao-qian">列出标签</h3> <h3 id="lie-chu-biao-qian">列出标签</h3>
<ul> <ul>
<li>列出所有标签</li> <li>列出所有标签</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>git tag <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> tag
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>还可以使用通配符过滤:</li> <li>还可以使用通配符过滤:</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>git tag -l &quot;v1.*&quot; <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> tag</span><span style="color:#ffb964;"> -l </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">v1.*</span><span style="color:#556633;">&quot;
</span></code></pre> </span></code></pre>
<p>这样便于管理和筛选大量标签。</p> <p>这样便于管理和筛选大量标签。</p>
<ul> <ul>
<li>查看标签详细信息</li> <li>查看标签详细信息</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>git show v1.0 <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> show v1.0
</span></code></pre> </span></code></pre>
<p>这会显示标签对象的元数据以及对应的提交记录。</p> <p>这会显示标签对象的元数据以及对应的提交记录。</p>
<h3 id="tui-song-biao-qian">推送标签</h3> <h3 id="tui-song-biao-qian">推送标签</h3>
@@ -484,81 +484,81 @@
<ul> <ul>
<li>推送单个标签</li> <li>推送单个标签</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>git push origin v1.0 <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> push origin v1.0
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>一次性推送所有标签</li> <li>一次性推送所有标签</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>git push origin --tags <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> push origin</span><span style="color:#ffb964;"> --tags
</span></code></pre> </span></code></pre>
<h3 id="shan-chu-biao-qian">删除标签</h3> <h3 id="shan-chu-biao-qian">删除标签</h3>
<ul> <ul>
<li>删除本地标签</li> <li>删除本地标签</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>git tag -d v1.0 <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> tag</span><span style="color:#ffb964;"> -d</span><span> v1.0
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>删除远程标签</li> <li>删除远程标签</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>git push origin --delete v1.0 <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> push origin</span><span style="color:#ffb964;"> --delete</span><span> v1.0
</span></code></pre> </span></code></pre>
<h2 id="ri-zhi">日志</h2> <h2 id="ri-zhi">日志</h2>
<p>如果你想了解本地仓库的历史记录,最简单的命令就是使用:</p> <p>如果你想了解本地仓库的历史记录,最简单的命令就是使用:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>git log <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> log
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>只看某一个人的提交记录:</li> <li>只看某一个人的提交记录:</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>git log --author=bob <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> log</span><span style="color:#ffb964;"> --author</span><span>=bob
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>一个压缩后的每一条提交记录只占一行的输出:</li> <li>一个压缩后的每一条提交记录只占一行的输出:</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>git log --pretty=oneline <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> log</span><span style="color:#ffb964;"> --pretty</span><span>=oneline
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>看看哪些文件改变了:</li> <li>看看哪些文件改变了:</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>git log --name-status <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> log</span><span style="color:#ffb964;"> --name-status
</span></code></pre> </span></code></pre>
<h2 id="sheng-cheng-bu-ding">生成补丁</h2> <h2 id="sheng-cheng-bu-ding">生成补丁</h2>
<p>比如你修改了项目中的<code>fs/proc/base.c</code>,然后</p> <p>比如你修改了项目中的<code>fs/proc/base.c</code>,然后</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>git add fs/proc/base.c <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> add fs/proc/base.c
</span><span>git commit -m &quot;fix:base&quot; </span><span style="color:#ffb964;">git</span><span> commit</span><span style="color:#ffb964;"> -m </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">fix:base</span><span style="color:#556633;">&quot;
</span><span>git format-patch origin/16.0 </span><span style="color:#ffb964;">git</span><span> format-patch origin/16.0
</span></code></pre> </span></code></pre>
<p>即可在目录下生成补丁<code>0001-fix-base.patch</code>.</p> <p>即可在目录下生成补丁<code>0001-fix-base.patch</code>.</p>
<h2 id="shan-chu-qian-yi-ge-ti-jiao-ji-lu">删除前一个提交记录</h2> <h2 id="shan-chu-qian-yi-ge-ti-jiao-ji-lu">删除前一个提交记录</h2>
<p>有时候手滑或者不想使用一个commit说明可以用以下命令撤销上一个 commit</p> <p>有时候手滑或者不想使用一个commit说明可以用以下命令撤销上一个 commit</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>git reset --soft HEAD~1 <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> reset</span><span style="color:#ffb964;"> --soft</span><span> HEAD</span><span style="color:#ffb964;">~</span><span>1
</span></code></pre> </span></code></pre>
<p>这个命令会撤销上一个 commit但保留文件修改代码仍然在工作区。适用于 想要重新提交amend或调整 commit 的情况。</p> <p>这个命令会撤销上一个 commit但保留文件修改代码仍然在工作区。适用于 想要重新提交amend或调整 commit 的情况。</p>
<p>如果你想彻底删除更改(不保留代码修改),可以使用:</p> <p>如果你想彻底删除更改(不保留代码修改),可以使用:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>git reset --hard HEAD~1 <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> reset</span><span style="color:#ffb964;"> --hard</span><span> HEAD</span><span style="color:#ffb964;">~</span><span>1
</span></code></pre> </span></code></pre>
<blockquote> <blockquote>
<p>注意:--hard 会清除未提交的更改,无法恢复。</p> <p>注意:--hard 会清除未提交的更改,无法恢复。</p>
</blockquote> </blockquote>
<h2 id="git-mu-lu-zhong-zhu-yao-wen-jian-he-zi-mu-lu-de-jie-gou-ji-qi-zuo-yong"><code>.git</code> 目录中主要文件和子目录的结构及其作用</h2> <h2 id="git-mu-lu-zhong-zhu-yao-wen-jian-he-zi-mu-lu-de-jie-gou-ji-qi-zuo-yong"><code>.git</code> 目录中主要文件和子目录的结构及其作用</h2>
<h3 id="file-folder-git-mu-lu-jie-gou-gai-lan">📁 <code>.git</code> 目录结构概览</h3> <h3 id="file-folder-git-mu-lu-jie-gou-gai-lan">📁 <code>.git</code> 目录结构概览</h3>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>.git/ <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">.git/
</span><span>├── HEAD </span><span style="color:#ffb964;">├──</span><span> HEAD
</span><span>├── config </span><span style="color:#ffb964;">├──</span><span> config
</span><span>├── description </span><span style="color:#ffb964;">├──</span><span> description
</span><span>├── hooks/ </span><span style="color:#ffb964;">├──</span><span> hooks/
</span><span>├── index </span><span style="color:#ffb964;">├──</span><span> index
</span><span>├── info/ </span><span style="color:#ffb964;">├──</span><span> info/
</span><span> └── exclude </span><span style="color:#ffb964;"></span><span> └── exclude
</span><span>├── logs/ </span><span style="color:#ffb964;">├──</span><span> logs/
</span><span> ├── HEAD </span><span style="color:#ffb964;"></span><span> ├── HEAD
</span><span> └── refs/ </span><span style="color:#ffb964;"></span><span> └── refs/
</span><span>├── objects/ </span><span style="color:#ffb964;">├──</span><span> objects/
</span><span> ├── info/ </span><span style="color:#ffb964;"></span><span> ├── info/
</span><span> └── pack/ </span><span style="color:#ffb964;"></span><span> └── pack/
</span><span>├── refs/ </span><span style="color:#ffb964;">├──</span><span> refs/
</span><span> ├── heads/ </span><span style="color:#ffb964;"></span><span> ├── heads/
</span><span> ├── remotes/ </span><span style="color:#ffb964;"></span><span> ├── remotes/
</span><span> └── tags/ </span><span style="color:#ffb964;"></span><span> └── tags/
</span></code></pre> </span></code></pre>
<h3 id="dividers-he-xin-wen-jian-he-mu-lu-shuo-ming">🗂️ 核心文件和目录说明</h3> <h3 id="dividers-he-xin-wen-jian-he-mu-lu-shuo-ming">🗂️ 核心文件和目录说明</h3>
<ul> <ul>
@@ -627,38 +627,38 @@ scope 是可选的,用于指出变更影响的模块或范围。
</span></code></pre> </span></code></pre>
<p>这可以在提交后自动关闭相关问题。</p> <p>这可以在提交后自动关闭相关问题。</p>
<h3 id="chang-jian-de-commit-lei-xing">常见的 Commit 类型</h3> <h3 id="chang-jian-de-commit-lei-xing">常见的 Commit 类型</h3>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>- feat新功能的添加 <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">-</span><span> feat新功能的添加
</span><span> 示例feat(user): 添加用户注册功能 </span><span> </span><span style="color:#ffb964;">示例feat</span><span>(user): 添加用户注册功能
</span><span> </span><span>
</span><span>- fix修复 Bug </span><span style="color:#ffb964;">-</span><span> fix修复 Bug
</span><span> 示例fix(parser): 修复解析错误导致程序崩溃 </span><span> </span><span style="color:#ffb964;">示例fix</span><span>(parser): 修复解析错误导致程序崩溃
</span><span> </span><span>
</span><span>- docs文档相关的修改 </span><span style="color:#ffb964;">-</span><span> docs文档相关的修改
</span><span> 示例docs(readme): 更新使用说明 </span><span> </span><span style="color:#ffb964;">示例docs</span><span>(readme): 更新使用说明
</span><span> </span><span>
</span><span>- style代码格式、排版等不影响代码逻辑的调整 </span><span style="color:#ffb964;">-</span><span> style代码格式、排版等不影响代码逻辑的调整
</span><span> 示例style: 优化代码缩进和空格 </span><span> </span><span style="color:#ffb964;">示例style:</span><span> 优化代码缩进和空格
</span><span> </span><span>
</span><span>- refactor代码重构不涉及新功能或 Bug 修复 </span><span style="color:#ffb964;">-</span><span> refactor代码重构不涉及新功能或 Bug 修复
</span><span> 示例refactor: 优化数据处理逻辑 </span><span> </span><span style="color:#ffb964;">示例refactor:</span><span> 优化数据处理逻辑
</span><span> </span><span>
</span><span>- perf性能优化 </span><span style="color:#ffb964;">-</span><span> perf性能优化
</span><span> 示例perf: 提升数据查询速度 </span><span> </span><span style="color:#ffb964;">示例perf:</span><span> 提升数据查询速度
</span><span> </span><span>
</span><span>- test添加或修改测试代码 </span><span style="color:#ffb964;">-</span><span> test添加或修改测试代码
</span><span> 示例test: 补充用户登录单元测试 </span><span> </span><span style="color:#ffb964;">示例test:</span><span> 补充用户登录单元测试
</span><span> </span><span>
</span><span>- build构建相关的变更如依赖管理、构建脚本等 </span><span style="color:#ffb964;">-</span><span> build构建相关的变更如依赖管理、构建脚本等
</span><span> 示例build: 更新 webpack 配置 </span><span> </span><span style="color:#ffb964;">示例build:</span><span> 更新 webpack 配置
</span><span> </span><span>
</span><span>- ci持续集成相关的修改 </span><span style="color:#ffb964;">-</span><span> ci持续集成相关的修改
</span><span> 示例ci: 调整 GitHub Actions 配置 </span><span> </span><span style="color:#ffb964;">示例ci:</span><span> 调整 GitHub Actions 配置
</span><span> </span><span>
</span><span>- chore其他杂项维护不涉及源代码或测试文件的修改 </span><span style="color:#ffb964;">-</span><span> chore其他杂项维护不涉及源代码或测试文件的修改
</span><span> 示例chore: 更新项目依赖 </span><span> </span><span style="color:#ffb964;">示例chore:</span><span> 更新项目依赖
</span><span> </span><span>
</span><span>- revert回滚到上一个版本的提交 </span><span style="color:#ffb964;">-</span><span> revert回滚到上一个版本的提交
</span><span> 示例revert: 撤销上次提交 </span><span> </span><span style="color:#ffb964;">示例revert:</span><span> 撤销上次提交
</span></code></pre> </span></code></pre>
<hr /> <hr />
<p><strong>Done.</strong></p> <p><strong>Done.</strong></p>

View File

@@ -162,79 +162,79 @@
<tr><td><strong>10. 去中心化信任与身份管理</strong></td><td>- 使用 Web of Trust 模型构建可信身份网络用于开源社区签名、Key Signing Party、LDAP 交换等。</td></tr> <tr><td><strong>10. 去中心化信任与身份管理</strong></td><td>- 使用 Web of Trust 模型构建可信身份网络用于开源社区签名、Key Signing Party、LDAP 交换等。</td></tr>
</tbody></table> </tbody></table>
<h2 id="an-zhuang-gnupg">安装 GnuPG</h2> <h2 id="an-zhuang-gnupg">安装 GnuPG</h2>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>paru -S gnupg <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">paru -S</span><span> gnupg
</span></code></pre> </span></code></pre>
<h2 id="sheng-cheng-gong-yao-yu-si-yao">生成公钥与私钥</h2> <h2 id="sheng-cheng-gong-yao-yu-si-yao">生成公钥与私钥</h2>
<p>使用如下命令:</p> <p>使用如下命令:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>gpg --full-generate-key <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">gpg --full-generate-key
</span></code></pre> </span></code></pre>
<p>生成流程:</p> <p>生成流程:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>gpg (GnuPG) 2.4.7; Copyright (C) 2024 g10 Code GmbH <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">gpg</span><span> (GnuPG) </span><span style="color:#ffb964;">2.4.7</span><span>; </span><span style="color:#ffb964;">Copyright</span><span> (C) </span><span style="color:#ffb964;">2024</span><span> g10 Code GmbH
</span><span>This is free software: you are free to change and redistribute it. </span><span style="color:#ffb964;">This</span><span> is free software: you are free to change and redistribute it.
</span><span>There is NO WARRANTY, to the extent permitted by law. </span><span style="color:#ffb964;">There</span><span> is NO WARRANTY, to the extent permitted by law.
</span><span> </span><span>
</span><span>Please select what kind of key you want: </span><span style="color:#ffb964;">Please</span><span> select what kind of key you want:
</span><span> (1) RSA and RSA </span><span> (</span><span style="color:#ffb964;">1</span><span>) RSA and RSA
</span><span> (2) DSA and Elgamal </span><span> (</span><span style="color:#ffb964;">2</span><span>) DSA and Elgamal
</span><span> (3) DSA (sign only) </span><span> (</span><span style="color:#ffb964;">3</span><span>) DSA (sign only)
</span><span> (4) RSA (sign only) </span><span> (</span><span style="color:#ffb964;">4</span><span>) RSA (sign only)
</span><span> (9) ECC (sign and encrypt) *default* </span><span> (</span><span style="color:#ffb964;">9</span><span>) ECC (sign and encrypt) </span><span style="color:#ffb964;">*default*
</span><span> (10) ECC (sign only) </span><span> (</span><span style="color:#ffb964;">10</span><span>) ECC (sign only)
</span><span> (14) Existing key from card </span><span> (</span><span style="color:#ffb964;">14</span><span>) Existing key from card
</span><span>Your selection? 9 ## 默认选择ECC算法 </span><span style="color:#ffb964;">Your</span><span> selection? 9 </span><span style="color:#888888;">## 默认选择ECC算法
</span><span>Please select which elliptic curve you want: </span><span style="color:#ffb964;">Please</span><span> select which elliptic curve you want:
</span><span> (1) Curve 25519 *default* </span><span> (</span><span style="color:#ffb964;">1</span><span>) Curve 25519 *default*
</span><span> (4) NIST P-384 </span><span> (</span><span style="color:#ffb964;">4</span><span>) NIST P-384
</span><span> (6) Brainpool P-256 </span><span> (</span><span style="color:#ffb964;">6</span><span>) Brainpool P-256
</span><span>Your selection? 1 ## 默认选择标准椭圆曲线 </span><span style="color:#ffb964;">Your</span><span> selection? 1 </span><span style="color:#888888;">## 默认选择标准椭圆曲线
</span><span>Please specify how long the key should be valid. </span><span style="color:#ffb964;">Please</span><span> specify how long the key should be valid.
</span><span> 0 = key does not expire </span><span> </span><span style="color:#ffb964;">0</span><span> = key does not expire
</span><span> &lt;n&gt; = key expires in n days </span><span> &lt;n&gt; = </span><span style="color:#ffb964;">key</span><span> expires in n days
</span><span> &lt;n&gt;w = key expires in n weeks </span><span> &lt;n&gt;w = </span><span style="color:#ffb964;">key</span><span> expires in n weeks
</span><span> &lt;n&gt;m = key expires in n months </span><span> &lt;n&gt;m = </span><span style="color:#ffb964;">key</span><span> expires in n months
</span><span> &lt;n&gt;y = key expires in n years </span><span> &lt;n&gt;y = </span><span style="color:#ffb964;">key</span><span> expires in n years
</span><span>Key is valid for? (0) 1y ## 默认有效期为一年 </span><span style="color:#ffb964;">Key</span><span> is valid for? (0) </span><span style="color:#ffb964;">1y </span><span style="color:#888888;">## 默认有效期为一年
</span><span>Key expires at 2026年06月17日 星期三 13时06分27秒 CST </span><span style="color:#ffb964;">Key</span><span> expires at 2026年06月17日 星期三 13时06分27秒 CST
</span><span>Is this correct? (y/N) y </span><span style="color:#ffb964;">Is</span><span> this correct? (y/N) </span><span style="color:#ffb964;">y
</span><span> </span><span>
</span><span>GnuPG needs to construct a user ID to identify your key. </span><span style="color:#ffb964;">GnuPG</span><span> needs to construct a user ID to identify your key.
</span><span> </span><span>
</span><span>## 输入名字与邮箱,comment可省略 </span><span style="color:#888888;">## 输入名字与邮箱,comment可省略
</span><span> </span><span>
</span><span>Real name: xxx </span><span style="color:#ffb964;">Real</span><span> name: xxx
</span><span>Email address: xxx@gmail.com </span><span style="color:#ffb964;">Email</span><span> address: xxx@gmail.com
</span><span>Comment: </span><span style="color:#ffb964;">Comment:
</span><span>You selected this USER-ID: </span><span style="color:#ffb964;">You</span><span> selected this USER-ID:
</span><span> &quot;xxx &lt;xxx@gmail.com&gt;&quot; </span><span> </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">xxx &lt;xxx@gmail.com&gt;</span><span style="color:#556633;">&quot;
</span><span> </span><span>
</span><span>Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? </span><span style="color:#ffb964;">Change</span><span> (N)</span><span style="color:#ffb964;">ame,</span><span> (C)</span><span style="color:#ffb964;">omment,</span><span> (E)</span><span style="color:#ffb964;">mail</span><span> or (O)</span><span style="color:#ffb964;">kay/</span><span>(Q)</span><span style="color:#ffb964;">uit?
</span><span>Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O </span><span style="color:#ffb964;">Change</span><span> (N)</span><span style="color:#ffb964;">ame,</span><span> (C)</span><span style="color:#ffb964;">omment,</span><span> (E)</span><span style="color:#ffb964;">mail</span><span> or (O)</span><span style="color:#ffb964;">kay/</span><span>(Q)</span><span style="color:#ffb964;">uit?</span><span> O
</span><span>We need to generate a lot of random bytes. It is a good idea to perform </span><span style="color:#ffb964;">We</span><span> need to generate a lot of random bytes. It is a good idea to perform
</span><span>some other action (type on the keyboard, move the mouse, utilize the </span><span style="color:#ffb964;">some</span><span> other action (type on the keyboard, move the mouse, utilize the
</span><span>disks) during the prime generation; this gives the random number </span><span style="color:#ffb964;">disks</span><span>) </span><span style="color:#ffb964;">during</span><span> the prime generation; </span><span style="color:#ffb964;">this</span><span> gives the random number
</span><span>generator a better chance to gain enough entropy. </span><span style="color:#ffb964;">generator</span><span> a better chance to gain enough entropy.
</span><span>We need to generate a lot of random bytes. It is a good idea to perform </span><span style="color:#ffb964;">We</span><span> need to generate a lot of random bytes. It is a good idea to perform
</span><span>some other action (type on the keyboard, move the mouse, utilize the </span><span style="color:#ffb964;">some</span><span> other action (type on the keyboard, move the mouse, utilize the
</span><span>disks) during the prime generation; this gives the random number </span><span style="color:#ffb964;">disks</span><span>) </span><span style="color:#ffb964;">during</span><span> the prime generation; </span><span style="color:#ffb964;">this</span><span> gives the random number
</span><span>generator a better chance to gain enough entropy. </span><span style="color:#ffb964;">generator</span><span> a better chance to gain enough entropy.
</span></code></pre> </span></code></pre>
<h2 id="lie-chu-mi-yao">列出密钥</h2> <h2 id="lie-chu-mi-yao">列出密钥</h2>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>gpg --list-secret-keys --keyid-format long <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">gpg --list-secret-keys --keyid-format</span><span> long
</span></code></pre> </span></code></pre>
<p>其中<code>sec ed25519/xxxxxxxxx 2025-06-17 [SC] [expires: 2026-06-17]</code>的xxxxxxxxx即为公钥ID。</p> <p>其中<code>sec ed25519/xxxxxxxxx 2025-06-17 [SC] [expires: 2026-06-17]</code>的xxxxxxxxx即为公钥ID。</p>
<h2 id="fa-bu-gong-yao">发布公钥</h2> <h2 id="fa-bu-gong-yao">发布公钥</h2>
<p>例如上传你的 key</p> <p>例如上传你的 key</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>gpg --send-keys &lt;你的LongKeyID&gt; <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">gpg --send-keys </span><span>&lt;你的LongKeyID&gt;
</span></code></pre> </span></code></pre>
<p>默认为你的 gpg.conf 中配置的 keyserver也可以显式指定</p> <p>默认为你的 gpg.conf 中配置的 keyserver也可以显式指定</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>gpg --keyserver hkps://keys.openpgp.org --send-keys &lt;KeyID&gt; <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">gpg --keyserver</span><span> hkps://keys.openpgp.org</span><span style="color:#ffb964;"> --send-keys </span><span>&lt;KeyID&gt;
</span></code></pre> </span></code></pre>
<p>也可以使用如下命令导出公钥为可读 ASCII 格式类似ssh-keys随后即可发布在个人博客上等等。</p> <p>也可以使用如下命令导出公钥为可读 ASCII 格式类似ssh-keys随后即可发布在个人博客上等等。</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>gpg --armor --export &lt;KeyID&gt; &gt; mypubkey.asc <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">gpg --armor --export </span><span>&lt;KeyID&gt; &gt; mypubkey.asc
</span></code></pre> </span></code></pre>
<h2 id="che-xiao-gong-yao">撤销公钥</h2> <h2 id="che-xiao-gong-yao">撤销公钥</h2>
<p>如果怀疑密钥被泄露或被中间人替换立即发布“撤销证书”revocation certificate并上传到 keyserver。</p> <p>如果怀疑密钥被泄露或被中间人替换立即发布“撤销证书”revocation certificate并上传到 keyserver。</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>gpg --gen-revoke &lt;KeyID&gt; &gt; revoke.asc <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">gpg --gen-revoke </span><span>&lt;KeyID&gt; &gt; revoke.asc
</span></code></pre> </span></code></pre>
<p>上传撤销证书后,所有人都能知道该公钥已不再可信。</p> <p>上传撤销证书后,所有人都能知道该公钥已不再可信。</p>
<hr /> <hr />

View File

@@ -239,26 +239,26 @@
<li> <li>
<p><strong>Docker日志文件</strong>:<br /> <p><strong>Docker日志文件</strong>:<br />
使用 <code>docker ps -a</code> 命令查找你感兴趣的容器的 ID。</p> 使用 <code>docker ps -a</code> 命令查找你感兴趣的容器的 ID。</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>docker ps -a
</span></code></pre>
<p>进入容器的日志目录,路径类似于 <code>/var/lib/docker/containers/&lt;container-id&gt;/</code></p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>cd /var/lib/docker/containers/&lt;container-id&gt;/
</span></code></pre>
<p>使用命令清理或删除日志文件。你可以删除所有日志文件,或者只删除特定的日志文件。</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span># 删除所有日志文件
</span><span>rm *.log
</span><span>
</span><span># 删除特定日志文件(例如 stdout 和 stderr
</span><span>rm *-json.log
</span></code></pre>
</li> </li>
</ol> </ol>
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">docker</span><span> ps</span><span style="color:#ffb964;"> -a
</span></code></pre>
<p>进入容器的日志目录,路径类似于 <code>/var/lib/docker/containers/&lt;container-id&gt;/</code></p>
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span>cd /var/lib/docker/containers/&lt;container-id&gt;/
</span></code></pre>
<p>使用命令清理或删除日志文件。你可以删除所有日志文件,或者只删除特定的日志文件。</p>
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#888888;"># 删除所有日志文件
</span><span style="color:#ffb964;">rm </span><span>*.log
</span><span>
</span><span style="color:#888888;"># 删除特定日志文件(例如 stdout 和 stderr
</span><span style="color:#ffb964;">rm </span><span>*-json.log
</span></code></pre>
<h2 id="arch-linux-an-zhuang-bei-fen"><strong>Arch Linux 安装备份</strong></h2> <h2 id="arch-linux-an-zhuang-bei-fen"><strong>Arch Linux 安装备份</strong></h2>
<p>你可以定期备份 Arch Linux 安装的软件列表,以便在需要时轻松还原。</p> <p>你可以定期备份 Arch Linux 安装的软件列表,以便在需要时轻松还原。</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>pacman -Qqe &gt; package-list.txt <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">pacman -Qqe </span><span>&gt; package-list.txt
</span></code></pre> </span></code></pre>
<p>这将列出所有已安装的软件包,并将其保存到文件 <code>package-list.txt</code> 中。在还原系统时,你可以使用以下命令:</p> <p>这将列出所有已安装的软件包,并将其保存到文件 <code>package-list.txt</code> 中。在还原系统时,你可以使用以下命令:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo pacman -S --needed - &lt; package-list.txt <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">sudo</span><span> pacman</span><span style="color:#ffb964;"> -S --needed</span><span> - &lt; package-list.txt
</span></code></pre> </span></code></pre>
<h2 id="hou-ji">后记</h2> <h2 id="hou-ji">后记</h2>
<p>垃圾文件的产生总是无可避免,这是因为随着使用时间的流逝,系统的熵值也在增大;生命以负熵为食,同样的为系统清理垃圾也是逆熵的一部分。在你的生命中会有许多电子设备,但它们往往只有你一任主人,请善待它们!</p> <p>垃圾文件的产生总是无可避免,这是因为随着使用时间的流逝,系统的熵值也在增大;生命以负熵为食,同样的为系统清理垃圾也是逆熵的一部分。在你的生命中会有许多电子设备,但它们往往只有你一任主人,请善待它们!</p>

View File

@@ -134,46 +134,46 @@
</blockquote> </blockquote>
<h2 id="an-zhuang">安装</h2> <h2 id="an-zhuang">安装</h2>
<p>首先安装neovim,在arch linux上是</p> <p>首先安装neovim,在arch linux上是</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>paru -S neovim <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">paru -S</span><span> neovim
</span></code></pre> </span></code></pre>
<p>在Ubuntu上是</p> <p>在Ubuntu上是</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo add-apt-repository ppa:neovim-ppa/unstable <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">sudo</span><span> add-apt-repository ppa:neovim-ppa/unstable
</span><span>sudo apt update </span><span style="color:#ffb964;">sudo</span><span> apt update
</span><span>sudo apt install -y \ neovim git curl unzip build-essential ripgrep fd-find </span><span style="color:#ffb964;">sudo</span><span> apt install</span><span style="color:#ffb964;"> -y </span><span>\ neovim git curl unzip build-essential ripgrep fd-find
</span></code></pre> </span></code></pre>
<p>备份现有配置:</p> <p>备份现有配置:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>mv ~/.config/nvim ~/.config/nvim.bak <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">mv ~</span><span>/.config/nvim </span><span style="color:#ffb964;">~</span><span>/.config/nvim.bak
</span><span>mv ~/.local/share/nvim ~/.local/share/nvim.bak </span><span style="color:#ffb964;">mv ~</span><span>/.local/share/nvim </span><span style="color:#ffb964;">~</span><span>/.local/share/nvim.bak
</span></code></pre> </span></code></pre>
<p>克隆 LazyVim Starter 模板:</p> <p>克隆 LazyVim Starter 模板:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>git clone https://github.com/LazyVim/starter ~/.config/nvim <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> clone https://github.com/LazyVim/starter </span><span style="color:#ffb964;">~</span><span>/.config/nvim
</span></code></pre> </span></code></pre>
<p>启动 Neovim</p> <p>启动 Neovim</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>nvim <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">nvim
</span></code></pre> </span></code></pre>
<p>首次启动时LazyVim 会自动安装并配置所需的插件。</p> <p>首次启动时LazyVim 会自动安装并配置所需的插件。</p>
<h2 id="jie-gou">结构</h2> <h2 id="jie-gou">结构</h2>
<p>LazyVim 的配置目录通常位于<code>~/.config/nvim/</code>中:</p> <p>LazyVim 的配置目录通常位于<code>~/.config/nvim/</code>中:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>~/.config/nvim <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">~/.config/nvim
</span><span> tree </span><span style="color:#ffb964;"></span><span> tree
</span><span>. </span><span>.
</span><span>├── init.lua </span><span style="color:#ffb964;">├──</span><span> init.lua
</span><span>├── lazy-lock.json </span><span style="color:#ffb964;">├──</span><span> lazy-lock.json
</span><span>├── lazyvim.json </span><span style="color:#ffb964;">├──</span><span> lazyvim.json
</span><span>├── LICENSE </span><span style="color:#ffb964;">├──</span><span> LICENSE
</span><span>├── lua </span><span style="color:#ffb964;">├──</span><span> lua
</span><span>   ├── config </span><span style="color:#ffb964;"></span><span>   ├── config
</span><span>   │   ├── autocmds.lua </span><span style="color:#ffb964;"></span><span>   │   ├── autocmds.lua
</span><span>   │   ├── keymaps.lua </span><span style="color:#ffb964;"></span><span>   │   ├── keymaps.lua
</span><span>   │   ├── lazy.lua </span><span style="color:#ffb964;"></span><span>   │   ├── lazy.lua
</span><span>   │   └── options.lua </span><span style="color:#ffb964;"></span><span>   │   └── options.lua
</span><span>   └── plugins </span><span style="color:#ffb964;"></span><span>   └── plugins
</span><span>   ├── example.lua </span><span style="color:#ffb964;"></span><span>   ├── example.lua
</span><span>   └── mp.lua </span><span style="color:#ffb964;"></span><span>   └── mp.lua
</span><span>├── README.md </span><span style="color:#ffb964;">├──</span><span> README.md
</span><span>└── stylua.toml </span><span style="color:#ffb964;">└──</span><span> stylua.toml
</span><span> </span><span>
</span><span>4 directories, 12 files </span><span style="color:#ffb964;">4</span><span> directories, 12 files
</span></code></pre> </span></code></pre>
<p>另外在<code>~/.local/share/nvim/lazy/LazyVim/lua/lazyvim/plugins/</code>目录下看到的文件结构,是 LazyVim 为其核心插件和扩展插件提供的模块化配置体系。这些配置文件并不直接出现在<code>~/.config/nvim/lua/plugins/</code>目录中,是因为 LazyVim 采用了模块化和懒加载的设计理念,将核心插件和配置封装在其自身的代码库中。</p> <p>另外在<code>~/.local/share/nvim/lazy/LazyVim/lua/lazyvim/plugins/</code>目录下看到的文件结构,是 LazyVim 为其核心插件和扩展插件提供的模块化配置体系。这些配置文件并不直接出现在<code>~/.config/nvim/lua/plugins/</code>目录中,是因为 LazyVim 采用了模块化和懒加载的设计理念,将核心插件和配置封装在其自身的代码库中。</p>
<h3 id="ge-wen-jian-he-mu-lu-de-zuo-yong">各文件和目录的作用</h3> <h3 id="ge-wen-jian-he-mu-lu-de-zuo-yong">各文件和目录的作用</h3>
@@ -374,17 +374,17 @@
<li><strong>Markdown预览</strong></li> <li><strong>Markdown预览</strong></li>
</ul> </ul>
<p><code>~/config/nvim/lua/plugins/</code>下新建一个mp.lua写入如下配置</p> <p><code>~/config/nvim/lua/plugins/</code>下新建一个mp.lua写入如下配置</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>return { <pre data-lang="lua" style="background-color:#151515;color:#e8e8d3;" class="language-lua "><code class="language-lua" data-lang="lua"><span style="color:#8fbfdc;">return </span><span>{
</span><span> { </span><span> {
</span><span> &quot;iamcco/markdown-preview.nvim&quot;, </span><span> </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">iamcco/markdown-preview.nvim</span><span style="color:#556633;">&quot;</span><span>,
</span><span> cmd = { &quot;MarkdownPreviewToggle&quot;, &quot;MarkdownPreview&quot;, &quot;MarkdownPreviewStop&quot; }, </span><span> </span><span style="color:#99ad6a;">cmd </span><span>= { </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">MarkdownPreviewToggle</span><span style="color:#556633;">&quot;</span><span>, </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">MarkdownPreview</span><span style="color:#556633;">&quot;</span><span>, </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">MarkdownPreviewStop</span><span style="color:#556633;">&quot; </span><span>},
</span><span> ft = { &quot;markdown&quot; }, </span><span> </span><span style="color:#99ad6a;">ft </span><span>= { </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">markdown</span><span style="color:#556633;">&quot; </span><span>},
</span><span> build = &#39;:call mkdp#util#install()&#39; </span><span> </span><span style="color:#99ad6a;">build </span><span>= </span><span style="color:#556633;">&#39;</span><span style="color:#99ad6a;">:call mkdp#util#install()</span><span style="color:#556633;">&#39;
</span><span> } </span><span> }
</span><span>} </span><span>}
</span></code></pre> </span></code></pre>
<p>随后即可在 Neovim 中打开一个 Markdown 文件,执行以下命令启动预览:​</p> <p>随后即可在 Neovim 中打开一个 Markdown 文件,执行以下命令启动预览:​</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>:MarkdownPreview <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">:MarkdownPreview
</span></code></pre> </span></code></pre>
<h2 id="tips">tips</h2> <h2 id="tips">tips</h2>
<ul> <ul>

View File

@@ -128,47 +128,47 @@
<p>根据机革一贯的“特性”,作者猜测是因为 BIOS 或者 ACPI 出现了故障,随后在翻阅论坛时发现是由于锐龙笔记本键盘中断描述与其他键盘不同:其为边缘敏 感、低电平有效的而蛟龙16K机器键盘实际是边缘敏感、高电平有效Edge ActiveHigh。结合 linux 的特性,读取到边缘敏感、低电平有效的中断时,会认为 BIOS 有Bug会直接当成边缘敏感、高电平有效进行处理。因此键盘就没有了响应。</p> <p>根据机革一贯的“特性”,作者猜测是因为 BIOS 或者 ACPI 出现了故障,随后在翻阅论坛时发现是由于锐龙笔记本键盘中断描述与其他键盘不同:其为边缘敏 感、低电平有效的而蛟龙16K机器键盘实际是边缘敏感、高电平有效Edge ActiveHigh。结合 linux 的特性,读取到边缘敏感、低电平有效的中断时,会认为 BIOS 有Bug会直接当成边缘敏感、高电平有效进行处理。因此键盘就没有了响应。</p>
<h2 id="san-jie-jue-fang-fa">三.解决方法</h2> <h2 id="san-jie-jue-fang-fa">三.解决方法</h2>
<p>既然是高低电平表述的错误那么我们只需建立DSDT 表副本,将其修改,然后让它优先启动,从而让键盘配置正常;另外还存在 BIOS 修复,内核编译的方法,比较复杂,这里不做说明。</p> <p>既然是高低电平表述的错误那么我们只需建立DSDT 表副本,将其修改,然后让它优先启动,从而让键盘配置正常;另外还存在 BIOS 修复,内核编译的方法,比较复杂,这里不做说明。</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>首先建立一个DSDT文件夹 <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">首先建立一个DSDT文件夹
</span><span>sudo su </span><span style="color:#ffb964;">sudo</span><span> su
</span><span>mkdir -p /home/dsdt </span><span style="color:#ffb964;">mkdir -p</span><span> /home/dsdt
</span><span> </span><span>
</span><span>随后将系统的DSDT表读取到里面并安装acpica-tools </span><span style="color:#ffb964;">随后将系统的DSDT表读取到里面并安装acpica-tools
</span><span>cat /sys/firmware/acpi/tables/DSDT &gt; dsdt.dat </span><span style="color:#ffb964;">cat</span><span> /sys/firmware/acpi/tables/DSDT &gt; dsdt.dat
</span><span>apt install acpica-tools </span><span style="color:#ffb964;">apt</span><span> install acpica-tools
</span><span>iasl -d dsdt.dat </span><span style="color:#ffb964;">iasl -d</span><span> dsdt.dat
</span><span> </span><span>
</span><span>进入vim编辑DSDT表没有vim的先安装一个 </span><span style="color:#ffb964;">进入vim编辑DSDT表没有vim的先安装一个
</span><span>apt install vim </span><span style="color:#ffb964;">apt</span><span> install vim
</span><span>vim dsdt.dsl </span><span style="color:#ffb964;">vim</span><span> dsdt.dsl
</span><span> </span><span>
</span><span>搜索并替换 Device(PS2K) 下面的 </span><span style="color:#ffb964;">搜索并替换</span><span> Device(PS2K) </span><span style="color:#ffb964;">下面的
</span><span>IRQ (Edge, ActiveLow, Shared, ) </span><span style="color:#ffb964;">IRQ</span><span> (Edge, ActiveLow, Shared, )
</span><span> </span><span style="color:#ffb964;">
</span><span>IRQ (Edge, ActiveHigh, Shared, ) </span><span style="color:#ffb964;">IRQ</span><span> (Edge, ActiveHigh, Shared, )
</span><span> </span><span>
</span><span>vim搜索的方法为在命令模式下按下“/”键入搜索字符并回车即可按“n”跳转到下一处“N”跳转到前一处按: wq保存 </span><span style="color:#ffb964;">vim搜索的方法为在命令模式下按下“/”键入搜索字符并回车即可按“n”跳转到下一处“N”跳转到前一处按:</span><span> wq保存
</span><span> </span><span>
</span><span>随后搜索DefinitionBlock将其步进值增加一十六进制即更改 </span><span style="color:#ffb964;">随后搜索DefinitionBlock将其步进值增加一十六进制即更改
</span><span>DefinitionBlock (&quot;&quot;, &quot;DSDT&quot;, 2, &quot;ALASKA&quot;, &quot;A M I&quot;, 0x01072009) </span><span style="color:#ffb964;">DefinitionBlock</span><span> (</span><span style="color:#556633;">&quot;&quot;</span><span>, </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">DSDT</span><span style="color:#556633;">&quot;</span><span>, 2, </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">ALASKA</span><span style="color:#556633;">&quot;</span><span>, </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">A M I</span><span style="color:#556633;">&quot;</span><span>, 0x01072009)
</span><span> </span><span style="color:#ffb964;">
</span><span>DefinitionBlock (&quot;&quot;, &quot;DSDT&quot;, 2, &quot;ALASKA&quot;, &quot;A M I&quot;, 0x0107200A) </span><span style="color:#ffb964;">DefinitionBlock</span><span> (</span><span style="color:#556633;">&quot;&quot;</span><span>, </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">DSDT</span><span style="color:#556633;">&quot;</span><span>, 2, </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">ALASKA</span><span style="color:#556633;">&quot;</span><span>, </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">A M I</span><span style="color:#556633;">&quot;</span><span>, 0x0107200A)
</span><span> </span><span>
</span><span>关闭DSDT并设置其优先启动 </span><span style="color:#ffb964;">关闭DSDT并设置其优先启动
</span><span>iasl dsdt.dsl </span><span style="color:#ffb964;">iasl</span><span> dsdt.dsl
</span><span>mkdir -p kernel/firmware/acpi </span><span style="color:#ffb964;">mkdir -p</span><span> kernel/firmware/acpi
</span><span>cp dsdt.aml kernel/firmware/acpi/ </span><span style="color:#ffb964;">cp</span><span> dsdt.aml kernel/firmware/acpi/
</span><span>find kernel | cpio -H newc --create &gt; acpi_override </span><span style="color:#ffb964;">find</span><span> kernel | </span><span style="color:#ffb964;">cpio -H</span><span> newc</span><span style="color:#ffb964;"> --create </span><span>&gt; acpi_override
</span><span>cp acpi_override /boot/acpi_override </span><span style="color:#ffb964;">cp</span><span> acpi_override /boot/acpi_override
</span><span>echo &quot;GRUB_EARLY_INITRD_LINUX_CUSTOM=\&quot;acpi_override\&quot;&quot; &gt;&gt;/etc/default/grub </span><span>echo </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">GRUB_EARLY_INITRD_LINUX_CUSTOM=\&quot;acpi_override\&quot;</span><span style="color:#556633;">&quot; </span><span>&gt;&gt;/etc/default/grub
</span><span> </span><span>
</span><span>更新并重启: </span><span style="color:#ffb964;">更新并重启:
</span><span> </span><span>
</span><span>sudo grub-mkconfig -o /boot/grub/grub.cfg </span><span style="color:#ffb964;">sudo</span><span> grub-mkconfig</span><span style="color:#ffb964;"> -o</span><span> /boot/grub/grub.cfg
</span><span>sudo grub-install /dev/sdX </span><span style="color:#ffb964;">sudo</span><span> grub-install /dev/sdX
</span><span>sudo grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=grub </span><span style="color:#ffb964;">sudo</span><span> grub-install</span><span style="color:#ffb964;"> --target</span><span>=x86_64-efi</span><span style="color:#ffb964;"> --efi-directory</span><span>=/boot/efi</span><span style="color:#ffb964;"> --bootloader-id</span><span>=grub
</span><span> </span><span>
</span><span>update-grub2 </span><span style="color:#ffb964;">update-grub2
</span><span>reboot </span><span style="color:#ffb964;">reboot
</span></code></pre> </span></code></pre>
<p>不出意外,重启后键盘即可使用,若系统不同将 apt 替换即可。</p> <p>不出意外,重启后键盘即可使用,若系统不同将 apt 替换即可。</p>
<h2 id="si-qi-ta-wen-ti">四.其他问题</h2> <h2 id="si-qi-ta-wen-ti">四.其他问题</h2>
@@ -180,101 +180,101 @@
<li>电源管理,无论怎么调,笔记本都发热很严重。</li> <li>电源管理,无论怎么调,笔记本都发热很严重。</li>
</ul> </ul>
<h3 id="xiu-fu-wifiqu-dong">修复wifi驱动</h3> <h3 id="xiu-fu-wifiqu-dong">修复wifi驱动</h3>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span># 内核小于5.18的 <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#888888;"># 内核小于5.18的
</span><span>git clone https://github.com/HRex39/rtl8852be.git </span><span style="color:#ffb964;">git</span><span> clone https://github.com/HRex39/rtl8852be.git
</span><span># 内核大于等于5.18的 </span><span style="color:#888888;"># 内核大于等于5.18的
</span><span>git clone https://github.com/HRex39/rtl8852be.git -b dev </span><span style="color:#ffb964;">git</span><span> clone https://github.com/HRex39/rtl8852be.git</span><span style="color:#ffb964;"> -b</span><span> dev
</span><span> </span><span>
</span><span>cd rtl8852be </span><span>cd rtl8852be
</span><span>make -j8 </span><span style="color:#ffb964;">make -j8
</span><span>sudo make install </span><span style="color:#ffb964;">sudo</span><span> make install
</span><span>sudo modprobe 8852be </span><span style="color:#ffb964;">sudo</span><span> modprobe 8852be
</span></code></pre> </span></code></pre>
<h3 id="xiu-fu-lan-ya-qu-dong">修复蓝牙驱动</h3> <h3 id="xiu-fu-lan-ya-qu-dong">修复蓝牙驱动</h3>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span># 内核=5.15 <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#888888;"># 内核=5.15
</span><span>git clone https://github.com/HRex39/rtl8852be_bt.git -b 5.15 </span><span style="color:#ffb964;">git</span><span> clone https://github.com/HRex39/rtl8852be_bt.git</span><span style="color:#ffb964;"> -b</span><span> 5.15
</span><span># 内核=5.18 </span><span style="color:#888888;"># 内核=5.18
</span><span>git clone https://github.com/HRex39/rtl8852be_bt.git -b 5.18 </span><span style="color:#ffb964;">git</span><span> clone https://github.com/HRex39/rtl8852be_bt.git</span><span style="color:#ffb964;"> -b</span><span> 5.18
</span><span> </span><span>
</span><span>cd rtl8852be_bt </span><span>cd rtl8852be_bt
</span><span>make -j8 </span><span style="color:#ffb964;">make -j8
</span><span>sudo make install </span><span style="color:#ffb964;">sudo</span><span> make install
</span></code></pre> </span></code></pre>
<h3 id="xiu-fu-kwin-x11xian-qia-wei-qu-dong">修复kwin_x11显卡未驱动</h3> <h3 id="xiu-fu-kwin-x11xian-qia-wei-qu-dong">修复kwin_x11显卡未驱动</h3>
<p>首先去amd官网下载最新的linux-amd驱动</p> <p>首先去amd官网下载最新的linux-amd驱动</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>https://www.amd.com/zh-hans/support/linux-drivers // 22.20 for Ubuntu 20.04.5 HWE <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">https://www.amd.com/zh-hans/support/linux-drivers</span><span> // 22.20 for Ubuntu 20.04.5 HWE
</span></code></pre> </span></code></pre>
<p>修改Deepin为ubuntu</p> <p>修改Deepin为ubuntu</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo vim /etc/os-release // ID=Deepin =&gt; ID=ubuntu <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">sudo</span><span> vim /etc/os-release // ID=Deepin =&gt; ID=ubuntu
</span><span> </span><span>
</span><span>sudo apt install ./amdgpu-install_22.20.50200-1_all.deb </span><span style="color:#ffb964;">sudo</span><span> apt install ./amdgpu-install_22.20.50200-1_all.deb
</span><span> </span><span>
</span><span>sudo vim /etc/apt/sources.list.d/amdgpu.list // focal =&gt; bionic </span><span style="color:#ffb964;">sudo</span><span> vim /etc/apt/sources.list.d/amdgpu.list // focal =&gt; bionic
</span><span> </span><span>
</span><span>sudo apt update </span><span style="color:#ffb964;">sudo</span><span> apt update
</span><span> </span><span>
</span><span>sudo amdgpu-install --no-dkms </span><span style="color:#ffb964;">sudo</span><span> amdgpu-install</span><span style="color:#ffb964;"> --no-dkms
</span><span> </span><span>
</span><span>sudo apt install inxi clinfo </span><span style="color:#ffb964;">sudo</span><span> apt install inxi clinfo
</span></code></pre> </span></code></pre>
<p>安装成功以后用inxi查看下</p> <p>安装成功以后用inxi查看下</p>
<p><code>inxi -G</code></p> <p><code>inxi -G</code></p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>Graphics: Device-1: AMD Rembrandt driver: amdgpu v: kernel <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">Graphics:</span><span> Device-1: AMD Rembrandt driver: amdgpu v: kernel
</span><span> Display: x11 server: X.Org 1.20.11 driver: amdgpu,ati unloaded: fbdev,modesetting,vesa </span><span> </span><span style="color:#ffb964;">Display:</span><span> x11 server: X.Org 1.20.11 driver: amdgpu,ati unloaded: fbdev,modesetting,vesa
</span><span> resolution: 1920x1080~60Hz </span><span> </span><span style="color:#ffb964;">resolution:</span><span> 1920x1080</span><span style="color:#ffb964;">~</span><span>60Hz
</span><span> OpenGL: renderer: AMD YELLOW_CARP (LLVM 14.0.1 DRM 3.42 5.15.34-amd64-desktop) </span><span> </span><span style="color:#ffb964;">OpenGL:</span><span> renderer: AMD YELLOW_CARP (LLVM 14.0.1 DRM 3.42 5.15.34-amd64-desktop)
</span><span> v: 4.6 Mesa 22.1.0-devel </span><span> </span><span style="color:#ffb964;">v:</span><span> 4.6 Mesa 22.1.0-devel
</span></code></pre> </span></code></pre>
<p>最后还原最初的修改:</p> <p>最后还原最初的修改:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo vim /etc/os-release // ID=ubuntu =&gt; ID=Deepin <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">sudo</span><span> vim /etc/os-release // ID=ubuntu =&gt; ID=Deepin
</span><span>sudo apt purge amdgpu-install </span><span style="color:#ffb964;">sudo</span><span> apt purge amdgpu-install
</span></code></pre> </span></code></pre>
<p>看下效果图:</p> <p>看下效果图:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>➜ ~ glxinfo -B <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">➜ ~</span><span> glxinfo</span><span style="color:#ffb964;"> -B
</span><span>name of display: :0 </span><span style="color:#ffb964;">name</span><span> of display: :0
</span><span>display: :0 screen: 0 </span><span style="color:#ffb964;">display:</span><span> :0 screen: 0
</span><span>direct rendering: Yes </span><span style="color:#ffb964;">direct</span><span> rendering: Yes
</span><span>Extended renderer info (GLX_MESA_query_renderer): </span><span style="color:#ffb964;">Extended</span><span> renderer info (GLX_MESA_query_renderer):
</span><span> Vendor: AMD (0x1002) </span><span> </span><span style="color:#ffb964;">Vendor:</span><span> AMD (0x1002)
</span><span> Device: AMD YELLOW_CARP (LLVM 14.0.1, DRM 3.42, 5.15.34-amd64-desktop) (0x1681) </span><span> </span><span style="color:#ffb964;">Device:</span><span> AMD YELLOW_CARP (LLVM 14.0.1, DRM 3.42, 5.15.34-amd64-desktop) (</span><span style="color:#ffb964;">0x1681</span><span>)
</span><span> Version: 22.1.0 </span><span> </span><span style="color:#ffb964;">Version:</span><span> 22.1.0
</span><span> Accelerated: yes </span><span> </span><span style="color:#ffb964;">Accelerated:</span><span> yes
</span><span> Video memory: 2048MB </span><span> </span><span style="color:#ffb964;">Video</span><span> memory: 2048MB
</span><span> Unified memory: no </span><span> </span><span style="color:#ffb964;">Unified</span><span> memory: no
</span><span> Preferred profile: core (0x1) </span><span> </span><span style="color:#ffb964;">Preferred</span><span> profile: core (0x1)
</span><span> Max core profile version: 4.6 </span><span> </span><span style="color:#ffb964;">Max</span><span> core profile version: 4.6
</span><span> Max compat profile version: 4.6 </span><span> </span><span style="color:#ffb964;">Max</span><span> compat profile version: 4.6
</span><span> Max GLES1 profile version: 1.1 </span><span> </span><span style="color:#ffb964;">Max</span><span> GLES1 profile version: 1.1
</span><span> Max GLES[23] profile version: 3.2 </span><span> </span><span style="color:#ffb964;">Max</span><span> GLES</span><span style="color:#8fbfdc;">[</span><span>23</span><span style="color:#8fbfdc;">]</span><span> profile version: 3.2
</span><span>Memory info (GL_ATI_meminfo): </span><span style="color:#ffb964;">Memory</span><span> info (GL_ATI_meminfo):
</span><span> VBO free memory - total: 1388 MB, largest block: 1388 MB </span><span> </span><span style="color:#ffb964;">VBO</span><span> free memory - total: 1388 MB, largest block: 1388 MB
</span><span> VBO free aux. memory - total: 3047 MB, largest block: 3047 MB </span><span> </span><span style="color:#ffb964;">VBO</span><span> free aux. memory - total: 3047 MB, largest block: 3047 MB
</span><span> Texture free memory - total: 1388 MB, largest block: 1388 MB </span><span> </span><span style="color:#ffb964;">Texture</span><span> free memory - total: 1388 MB, largest block: 1388 MB
</span><span> Texture free aux. memory - total: 3047 MB, largest block: 3047 MB </span><span> </span><span style="color:#ffb964;">Texture</span><span> free aux. memory - total: 3047 MB, largest block: 3047 MB
</span><span> Renderbuffer free memory - total: 1388 MB, largest block: 1388 MB </span><span> </span><span style="color:#ffb964;">Renderbuffer</span><span> free memory - total: 1388 MB, largest block: 1388 MB
</span><span> Renderbuffer free aux. memory - total: 3047 MB, largest block: 3047 MB </span><span> </span><span style="color:#ffb964;">Renderbuffer</span><span> free aux. memory - total: 3047 MB, largest block: 3047 MB
</span><span>Memory info (GL_NVX_gpu_memory_info): </span><span style="color:#ffb964;">Memory</span><span> info (GL_NVX_gpu_memory_info):
</span><span> Dedicated video memory: 2048 MB </span><span> </span><span style="color:#ffb964;">Dedicated</span><span> video memory: 2048 MB
</span><span> Total available memory: 5120 MB </span><span> </span><span style="color:#ffb964;">Total</span><span> available memory: 5120 MB
</span><span> Currently available dedicated video memory: 1388 MB </span><span> </span><span style="color:#ffb964;">Currently</span><span> available dedicated video memory: 1388 MB
</span><span>OpenGL vendor string: AMD </span><span style="color:#ffb964;">OpenGL</span><span> vendor string: AMD
</span><span>OpenGL renderer string: AMD YELLOW_CARP (LLVM 14.0.1, DRM 3.42, 5.15.34-amd64-desktop) </span><span style="color:#ffb964;">OpenGL</span><span> renderer string: AMD YELLOW_CARP (LLVM 14.0.1, DRM 3.42, 5.15.34-amd64-desktop)
</span><span>OpenGL core profile version string: 4.6 (Core Profile) Mesa 22.1.0-devel </span><span style="color:#ffb964;">OpenGL</span><span> core profile version string: 4.6 (Core Profile) </span><span style="color:#ffb964;">Mesa</span><span> 22.1.0-devel
</span><span>OpenGL core profile shading language version string: 4.60 </span><span style="color:#ffb964;">OpenGL</span><span> core profile shading language version string: 4.60
</span><span>OpenGL core profile context flags: (none) </span><span style="color:#ffb964;">OpenGL</span><span> core profile context flags: (none)
</span><span>OpenGL core profile profile mask: core profile </span><span style="color:#ffb964;">OpenGL</span><span> core profile profile mask: core profile
</span><span> </span><span>
</span><span>OpenGL version string: 4.6 (Compatibility Profile) Mesa 22.1.0-devel </span><span style="color:#ffb964;">OpenGL</span><span> version string: 4.6 (Compatibility Profile) </span><span style="color:#ffb964;">Mesa</span><span> 22.1.0-devel
</span><span>OpenGL shading language version string: 4.60 </span><span style="color:#ffb964;">OpenGL</span><span> shading language version string: 4.60
</span><span>OpenGL context flags: (none) </span><span style="color:#ffb964;">OpenGL</span><span> context flags: (none)
</span><span>OpenGL profile mask: compatibility profile </span><span style="color:#ffb964;">OpenGL</span><span> profile mask: compatibility profile
</span><span> </span><span>
</span><span>OpenGL ES profile version string: OpenGL ES 3.2 Mesa 22.1.0-devel </span><span style="color:#ffb964;">OpenGL</span><span> ES profile version string: OpenGL ES 3.2 Mesa 22.1.0-devel
</span><span>OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.20 </span><span style="color:#ffb964;">OpenGL</span><span> ES profile shading language version string: OpenGL ES GLSL ES 3.20
</span></code></pre> </span></code></pre>
<h3 id="shou-dong-guan-li-dian-yuan-bi-mian-cpuguo-du-shi-yong-er-fa-re">手动管理电源避免CPU过度使用而发热</h3> <h3 id="shou-dong-guan-li-dian-yuan-bi-mian-cpuguo-du-shi-yong-er-fa-re">手动管理电源避免CPU过度使用而发热</h3>
<p>安装下面的三方电源管理工具 <code>Boost Changer</code>,选择 <code>Performance</code>策略即可</p> <p>安装下面的三方电源管理工具 <code>Boost Changer</code>,选择 <code>Performance</code>策略即可</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>wget https://github.com/nbebaw/boostchanger/releases/download/v4.4.0/boostchanger_4.4.0_amd64.deb <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">wget</span><span> https://github.com/nbebaw/boostchanger/releases/download/v4.4.0/boostchanger_4.4.0_amd64.deb
</span></code></pre> </span></code></pre>
<h2 id="can-kao">参考</h2> <h2 id="can-kao">参考</h2>
<p><a href="https://zhuanlan.zhihu.com/p/530643928">https://zhuanlan.zhihu.com/p/530643928</a></p> <p><a href="https://zhuanlan.zhihu.com/p/530643928">https://zhuanlan.zhihu.com/p/530643928</a></p>

View File

@@ -263,65 +263,65 @@
<p>2创建docker-compose.yml文件</p> <p>2创建docker-compose.yml文件</p>
<p><code>nano docker-compose.yml</code> # 使用nano编辑器创建会自动打开文件以写入内容</p> <p><code>nano docker-compose.yml</code> # 使用nano编辑器创建会自动打开文件以写入内容</p>
<p>3在文件中写入以下内容并保存</p> <p>3在文件中写入以下内容并保存</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>version: &#39;3.4&#39; <pre data-lang="yaml" style="background-color:#151515;color:#e8e8d3;" class="language-yaml "><code class="language-yaml" data-lang="yaml"><span style="color:#ffb964;">version</span><span>: </span><span style="color:#556633;">&#39;</span><span style="color:#99ad6a;">3.4</span><span style="color:#556633;">&#39;
</span><span> </span><span>
</span><span>services: </span><span style="color:#ffb964;">services</span><span>:
</span><span> </span><span>
</span><span> miniflux: </span><span> </span><span style="color:#ffb964;">miniflux</span><span>:
</span><span> </span><span>
</span><span> image: miniflux/miniflux:latest </span><span> </span><span style="color:#ffb964;">image</span><span>: </span><span style="color:#99ad6a;">miniflux/miniflux:latest
</span><span> </span><span>
</span><span> ports: </span><span> </span><span style="color:#ffb964;">ports</span><span>:
</span><span> </span><span>
</span><span> - &quot;127.0.0.1:8080:8080&quot; #调整一增加localhost ip 并改port为8080 </span><span> - </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">127.0.0.1:8080:8080</span><span style="color:#556633;">&quot; </span><span style="color:#888888;">#调整一增加localhost ip 并改port为8080
</span><span> </span><span>
</span><span> depends_on: </span><span> </span><span style="color:#ffb964;">depends_on</span><span>:
</span><span> </span><span>
</span><span> - db </span><span> - </span><span style="color:#99ad6a;">db
</span><span> </span><span>
</span><span> environment: </span><span> </span><span style="color:#ffb964;">environment</span><span>:
</span><span> </span><span>
</span><span> - DATABASE_URL=postgres://miniflux:secret@db/miniflux?sslmode=disable </span><span> - </span><span style="color:#99ad6a;">DATABASE_URL=postgres://miniflux:secret@db/miniflux?sslmode=disable
</span><span> </span><span>
</span><span> - RUN_MIGRATIONS=1 </span><span> - </span><span style="color:#99ad6a;">RUN_MIGRATIONS=1
</span><span> </span><span>
</span><span> - CREATE_ADMIN=1 </span><span> - </span><span style="color:#99ad6a;">CREATE_ADMIN=1
</span><span> </span><span>
</span><span> - ADMIN_USERNAME=admin # 登录Miniflux的用户名可自定义 </span><span> - </span><span style="color:#99ad6a;">ADMIN_USERNAME=admin </span><span style="color:#888888;"># 登录Miniflux的用户名可自定义
</span><span> </span><span>
</span><span> - ADMIN_PASSWORD=password # 登录Miniflux的密码可自定义至少6位 </span><span> - </span><span style="color:#99ad6a;">ADMIN_PASSWORD=password </span><span style="color:#888888;"># 登录Miniflux的密码可自定义至少6位
</span><span> </span><span>
</span><span> - &quot;BASE_URL=https://enter.your.url&quot; # 调整二输入想用来访问Miniflux的域名 </span><span> - </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">BASE_URL=https://enter.your.url</span><span style="color:#556633;">&quot; </span><span style="color:#888888;"># 调整二输入想用来访问Miniflux的域名
</span><span> </span><span>
</span><span> healthcheck: </span><span> </span><span style="color:#ffb964;">healthcheck</span><span>:
</span><span> </span><span>
</span><span> test: [&quot;CMD&quot;, &quot;/usr/bin/miniflux&quot;, &quot;-healthcheck&quot;, &quot;auto&quot;] </span><span> </span><span style="color:#ffb964;">test</span><span>: [</span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">CMD</span><span style="color:#556633;">&quot;</span><span>, </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">/usr/bin/miniflux</span><span style="color:#556633;">&quot;</span><span>, </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">-healthcheck</span><span style="color:#556633;">&quot;</span><span>, </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">auto</span><span style="color:#556633;">&quot;</span><span>]
</span><span> </span><span>
</span><span> db: </span><span> </span><span style="color:#ffb964;">db</span><span>:
</span><span> </span><span>
</span><span> image: postgres:latest </span><span> </span><span style="color:#ffb964;">image</span><span>: </span><span style="color:#99ad6a;">postgres:latest
</span><span> </span><span>
</span><span> environment: </span><span> </span><span style="color:#ffb964;">environment</span><span>:
</span><span> </span><span>
</span><span> - POSTGRES_USER=miniflux </span><span> - </span><span style="color:#99ad6a;">POSTGRES_USER=miniflux
</span><span> </span><span>
</span><span> - POSTGRES_PASSWORD=secret </span><span> - </span><span style="color:#99ad6a;">POSTGRES_PASSWORD=secret
</span><span> </span><span>
</span><span> volumes: </span><span> </span><span style="color:#ffb964;">volumes</span><span>:
</span><span> </span><span>
</span><span> - miniflux-db:/var/lib/postgresql/data </span><span> - </span><span style="color:#99ad6a;">miniflux-db:/var/lib/postgresql/data
</span><span> </span><span>
</span><span> healthcheck: </span><span> </span><span style="color:#ffb964;">healthcheck</span><span>:
</span><span> </span><span>
</span><span> test: [&quot;CMD&quot;, &quot;pg_isready&quot;, &quot;-U&quot;, &quot;miniflux&quot;] </span><span> </span><span style="color:#ffb964;">test</span><span>: [</span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">CMD</span><span style="color:#556633;">&quot;</span><span>, </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">pg_isready</span><span style="color:#556633;">&quot;</span><span>, </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">-U</span><span style="color:#556633;">&quot;</span><span>, </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">miniflux</span><span style="color:#556633;">&quot;</span><span>]
</span><span> </span><span>
</span><span> interval: 10s </span><span> </span><span style="color:#ffb964;">interval</span><span>: </span><span style="color:#99ad6a;">10s
</span><span> </span><span>
</span><span> start_period: 30s </span><span> </span><span style="color:#ffb964;">start_period</span><span>: </span><span style="color:#99ad6a;">30s
</span><span> </span><span>
</span><span>volumes: </span><span style="color:#ffb964;">volumes</span><span>:
</span><span> </span><span>
</span><span> miniflux-db: </span><span> </span><span style="color:#ffb964;">miniflux-db</span><span>:
</span></code></pre> </span></code></pre>
<p>该 docker-compose.yml 文档内容基于 Miniflux 官方文档 ,并在细节上进行了调整。调整有两处:一是将 port 改为127.0.0.1:8080:8080主要目的是错开常用port 80并调整 localhost 为127.0.0.1来跟 nginx 的设置一致(如不调整, miniflux 将使用0.0.0.0,无法顺利运行 nginx );二是在 miniflux 的environment 中加入新的 configuration BASE_URL请将内容换为你想用来访问 Miniflux 的域名。</p> <p>该 docker-compose.yml 文档内容基于 Miniflux 官方文档 ,并在细节上进行了调整。调整有两处:一是将 port 改为127.0.0.1:8080:8080主要目的是错开常用port 80并调整 localhost 为127.0.0.1来跟 nginx 的设置一致(如不调整, miniflux 将使用0.0.0.0,无法顺利运行 nginx );二是在 miniflux 的environment 中加入新的 configuration BASE_URL请将内容换为你想用来访问 Miniflux 的域名。</p>
<p>//如何用 nano 保存文件:可以使用 ctrl+X在退出编辑时选择Y来保存所有更改再敲一次回车便可以回到命令行。//</p> <p>//如何用 nano 保存文件:可以使用 ctrl+X在退出编辑时选择Y来保存所有更改再敲一次回车便可以回到命令行。//</p>

View File

@@ -139,28 +139,28 @@
</li> </li>
</ul> </ul>
<h2 id="vps">VPS</h2> <h2 id="vps">VPS</h2>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span># 更新系统 <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#888888;"># 更新系统
</span><span>apt update &amp;&amp; apt upgrade -y </span><span style="color:#ffb964;">apt</span><span> update &amp;&amp; </span><span style="color:#ffb964;">apt</span><span> upgrade</span><span style="color:#ffb964;"> -y
</span><span>apt install wget curl vim sudo neofetch </span><span style="color:#ffb964;">apt</span><span> install wget curl vim sudo neofetch
</span><span># 创建用户并赋予sudo </span><span style="color:#888888;"># 创建用户并赋予sudo
</span><span>adduser xxx </span><span style="color:#ffb964;">adduser</span><span> xxx
</span><span>sudo usermod -aG sudo xxx </span><span style="color:#ffb964;">sudo</span><span> usermod</span><span style="color:#ffb964;"> -aG</span><span> sudo xxx
</span></code></pre> </span></code></pre>
<h2 id="bbr">BBR</h2> <h2 id="bbr">BBR</h2>
<ul> <ul>
<li>查询系统所支持的拥塞控制算法</li> <li>查询系统所支持的拥塞控制算法</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sysctl net.ipv4.tcp_available_congestion_control <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">sysctl</span><span> net.ipv4.tcp_available_congestion_control
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>查询正在使用中的拥塞控制算法Linux 绝大部分系统默认为 Cubic 算法)</li> <li>查询正在使用中的拥塞控制算法Linux 绝大部分系统默认为 Cubic 算法)</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sysctl net.ipv4.tcp_congestion_control <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">sysctl</span><span> net.ipv4.tcp_congestion_control
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>指定拥塞控制算法为 bbr</li> <li>指定拥塞控制算法为 bbr</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>echo net.ipv4.tcp_congestion_control=bbr &gt;&gt; /etc/sysctl.conf &amp;&amp; sysctl -p <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span>echo net.ipv4.tcp_congestion_control=bbr &gt;&gt; /etc/sysctl.conf &amp;&amp; </span><span style="color:#ffb964;">sysctl -p
</span></code></pre> </span></code></pre>
<h2 id="safe">Safe</h2> <h2 id="safe">Safe</h2>
<blockquote> <blockquote>
@@ -170,52 +170,52 @@
<h3 id="geng-huan-sshduan-kou">更换SSH端口</h3> <h3 id="geng-huan-sshduan-kou">更换SSH端口</h3>
<p>使用root账户或已经有sudo权限的用户登录到系统。</p> <p>使用root账户或已经有sudo权限的用户登录到系统。</p>
<p>打开SSH配置文件<code>sshd_config</code>可以使用文本编辑器如nano或vi。以下是使用nano编辑器的示例</p> <p>打开SSH配置文件<code>sshd_config</code>可以使用文本编辑器如nano或vi。以下是使用nano编辑器的示例</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo vim /etc/ssh/sshd_config <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">sudo</span><span> vim /etc/ssh/sshd_config
</span></code></pre> </span></code></pre>
<p>在配置文件中找到以下行:</p> <p>在配置文件中找到以下行:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>Port 22 <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">Port</span><span> 22
</span></code></pre> </span></code></pre>
<p>这是SSH默认的端口号你可以将其更改为你想要的任何未被占用的端口号。例如将端口更改为2222</p> <p>这是SSH默认的端口号你可以将其更改为你想要的任何未被占用的端口号。例如将端口更改为2222</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>Port 2222 <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">Port</span><span> 2222
</span></code></pre> </span></code></pre>
<p>保存并关闭文本编辑器。重新启动SSH服务以应用更改</p> <p>保存并关闭文本编辑器。重新启动SSH服务以应用更改</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo service ssh restart <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">sudo</span><span> service ssh restart
</span></code></pre> </span></code></pre>
<p>或者如果你的系统使用systemd可以使用以下命令</p> <p>或者如果你的系统使用systemd可以使用以下命令</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo systemctl restart ssh <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">sudo</span><span> systemctl restart ssh
</span></code></pre> </span></code></pre>
<h3 id="an-zhuang-ufw">安装 UFW</h3> <h3 id="an-zhuang-ufw">安装 UFW</h3>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo apt install ufw <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">sudo</span><span> apt install ufw
</span></code></pre> </span></code></pre>
<p><strong>如果你在远程位置连接你的服务器,在启用 UFW 防火墙之前,你必须显式允许进来的 SSH 连接。否则,你将永远都无法连接到机器上。</strong></p> <p><strong>如果你在远程位置连接你的服务器,在启用 UFW 防火墙之前,你必须显式允许进来的 SSH 连接。否则,你将永远都无法连接到机器上。</strong></p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo ufw allow 22/tcp <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">sudo</span><span> ufw allow 22/tcp
</span></code></pre> </span></code></pre>
<blockquote> <blockquote>
<p>如果 SSH 运行在非标准端口,你需要将上述命令中的 22 端口替换为对应的 SSH 端口。</p> <p>如果 SSH 运行在非标准端口,你需要将上述命令中的 22 端口替换为对应的 SSH 端口。</p>
</blockquote> </blockquote>
<p><strong>启动 UFW</strong></p> <p><strong>启动 UFW</strong></p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo ufw enable <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">sudo</span><span> ufw enable
</span></code></pre> </span></code></pre>
<h3 id="an-zhuang-fail2ban">安装 Fail2ban</h3> <h3 id="an-zhuang-fail2ban">安装 Fail2ban</h3>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo apt-get install fail2ban <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">sudo</span><span> apt-get install fail2ban
</span></code></pre> </span></code></pre>
<p><strong>2、Debian 12 及以上的版本需要手动安装 rsyslog</strong></p> <p><strong>2、Debian 12 及以上的版本需要手动安装 rsyslog</strong></p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo apt-get install rsyslog <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">sudo</span><span> apt-get install rsyslog
</span></code></pre> </span></code></pre>
<p><strong>3、启动 Fail2ban 服务</strong></p> <p><strong>3、启动 Fail2ban 服务</strong></p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo systemctl start fail2ban <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">sudo</span><span> systemctl start fail2ban
</span></code></pre> </span></code></pre>
<p><strong>4、开机自启动</strong></p> <p><strong>4、开机自启动</strong></p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo systemctl enable fail2ban <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">sudo</span><span> systemctl enable fail2ban
</span></code></pre> </span></code></pre>
<p><strong>5、查看 Fail2ban 服务状态。</strong></p> <p><strong>5、查看 Fail2ban 服务状态。</strong></p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo systemctl status fail2ban <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">sudo</span><span> systemctl status fail2ban
</span></code></pre> </span></code></pre>
<h3 id="gai-wei-mi-yao-deng-lu">改为密钥登录</h3> <h3 id="gai-wei-mi-yao-deng-lu">改为密钥登录</h3>
<ul> <ul>
<li>执行以下命令生成.pub后缀的公钥和无后缀的密钥</li> <li>执行以下命令生成.pub后缀的公钥和无后缀的密钥</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>ssh-keygen <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">ssh-keygen
</span></code></pre> </span></code></pre>
<p>注意不同密钥对名称不能相同;同时可以为这两个文件用密码加密;</p> <p>注意不同密钥对名称不能相同;同时可以为这两个文件用密码加密;</p>
<ul> <ul>
@@ -226,10 +226,10 @@
<p>使用以下命令编译服务器的SSH配置</p> <p>使用以下命令编译服务器的SSH配置</p>
</li> </li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>vim /etc/ssh/sshd_config <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">vim</span><span> /etc/ssh/sshd_config
</span></code></pre> </span></code></pre>
<p>将其中的该行改为<code>PasswordAuthentication no</code>,保存退出;随后使用</p> <p>将其中的该行改为<code>PasswordAuthentication no</code>,保存退出;随后使用</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo systemctl restart sshd <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">sudo</span><span> systemctl restart sshd
</span></code></pre> </span></code></pre>
<p>重启SSH即可禁用密码登录</p> <p>重启SSH即可禁用密码登录</p>
<ul> <ul>
@@ -240,7 +240,7 @@
<p>使用以下命令查看输出,</p> <p>使用以下命令查看输出,</p>
</li> </li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo cat /etc/ssh/sshd_config | grep -E &#39;PasswordAuthentication|PubkeyAuthentication&#39; <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">sudo</span><span> cat /etc/ssh/sshd_config | </span><span style="color:#ffb964;">grep -E </span><span style="color:#556633;">&#39;</span><span style="color:#99ad6a;">PasswordAuthentication|PubkeyAuthentication</span><span style="color:#556633;">&#39;
</span></code></pre> </span></code></pre>
<p>如有<strong>PasswordAuthentication no → 禁用密码登录</strong>以及<strong>PubkeyAuthentication yes → 允许密钥登录</strong>则成功。</p> <p>如有<strong>PasswordAuthentication no → 禁用密码登录</strong>以及<strong>PubkeyAuthentication yes → 允许密钥登录</strong>则成功。</p>
<blockquote> <blockquote>
@@ -250,40 +250,40 @@
<ul> <ul>
<li>ALL</li> <li>ALL</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>apt install curl wget gpg vim nano sudo neofetch openssh-server <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">apt</span><span> install curl wget gpg vim nano sudo neofetch openssh-server
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>C/C++</li> <li>C/C++</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo apt install build-essential gdb cmake clangd clang-format libstdc++-dev <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">sudo</span><span> apt install build-essential gdb cmake clangd clang-format libstdc++-dev
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>Miniconda</li> <li>Miniconda</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">wget</span><span> https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
</span><span>bash Miniconda3-latest-Linux-x86_64.sh </span><span style="color:#ffb964;">bash</span><span> Miniconda3-latest-Linux-x86_64.sh
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>UV</li> <li>UV</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>curl -LsSf https://astral.sh/uv/install.sh | sh <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">curl -LsSf</span><span> https://astral.sh/uv/install.sh | </span><span style="color:#ffb964;">sh
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>Docker</li> <li>Docker</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>curl -fsSL https://get.docker.com -o get-docker.sh <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">curl -fsSL</span><span> https://get.docker.com</span><span style="color:#ffb964;"> -o</span><span> get-docker.sh
</span><span>sudo sh get-docker.sh </span><span style="color:#ffb964;">sudo</span><span> sh get-docker.sh
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>OpenCV</li> <li>OpenCV</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo apt install tree libx11-dev libgtk-3-dev freeglut3-dev libopencv-dev libdlib-dev <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">sudo</span><span> apt install tree libx11-dev libgtk-3-dev freeglut3-dev libopencv-dev libdlib-dev
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>Vmware</li> <li>Vmware</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo apt install open-vm-tools <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">sudo</span><span> apt install open-vm-tools
</span><span>sudo apt install open-vm-tools-desktop </span><span style="color:#ffb964;">sudo</span><span> apt install open-vm-tools-desktop
</span></code></pre> </span></code></pre>
<blockquote> <blockquote>
<p>Vscode无法连接需要删除本地存储的错误密钥powershell</p> <p>Vscode无法连接需要删除本地存储的错误密钥powershell</p>
@@ -294,29 +294,29 @@
</span></code></pre> </span></code></pre>
<h2 id="1panel">1panel</h2> <h2 id="1panel">1panel</h2>
<p>执行如下命令一键安装 1Panel:</p> <p>执行如下命令一键安装 1Panel:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh &amp;&amp; sudo bash quick_start.sh <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">curl -sSL</span><span> https://resource.fit2cloud.com/1panel/package/quick_start.sh</span><span style="color:#ffb964;"> -o</span><span> quick_start.sh &amp;&amp; </span><span style="color:#ffb964;">sudo</span><span> bash quick_start.sh
</span></code></pre> </span></code></pre>
<h3 id="jin-yong-ipv6">禁用 IPv6</h3> <h3 id="jin-yong-ipv6">禁用 IPv6</h3>
<p>手动 禁用 VPS 的 IPv6 命令:</p> <p>手动 禁用 VPS 的 IPv6 命令:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sysctl -w net.ipv6.conf.all.disable_ipv6=1 <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">sysctl -w</span><span> net.ipv6.conf.all.disable_ipv6=1
</span><span>sysctl -w net.ipv6.conf.default.disable_ipv6=1 </span><span style="color:#ffb964;">sysctl -w</span><span> net.ipv6.conf.default.disable_ipv6=1
</span></code></pre> </span></code></pre>
<p>如果想重启系统也生效, 执行:</p> <p>如果想重启系统也生效, 执行:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>echo &#39;net.ipv6.conf.all.disable_ipv6=1&#39; &gt;&gt; /etc/sysctl.conf <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span>echo </span><span style="color:#556633;">&#39;</span><span style="color:#99ad6a;">net.ipv6.conf.all.disable_ipv6=1</span><span style="color:#556633;">&#39; </span><span>&gt;&gt; /etc/sysctl.conf
</span><span>echo &#39;net.ipv6.conf.default.disable_ipv6=1&#39; &gt;&gt; /etc/sysctl.conf </span><span>echo </span><span style="color:#556633;">&#39;</span><span style="color:#99ad6a;">net.ipv6.conf.default.disable_ipv6=1</span><span style="color:#556633;">&#39; </span><span>&gt;&gt; /etc/sysctl.conf
</span></code></pre> </span></code></pre>
<p>手动 启用 VPS 的 IPv6 命令:</p> <p>手动 启用 VPS 的 IPv6 命令:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sysctl -w net.ipv6.conf.all.disable_ipv6=0 <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">sysctl -w</span><span> net.ipv6.conf.all.disable_ipv6=0
</span><span>sysctl -w net.ipv6.conf.default.disable_ipv6=0 </span><span style="color:#ffb964;">sysctl -w</span><span> net.ipv6.conf.default.disable_ipv6=0
</span></code></pre> </span></code></pre>
<p>重新载入 sysctl 配置</p> <p>重新载入 sysctl 配置</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sysctl --system # reload sysctl <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">sysctl --system </span><span style="color:#888888;"># reload sysctl
</span></code></pre> </span></code></pre>
<p>如果重载, 还无效果, 可能要 reboot 重启下. <p>如果重载, 还无效果, 可能要 reboot 重启下.
查看 VPS 的 IPv6 信息</p> 查看 VPS 的 IPv6 信息</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>ip -6 addr show scope global <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">ip -6</span><span> addr show scope global
</span><span> </span><span>
</span><span>或者 curl ipv6.ip.sb </span><span style="color:#ffb964;">或者</span><span> curl ipv6.ip.sb
</span></code></pre> </span></code></pre>
<h2 id="ipzheng-shu-shen-qing-bu-shu">IP证书申请部署</h2> <h2 id="ipzheng-shu-shen-qing-bu-shu">IP证书申请部署</h2>
<ul> <ul>
@@ -327,7 +327,7 @@
<p>然后在VPS上输入以下命令</p> <p>然后在VPS上输入以下命令</p>
</li> </li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>mkdir -p ./.well-known/pki-validation <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">mkdir -p</span><span> ./.well-known/pki-validation
</span></code></pre> </span></code></pre>
<ul> <ul>
<li> <li>
@@ -337,17 +337,17 @@
<p>将从ZeroSSL下载得到的文件打开复制里面的东西形成以下的格式:<code>将pki-validation/之后EOF之前的内容</code>替换为你自己的。</p> <p>将从ZeroSSL下载得到的文件打开复制里面的东西形成以下的格式:<code>将pki-validation/之后EOF之前的内容</code>替换为你自己的。</p>
</li> </li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>cat &lt;&lt; EOF | sudo tee ./.well-known/pki-validation/B992F08CB46748D02E4C553A4038BC.txt <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">cat </span><span style="color:#99ad6a;">&lt;&lt; </span><span style="color:#8fbfdc;">EOF </span><span>| </span><span style="color:#ffb964;">sudo</span><span> tee ./.well-known/pki-validation/B992F08CB46748D02E4C553A4038BC.txt
</span><span>254563C20918258D661E7D43D6A43A2A258857E191977DD5F740FBB9ABD25279 </span><span style="color:#99ad6a;">254563C20918258D661E7D43D6A43A2A258857E191977DD5F740FBB9ABD25279
</span><span>comodoca.com </span><span style="color:#99ad6a;">comodoca.com
</span><span>ca5792984e3f0a1 </span><span style="color:#99ad6a;">ca5792984e3f0a1
</span><span>EOF </span><span style="color:#8fbfdc;">EOF
</span></code></pre> </span></code></pre>
<p>随后在VPS上运行该命令。</p> <p>随后在VPS上运行该命令。</p>
<ul> <ul>
<li>开启一个临时HTTP服务器</li> <li>开启一个临时HTTP服务器</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>python3 -m http.server 80 <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">python3 -m</span><span> http.server 80
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>随后即可在ZeroSSL中验证证书并开启SSL。</li> <li>随后即可在ZeroSSL中验证证书并开启SSL。</li>
@@ -368,17 +368,17 @@
<p>挂载文件系统为可写模式:</p> <p>挂载文件系统为可写模式:</p>
</li> </li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>mount -o remount,rw / <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">mount -o</span><span> remount,rw /
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>将用户添加到 sudo 组:</li> <li>将用户添加到 sudo 组:</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>usermod -aG sudo 用户名 <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">usermod -aG</span><span> sudo 用户名
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>重启计算机:</li> <li>重启计算机:</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>reboot <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">reboot
</span></code></pre> </span></code></pre>
<h2 id="geng-huan-nei-he">更换内核</h2> <h2 id="geng-huan-nei-he">更换内核</h2>
<p>以Xanmod为例</p> <p>以Xanmod为例</p>
@@ -396,8 +396,8 @@
<ol start="3"> <ol start="3">
<li>搜索可用内核</li> <li>搜索可用内核</li>
</ol> </ol>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>apt search xanmod <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">apt</span><span> search xanmod
</span><span>sudo apt install linux-image-6.8.6-x64v3-xanmod1 linux-headers-6.8.6-x64v3-xanmod1 </span><span style="color:#ffb964;">sudo</span><span> apt install linux-image-6.8.6-x64v3-xanmod1 linux-headers-6.8.6-x64v3-xanmod1
</span></code></pre> </span></code></pre>
<h3 id="chang-jian-xanmod-nei-he-hou-zhui-han-yi-dui-bi">常见 XanMod 内核后缀含义对比</h3> <h3 id="chang-jian-xanmod-nei-he-hou-zhui-han-yi-dui-bi">常见 XanMod 内核后缀含义对比</h3>
<table><thead><tr><th>后缀示例</th><th>含义简述</th><th>适合用途</th></tr></thead><tbody> <table><thead><tr><th>后缀示例</th><th>含义简述</th><th>适合用途</th></tr></thead><tbody>

View File

@@ -174,12 +174,12 @@
<ul> <ul>
<li>PowerShell以管理员权限运行</li> <li>PowerShell以管理员权限运行</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">Enable-WindowsOptionalFeature -Online -FeatureName</span><span> Microsoft-Hyper-V</span><span style="color:#ffb964;"> -All
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>DISM部署映像服务和管理工具</li> <li>DISM部署映像服务和管理工具</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>DISM /Online /Enable-Feature /All /FeatureName:Microsoft-Hyper-V <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">DISM</span><span> /Online /Enable-Feature /All /FeatureName:Microsoft-Hyper-V
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>Windows 功能 GUI 操作: <li>Windows 功能 GUI 操作:
@@ -189,20 +189,20 @@
<ul> <ul>
<li>PowerShell管理员权限</li> <li>PowerShell管理员权限</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>Disable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-All <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">Disable-WindowsOptionalFeature -Online -FeatureName</span><span> Microsoft-Hyper-V-All
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>DISM</li> <li>DISM</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>DISM /Online /Disable-Feature:Microsoft-Hyper-V <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">DISM</span><span> /Online /Disable-Feature:Microsoft-Hyper-V
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>用 bcdedit 修改启动配置,使系统启动时不加载 HypervisorHyper-V 的虚拟化内核)但保留功能安装:</li> <li>用 bcdedit 修改启动配置,使系统启动时不加载 HypervisorHyper-V 的虚拟化内核)但保留功能安装:</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>bcdedit /set hypervisorlaunchtype off <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">bcdedit</span><span> /set hypervisorlaunchtype off
</span></code></pre> </span></code></pre>
<p>若要恢复加载,则:</p> <p>若要恢复加载,则:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>bcdedit /set hypervisorlaunchtype auto <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">bcdedit</span><span> /set hypervisorlaunchtype auto
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>Windows 功能 GUI 中,取消勾选 Hyper-V 相应项。</li> <li>Windows 功能 GUI 中,取消勾选 Hyper-V 相应项。</li>
@@ -212,18 +212,18 @@
<ol> <ol>
<li><strong>给 VMware 或 VirtualBox 使用环境临时关闭 Hyper-V</strong></li> <li><strong>给 VMware 或 VirtualBox 使用环境临时关闭 Hyper-V</strong></li>
</ol> </ol>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>bcdedit /set hypervisorlaunchtype off <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">bcdedit</span><span> /set hypervisorlaunchtype off
</span></code></pre> </span></code></pre>
<p>然后重启 Windows就能让这些软件正常启动虚拟机。要还原 Hyper-V改为 <code>auto</code><code>on</code>:</p> <p>然后重启 Windows就能让这些软件正常启动虚拟机。要还原 Hyper-V改为 <code>auto</code><code>on</code>:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>bcdedit /set hypervisorlaunchtype auto <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">bcdedit</span><span> /set hypervisorlaunchtype auto
</span></code></pre> </span></code></pre>
<ol start="2"> <ol start="2">
<li><strong>从命令行完全关闭 Hyper-V 功能</strong></li> <li><strong>从命令行完全关闭 Hyper-V 功能</strong></li>
</ol> </ol>
<pre data-lang="powershell" style="background-color:#151515;color:#e8e8d3;" class="language-powershell "><code class="language-powershell" data-lang="powershell"><span>Disable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-All <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">Disable-WindowsOptionalFeature -Online -FeatureName</span><span> Microsoft-Hyper-V-All
</span></code></pre> </span></code></pre>
<p>或者用 DISM</p> <p>或者用 DISM</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>DISM /Online /Disable-Feature:Microsoft-Hyper-V <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">DISM</span><span> /Online /Disable-Feature:Microsoft-Hyper-V
</span></code></pre> </span></code></pre>
<ol start="3"> <ol start="3">
<li><strong>检查当前 Hyper-V 是否正在运行</strong></li> <li><strong>检查当前 Hyper-V 是否正在运行</strong></li>

View File

@@ -265,24 +265,24 @@
<tr><td><code>adb sideload &lt;要刷写的文件路径&gt;</code></td><td>刷写模块,如 Magisk</td></tr> <tr><td><code>adb sideload &lt;要刷写的文件路径&gt;</code></td><td>刷写模块,如 Magisk</td></tr>
</tbody></table> </tbody></table>
<p><strong>使用adb备份分区</strong></p> <p><strong>使用adb备份分区</strong></p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>adb shell ls -l /dev/block/bootdevice/by-name <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">adb</span><span> shell ls</span><span style="color:#ffb964;"> -l</span><span> /dev/block/bootdevice/by-name
</span></code></pre> </span></code></pre>
<p>可以看到有很多分区,例如这些</p> <p>可以看到有很多分区,例如这些</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>... <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">...
</span><span>lrwxrwxrwx 1 root root 15 1970-12-24 11:30 frp -&gt; /dev/block/sda5 </span><span style="color:#ffb964;">lrwxrwxrwx</span><span> 1 root root 15 1970-12-24 11:30 frp -&gt; /dev/block/sda5
</span><span>lrwxrwxrwx 1 root root 16 1970-12-24 11:30 fsc -&gt; /dev/block/sdf13 </span><span style="color:#ffb964;">lrwxrwxrwx</span><span> 1 root root 16 1970-12-24 11:30 fsc -&gt; /dev/block/sdf13
</span><span>lrwxrwxrwx 1 root root 16 1970-12-24 11:30 fsg -&gt; /dev/block/sdf12 </span><span style="color:#ffb964;">lrwxrwxrwx</span><span> 1 root root 16 1970-12-24 11:30 fsg -&gt; /dev/block/sdf12
</span><span>lrwxrwxrwx 1 root root 15 1970-12-24 11:30 hyp_a -&gt; /dev/block/sde5 </span><span style="color:#ffb964;">lrwxrwxrwx</span><span> 1 root root 15 1970-12-24 11:30 hyp_a -&gt; /dev/block/sde5
</span><span>lrwxrwxrwx 1 root root 16 1970-12-24 11:30 hyp_b -&gt; /dev/block/sde40 </span><span style="color:#ffb964;">lrwxrwxrwx</span><span> 1 root root 16 1970-12-24 11:30 hyp_b -&gt; /dev/block/sde40
</span><span>... </span><span style="color:#ffb964;">...
</span></code></pre> </span></code></pre>
<p>随后使用root备份分区到手机上</p> <p>随后使用root备份分区到手机上</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>adb root <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">adb</span><span> root
</span><span> </span><span>
</span><span>adb shell &quot;dd if=/dev/block/sda2 of=/sdcard/partition_backup/persist.img&quot; </span><span style="color:#ffb964;">adb</span><span> shell </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">dd if=/dev/block/sda2 of=/sdcard/partition_backup/persist.img</span><span style="color:#556633;">&quot;
</span></code></pre> </span></code></pre>
<p>然后可以上传到PC端</p> <p>然后可以上传到PC端</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>adb pull /sdcard/partition_backup/ ./backup/ <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">adb</span><span> pull /sdcard/partition_backup/ ./backup/
</span></code></pre> </span></code></pre>
<h3 id="fastboot-ming-ling"><strong>fastboot 命令</strong></h3> <h3 id="fastboot-ming-ling"><strong>fastboot 命令</strong></h3>
<table><thead><tr><th>命令</th><th>说明</th></tr></thead><tbody> <table><thead><tr><th>命令</th><th>说明</th></tr></thead><tbody>

View File

@@ -187,27 +187,27 @@
<p>随后在设置 &gt; 设备首选项 &gt; 关于 &gt; 状态中找到并记下IP 地址然后用ADB连接上去这里使用命令<code>adb connect &lt;IP 地址&gt;:&lt;端口&gt; </code>随后在ATV端授权连接例如</p> <p>随后在设置 &gt; 设备首选项 &gt; 关于 &gt; 状态中找到并记下IP 地址然后用ADB连接上去这里使用命令<code>adb connect &lt;IP 地址&gt;:&lt;端口&gt; </code>随后在ATV端授权连接例如</p>
</li> </li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span> adb connect 192.168.1.666:9527 <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;"></span><span> adb connect 192.168.1.666:9527
</span><span> </span><span>
</span><span>connected to 192.168.1.666:9527 </span><span style="color:#ffb964;">connected</span><span> to 192.168.1.666:9527
</span><span> </span><span>
</span><span> adb devices </span><span style="color:#ffb964;"></span><span> adb devices
</span><span> </span><span>
</span><span>xxxxxxxxx sideload </span><span style="color:#ffb964;">xxxxxxxxx</span><span> sideload
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>接着使用命令<code>adb install &lt;path to android app.apk&gt;</code>将要安装的软件包上传,也可以将文件拖到命令提示符窗口上以复制其路径,回车确认。</li> <li>接着使用命令<code>adb install &lt;path to android app.apk&gt;</code>将要安装的软件包上传,也可以将文件拖到命令提示符窗口上以复制其路径,回车确认。</li>
</ul> </ul>
<p><strong>一些 ADB 常用命令</strong></p> <p><strong>一些 ADB 常用命令</strong></p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>adb reboot #将重启 Android 设备。 <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">adb</span><span> reboot </span><span style="color:#888888;">#将重启 Android 设备。
</span><span> </span><span>
</span><span>adb reboot recovery #将设备重新启动到恢复模式。 </span><span style="color:#ffb964;">adb</span><span> reboot recovery </span><span style="color:#888888;">#将设备重新启动到恢复模式。
</span><span> </span><span>
</span><span>adb push &lt;local&gt; &lt;remote&gt; #将文件从您的 PC 复制到您的 Android 设备。 </span><span style="color:#ffb964;">adb</span><span> push &lt;local&gt; &lt;remote&gt; </span><span style="color:#888888;">#将文件从您的 PC 复制到您的 Android 设备。
</span><span> </span><span>
</span><span>adb shell wm density &lt;dpi&gt; #改变显示器的像素密度。 </span><span style="color:#ffb964;">adb</span><span> shell wm density &lt;dpi&gt; </span><span style="color:#888888;">#改变显示器的像素密度。
</span><span> </span><span>
</span><span>adb kill server #切断 PC 和 Android TV 之间的连接。 </span><span style="color:#ffb964;">adb</span><span> kill server </span><span style="color:#888888;">#切断 PC 和 Android TV 之间的连接。
</span></code></pre> </span></code></pre>
<p><strong>要安装的软件</strong></p> <p><strong>要安装的软件</strong></p>
<ul> <ul>
@@ -250,64 +250,64 @@
<ol> <ol>
<li>ADB连接连接到ADB成功后我们使用<code>adb shell</code>进入shell随后使用命令<code>pm list packages</code>列出所有软件包;</li> <li>ADB连接连接到ADB成功后我们使用<code>adb shell</code>进入shell随后使用命令<code>pm list packages</code>列出所有软件包;</li>
</ol> </ol>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>pm list packages -s 列出系统软件包 <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">pm</span><span> list packages</span><span style="color:#ffb964;"> -s</span><span> 列出系统软件包
</span><span>pm list packages -3 列出第三方软件包 </span><span style="color:#ffb964;">pm</span><span> list packages</span><span style="color:#ffb964;"> -3</span><span> 列出第三方软件包
</span></code></pre> </span></code></pre>
<ol start="2"> <ol start="2">
<li>获取包名:对于暂时无法确定包名的软件,可以先打开,再使用</li> <li>获取包名:对于暂时无法确定包名的软件,可以先打开,再使用</li>
</ol> </ol>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>adb shell dumpsys activity activities | grep mResumedActivity <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">adb</span><span> shell dumpsys activity activities | </span><span style="color:#ffb964;">grep</span><span> mResumedActivity
</span></code></pre> </span></code></pre>
<p>获取当前前台应用的包名,随后再禁用或者删除.</p> <p>获取当前前台应用的包名,随后再禁用或者删除.</p>
<ol start="3"> <ol start="3">
<li>删除软件:可以先使用</li> <li>删除软件:可以先使用</li>
</ol> </ol>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>pm disable-user --user 0 com.dangbei1.tvlauncher <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">pm</span><span> disable-user</span><span style="color:#ffb964;"> --user</span><span> 0 com.dangbei1.tvlauncher
</span></code></pre> </span></code></pre>
<p>禁用软件,确认没有问题之后再用</p> <p>禁用软件,确认没有问题之后再用</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>pm uninstall -k --user 0 com.dangbei1.tvlauncher <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">pm</span><span> uninstall</span><span style="color:#ffb964;"> -k --user</span><span> 0 com.dangbei1.tvlauncher
</span></code></pre> </span></code></pre>
<p>删除;</p> <p>删除;</p>
<ol start="4"> <ol start="4">
<li>备份软件对于想要备份的软件可以使用1和2中的方法获取软件包名然后使用例如以下命令</li> <li>备份软件对于想要备份的软件可以使用1和2中的方法获取软件包名然后使用例如以下命令</li>
</ol> </ol>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>adb shell pm path org.videolan.vlc <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">adb</span><span> shell pm path org.videolan.vlc
</span><span> </span><span>
</span><span>package:/data/app/~~hY2Y0_PdaDlasfVwkUNcoQ==/org.videolan.vlc-WnNhCJLQUJdZYYzUxzBNBA==/base.apk </span><span style="color:#ffb964;">package:/data/app/~~hY2Y0_PdaDlasfVwkUNcoQ</span><span>=</span><span style="color:#99ad6a;">=/org.videolan.vlc-WnNhCJLQUJdZYYzUxzBNBA==/base.apk
</span></code></pre> </span></code></pre>
<p>获取到安装路径随后将apk包拿走就可以</p> <p>获取到安装路径随后将apk包拿走就可以</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>adb pull /data/app/~~hY2Y0_PdaDlasfVwkUNcoQ==/org.videolan.vlc-WnNhCJLQUJdZYYzUxzBNBA==/base.apk ./Downloads/ <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">adb</span><span> pull /data/app/</span><span style="color:#ffb964;">~~</span><span>hY2Y0_PdaDlasfVwkUNcoQ==/org.videolan.vlc-WnNhCJLQUJdZYYzUxzBNBA==/base.apk ./Downloads/
</span></code></pre> </span></code></pre>
<ol start="5"> <ol start="5">
<li>备份分区如果你想要修改当前系统的img可以用adb提取并导出</li> <li>备份分区如果你想要修改当前系统的img可以用adb提取并导出</li>
</ol> </ol>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span># 确定分区对应关系 <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#888888;"># 确定分区对应关系
</span><span>ls -l /dev/block </span><span style="color:#ffb964;">ls -l</span><span> /dev/block
</span><span>ls -l /dev/block/platform </span><span style="color:#ffb964;">ls -l</span><span> /dev/block/platform
</span><span>cat /proc/mounts </span><span style="color:#ffb964;">cat</span><span> /proc/mounts
</span><span> </span><span>
</span><span> </span><span>
</span><span># 导出到 /sdcard/ </span><span style="color:#888888;"># 导出到 /sdcard/
</span><span>dd if=/dev/block/boot of=/sdcard/boot.img </span><span style="color:#ffb964;">dd</span><span> if=/dev/block/boot of=/sdcard/boot.img
</span><span>dd if=/dev/block/recovery of=/sdcard/recovery.img </span><span style="color:#ffb964;">dd</span><span> if=/dev/block/recovery of=/sdcard/recovery.img
</span><span>dd if=/dev/block/system of=/sdcard/system.img </span><span style="color:#ffb964;">dd</span><span> if=/dev/block/system of=/sdcard/system.img
</span><span>dd if=/dev/block/vendor of=/sdcard/vendor.img </span><span style="color:#ffb964;">dd</span><span> if=/dev/block/vendor of=/sdcard/vendor.img
</span><span>dd if=/dev/block/product of=/sdcard/product.img </span><span style="color:#ffb964;">dd</span><span> if=/dev/block/product of=/sdcard/product.img
</span><span>dd if=/dev/block/odm of=/sdcard/odm.img </span><span style="color:#ffb964;">dd</span><span> if=/dev/block/odm of=/sdcard/odm.img
</span><span> </span><span>
</span><span># 拉去到PC </span><span style="color:#888888;"># 拉去到PC
</span><span>adb pull /sdcard/boot.img </span><span style="color:#ffb964;">adb</span><span> pull /sdcard/boot.img
</span><span>adb pull /sdcard/recovery.img </span><span style="color:#ffb964;">adb</span><span> pull /sdcard/recovery.img
</span><span>adb pull /sdcard/system.img </span><span style="color:#ffb964;">adb</span><span> pull /sdcard/system.img
</span><span>adb pull /sdcard/vendor.img </span><span style="color:#ffb964;">adb</span><span> pull /sdcard/vendor.img
</span><span>adb pull /sdcard/product.img </span><span style="color:#ffb964;">adb</span><span> pull /sdcard/product.img
</span><span>adb pull /sdcard/odm.img </span><span style="color:#ffb964;">adb</span><span> pull /sdcard/odm.img
</span></code></pre> </span></code></pre>
<ol start="5"> <ol start="5">
<li>修改桌面可以进入安卓原生设置里面将默认主屏幕应用改为ATV代替掉自带的桌面,并使用</li> <li>修改桌面可以进入安卓原生设置里面将默认主屏幕应用改为ATV代替掉自带的桌面,并使用</li>
</ol> </ol>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>adb shell pm disable-user --user 0 com.google.android.tvlauncher <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">adb</span><span> shell pm disable-user</span><span style="color:#ffb964;"> --user</span><span> 0 com.google.android.tvlauncher
</span><span>adb shell pm disable-user --user 0 com.google.android.tungsten.setupwraith </span><span style="color:#ffb964;">adb</span><span> shell pm disable-user</span><span style="color:#ffb964;"> --user</span><span> 0 com.google.android.tungsten.setupwraith
</span></code></pre> </span></code></pre>
<p>命令禁用原来的默认桌面。随后重启盒子即可看到海报墙效果如果ATV桌面没有开机自启动可以使用Launch on Boot工具。</p> <p>命令禁用原来的默认桌面。随后重启盒子即可看到海报墙效果如果ATV桌面没有开机自启动可以使用Launch on Boot工具。</p>
<p><strong>最终效果</strong></p> <p><strong>最终效果</strong></p>

View File

@@ -139,42 +139,42 @@
<p>安装方法同ubuntu一样是基于Calamares的图形化界面安装。一般步骤为<code>选择语言American English--选择键盘/时区(默认/shanghai--选择分区xfs抹除全盘可选全盘加密--选择桌面环境Gnome或KDE--确认安装。</code></p> <p>安装方法同ubuntu一样是基于Calamares的图形化界面安装。一般步骤为<code>选择语言American English--选择键盘/时区(默认/shanghai--选择分区xfs抹除全盘可选全盘加密--选择桌面环境Gnome或KDE--确认安装。</code></p>
<h2 id="an-zhuang-ruan-jian">安装软件</h2> <h2 id="an-zhuang-ruan-jian">安装软件</h2>
<p>随后安装常用开源软件(KDE环境省略file和wayland)</p> <p>随后安装常用开源软件(KDE环境省略file和wayland)</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span># gui <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#888888;"># gui
</span><span> </span><span>
</span><span>paru -S floorp-bin keepassxc qemu-full virt-manager materialgram-bin legcord-bin onlyoffice-bin localsend-bin kazumi-bin foliate vlc krita qtscrcpy strawberry oculante obs-studio </span><span style="color:#ffb964;">paru -S</span><span> floorp-bin keepassxc qemu-full virt-manager materialgram-bin legcord-bin onlyoffice-bin localsend-bin kazumi-bin foliate vlc krita qtscrcpy strawberry oculante obs-studio
</span><span> </span><span>
</span><span># tui </span><span style="color:#888888;"># tui
</span><span> </span><span>
</span><span>paru -S neovim yazi lazygit btop zellij termshark </span><span style="color:#ffb964;">paru -S</span><span> neovim yazi lazygit btop zellij termshark
</span><span> </span><span>
</span><span># cli </span><span style="color:#888888;"># cli
</span><span> </span><span>
</span><span>paru -S alacritty fish fastfetch tealdeer expac fish-autopair fish-pure-prompt fisher onefetch starship atuin bat fzf fd ripgrep eza tree android-tools payload-dumper-go-bin nexttrace-bin syncthing aria2 </span><span style="color:#ffb964;">paru -S</span><span> alacritty fish fastfetch tealdeer expac fish-autopair fish-pure-prompt fisher onefetch starship atuin bat fzf fd ripgrep eza tree android-tools payload-dumper-go-bin nexttrace-bin syncthing aria2
</span><span> </span><span>
</span><span> </span><span>
</span><span># file </span><span style="color:#888888;"># file
</span><span> </span><span>
</span><span>paru -S gvfs gvfs-mtp gvfs-afc gvfs-nfs nemo </span><span style="color:#ffb964;">paru -S</span><span> gvfs gvfs-mtp gvfs-afc gvfs-nfs nemo
</span><span> </span><span>
</span><span># zip </span><span style="color:#888888;"># zip
</span><span> </span><span>
</span><span>paru -S peazip </span><span style="color:#ffb964;">paru -S</span><span> peazip
</span><span> </span><span>
</span><span># Type </span><span style="color:#888888;"># Type
</span><span> </span><span>
</span><span>paru -S fcitx5-configtool fcitx5-chinese-addons fcitx5-skin-material fcitx5-im fcitx5-rime </span><span style="color:#ffb964;">paru -S</span><span> fcitx5-configtool fcitx5-chinese-addons fcitx5-skin-material fcitx5-im fcitx5-rime
</span><span> </span><span>
</span><span># Blog </span><span style="color:#888888;"># Blog
</span><span> </span><span>
</span><span>paru -S zola npm pnpm just go </span><span style="color:#ffb964;">paru -S</span><span> zola npm pnpm just go
</span><span> </span><span>
</span><span># ttf </span><span style="color:#888888;"># ttf
</span><span> </span><span>
</span><span>paru -S ttf-jetbrains-mono-nerd </span><span style="color:#ffb964;">paru -S</span><span> ttf-jetbrains-mono-nerd
</span><span> </span><span>
</span><span># Wayland </span><span style="color:#888888;"># Wayland
</span><span> </span><span>
</span><span>paru -S hyprland waybar wofi network-manager-applet swww wl-gammarelay-rs brightnessctl easyeffects wireplumber pipewire blueman wl-clipboard-rs swaync swayosd swappy grim wlogout hyprlock hyprpolkitagent </span><span style="color:#ffb964;">paru -S</span><span> hyprland waybar wofi network-manager-applet swww wl-gammarelay-rs brightnessctl easyeffects wireplumber pipewire blueman wl-clipboard-rs swaync swayosd swappy grim wlogout hyprlock hyprpolkitagent
</span></code></pre> </span></code></pre>
<table><thead><tr><th>分类</th><th>软件列表</th></tr></thead><tbody> <table><thead><tr><th>分类</th><th>软件列表</th></tr></thead><tbody>
<tr><td><strong>窗口管理器</strong></td><td>hyprland</td></tr> <tr><td><strong>窗口管理器</strong></td><td>hyprland</td></tr>
@@ -194,12 +194,12 @@
</tbody></table> </tbody></table>
<p>安装完毕后我们开始配置输入法与字体:</p> <p>安装完毕后我们开始配置输入法与字体:</p>
<p>输入法我们采用雾凇拼音即前面我们安装的fcitx5系列软件包的一个输入方案这里我们使用<a href="https://github.com/Mark24Code/rime-auto-deploy">自动部署脚本</a></p> <p>输入法我们采用雾凇拼音即前面我们安装的fcitx5系列软件包的一个输入方案这里我们使用<a href="https://github.com/Mark24Code/rime-auto-deploy">自动部署脚本</a></p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span># step1: 克隆/下载 latest 最新的稳定版到本地 <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#888888;"># step1: 克隆/下载 latest 最新的稳定版到本地
</span><span>git clone --depth=1 https://github.com/Mark24Code/rime-auto-deploy.git --branch latest </span><span style="color:#ffb964;">git</span><span> clone</span><span style="color:#ffb964;"> --depth</span><span>=1 https://github.com/Mark24Code/rime-auto-deploy.git</span><span style="color:#ffb964;"> --branch</span><span> latest
</span><span># step2: 进入项目目录 </span><span style="color:#888888;"># step2: 进入项目目录
</span><span>cd rime-auto-deploy </span><span>cd rime-auto-deploy
</span><span># step3: 执行部署脚本 </span><span style="color:#888888;"># step3: 执行部署脚本
</span><span>./installer.rb </span><span style="color:#ffb964;">./installer.rb
</span></code></pre> </span></code></pre>
<p>选择部署fcitx5即可随后在设置的Input Method中Add Input Method 选择Rime随后默认按Ctrl+Space即可切换中文。</p> <p>选择部署fcitx5即可随后在设置的Input Method中Add Input Method 选择Rime随后默认按Ctrl+Space即可切换中文。</p>
<p>字体的配置在<a href="https://blog.dich.bid/learn-linux-for-pc-7/">Linux之旅(七):系统与终端字体设置</a>这一期说过这里不再赘述。缺少的字体可以通过paru下载或者到<a href="https://www.miao3.cn/">喵闪字库</a>下载ttf并安装。</p> <p>字体的配置在<a href="https://blog.dich.bid/learn-linux-for-pc-7/">Linux之旅(七):系统与终端字体设置</a>这一期说过这里不再赘述。缺少的字体可以通过paru下载或者到<a href="https://www.miao3.cn/">喵闪字库</a>下载ttf并安装。</p>
@@ -208,13 +208,13 @@
<ul> <ul>
<li>在设置中找到Colors&amp;Themes分别设置为</li> <li>在设置中找到Colors&amp;Themes分别设置为</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>- ColorBreeze Dark <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">-</span><span> ColorBreeze Dark
</span><span>- Application StyleBreeze </span><span style="color:#ffb964;">-</span><span> Application StyleBreeze
</span><span>- Plasma StyleSweet </span><span style="color:#ffb964;">-</span><span> Plasma StyleSweet
</span><span>- Window DecorationsEdna </span><span style="color:#ffb964;">-</span><span> Window DecorationsEdna
</span><span>- IconsBeautySolar </span><span style="color:#ffb964;">-</span><span> IconsBeautySolar
</span><span>- CursorsAfterglow Cursors </span><span style="color:#ffb964;">-</span><span> CursorsAfterglow Cursors
</span><span>- Splash ScreenNone </span><span style="color:#ffb964;">-</span><span> Splash ScreenNone
</span></code></pre> </span></code></pre>
<ul> <ul>
<li> <li>
@@ -267,33 +267,33 @@
<ul> <ul>
<li>安装 os-prober首先确保系统中安装了 os-prober这是一个用于检测其他操作系统的工具。</li> <li>安装 os-prober首先确保系统中安装了 os-prober这是一个用于检测其他操作系统的工具。</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo pacman -S os-prober <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">sudo</span><span> pacman</span><span style="color:#ffb964;"> -S</span><span> os-prober
</span><span>sudo os-prober </span><span style="color:#ffb964;">sudo</span><span> os-prober
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>打开 /etc/default/grub 文件进行编辑:</li> <li>打开 /etc/default/grub 文件进行编辑:</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo nano /etc/default/grub <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">sudo</span><span> nano /etc/default/grub
</span><span># 确保 GRUB_DISABLE_OS_PROBER 设置为 false </span><span style="color:#888888;"># 确保 GRUB_DISABLE_OS_PROBER 设置为 false
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>保存文件并退出编辑器后,运行以下命令更新 GRUB 配置:</li> <li>保存文件并退出编辑器后,运行以下命令更新 GRUB 配置:</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo grub-mkconfig -o /boot/grub/grub.cfg <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">sudo</span><span> grub-mkconfig</span><span style="color:#ffb964;"> -o</span><span> /boot/grub/grub.cfg
</span></code></pre> </span></code></pre>
<p>或者<code>手动添加</code></p> <p>或者<code>手动添加</code></p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>nano /etc/grub.d/40_custom <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">nano</span><span> /etc/grub.d/40_custom
</span></code></pre> </span></code></pre>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>#!/bin/sh <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#888888;">#!/bin/sh
</span><span>exec tail -n +3 $0 </span><span>exec tail -n +3 $</span><span style="color:#ffb964;">0
</span><span># This file provides an easy way to add custom menu entries. Simply type the </span><span style="color:#888888;"># This file provides an easy way to add custom menu entries. Simply type the
</span><span># menu entries you want to add after this comment. Be careful not to change </span><span style="color:#888888;"># menu entries you want to add after this comment. Be careful not to change
</span><span># the &#39;exec tail&#39; line above. </span><span style="color:#888888;"># the &#39;exec tail&#39; line above.
</span><span>menuentry &quot;Windows 11 (Manual)&quot; { </span><span style="color:#ffb964;">menuentry </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">Windows 11 (Manual)</span><span style="color:#556633;">&quot; </span><span>{
</span><span> insmod part_gpt </span><span> insmod part_gpt
</span><span> insmod fat </span><span> insmod fat
</span><span> insmod chain </span><span> insmod chain
</span><span> set root=&#39;hd0,gpt1&#39; </span><span> set root=</span><span style="color:#556633;">&#39;</span><span style="color:#99ad6a;">hd0,gpt1</span><span style="color:#556633;">&#39;
</span><span> chainloader /EFI/Microsoft/Boot/bootmgfw.efi </span><span> chainloader /EFI/Microsoft/Boot/bootmgfw.efi
</span><span>} </span><span>}
</span></code></pre> </span></code></pre>
@@ -303,49 +303,49 @@
<ul> <ul>
<li>​如果 libvirtd 服务未运行virt-manager 将无法连接到虚拟化环境。​</li> <li>​如果 libvirtd 服务未运行virt-manager 将无法连接到虚拟化环境。​</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo systemctl start libvirtd <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">sudo</span><span> systemctl start libvirtd
</span><span>sudo systemctl enable libvirtd </span><span style="color:#ffb964;">sudo</span><span> systemctl enable libvirtd
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>用户权限问题:​​将当前用户添加到 libvirt 组,以获得必要的权限。​</li> <li>用户权限问题:​​将当前用户添加到 libvirt 组,以获得必要的权限。​</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo usermod -aG libvirt $(whoami) <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">sudo</span><span> usermod</span><span style="color:#ffb964;"> -aG</span><span> libvirt $(</span><span style="color:#ffb964;">whoami</span><span>)
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>虚拟网络未激活virt-manager 可能无法连接到默认的虚拟网络。​</li> <li>虚拟网络未激活virt-manager 可能无法连接到默认的虚拟网络。​</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo virsh net-start default <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">sudo</span><span> virsh net-start default
</span></code></pre> </span></code></pre>
<p>默认网络在系统启动时自动启动,可以执行:</p> <p>默认网络在系统启动时自动启动,可以执行:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo virsh net-autostart default <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">sudo</span><span> virsh net-autostart default
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>配置文件权限问题:​配置文件的权限设置可能导致访问问题。</li> <li>配置文件权限问题:​配置文件的权限设置可能导致访问问题。</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo chown $(whoami):libvirt /var/run/libvirt/libvirt-sock <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">sudo</span><span> chown $(</span><span style="color:#ffb964;">whoami</span><span>):libvirt /var/run/libvirt/libvirt-sock
</span></code></pre> </span></code></pre>
<p>随后安装虚拟机,流程大概为<code>选择镜像和系统类型--设置CPU/内存--设置空间大小--编辑配置项--开启UEFI引导和3D加速</code>.</p> <p>随后安装虚拟机,流程大概为<code>选择镜像和系统类型--设置CPU/内存--设置空间大小--编辑配置项--开启UEFI引导和3D加速</code>.</p>
<p><strong>开启3D加速</strong></p> <p><strong>开启3D加速</strong></p>
<ul> <ul>
<li>NIC</li> <li>NIC</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>&lt;graphics type=&quot;spice&quot;&gt; <pre data-lang="xml" style="background-color:#151515;color:#e8e8d3;" class="language-xml "><code class="language-xml" data-lang="xml"><span>&lt;</span><span style="color:#ffb964;">graphics type</span><span>=</span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">spice</span><span style="color:#556633;">&quot;</span><span>&gt;
</span><span> &lt;listen type=&quot;none&quot;/&gt; </span><span> &lt;</span><span style="color:#ffb964;">listen type</span><span>=</span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">none</span><span style="color:#556633;">&quot;</span><span>/&gt;
</span><span> &lt;image compression=&quot;off&quot;/&gt; </span><span> &lt;</span><span style="color:#ffb964;">image compression</span><span>=</span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">off</span><span style="color:#556633;">&quot;</span><span>/&gt;
</span><span> &lt;gl enable=&quot;yes&quot; rendernode=&quot;/dev/dri/by-path/pci-0000:05:00.0-render&quot;/&gt; </span><span> &lt;</span><span style="color:#ffb964;">gl enable</span><span>=</span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">yes</span><span style="color:#556633;">&quot; </span><span style="color:#ffb964;">rendernode</span><span>=</span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">/dev/dri/by-path/pci-0000:05:00.0-render</span><span style="color:#556633;">&quot;</span><span>/&gt;
</span><span>&lt;/graphics&gt; </span><span>&lt;/</span><span style="color:#ffb964;">graphics</span><span>&gt;
</span><span> </span><span>
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>video virtio</li> <li>video virtio</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>&lt;video&gt; <pre data-lang="xml" style="background-color:#151515;color:#e8e8d3;" class="language-xml "><code class="language-xml" data-lang="xml"><span>&lt;</span><span style="color:#ffb964;">video</span><span>&gt;
</span><span> &lt;model type=&quot;virtio&quot; heads=&quot;1&quot; primary=&quot;yes&quot;&gt; </span><span> &lt;</span><span style="color:#ffb964;">model type</span><span>=</span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">virtio</span><span style="color:#556633;">&quot; </span><span style="color:#ffb964;">heads</span><span>=</span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">1</span><span style="color:#556633;">&quot; </span><span style="color:#ffb964;">primary</span><span>=</span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">yes</span><span style="color:#556633;">&quot;</span><span>&gt;
</span><span> &lt;acceleration accel3d=&quot;yes&quot;/&gt; </span><span> &lt;</span><span style="color:#ffb964;">acceleration accel3d</span><span>=</span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">yes</span><span style="color:#556633;">&quot;</span><span>/&gt;
</span><span> &lt;/model&gt; </span><span> &lt;/</span><span style="color:#ffb964;">model</span><span>&gt;
</span><span> &lt;alias name=&quot;video0&quot;/&gt; </span><span> &lt;</span><span style="color:#ffb964;">alias name</span><span>=</span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">video0</span><span style="color:#556633;">&quot;</span><span>/&gt;
</span><span> &lt;address type=&quot;pci&quot; domain=&quot;0x0000&quot; bus=&quot;0x00&quot; slot=&quot;0x01&quot; function=&quot;0x0&quot;/&gt; </span><span> &lt;</span><span style="color:#ffb964;">address type</span><span>=</span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">pci</span><span style="color:#556633;">&quot; </span><span style="color:#ffb964;">domain</span><span>=</span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">0x0000</span><span style="color:#556633;">&quot; </span><span style="color:#ffb964;">bus</span><span>=</span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">0x00</span><span style="color:#556633;">&quot; </span><span style="color:#ffb964;">slot</span><span>=</span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">0x01</span><span style="color:#556633;">&quot; </span><span style="color:#ffb964;">function</span><span>=</span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">0x0</span><span style="color:#556633;">&quot;</span><span>/&gt;
</span><span>&lt;/video&gt; </span><span>&lt;/</span><span style="color:#ffb964;">video</span><span>&gt;
</span></code></pre> </span></code></pre>
<p>安装完成后即可使用electerm进行SSH连接如果无法连接可以将Tun模式开启的"strict_route"关闭。</p> <p>安装完成后即可使用electerm进行SSH连接如果无法连接可以将Tun模式开启的"strict_route"关闭。</p>
<h2 id="geng-gai-qi-dong-nei-he-shun-xu">更改启动内核顺序</h2> <h2 id="geng-gai-qi-dong-nei-he-shun-xu">更改启动内核顺序</h2>
@@ -353,172 +353,172 @@
<ul> <ul>
<li>使用以下命令查看内核名称:</li> <li>使用以下命令查看内核名称:</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>ls /boot/vmlinuz* <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">ls</span><span> /boot/vmlinuz*
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>在 /etc/default/grub 中添加或修改如下行:</li> <li>在 /etc/default/grub 中添加或修改如下行:</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>GRUB_TOP_LEVEL=&quot;/boot/vmlinuz-linux-cachyos&quot; <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">GRUB_TOP_LEVEL</span><span>=</span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">/boot/vmlinuz-linux-cachyos</span><span style="color:#556633;">&quot;
</span></code></pre> </span></code></pre>
<p>需要注意,这种方法会关闭 GRUB 的“记住上次启动项”的功能。</p> <p>需要注意,这种方法会关闭 GRUB 的“记住上次启动项”的功能。</p>
<ul> <ul>
<li>修改完 /etc/default/grub 后,记得重新生成 GRUB 配置文件:</li> <li>修改完 /etc/default/grub 后,记得重新生成 GRUB 配置文件:</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo grub-mkconfig -o /boot/grub/grub.cfg <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">sudo</span><span> grub-mkconfig</span><span style="color:#ffb964;"> -o</span><span> /boot/grub/grub.cfg
</span></code></pre> </span></code></pre>
<p><strong>图形界面更改方法:</strong></p> <p><strong>图形界面更改方法:</strong></p>
<p>可以使用grub-customizer来修改Grub这里以ubuntu为例子</p> <p>可以使用grub-customizer来修改Grub这里以ubuntu为例子</p>
<ul> <ul>
<li>添加PPA源并更新软件列表</li> <li>添加PPA源并更新软件列表</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo add-apt-repository ppa:danielrichter2007/grub-customizer <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">sudo</span><span> add-apt-repository ppa:danielrichter2007/grub-customizer
</span><span>sudo apt update </span><span style="color:#ffb964;">sudo</span><span> apt update
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>安装GRUB Customizer</li> <li>安装GRUB Customizer</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo apt install grub-customizer <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">sudo</span><span> apt install grub-customizer
</span></code></pre> </span></code></pre>
<p>随后在grub-customizer中将要默认启动的选项放在首位即可。</p> <p>随后在grub-customizer中将要默认启动的选项放在首位即可。</p>
<h2 id="kai-ji-zi-qi-dong">开机自启动</h2> <h2 id="kai-ji-zi-qi-dong">开机自启动</h2>
<p><strong>设置Syncthing开机自启动</strong></p> <p><strong>设置Syncthing开机自启动</strong></p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo systemctl enable --now syncthing@&lt;username&gt;.service <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">sudo</span><span> systemctl enable</span><span style="color:#ffb964;"> --now</span><span> syncthing@&lt;username&gt;.service
</span></code></pre> </span></code></pre>
<p><strong>设置Aria2开机自启动</strong></p> <p><strong>设置Aria2开机自启动</strong></p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>[Unit] <pre data-lang="conf" style="background-color:#151515;color:#e8e8d3;" class="language-conf "><code class="language-conf" data-lang="conf"><span style="color:#8fbfdc;">[Unit]
</span><span>Description=Aria2c - lightweight multi-protocol &amp; multi-source command-line download utility </span><span style="color:#ffb964;">Description</span><span>=Aria2c - lightweight multi-protocol &amp; multi-source command-line download utility
</span><span>After=network.target </span><span style="color:#ffb964;">After</span><span>=network.target
</span><span> </span><span>
</span><span>[Service] </span><span style="color:#8fbfdc;">[Service]
</span><span>User=dich </span><span style="color:#ffb964;">User</span><span>=dich
</span><span>Group=dich </span><span style="color:#ffb964;">Group</span><span>=dich
</span><span>WorkingDirectory=/home/dich </span><span style="color:#ffb964;">WorkingDirectory</span><span>=/home/dich
</span><span>Environment=HOME=/home/dich </span><span style="color:#ffb964;">Environment</span><span>=HOME=/home/dich
</span><span>Environment=USER=dich </span><span style="color:#ffb964;">Environment</span><span>=USER=dich
</span><span>ExecStart=/usr/bin/aria2c --conf-path=/home/dich/.config/aria2/aria2.conf </span><span style="color:#ffb964;">ExecStart</span><span>=/usr/bin/aria2c --conf-path=/home/dich/.config/aria2/aria2.conf
</span><span>Restart=always </span><span style="color:#ffb964;">Restart</span><span>=always
</span><span>NoNewPrivileges=true </span><span style="color:#ffb964;">NoNewPrivileges</span><span>=true
</span><span>PrivateTmp=true </span><span style="color:#ffb964;">PrivateTmp</span><span>=true
</span><span> </span><span>
</span><span>[Install] </span><span style="color:#8fbfdc;">[Install]
</span><span>WantedBy=multi-user.target </span><span style="color:#ffb964;">WantedBy</span><span>=multi-user.target
</span></code></pre> </span></code></pre>
<h2 id="kai-qi-bbr">开启BBR</h2> <h2 id="kai-qi-bbr">开启BBR</h2>
<ul> <ul>
<li>确保你的内核版本 &gt;= 4.9</li> <li>确保你的内核版本 &gt;= 4.9</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>uname -r <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">uname -r
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>启用 BBR</li> <li>启用 BBR</li>
</ul> </ul>
<p>你只需要设置两个 sysctl 参数即可:</p> <p>你只需要设置两个 sysctl 参数即可:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo sysctl -w net.core.default_qdisc=fq <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">sudo</span><span> sysctl</span><span style="color:#ffb964;"> -w</span><span> net.core.default_qdisc=fq
</span><span>sudo sysctl -w net.ipv4.tcp_congestion_control=bbr </span><span style="color:#ffb964;">sudo</span><span> sysctl</span><span style="color:#ffb964;"> -w</span><span> net.ipv4.tcp_congestion_control=bbr
</span></code></pre> </span></code></pre>
<p>要让它们永久生效,把它们写入配置文件:</p> <p>要让它们永久生效,把它们写入配置文件:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo nano /etc/sysctl.d/99-bbr.conf <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">sudo</span><span> nano /etc/sysctl.d/99-bbr.conf
</span></code></pre> </span></code></pre>
<p>加入以下内容:</p> <p>加入以下内容:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>net.core.default_qdisc = fq <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">net.core.default_qdisc</span><span> = fq
</span><span>net.ipv4.tcp_congestion_control = bbr </span><span style="color:#ffb964;">net.ipv4.tcp_congestion_control</span><span> = bbr
</span></code></pre> </span></code></pre>
<p>然后重新加载配置:</p> <p>然后重新加载配置:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo sysctl --system <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">sudo</span><span> sysctl</span><span style="color:#ffb964;"> --system
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>验证 BBR 是否启用</li> <li>验证 BBR 是否启用</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sysctl net.ipv4.tcp_congestion_control <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">sysctl</span><span> net.ipv4.tcp_congestion_control
</span></code></pre> </span></code></pre>
<p>应该输出:</p> <p>应该输出:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>net.ipv4.tcp_congestion_control = bbr <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">net.ipv4.tcp_congestion_control</span><span> = bbr
</span></code></pre> </span></code></pre>
<h2 id="xing-neng-mo-shi-qie-huan">性能模式切换</h2> <h2 id="xing-neng-mo-shi-qie-huan">性能模式切换</h2>
<p>需要安装<code>power-profiles-daemon</code></p> <p>需要安装<code>power-profiles-daemon</code></p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span># 查看可用的电源配置文件profiles <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#888888;"># 查看可用的电源配置文件profiles
</span><span>powerprofilesctl list </span><span style="color:#ffb964;">powerprofilesctl</span><span> list
</span><span> </span><span>
</span><span># 查看当前正在使用的 profile </span><span style="color:#888888;"># 查看当前正在使用的 profile
</span><span>powerprofilesctl get </span><span style="color:#ffb964;">powerprofilesctl</span><span> get
</span><span> </span><span>
</span><span># 切换到“性能”模式 </span><span style="color:#888888;"># 切换到“性能”模式
</span><span>sudo powerprofilesctl set performance </span><span style="color:#ffb964;">sudo</span><span> powerprofilesctl set performance
</span><span> </span><span>
</span><span># 切换到“平衡”模式 </span><span style="color:#888888;"># 切换到“平衡”模式
</span><span>sudo powerprofilesctl set balanced </span><span style="color:#ffb964;">sudo</span><span> powerprofilesctl set balanced
</span><span> </span><span>
</span><span># 切换到“省电”模式 </span><span style="color:#888888;"># 切换到“省电”模式
</span><span>sudo powerprofilesctl set power-saver </span><span style="color:#ffb964;">sudo</span><span> powerprofilesctl set power-saver
</span></code></pre> </span></code></pre>
<h2 id="qi-ta-xing-neng-you-hua">其他性能优化</h2> <h2 id="qi-ta-xing-neng-you-hua">其他性能优化</h2>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>Profilesyncdaemon <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">Profilesyncdaemon
</span><span>将浏览器配置文件和缓存挂载到内存,退出时再写回磁盘: </span><span style="color:#ffb964;">将浏览器配置文件和缓存挂载到内存,退出时再写回磁盘:
</span><span> </span><span>
</span><span>sudo pacman -S profile-sync-daemon </span><span style="color:#ffb964;">sudo</span><span> pacman</span><span style="color:#ffb964;"> -S</span><span> profile-sync-daemon
</span><span>systemctl --user enable --now psd.service </span><span style="color:#ffb964;">systemctl --user</span><span> enable</span><span style="color:#ffb964;"> --now</span><span> psd.service
</span><span> </span><span>
</span><span>Systemdoomd </span><span style="color:#ffb964;">Systemdoomd
</span><span>启用 systemd 自带的内存超载保护守护进程: </span><span style="color:#ffb964;">启用</span><span> systemd 自带的内存超载保护守护进程:
</span><span> </span><span>
</span><span>sudo pacman -S systemd-oomd </span><span style="color:#ffb964;">sudo</span><span> pacman</span><span style="color:#ffb964;"> -S</span><span> systemd-oomd
</span><span>sudo systemctl enable --now systemd-oomd </span><span style="color:#ffb964;">sudo</span><span> systemctl enable</span><span style="color:#ffb964;"> --now</span><span> systemd-oomd
</span><span> </span><span>
</span><span>Bpftune </span><span style="color:#ffb964;">Bpftune
</span><span>加载 BPF 性能调优脚本网络、I/O、调度等 </span><span style="color:#ffb964;">加载</span><span> BPF 性能调优脚本网络、I/O、调度等
</span><span> </span><span>
</span><span>sudo pacman -S bpftune </span><span style="color:#ffb964;">sudo</span><span> pacman</span><span style="color:#ffb964;"> -S</span><span> bpftune
</span><span>sudo systemctl enable --now bpftune </span><span style="color:#ffb964;">sudo</span><span> systemctl enable</span><span style="color:#ffb964;"> --now</span><span> bpftune
</span><span> </span><span>
</span><span>AnanicyCpp </span><span style="color:#ffb964;">AnanicyCpp
</span><span>根据预设规则给游戏、多媒体和后台任务打优先级标签: </span><span style="color:#ffb964;">根据预设规则给游戏、多媒体和后台任务打优先级标签:
</span><span> </span><span>
</span><span>sudo pacman -S ananicy-cpp </span><span style="color:#ffb964;">sudo</span><span> pacman</span><span style="color:#ffb964;"> -S</span><span> ananicy-cpp
</span><span>sudo systemctl enable --now ananicy-cpp </span><span style="color:#ffb964;">sudo</span><span> systemctl enable</span><span style="color:#ffb964;"> --now</span><span> ananicy-cpp
</span></code></pre> </span></code></pre>
<h2 id="chang-yong-ming-ling">常用命令</h2> <h2 id="chang-yong-ming-ling">常用命令</h2>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>更新系统sudo pacman -Syu <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">更新系统sudo</span><span> pacman</span><span style="color:#ffb964;"> -Syu
</span><span> </span><span>
</span><span>重新安装所有软件包sudo pacman -Qq | sudo pacman -S - </span><span style="color:#ffb964;">重新安装所有软件包sudo</span><span> pacman</span><span style="color:#ffb964;"> -Qq </span><span>| </span><span style="color:#ffb964;">sudo</span><span> pacman</span><span style="color:#ffb964;"> -S</span><span> -
</span><span> </span><span>
</span><span>Reset keyrings </span><span style="color:#ffb964;">Reset</span><span> keyrings
</span><span> </span><span>
</span><span>sudo rm -rf /etc/pacman.d/gnupg </span><span style="color:#ffb964;">sudo</span><span> rm</span><span style="color:#ffb964;"> -rf</span><span> /etc/pacman.d/gnupg
</span><span>sudo pacman-key --init </span><span style="color:#ffb964;">sudo</span><span> pacman-key</span><span style="color:#ffb964;"> --init
</span><span>sudo pacman-key --populate archlinux </span><span style="color:#ffb964;">sudo</span><span> pacman-key</span><span style="color:#ffb964;"> --populate</span><span> archlinux
</span><span> </span><span>
</span><span>移除数据库锁sudo rm -f /var/lib/pacman/db.lck </span><span style="color:#ffb964;">移除数据库锁sudo</span><span> rm</span><span style="color:#ffb964;"> -f</span><span> /var/lib/pacman/db.lck
</span><span> </span><span>
</span><span>清理软件包缓存sudo pacman -Sc (或 -Scc 完全清空) </span><span style="color:#ffb964;">清理软件包缓存sudo</span><span> pacman</span><span style="color:#ffb964;"> -Sc</span><span> (或</span><span style="color:#ffb964;"> -Scc</span><span> 完全清空)
</span><span> </span><span>
</span><span>删除孤立软件包sudo pacman -Rns $(pacman -Qtdq) </span><span style="color:#ffb964;">删除孤立软件包sudo</span><span> pacman</span><span style="color:#ffb964;"> -Rns </span><span>$(</span><span style="color:#ffb964;">pacman -Qtdq</span><span>)
</span><span> </span><span>
</span><span>Install Gaming packagessudo pacman -S steam wine lutris dxvk </span><span style="color:#ffb964;">Install</span><span> Gaming packagessudo pacman</span><span style="color:#ffb964;"> -S</span><span> steam wine lutris dxvk
</span><span> </span><span>
</span><span>排序镜像: </span><span style="color:#ffb964;">排序镜像:
</span><span> </span><span>
</span><span>sudo pacman -S reflector </span><span style="color:#ffb964;">sudo</span><span> pacman</span><span style="color:#ffb964;"> -S</span><span> reflector
</span><span>sudo reflector --latest 10 --sort rate --save /etc/pacman.d/mirrorlist </span><span style="color:#ffb964;">sudo</span><span> reflector</span><span style="color:#ffb964;"> --latest</span><span> 10</span><span style="color:#ffb964;"> --sort</span><span> rate</span><span style="color:#ffb964;"> --save</span><span> /etc/pacman.d/mirrorlist
</span><span> </span><span>
</span><span>更改 DNS 服务器:编辑 /etc/systemd/resolved.conf 中的 DNS=1.1.1.1 8.8.8.8,然后 sudo systemctl restart systemd-resolved </span><span style="color:#ffb964;">更改</span><span> DNS 服务器:编辑 /etc/systemd/resolved.conf 中的 DNS=1.1.1.1 8.8.8.8,然后 sudo systemctl restart systemd-resolved
</span></code></pre> </span></code></pre>
<h2 id="zai-arch-linuxshang-an-zhuang-docker">在Arch Linux上安装Docker</h2> <h2 id="zai-arch-linuxshang-an-zhuang-docker">在Arch Linux上安装Docker</h2>
<p>一般推荐在qemu虚拟机中安装这里仅做示例</p> <p>一般推荐在qemu虚拟机中安装这里仅做示例</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo pacman -S docker <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">sudo</span><span> pacman</span><span style="color:#ffb964;"> -S</span><span> docker
</span></code></pre> </span></code></pre>
<p>安装完成后需要启动Docker服务并设置为开机自启</p> <p>安装完成后需要启动Docker服务并设置为开机自启</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo systemctl start docker <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">sudo</span><span> systemctl start docker
</span><span>sudo systemctl enable docker </span><span style="color:#ffb964;">sudo</span><span> systemctl enable docker
</span></code></pre> </span></code></pre>
<p>运行以下命令来验证Docker是否正常工作</p> <p>运行以下命令来验证Docker是否正常工作</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo docker run hello-world <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">sudo</span><span> docker run hello-world
</span></code></pre> </span></code></pre>
<p>默认情况下只有root用户才能运行Docker命令。为了避免每次运行Docker命令时都需要使用sudo可以将当前用户添加到docker组</p> <p>默认情况下只有root用户才能运行Docker命令。为了避免每次运行Docker命令时都需要使用sudo可以将当前用户添加到docker组</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo usermod -aG docker $USER <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">sudo</span><span> usermod</span><span style="color:#ffb964;"> -aG</span><span> docker $</span><span style="color:#ffb964;">USER
</span></code></pre> </span></code></pre>
<p>之后,需要注销并重新登录,或者重启系统以使更改生效。</p> <p>之后,需要注销并重新登录,或者重启系统以使更改生效。</p>
<p>安装Docker Compose</p> <p>安装Docker Compose</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo pacman -S docker-compose <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">sudo</span><span> pacman</span><span style="color:#ffb964;"> -S</span><span> docker-compose
</span></code></pre> </span></code></pre>
<hr /> <hr />
<p><strong>Done.</strong></p> <p><strong>Done.</strong></p>

View File

@@ -261,8 +261,8 @@
<p><strong>编译依赖</strong></p> <p><strong>编译依赖</strong></p>
</li> </li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo apt update <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">sudo</span><span> apt update
</span><span>sudo apt install -y \ </span><span style="color:#ffb964;">sudo</span><span> apt install</span><span style="color:#ffb964;"> -y </span><span>\
</span><span> ack antlr3 asciidoc autoconf automake autopoint binutils bison build-essential \ </span><span> ack antlr3 asciidoc autoconf automake autopoint binutils bison build-essential \
</span><span> bzip2 ccache clang cmake cpio curl device-tree-compiler diffutils diffstat findutils flex gawk \ </span><span> bzip2 ccache clang cmake cpio curl device-tree-compiler diffutils diffstat findutils flex gawk \
</span><span> gcc-multilib g++-multilib git gettext gperf grep haveged help2man intltool \ </span><span> gcc-multilib g++-multilib git gettext gperf grep haveged help2man intltool \
@@ -279,13 +279,13 @@
<ul> <ul>
<li><strong>清理</strong></li> <li><strong>清理</strong></li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo apt autoremove --purge <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">sudo</span><span> apt autoremove</span><span style="color:#ffb964;"> --purge
</span><span>sudo apt clean </span><span style="color:#ffb964;">sudo</span><span> apt clean
</span></code></pre> </span></code></pre>
<ul> <ul>
<li><strong>新建一个用户,用于编译固件(可选)</strong></li> <li><strong>新建一个用户,用于编译固件(可选)</strong></li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>useradd -m openwrt # 新建一个名为 openwrt 的用户 <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">useradd -m</span><span> openwrt </span><span style="color:#888888;"># 新建一个名为 openwrt 的用户
</span></code></pre> </span></code></pre>
<blockquote> <blockquote>
<p>不可以使用Root用户进行编译!!!</p> <p>不可以使用Root用户进行编译!!!</p>
@@ -293,29 +293,29 @@
<ul> <ul>
<li><strong>修改用户默认的 Shell</strong></li> <li><strong>修改用户默认的 Shell</strong></li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>apt install -y sudo <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">apt</span><span> install</span><span style="color:#ffb964;"> -y</span><span> sudo
</span><span>usermod -s /bin/bash openwrt </span><span style="color:#ffb964;">usermod -s</span><span> /bin/bash openwrt
</span></code></pre> </span></code></pre>
<ul> <ul>
<li><strong>切换用户</strong></li> <li><strong>切换用户</strong></li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>su openwrt <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">su</span><span> openwrt
</span><span>cd ~ </span><span>cd </span><span style="color:#ffb964;">~
</span></code></pre> </span></code></pre>
<ul> <ul>
<li><strong>拉取源码,这里用的是 ImmortalWrt 24.10 分支源码:</strong></li> <li><strong>拉取源码,这里用的是 ImmortalWrt 24.10 分支源码:</strong></li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>git clone https://github.com/immortalwrt/immortalwrt.git <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> clone https://github.com/immortalwrt/immortalwrt.git
</span><span>cd immortalwrt </span><span>cd immortalwrt
</span></code></pre> </span></code></pre>
<ul> <ul>
<li><strong>选择分支</strong></li> <li><strong>选择分支</strong></li>
</ul> </ul>
<p>如果你想要编译稳定版(stable),使用</p> <p>如果你想要编译稳定版(stable),使用</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>git checkout xxx #例如git checkout v24.10.2 <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> checkout xxx </span><span style="color:#888888;">#例如git checkout v24.10.2
</span></code></pre> </span></code></pre>
<p>如果你想要编译最新版(snapshot),使用</p> <p>如果你想要编译最新版(snapshot),使用</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>git switch xxx #例如git switch openwrt-24.10 <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> switch xxx </span><span style="color:#888888;">#例如git switch openwrt-24.10
</span></code></pre> </span></code></pre>
<h3 id="mu-lu-shuo-ming">目录说明</h3> <h3 id="mu-lu-shuo-ming">目录说明</h3>
<table><thead><tr><th>名称</th><th>作用</th></tr></thead><tbody> <table><thead><tr><th>名称</th><th>作用</th></tr></thead><tbody>
@@ -339,33 +339,33 @@
<ul> <ul>
<li><strong>添加软件源,可自行添加软件源至 feeds.conf.default 文件</strong></li> <li><strong>添加软件源,可自行添加软件源至 feeds.conf.default 文件</strong></li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>vim feeds.conf.default <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">vim</span><span> feeds.conf.default
</span></code></pre> </span></code></pre>
<p><strong>常用源</strong></p> <p><strong>常用源</strong></p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>src-git kenzo https://github.com/kenzok8/openwrt-packages <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">src-git</span><span> kenzo https://github.com/kenzok8/openwrt-packages
</span><span>src-git small https://github.com/kenzok8/small </span><span style="color:#ffb964;">src-git</span><span> small https://github.com/kenzok8/small
</span><span>src-git haibo https://github.com/haiibo/openwrt-packages </span><span style="color:#ffb964;">src-git</span><span> haibo https://github.com/haiibo/openwrt-packages
</span><span>src-git liuran001 https://github.com/liuran001/openwrt-packages </span><span style="color:#ffb964;">src-git</span><span> liuran001 https://github.com/liuran001/openwrt-packages
</span></code></pre> </span></code></pre>
<p><strong>常用仓库</strong></p> <p><strong>常用仓库</strong></p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>src/gz kwrt_core https://dl.openwrt.ai/releases/24.10/targets/x86/64/6.6.83 <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">src/gz</span><span> kwrt_core https://dl.openwrt.ai/releases/24.10/targets/x86/64/6.6.83
</span><span>src/gz kwrt_base https://dl.openwrt.ai/releases/24.10/packages/x86_64/base </span><span style="color:#ffb964;">src/gz</span><span> kwrt_base https://dl.openwrt.ai/releases/24.10/packages/x86_64/base
</span><span>src/gz kwrt_packages https://dl.openwrt.ai/releases/24.10/packages/x86_64/packages </span><span style="color:#ffb964;">src/gz</span><span> kwrt_packages https://dl.openwrt.ai/releases/24.10/packages/x86_64/packages
</span><span>src/gz kwrt_luci https://dl.openwrt.ai/releases/24.10/packages/x86_64/luci </span><span style="color:#ffb964;">src/gz</span><span> kwrt_luci https://dl.openwrt.ai/releases/24.10/packages/x86_64/luci
</span><span>src/gz kwrt_routing https://dl.openwrt.ai/releases/24.10/packages/x86_64/routing </span><span style="color:#ffb964;">src/gz</span><span> kwrt_routing https://dl.openwrt.ai/releases/24.10/packages/x86_64/routing
</span><span>src/gz kwrt_kiddin9 https://dl.openwrt.ai/releases/24.10/packages/x86_64/kiddin9 </span><span style="color:#ffb964;">src/gz</span><span> kwrt_kiddin9 https://dl.openwrt.ai/releases/24.10/packages/x86_64/kiddin9
</span></code></pre> </span></code></pre>
<ul> <ul>
<li><strong>单独添加</strong>(在更新并安装插件之前执行)例如:</li> <li><strong>单独添加</strong>(在更新并安装插件之前执行)例如:</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>git clone https://github.com/chenmozhijin/turboacc.git <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> clone https://github.com/chenmozhijin/turboacc.git
</span></code></pre> </span></code></pre>
<ul> <ul>
<li><strong>更新并安装插件</strong></li> <li><strong>更新并安装插件</strong></li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>./scripts/feeds clean <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">./scripts/feeds</span><span> clean
</span><span>./scripts/feeds update -a </span><span style="color:#ffb964;">./scripts/feeds</span><span> update</span><span style="color:#ffb964;"> -a
</span><span>./scripts/feeds install -a </span><span style="color:#ffb964;">./scripts/feeds</span><span> install</span><span style="color:#ffb964;"> -a
</span></code></pre> </span></code></pre>
<table><thead><tr><th><code>./scripts/feeds update -a</code></th><th>同步/更新 <strong>外部 feed</strong>packages、luci、routing 等)的 Git 仓库到本地 <code>feeds/</code> 目录</th></tr></thead><tbody> <table><thead><tr><th><code>./scripts/feeds update -a</code></th><th>同步/更新 <strong>外部 feed</strong>packages、luci、routing 等)的 Git 仓库到本地 <code>feeds/</code> 目录</th></tr></thead><tbody>
<tr><td><code>./scripts/feeds install -a</code></td><td>把你在 feeds 里选要用的包 <strong>链接</strong> 到源码树的 <code>package/feeds/</code>,让它们参与编译</td></tr> <tr><td><code>./scripts/feeds install -a</code></td><td>把你在 feeds 里选要用的包 <strong>链接</strong> 到源码树的 <code>package/feeds/</code>,让它们参与编译</td></tr>
@@ -373,59 +373,59 @@
<ul> <ul>
<li><strong>自定义配置</strong></li> <li><strong>自定义配置</strong></li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>#!/usr/bin/env bash <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#888888;">#!/usr/bin/env bash
</span><span># diy-part2.sh — 在镜像生成时注入默认设置和定制 SSH 横幅及模型修复 </span><span style="color:#888888;"># diy-part2.sh — 在镜像生成时注入默认设置和定制 SSH 横幅及模型修复
</span><span> </span><span>
</span><span># 1. 默认 hostname可选 </span><span style="color:#888888;"># 1. 默认 hostname可选
</span><span>sed -i &#39;s/=ImmortalWrt/=my-device/&#39; package/base-files/files/bin/config_generate </span><span style="color:#ffb964;">sed -i </span><span style="color:#556633;">&#39;</span><span style="color:#99ad6a;">s/=ImmortalWrt/=my-device/</span><span style="color:#556633;">&#39;</span><span> package/base-files/files/bin/config_generate
</span><span> </span><span>
</span><span># 2. 默认 IP 地址(可选) </span><span style="color:#888888;"># 2. 默认 IP 地址(可选)
</span><span>sed -i &#39;s/192.168.1.1/192.168.5.1/&#39; package/base-files/files/bin/config_generate </span><span style="color:#ffb964;">sed -i </span><span style="color:#556633;">&#39;</span><span style="color:#99ad6a;">s/192.168.1.1/192.168.5.1/</span><span style="color:#556633;">&#39;</span><span> package/base-files/files/bin/config_generate
</span><span> </span><span>
</span><span># 3. 默认 root 密码(请换成安全密码) </span><span style="color:#888888;"># 3. 默认 root 密码(请换成安全密码)
</span><span>HASH=$(openssl passwd -1 &#39;yourpassword&#39;) </span><span style="color:#ffb964;">HASH</span><span>=</span><span style="color:#99ad6a;">$(</span><span style="color:#ffb964;">openssl</span><span style="color:#99ad6a;"> passwd</span><span style="color:#ffb964;"> -1 </span><span style="color:#556633;">&#39;</span><span style="color:#99ad6a;">yourpassword</span><span style="color:#556633;">&#39;</span><span style="color:#99ad6a;">)
</span><span>sed -i &quot;s|root::0:0:99999|root:${HASH}:0:0:99999|&quot; package/base-files/files/etc/shadow </span><span style="color:#ffb964;">sed -i </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">s|root::0:0:99999|root:${</span><span style="color:#ffb964;">HASH</span><span style="color:#99ad6a;">}:0:0:99999|</span><span style="color:#556633;">&quot;</span><span> package/base-files/files/etc/shadow
</span><span> </span><span>
</span><span># 4. 设置默认 LuCI 主题为 argon内置在 luci feeds </span><span style="color:#888888;"># 4. 设置默认 LuCI 主题为 argon内置在 luci feeds
</span><span>cat &gt;&gt;package/base-files/files/etc/uci-defaults/99_set_theme &lt;&lt;&#39;EOF&#39; </span><span style="color:#ffb964;">cat </span><span>&gt;&gt;package/base-files/files/etc/uci-defaults/99_set_theme </span><span style="color:#99ad6a;">&lt;&lt;</span><span style="color:#556633;">&#39;</span><span style="color:#8fbfdc;">EOF</span><span style="color:#556633;">&#39;
</span><span>uci set luci.main.mediaurlbase=/luci-static/argon </span><span style="color:#99ad6a;">uci set luci.main.mediaurlbase=/luci-static/argon
</span><span>uci commit luci </span><span style="color:#99ad6a;">uci commit luci
</span><span>EOF </span><span style="color:#8fbfdc;">EOF
</span><span>chmod +x package/base-files/files/etc/uci-defaults/99_set_theme </span><span style="color:#ffb964;">chmod</span><span> +x package/base-files/files/etc/uci-defaults/99_set_theme
</span><span> </span><span>
</span><span># 5. 默认加载 BBR 拥塞控制算法 </span><span style="color:#888888;"># 5. 默认加载 BBR 拥塞控制算法
</span><span>mkdir -p package/base-files/files/etc/sysctl.d </span><span style="color:#ffb964;">mkdir -p</span><span> package/base-files/files/etc/sysctl.d
</span><span>cat &gt;&gt;package/base-files/files/etc/sysctl.d/99-bbr.conf &lt;&lt;&#39;EOF&#39; </span><span style="color:#ffb964;">cat </span><span>&gt;&gt;package/base-files/files/etc/sysctl.d/99-bbr.conf </span><span style="color:#99ad6a;">&lt;&lt;</span><span style="color:#556633;">&#39;</span><span style="color:#8fbfdc;">EOF</span><span style="color:#556633;">&#39;
</span><span>net.core.default_qdisc=fq_codel </span><span style="color:#99ad6a;">net.core.default_qdisc=fq_codel
</span><span>net.ipv4.tcp_congestion_control=bbr </span><span style="color:#99ad6a;">net.ipv4.tcp_congestion_control=bbr
</span><span>EOF </span><span style="color:#8fbfdc;">EOF
</span><span> </span><span>
</span><span># 检查BBR: sysctl net.ipv4.tcp_congestion_control </span><span style="color:#888888;"># 检查BBR: sysctl net.ipv4.tcp_congestion_control
</span><span> </span><span>
</span><span># 6. 将默认 shell 修改为 bash </span><span style="color:#888888;"># 6. 将默认 shell 修改为 bash
</span><span>sed -i &quot;s|/bin/ash|/bin/bash|g&quot; package/base-files/files/etc/passwd </span><span style="color:#ffb964;">sed -i </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">s|/bin/ash|/bin/bash|g</span><span style="color:#556633;">&quot;</span><span> package/base-files/files/etc/passwd
</span><span># 请在 .config 中添加 TARGET_PACKAGES += bash </span><span style="color:#888888;"># 请在 .config 中添加 TARGET_PACKAGES += bash
</span><span> </span><span>
</span><span># 7. 自定义 SSH 登录横幅banner </span><span style="color:#888888;"># 7. 自定义 SSH 登录横幅banner
</span><span>mkdir -p package/base-files/files/etc </span><span style="color:#ffb964;">mkdir -p</span><span> package/base-files/files/etc
</span><span>if [ -f &quot;scripts/custom-files/banner.txt&quot; ]; then </span><span style="color:#8fbfdc;">if </span><span>[ </span><span style="color:#ffb964;">-f </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">scripts/custom-files/banner.txt</span><span style="color:#556633;">&quot; </span><span>]; </span><span style="color:#8fbfdc;">then
</span><span> cp scripts/custom-files/banner.txt package/base-files/files/etc/banner </span><span> </span><span style="color:#ffb964;">cp</span><span> scripts/custom-files/banner.txt package/base-files/files/etc/banner
</span><span>else </span><span style="color:#8fbfdc;">else
</span><span> cat &gt;package/base-files/files/etc/banner &lt;&lt;&#39;EOF&#39; </span><span> </span><span style="color:#ffb964;">cat </span><span>&gt;package/base-files/files/etc/banner </span><span style="color:#99ad6a;">&lt;&lt;</span><span style="color:#556633;">&#39;</span><span style="color:#8fbfdc;">EOF</span><span style="color:#556633;">&#39;
</span><span>Welcome to MyDevice (ImmortalWrt)\n </span><span style="color:#99ad6a;">Welcome to MyDevice (ImmortalWrt)\n
</span><span>EOF </span><span style="color:#8fbfdc;">EOF
</span><span>fi </span><span style="color:#8fbfdc;">fi
</span><span> </span><span>
</span><span># 8. 自定义 LuCI 概览设备型号 🛠 </span><span style="color:#888888;"># 8. 自定义 LuCI 概览设备型号 🛠
</span><span># 通过 uci-defaults 脚本写入 /tmp/sysinfo/model </span><span style="color:#888888;"># 通过 uci-defaults 脚本写入 /tmp/sysinfo/model
</span><span>cat &gt;&gt;package/base-files/files/etc/uci-defaults/99-model-fix &lt;&lt;&#39;EOF&#39; </span><span style="color:#ffb964;">cat </span><span>&gt;&gt;package/base-files/files/etc/uci-defaults/99-model-fix </span><span style="color:#99ad6a;">&lt;&lt;</span><span style="color:#556633;">&#39;</span><span style="color:#8fbfdc;">EOF</span><span style="color:#556633;">&#39;
</span><span>#!/bin/sh </span><span style="color:#99ad6a;">#!/bin/sh
</span><span># 设置自定义设备型号 </span><span style="color:#99ad6a;"># 设置自定义设备型号
</span><span>mkdir -p /tmp/sysinfo </span><span style="color:#99ad6a;">mkdir -p /tmp/sysinfo
</span><span>echo &quot;Your Router Model&quot; &gt; /tmp/sysinfo/model </span><span style="color:#99ad6a;">echo &quot;Your Router Model&quot; &gt; /tmp/sysinfo/model
</span><span>exit 0 </span><span style="color:#99ad6a;">exit 0
</span><span>EOF </span><span style="color:#8fbfdc;">EOF
</span><span>chmod +x package/base-files/files/etc/uci-defaults/99-model-fix </span><span style="color:#ffb964;">chmod</span><span> +x package/base-files/files/etc/uci-defaults/99-model-fix
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>执行 <strong>make menuconfig</strong> 命令进入编译菜单。</li> <li>执行 <strong>make menuconfig</strong> 命令进入编译菜单。</li>
@@ -436,74 +436,74 @@
<tr><td><code>make defconfig</code></td><td>忽略当前 <code>.config</code>,直接加载架构/板级目录下的默认配置(<code>defconfig</code></td><td>一键生成官方/平台推荐的「干净」配置</td><td>想重置到官方默认或重新开始时</td></tr> <tr><td><code>make defconfig</code></td><td>忽略当前 <code>.config</code>,直接加载架构/板级目录下的默认配置(<code>defconfig</code></td><td>一键生成官方/平台推荐的「干净」配置</td><td>想重置到官方默认或重新开始时</td></tr>
</tbody></table> </tbody></table>
<h3 id="bian-yi-pei-zhi-cai-dan-shuo-ming-bu-fen"><strong>编译配置菜单说明(部分)</strong></h3> <h3 id="bian-yi-pei-zhi-cai-dan-shuo-ming-bu-fen"><strong>编译配置菜单说明(部分)</strong></h3>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>Target System (x86) # 选择目标平台 <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">Target</span><span> System (x86) </span><span style="color:#888888;"># 选择目标平台
</span><span>└── Subtarget (x86_64) # 选择 64-bit 子架构 </span><span style="color:#ffb964;">└──</span><span> Subtarget (x86_64) </span><span style="color:#888888;"># 选择 64-bit 子架构
</span><span> └── Target Profile (Generic) # “Generic” 表示通用 x86_64 设备 </span><span> </span><span style="color:#ffb964;">└──</span><span> Target Profile (Generic) </span><span style="color:#888888;"># “Generic” 表示通用 x86_64 设备
</span><span> └── Target Images # 固件镜像设置 </span><span> </span><span style="color:#ffb964;">└──</span><span> Target Images </span><span style="color:#888888;"># 固件镜像设置
</span><span> ├── ramdisk # 可选内存盘镜像 </span><span> </span><span style="color:#ffb964;">├──</span><span> ramdisk </span><span style="color:#888888;"># 可选内存盘镜像
</span><span> │ ├── Compression # 压缩类型(如 none 表示无压缩) </span><span> </span><span style="color:#ffb964;"></span><span> ├── Compression </span><span style="color:#888888;"># 压缩类型(如 none 表示无压缩)
</span><span> │ ├── Root filesystem archives # 压缩存档cpio.gz 或 tar.gz </span><span> </span><span style="color:#ffb964;"></span><span> ├── Root filesystem archives </span><span style="color:#888888;"># 压缩存档cpio.gz 或 tar.gz
</span><span> │ └── Root filesystem images # 文件系统镜像ext4、squashfs、Gzip </span><span> </span><span style="color:#ffb964;"></span><span> └── Root filesystem images </span><span style="color:#888888;"># 文件系统镜像ext4、squashfs、Gzip
</span><span> └── Image Options # 镜像选项 </span><span> </span><span style="color:#ffb964;">└──</span><span> Image Options </span><span style="color:#888888;"># 镜像选项
</span><span> ├── Kernel partition size # 内核分配分区大小 </span><span> </span><span style="color:#ffb964;">├──</span><span> Kernel partition size </span><span style="color:#888888;"># 内核分配分区大小
</span><span> ├── Root filesystem partition size # 根文件系统分区大小 </span><span> </span><span style="color:#ffb964;">├──</span><span> Root filesystem partition size </span><span style="color:#888888;"># 根文件系统分区大小
</span><span> └── Make /var persistent # 是否保留 /var 持久化 </span><span> </span><span style="color:#ffb964;">└──</span><span> Make /var persistent </span><span style="color:#888888;"># 是否保留 /var 持久化
</span><span> </span><span>
</span><span>Global build settings # 全局构建设置 </span><span style="color:#ffb964;">Global</span><span> build settings </span><span style="color:#888888;"># 全局构建设置
</span><span>Advanced configuration options (for developers) # 开发者高级选项 </span><span style="color:#ffb964;">Advanced</span><span> configuration options (for developers) </span><span style="color:#888888;"># 开发者高级选项
</span><span>Build the OpenWrt Image Builder # 编译镜像构建器 </span><span style="color:#ffb964;">Build</span><span> the OpenWrt Image Builder </span><span style="color:#888888;"># 编译镜像构建器
</span><span>Build the OpenWrt SDK # 构建交叉编译 SDK </span><span style="color:#ffb964;">Build</span><span> the OpenWrt SDK </span><span style="color:#888888;"># 构建交叉编译 SDK
</span><span>Package the OpenWrtbased Toolchain # 打包 OpenWrt 工具链 </span><span style="color:#ffb964;">Package</span><span> the OpenWrtbased Toolchain </span><span style="color:#888888;"># 打包 OpenWrt 工具链
</span><span>Image configuration # 镜像总体配置页面 </span><span style="color:#ffb964;">Image</span><span> configuration </span><span style="color:#888888;"># 镜像总体配置页面
</span><span> </span><span>
</span><span>Base system # 系统基础组件 </span><span style="color:#ffb964;">Base</span><span> system </span><span style="color:#888888;"># 系统基础组件
</span><span>Administration # 管理工具(如 ssh、管理员脚本 </span><span style="color:#ffb964;">Administration </span><span style="color:#888888;"># 管理工具(如 ssh、管理员脚本
</span><span>Boot Loaders # 引导程序(如 grub、syslinux </span><span style="color:#ffb964;">Boot</span><span> Loaders </span><span style="color:#888888;"># 引导程序(如 grub、syslinux
</span><span>Development # 编译/调试辅助工具 </span><span style="color:#ffb964;">Development </span><span style="color:#888888;"># 编译/调试辅助工具
</span><span>Extra packages # 附加应用(如 wget、curl </span><span style="color:#ffb964;">Extra</span><span> packages </span><span style="color:#888888;"># 附加应用(如 wget、curl
</span><span>Firmware # 固件工具 </span><span style="color:#ffb964;">Firmware </span><span style="color:#888888;"># 固件工具
</span><span>Fonts # 字体支持 </span><span style="color:#ffb964;">Fonts </span><span style="color:#888888;"># 字体支持
</span><span>Kernel modules # x86 内核模块驱动 </span><span style="color:#ffb964;">Kernel</span><span> modules </span><span style="color:#888888;"># x86 内核模块驱动
</span><span>Languages # 编程语言包(如 Python3、Node.js </span><span style="color:#ffb964;">Languages </span><span style="color:#888888;"># 编程语言包(如 Python3、Node.js
</span><span>Libraries # 系统库依赖 </span><span style="color:#ffb964;">Libraries </span><span style="color:#888888;"># 系统库依赖
</span><span>LuCI # Web UI 前端 </span><span style="color:#ffb964;">LuCI </span><span style="color:#888888;"># Web UI 前端
</span><span>└── Collections </span><span style="color:#ffb964;">└──</span><span> Collections
</span><span>└── Modules </span><span style="color:#ffb964;">└──</span><span> Modules
</span><span>└── Applications </span><span style="color:#ffb964;">└──</span><span> Applications
</span><span>└── Themes </span><span style="color:#ffb964;">└──</span><span> Themes
</span><span>└── Protocols </span><span style="color:#ffb964;">└──</span><span> Protocols
</span><span>└── Libraries </span><span style="color:#ffb964;">└──</span><span> Libraries
</span><span>└── defaultsettings </span><span style="color:#ffb964;">└──</span><span> defaultsettings
</span><span> </span><span>
</span><span>Mail # 邮件客户端 </span><span style="color:#ffb964;">Mail </span><span style="color:#888888;"># 邮件客户端
</span><span>Multimedia # 媒体工具(如 ffmpeg </span><span style="color:#ffb964;">Multimedia </span><span style="color:#888888;"># 媒体工具(如 ffmpeg
</span><span>Network # 网络功能(如 openvpn、wireguard </span><span style="color:#ffb964;">Network </span><span style="color:#888888;"># 网络功能(如 openvpn、wireguard
</span><span>Sound # 音频相关软件 </span><span style="color:#ffb964;">Sound </span><span style="color:#888888;"># 音频相关软件
</span><span>Utilities # 常用实用程序(如 vim、htop </span><span style="color:#ffb964;">Utilities </span><span style="color:#888888;"># 常用实用程序(如 vim、htop
</span><span>Xorg # 桌面环境支持X11 图形系统) </span><span style="color:#ffb964;">Xorg </span><span style="color:#888888;"># 桌面环境支持X11 图形系统)
</span><span> </span><span>
</span></code></pre> </span></code></pre>
<ul> <ul>
<li><strong>预下载编译所需的软件包</strong></li> <li><strong>预下载编译所需的软件包</strong></li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>make download -j8 <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">make</span><span> download</span><span style="color:#ffb964;"> -j8
</span></code></pre> </span></code></pre>
<ul> <ul>
<li><strong>检查文件完整性</strong></li> <li><strong>检查文件完整性</strong></li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>find dl -size -1024c -exec ls -l {} \; <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">find</span><span> dl</span><span style="color:#ffb964;"> -size -1024c -exec</span><span> ls</span><span style="color:#ffb964;"> -l </span><span>{} \;
</span></code></pre> </span></code></pre>
<p>检查文件完整性命令可以列出下载不完整的文件小于1k的文件属于下载不完整如果存在则用下面的命令删除然后重新下载编译所需的软件包再次检查.确认所有文件完整可大大提高编译成功率,避免浪费时间</p> <p>检查文件完整性命令可以列出下载不完整的文件小于1k的文件属于下载不完整如果存在则用下面的命令删除然后重新下载编译所需的软件包再次检查.确认所有文件完整可大大提高编译成功率,避免浪费时间</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>find dl -size -1024c -exec rm -f {} \; <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">find</span><span> dl</span><span style="color:#ffb964;"> -size -1024c -exec</span><span> rm</span><span style="color:#ffb964;"> -f </span><span>{} \;
</span></code></pre> </span></code></pre>
<ul> <ul>
<li><strong>最后编译固件(-j 后面是线程数首次编译推荐用单线程编译完成后输出路径是bin/targets.</strong></li> <li><strong>最后编译固件(-j 后面是线程数首次编译推荐用单线程编译完成后输出路径是bin/targets.</strong></li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>make V=s -j1 <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">make</span><span> V=s</span><span style="color:#ffb964;"> -j1
</span><span> </span><span>
</span><span>或者使用 make world -j1 V=s 2&gt;&amp;1 | tee world_debug.log </span><span style="color:#ffb964;">或者使用</span><span> make world</span><span style="color:#ffb964;"> -j1</span><span> V=s </span><span style="color:#cf6a4c;">2</span><span>&gt;&amp;</span><span style="color:#cf6a4c;">1 </span><span>| </span><span style="color:#ffb964;">tee</span><span> world_debug.log
</span><span> </span><span>
</span><span>如果报错可查看 grep -E &quot;(error|fatal|Cannot install package)&quot; world_debug.log -n </span><span style="color:#ffb964;">如果报错可查看</span><span> grep</span><span style="color:#ffb964;"> -E </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">(error|fatal|Cannot install package)</span><span style="color:#556633;">&quot;</span><span> world_debug.log</span><span style="color:#ffb964;"> -n
</span></code></pre> </span></code></pre>
<table><thead><tr><th>make层级</th><th>目录示例</th><th>说明</th></tr></thead><tbody> <table><thead><tr><th>make层级</th><th>目录示例</th><th>说明</th></tr></thead><tbody>
<tr><td>make[1]</td><td>顶层 Makefile</td><td>解析依赖,调度模块</td></tr> <tr><td>make[1]</td><td>顶层 Makefile</td><td>解析依赖,调度模块</td></tr>
@@ -523,8 +523,8 @@
<tr><td><code>make distclean</code></td><td>删除 <code>make dirclean</code> 的所有内容 + feeds 下载文件 + <code>.config</code>、patch 等所有状态</td><td>只有源码目录保持不变</td><td>专用于回到一个“零配置、重做一切”的状态,完全从头开始构建。</td></tr> <tr><td><code>make distclean</code></td><td>删除 <code>make dirclean</code> 的所有内容 + feeds 下载文件 + <code>.config</code>、patch 等所有状态</td><td>只有源码目录保持不变</td><td>专用于回到一个“零配置、重做一切”的状态,完全从头开始构建。</td></tr>
</tbody></table> </tbody></table>
<p>恢复所有修改(包括未跟踪文件):</p> <p>恢复所有修改(包括未跟踪文件):</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>git clean -fd <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> clean</span><span style="color:#ffb964;"> -fd
</span><span>git restore --source=v24.10.2 --staged --worktree . </span><span style="color:#ffb964;">git</span><span> restore</span><span style="color:#ffb964;"> --source</span><span>=v24.10.2</span><span style="color:#ffb964;"> --staged --worktree</span><span> .
</span></code></pre> </span></code></pre>
<h2 id="dwrt-fang-an">Dwrt 方案</h2> <h2 id="dwrt-fang-an">Dwrt 方案</h2>
<table><thead><tr><th>作用</th><th>组件</th></tr></thead><tbody> <table><thead><tr><th>作用</th><th>组件</th></tr></thead><tbody>
@@ -544,67 +544,67 @@
</tbody></table> </tbody></table>
<p>要启用的软件包:</p> <p>要启用的软件包:</p>
<p><strong>base</strong></p> <p><strong>base</strong></p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>autocore base-files bash block-mount ca-bundle coremark curl dnsmasq-full dropbear ds-lite e2fsprogs fdisk firewall4 fstools grub2-bios-setup htop kmod-8139cp kmod-8139too kmod-amazon-ena kmod-amd-xgbe kmod-atlantic kmod-bnx2 kmod-bnx2x kmod-button-hotplug kmod-drm-amdgpu kmod-drm-i915 kmod-dwmac-intel kmod-e1000 kmod-e1000e kmod-forcedeth kmod-fs-f2fs kmod-fs-vfat kmod-i40e kmod-iavf kmod-igb kmod-igbvf kmod-igc kmod-ixgbe kmod-ixgbevf kmod-lib-zstd kmod-mlx4-core kmod-mlx5-core kmod-mmc kmod-pcnet32 kmod-phy-broadcom kmod-r8101 kmod-r8125 kmod-r8126 kmod-r8168 kmod-sdhci kmod-tcp-bbr kmod-tg3 kmod-tulip kmod-usb-hid kmod-vmxnet3 libc libgcc libustream-mbedtls lm-sensors-detect logd lsblk luci-app-fan luci-app-filemanager luci-app-firewall luci-app-log-viewer luci-app-package-manager luci-app-syscontrol luci-app-upnp luci-base luci-compat luci-lib-fs luci-lib-ipkg mkf2fs mtd nano netifd odhcp6c odhcpd-ipv6only openssh-sftp-server opkg partx-utils pciutils ppp ppp-mod-pppoe resolveip swconfig uci uclient-fetch urandom-seed urngd usbutils wget-ssl zram-swap <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">autocore</span><span> base-files bash block-mount ca-bundle coremark curl dnsmasq-full dropbear ds-lite e2fsprogs fdisk firewall4 fstools grub2-bios-setup htop kmod-8139cp kmod-8139too kmod-amazon-ena kmod-amd-xgbe kmod-atlantic kmod-bnx2 kmod-bnx2x kmod-button-hotplug kmod-drm-amdgpu kmod-drm-i915 kmod-dwmac-intel kmod-e1000 kmod-e1000e kmod-forcedeth kmod-fs-f2fs kmod-fs-vfat kmod-i40e kmod-iavf kmod-igb kmod-igbvf kmod-igc kmod-ixgbe kmod-ixgbevf kmod-lib-zstd kmod-mlx4-core kmod-mlx5-core kmod-mmc kmod-pcnet32 kmod-phy-broadcom kmod-r8101 kmod-r8125 kmod-r8126 kmod-r8168 kmod-sdhci kmod-tcp-bbr kmod-tg3 kmod-tulip kmod-usb-hid kmod-vmxnet3 libc libgcc libustream-mbedtls lm-sensors-detect logd lsblk luci-app-fan luci-app-filemanager luci-app-firewall luci-app-log-viewer luci-app-package-manager luci-app-syscontrol luci-app-upnp luci-base luci-compat luci-lib-fs luci-lib-ipkg mkf2fs mtd nano netifd odhcp6c odhcpd-ipv6only openssh-sftp-server opkg partx-utils pciutils ppp ppp-mod-pppoe resolveip swconfig uci uclient-fetch urandom-seed urngd usbutils wget-ssl zram-swap
</span></code></pre> </span></code></pre>
<p><strong>cli</strong></p> <p><strong>cli</strong></p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>btop iperf3 tcpdump <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">btop</span><span> iperf3 tcpdump
</span></code></pre> </span></code></pre>
<p><strong>luci</strong></p> <p><strong>luci</strong></p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>luci-app-argon luci-app-upnp luci-app-ttyd luci-app-eqosplus luci-app-timecontrol luci-app-parentcontrol luci-app-homeproxy luci-app-daed <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">luci-app-argon</span><span> luci-app-upnp luci-app-ttyd luci-app-eqosplus luci-app-timecontrol luci-app-parentcontrol luci-app-homeproxy luci-app-daed
</span></code></pre> </span></code></pre>
<p><strong>lib</strong></p> <p><strong>lib</strong></p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>kmod-ipt-conntrack kmod-ipt-nat kmod-nft-compat kmod-ipt-fullconenat kmod-ip6tables ca-certificates <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">kmod-ipt-conntrack</span><span> kmod-ipt-nat kmod-nft-compat kmod-ipt-fullconenat kmod-ip6tables ca-certificates
</span></code></pre> </span></code></pre>
<h2 id="shi-yong-sdkkuai-su-bian-yi-bao">使用SDK快速编译包</h2> <h2 id="shi-yong-sdkkuai-su-bian-yi-bao">使用SDK快速编译包</h2>
<p>首先新建一个文件夹并将SDK克隆下来</p> <p>首先新建一个文件夹并将SDK克隆下来</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>mkdir imwrt-sdk <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">mkdir</span><span> imwrt-sdk
</span><span>cd ./imwrt-sdk </span><span>cd ./imwrt-sdk
</span><span>wget https://downloads.immortalwrt.org/snapshots/targets/mediatek/filogic/immortalwrt-sdk-mediatek-filogic_gcc-14.3.0_musl.Linux-x86_64.tar.zst </span><span style="color:#ffb964;">wget</span><span> https://downloads.immortalwrt.org/snapshots/targets/mediatek/filogic/immortalwrt-sdk-mediatek-filogic_gcc-14.3.0_musl.Linux-x86_64.tar.zst
</span></code></pre> </span></code></pre>
<p>新版本的SDK使用ZSTD压缩因此解压的命令为</p> <p>新版本的SDK使用ZSTD压缩因此解压的命令为</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>tar -I zstd -xvf ./immortalwrt-sdk-mediatek-filogic_gcc-14.3.0_musl.Linux-x86_64.tar.zst <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">tar -I</span><span> zstd</span><span style="color:#ffb964;"> -xvf</span><span> ./immortalwrt-sdk-mediatek-filogic_gcc-14.3.0_musl.Linux-x86_64.tar.zst
</span></code></pre> </span></code></pre>
<p>随后进入该目录并和一般流程一样更新Feeds</p> <p>随后进入该目录并和一般流程一样更新Feeds</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>cd ./immortalwrt-sdk-mediatek-filogic_gcc-14.3.0_musl.Linux-x86_64/ <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span>cd ./immortalwrt-sdk-mediatek-filogic_gcc-14.3.0_musl.Linux-x86_64/
</span><span>./scripts/feeds update -a </span><span style="color:#ffb964;">./scripts/feeds</span><span> update</span><span style="color:#ffb964;"> -a
</span><span>./scripts/feeds install -a </span><span style="color:#ffb964;">./scripts/feeds</span><span> install</span><span style="color:#ffb964;"> -a
</span></code></pre> </span></code></pre>
<p>更新完成后克隆你要编译的包的源码到package下</p> <p>更新完成后克隆你要编译的包的源码到package下</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>cd ./package/ <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span>cd ./package/
</span><span>git clone https://github.com/Dichgrem/luci-app-nyn.git </span><span style="color:#ffb964;">git</span><span> clone https://github.com/Dichgrem/luci-app-nyn.git
</span><span>cp ./luci-app-nyn/luci-app-zzz ./ </span><span style="color:#ffb964;">cp</span><span> ./luci-app-nyn/luci-app-zzz ./
</span><span>cp ./luci-app-nyn/zzz ./ </span><span style="color:#ffb964;">cp</span><span> ./luci-app-nyn/zzz ./
</span><span>rm -rf ./luci-app-nyn </span><span style="color:#ffb964;">rm -rf</span><span> ./luci-app-nyn
</span><span>cd ../ </span><span>cd ../
</span></code></pre> </span></code></pre>
<p>随后开始编译编译结果在对应架构的base目录下</p> <p>随后开始编译编译结果在对应架构的base目录下</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>make package/luci-app-zzz/compile V=s <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">make</span><span> package/luci-app-zzz/compile V=s
</span><span> </span><span>
</span><span>~/imwrt-sdk/immortalwrt-sdk-24.10.3-x86-64_gcc-13.3.0_musl.Linux-x86_64 dich@uos </span><span style="color:#ffb964;">~/imwrt-sdk/immortalwrt-sdk-24.10.3-x86-64_gcc-13.3.0_musl.Linux-x86_64</span><span> dich@uos
</span><span> find ./ -name &quot;zzz*.ipk&quot; </span><span style="color:#ffb964;"></span><span> find ./</span><span style="color:#ffb964;"> -name </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">zzz*.ipk</span><span style="color:#556633;">&quot;
</span><span>./bin/packages/x86_64/base/zzz_0.1.1-r1_x86_64.ipk </span><span style="color:#ffb964;">./bin/packages/x86_64/base/zzz_0.1.1-r1_x86_64.ipk
</span></code></pre> </span></code></pre>
<h2 id="chang-yong-ming-ling">常用命令:</h2> <h2 id="chang-yong-ming-ling">常用命令:</h2>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span># 更新软件列表 <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#888888;"># 更新软件列表
</span><span>opkg update </span><span style="color:#ffb964;">opkg</span><span> update
</span><span> </span><span>
</span><span># 更新所有 LUCI 插件 </span><span style="color:#888888;"># 更新所有 LUCI 插件
</span><span>opkg list-upgradable | grep luci- | cut -f 1 -d &#39; &#39; | xargs opkg upgrade </span><span style="color:#ffb964;">opkg</span><span> list-upgradable | </span><span style="color:#ffb964;">grep</span><span> luci- | </span><span style="color:#ffb964;">cut -f</span><span> 1</span><span style="color:#ffb964;"> -d </span><span style="color:#556633;">&#39; &#39; </span><span>| </span><span style="color:#ffb964;">xargs</span><span> opkg upgrade
</span><span> </span><span>
</span><span># 如果要更新所有软件,包括 OpenWRT 内核、固件等 </span><span style="color:#888888;"># 如果要更新所有软件,包括 OpenWRT 内核、固件等
</span><span>opkg list-upgradable | cut -f 1 -d &#39; &#39; | xargs opkg upgrade </span><span style="color:#ffb964;">opkg</span><span> list-upgradable | </span><span style="color:#ffb964;">cut -f</span><span> 1</span><span style="color:#ffb964;"> -d </span><span style="color:#556633;">&#39; &#39; </span><span>| </span><span style="color:#ffb964;">xargs</span><span> opkg upgrade
</span><span> </span><span>
</span><span># 固件版本号 </span><span style="color:#888888;"># 固件版本号
</span><span>vim /etc/os-release </span><span style="color:#ffb964;">vim</span><span> /etc/os-release
</span><span> </span><span>
</span><span># 脚本&amp;脚注 </span><span style="color:#888888;"># 脚本&amp;脚注
</span><span>vim /etc/openwrt_release </span><span style="color:#ffb964;">vim</span><span> /etc/openwrt_release
</span><span> </span><span>
</span><span># ASCII字符画 </span><span style="color:#888888;"># ASCII字符画
</span><span>vim /etc/banner </span><span style="color:#ffb964;">vim</span><span> /etc/banner
</span><span> </span><span>
</span><span># 登录脚本显示 </span><span style="color:#888888;"># 登录脚本显示
</span><span>vim /etc/profile </span><span style="color:#ffb964;">vim</span><span> /etc/profile
</span></code></pre> </span></code></pre>
<h2 id="chang-yong-ke-xue-cha-jian">常用科学插件</h2> <h2 id="chang-yong-ke-xue-cha-jian">常用科学插件</h2>
<table><thead><tr><th>特性</th><th>HomeProxy</th><th>OpenClash</th><th>Passwall</th><th>ShellClash</th></tr></thead><tbody> <table><thead><tr><th>特性</th><th>HomeProxy</th><th>OpenClash</th><th>Passwall</th><th>ShellClash</th></tr></thead><tbody>

View File

@@ -164,19 +164,19 @@
<p>4.浏览器打开 PVE 地址进入系统后我们需要给PVE换源。</p> <p>4.浏览器打开 PVE 地址进入系统后我们需要给PVE换源。</p>
<h2 id="huan-yuan">换源</h2> <h2 id="huan-yuan">换源</h2>
<p><strong>禁用 Ceph 企业仓库:</strong></p> <p><strong>禁用 Ceph 企业仓库:</strong></p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>nano /etc/apt/sources.list.d/ceph.list <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">nano</span><span> /etc/apt/sources.list.d/ceph.list
</span></code></pre> </span></code></pre>
<p>将文件内容注释掉或删除。</p> <p>将文件内容注释掉或删除。</p>
<p><strong>编辑仓库源文件:</strong></p> <p><strong>编辑仓库源文件:</strong></p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>nano /etc/apt/sources.list.d/pve-enterprise.list <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">nano</span><span> /etc/apt/sources.list.d/pve-enterprise.list
</span></code></pre> </span></code></pre>
<p>将文件内容注释掉或删除;</p> <p>将文件内容注释掉或删除;</p>
<p><strong>启用社区仓库:</strong></p> <p><strong>启用社区仓库:</strong></p>
<p>确保社区仓库已启用。编辑社区仓库文件:</p> <p>确保社区仓库已启用。编辑社区仓库文件:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>nano /etc/apt/sources.list.d/pve-no-subscription.list <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">nano</span><span> /etc/apt/sources.list.d/pve-no-subscription.list
</span></code></pre> </span></code></pre>
<p>确保文件内容如下:</p> <p>确保文件内容如下:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>deb http://download.proxmox.com/debian/pve bookworm pve-no-subscription <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">deb</span><span> http://download.proxmox.com/debian/pve bookworm pve-no-subscription
</span></code></pre> </span></code></pre>
<h2 id="er-xin-jian-xu-ni-ji-bing-an-zhuang-debian">二.新建虚拟机并安装Debian</h2> <h2 id="er-xin-jian-xu-ni-ji-bing-an-zhuang-debian">二.新建虚拟机并安装Debian</h2>
<p>1.找到 local-btrfs(pve),在其中的 ISO 中上传下载好的 Debian 镜像;</p> <p>1.找到 local-btrfs(pve),在其中的 ISO 中上传下载好的 Debian 镜像;</p>
@@ -189,10 +189,10 @@
<p>我们选择清华源速度较快。注意Debian 安装时默认开启安全源,这个源是国外的所以下载速度极慢,因此还需要修改配置文件。</p> <p>我们选择清华源速度较快。注意Debian 安装时默认开启安全源,这个源是国外的所以下载速度极慢,因此还需要修改配置文件。</p>
<p>在安装步骤进入到选择安装的桌面环境和软件时, 键入 Ctrl+Alt+F2 可以看到从图形界面转到了tty命令终端, 键入 Enter <p>在安装步骤进入到选择安装的桌面环境和软件时, 键入 Ctrl+Alt+F2 可以看到从图形界面转到了tty命令终端, 键入 Enter
这里修改软件源配置文件</p> 这里修改软件源配置文件</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>nano /target/etc/apt/sources.list <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">nano</span><span> /target/etc/apt/sources.list
</span></code></pre> </span></code></pre>
<p>修改debian-security源地址  <code>http://mirrors.ustc.edu.cn </code> 目测最快</p> <p>修改debian-security源地址  <code>http://mirrors.ustc.edu.cn </code> 目测最快</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>deb http://mirrors.ustc.edu.cn/debian-security bullseye-security main <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">deb</span><span> http://mirrors.ustc.edu.cn/debian-security bullseye-security main
</span></code></pre> </span></code></pre>
<p>修改后 Ctrl+X 退出保存,然后退出终端重新进入界面继续安装,键入 Ctrl+Alt+F5。</p> <p>修改后 Ctrl+X 退出保存,然后退出终端重新进入界面继续安装,键入 Ctrl+Alt+F5。</p>
<p>下载需要一些时间,此时可以饮口茶先,随后看到如下界面:</p> <p>下载需要一些时间,此时可以饮口茶先,随后看到如下界面:</p>
@@ -214,11 +214,11 @@
<p><code>java -version</code></p> <p><code>java -version</code></p>
<p><strong>3.端口开发</strong>,面板需要 23333和24444 端口,游戏服务器默认端口是 25565。</p> <p><strong>3.端口开发</strong>,面板需要 23333和24444 端口,游戏服务器默认端口是 25565。</p>
<p>在 PVE-防火墙中打开它们。如果还是不行,执行如下命令:</p> <p>在 PVE-防火墙中打开它们。如果还是不行,执行如下命令:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>systemctl stop firewalld <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">systemctl</span><span> stop firewalld
</span><span> </span><span>
</span><span>systemctl disable firewalld </span><span style="color:#ffb964;">systemctl</span><span> disable firewalld
</span><span> </span><span>
</span><span>service iptables stop </span><span style="color:#ffb964;">service</span><span> iptables stop
</span></code></pre> </span></code></pre>
<p>从而关闭防火墙。</p> <p>从而关闭防火墙。</p>
<p><strong>4.安装面板</strong>,这里使用一键安装命令(注意该脚本仅适用于 AMD64 架构)</p> <p><strong>4.安装面板</strong>,这里使用一键安装命令(注意该脚本仅适用于 AMD64 架构)</p>

View File

@@ -141,89 +141,89 @@
<ul> <ul>
<li>Waydroid必须使用Wayland用此命令检查当前系统是否为Wayland</li> <li>Waydroid必须使用Wayland用此命令检查当前系统是否为Wayland</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>echo $XDG_SESSION_TYPE <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span>echo $</span><span style="color:#ffb964;">XDG_SESSION_TYPE
</span></code></pre> </span></code></pre>
<p>若显示X11代表不是Wayland。GNOME和KDE可在登入画面切换至Wayland工作阶段。</p> <p>若显示X11代表不是Wayland。GNOME和KDE可在登入画面切换至Wayland工作阶段。</p>
<ul> <ul>
<li>Waydroid要求Linux核心支持binder核心模组但Arch Linux预设的linux核心並无开启此选项因此需要从AUR安装binder_linux-dkms补齐。</li> <li>Waydroid要求Linux核心支持binder核心模组但Arch Linux预设的linux核心並无开启此选项因此需要从AUR安装binder_linux-dkms补齐。</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>paru -S binder_linux-dkms <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">paru -S</span><span> binder_linux-dkms
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>安装后载入binder核心模组</li> <li>安装后载入binder核心模组</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo modprobe binder-linux devices=binder,hwbinder,vndbinder <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">sudo</span><span> modprobe binder-linux devices=binder,hwbinder,vndbinder
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>设定开机自动载入核心模组</li> <li>设定开机自动载入核心模组</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>echo &quot;binder_linux&quot; | sudo tee -a /etc/modules-load.d/binder_linux.conf <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span>echo </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">binder_linux</span><span style="color:#556633;">&quot; </span><span>| </span><span style="color:#ffb964;">sudo</span><span> tee</span><span style="color:#ffb964;"> -a</span><span> /etc/modules-load.d/binder_linux.conf
</span><span> </span><span>
</span><span>echo &quot;options binder_linux devices=binder,hwbinder,vndbinder&quot; | sudo tee -a /etc/modprobe.d/binder_linux.conf </span><span>echo </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">options binder_linux devices=binder,hwbinder,vndbinder</span><span style="color:#556633;">&quot; </span><span>| </span><span style="color:#ffb964;">sudo</span><span> tee</span><span style="color:#ffb964;"> -a</span><span> /etc/modprobe.d/binder_linux.conf
</span></code></pre> </span></code></pre>
<h2 id="an-zhuang-waydroid">安装Waydroid</h2> <h2 id="an-zhuang-waydroid">安装Waydroid</h2>
<ul> <ul>
<li>安装以下软件包让Linux与Waydroid共享剪切板</li> <li>安装以下软件包让Linux与Waydroid共享剪切板</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>paru -S wl-clipboard xclip <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">paru -S</span><span> wl-clipboard xclip
</span><span>paru -S python-pyclip </span><span style="color:#ffb964;">paru -S</span><span> python-pyclip
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>安装Waydroid</li> <li>安装Waydroid</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>paru -S waydroid <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">paru -S</span><span> waydroid
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>初始化Waydroid下载含有GAPPS的Android系统映像档</li> <li>初始化Waydroid下载含有GAPPS的Android系统映像档</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo waydroid init -s GAPPS -f <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">sudo</span><span> waydroid init</span><span style="color:#ffb964;"> -s</span><span> GAPPS</span><span style="color:#ffb964;"> -f
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>启动Waydroid容器服务</li> <li>启动Waydroid容器服务</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo systemctl start waydroid-container <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">sudo</span><span> systemctl start waydroid-container
</span></code></pre> </span></code></pre>
<h2 id="chang-yong-ming-ling">常用命令</h2> <h2 id="chang-yong-ming-ling">常用命令</h2>
<ul> <ul>
<li>开机自动启动</li> <li>开机自动启动</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo systemctl enable waydroid-container <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">sudo</span><span> systemctl enable waydroid-container
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>点选应用列表的「Waydroid」图示开启主画面或者使用命令</li> <li>点选应用列表的「Waydroid」图示开启主画面或者使用命令</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>waydroid show-full-ui <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">waydroid</span><span> show-full-ui
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>若Waydroid无法连上网路开放UFW防火墙</li> <li>若Waydroid无法连上网路开放UFW防火墙</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo ufw allow 53 <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">sudo</span><span> ufw allow 53
</span><span>sudo ufw allow 67 </span><span style="color:#ffb964;">sudo</span><span> ufw allow 67
</span><span>sudo ufw default allow FORWARD </span><span style="color:#ffb964;">sudo</span><span> ufw default allow FORWARD
</span><span>sudo ufw reload </span><span style="color:#ffb964;">sudo</span><span> ufw reload
</span><span>sudo systemctl restart waydroid-container </span><span style="color:#ffb964;">sudo</span><span> systemctl restart waydroid-container
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>重启Waydroid</li> <li>重启Waydroid</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo systemctl restart waydroid-container <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">sudo</span><span> systemctl restart waydroid-container
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>启动/停止Waydroid容器服务</li> <li>启动/停止Waydroid容器服务</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo systemctl start waydroid-container <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">sudo</span><span> systemctl start waydroid-container
</span><span>sudo systemctl stop waydroid-container </span><span style="color:#ffb964;">sudo</span><span> systemctl stop waydroid-container
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>用命令开启Waydroid主画面</li> <li>用命令开启Waydroid主画面</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>waydroid show-full-ui <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">waydroid</span><span> show-full-ui
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>查看系统错误讯息</li> <li>查看系统错误讯息</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>waydroid log <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">waydroid</span><span> log
</span><span>sudo waydroid logcat </span><span style="color:#ffb964;">sudo</span><span> waydroid logcat
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>强制屏幕旋转</li> <li>强制屏幕旋转</li>
@@ -234,46 +234,46 @@
</ul> </ul>
<p>安装Package Manager用於查看APP的软件包名称。</p> <p>安装Package Manager用於查看APP的软件包名称。</p>
<p>部份APP会要求开启Wifi才能上网那么就如它所愿开启fake wifi</p> <p>部份APP会要求开启Wifi才能上网那么就如它所愿开启fake wifi</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>waydroid prop set persist.waydroid.fake_wifi &quot;软件包名称&quot; <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">waydroid</span><span> prop set persist.waydroid.fake_wifi </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">软件包名称</span><span style="color:#556633;">&quot;
</span></code></pre> </span></code></pre>
<p>例如给Fate/Go游戏开启模拟Wifi</p> <p>例如给Fate/Go游戏开启模拟Wifi</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>waydroid prop set persist.waydroid.fake_wifi &quot;com.aniplex.fategrandorder&quot; <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">waydroid</span><span> prop set persist.waydroid.fake_wifi </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">com.aniplex.fategrandorder</span><span style="color:#556633;">&quot;
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>模拟触控功能</li> <li>模拟触控功能</li>
</ul> </ul>
<p>安装Package Manager用於查看APP的软件包名称。有些APP认不到鼠标点击需要启用模拟触控(fake touch)</p> <p>安装Package Manager用於查看APP的软件包名称。有些APP认不到鼠标点击需要启用模拟触控(fake touch)</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>waydroid prop set persist.waydroid.fake_touch &quot;软件包名称&quot; <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">waydroid</span><span> prop set persist.waydroid.fake_touch </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">软件包名称</span><span style="color:#556633;">&quot;
</span></code></pre> </span></code></pre>
<p>例如给Fate/Go游戏开启模拟触控</p> <p>例如给Fate/Go游戏开启模拟触控</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>waydroid prop set persist.waydroid.fake_touch &quot;com.aniplex.fategrandorder&quot; <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">waydroid</span><span> prop set persist.waydroid.fake_touch </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">com.aniplex.fategrandorder</span><span style="color:#556633;">&quot;
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>用命令安装APK</li> <li>用命令安装APK</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>waydroid app install &lt;APK档案路径&gt;.apk <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">waydroid</span><span> app install &lt;APK档案路径&gt;.apk
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>进入ADB Shell</li> <li>进入ADB Shell</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo waydroid shell <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">sudo</span><span> waydroid shell
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>开启多视窗模式</li> <li>开启多视窗模式</li>
</ul> </ul>
<p>Waydroid的多视窗模式看起来像Linux的原生应用。启动后按F11改回来。</p> <p>Waydroid的多视窗模式看起来像Linux的原生应用。启动后按F11改回来。</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>waydroid prop set persist.waydroid.multi_windows true <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">waydroid</span><span> prop set persist.waydroid.multi_windows true
</span><span>sudo systemctl restart waydroid-container </span><span style="color:#ffb964;">sudo</span><span> systemctl restart waydroid-container
</span></code></pre> </span></code></pre>
<h2 id="jiang-waydroidzhu-ce-wei-googlezhuang-zhi">将Waydroid注册为Google装置</h2> <h2 id="jiang-waydroidzhu-ce-wei-googlezhuang-zhi">将Waydroid注册为Google装置</h2>
<p>Waydroid第一次开机可能会收到<code>Device is not Play Protect certified</code>的通知无法登入Google账号。</p> <p>Waydroid第一次开机可能会收到<code>Device is not Play Protect certified</code>的通知无法登入Google账号。</p>
<p>用以下命令取得Waydroid的装置ID。该命令会印出一长串数字。</p> <p>用以下命令取得Waydroid的装置ID。该命令会印出一长串数字。</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo waydroid shell <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">sudo</span><span> waydroid shell
</span><span> </span><span>
</span><span>ANDROID_RUNTIME_ROOT=/apex/com.android.runtime ANDROID_DATA=/data ANDROID_TZDATA_ROOT=/apex/com.android.tzdata ANDROID_I18N_ROOT=/apex/com.android.i18n sqlite3 /data/data/com.google.android.gsf/databases/gservices.db &quot;select * from main where name = \&quot;android_id\&quot;;&quot; </span><span style="color:#ffb964;">ANDROID_RUNTIME_ROOT</span><span>=</span><span style="color:#99ad6a;">/apex/com.android.runtime </span><span style="color:#ffb964;">ANDROID_DATA</span><span>=</span><span style="color:#99ad6a;">/data </span><span style="color:#ffb964;">ANDROID_TZDATA_ROOT</span><span>=</span><span style="color:#99ad6a;">/apex/com.android.tzdata </span><span style="color:#ffb964;">ANDROID_I18N_ROOT</span><span>=</span><span style="color:#99ad6a;">/apex/com.android.i18n </span><span style="color:#ffb964;">sqlite3</span><span> /data/data/com.google.android.gsf/databases/gservices.db </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">select * from main where name = \&quot;android_id\&quot;;</span><span style="color:#556633;">&quot;
</span></code></pre> </span></code></pre>
<p>开启装置注册页面登入Google账号输入装置ID注册等个半小时应该就能登入Google账号了。如果还是不行就重新启动Waydroid容器服务</p> <p>开启装置注册页面登入Google账号输入装置ID注册等个半小时应该就能登入Google账号了。如果还是不行就重新启动Waydroid容器服务</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo systemctl restart waydroid-container <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">sudo</span><span> systemctl restart waydroid-container
</span></code></pre> </span></code></pre>
<p>现在可以安装APP了Google Play和F-Droid会自动筛出適合x86架构的APP。</p> <p>现在可以安装APP了Google Play和F-Droid会自动筛出適合x86架构的APP。</p>
<h1 id="qemu-kvm">QEMU/KVM</h1> <h1 id="qemu-kvm">QEMU/KVM</h1>
@@ -376,20 +376,24 @@
</ol> </ol>
<h2 id="ri-chang-shi-yong">日常使用</h2> <h2 id="ri-chang-shi-yong">日常使用</h2>
<ul> <ul>
<li><strong>ADB 连接与屏幕镜像</strong><pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">adb</span><span> connect localhost:5555 <li><strong>ADB 连接与屏幕镜像</strong></li>
</ul>
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">adb</span><span> connect localhost:5555
</span><span style="color:#ffb964;">scrcpy -s</span><span> localhost:5555</span><span style="color:#ffb964;"> --audio-codec</span><span>=aac </span><span style="color:#ffb964;">scrcpy -s</span><span> localhost:5555</span><span style="color:#ffb964;"> --audio-codec</span><span>=aac
</span></code></pre> </span></code></pre>
</li> <ul>
<li><strong>安装 APK</strong> <li><strong>安装 APK</strong>
<ul> <ul>
<li>使用 <code>adb install your_app.apk</code></li> <li>使用 <code>adb install your_app.apk</code></li>
<li>或在 Scrcpy 界面中拖拽 APK 文件进行安装</li> <li>或在 Scrcpy 界面中拖拽 APK 文件进行安装</li>
</ul> </ul>
</li> </li>
<li><strong>停止与重启</strong><pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">sudo</span><span> docker compose down <li><strong>停止与重启</strong></li>
</ul>
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">sudo</span><span> docker compose down
</span><span style="color:#ffb964;">sudo</span><span> docker compose up</span><span style="color:#ffb964;"> -d </span><span style="color:#ffb964;">sudo</span><span> docker compose up</span><span style="color:#ffb964;"> -d
</span></code></pre> </span></code></pre>
</li> <ul>
<li><strong>数据持久化</strong>:所有数据保存在 <code>~/redroid/redroid-11-data</code>,可备份或运行多实例。</li> <li><strong>数据持久化</strong>:所有数据保存在 <code>~/redroid/redroid-11-data</code>,可备份或运行多实例。</li>
</ul> </ul>
<h2 id="gao-ji-cao-zuo-yu-an-quan-jian-yi">高级操作与安全建议</h2> <h2 id="gao-ji-cao-zuo-yu-an-quan-jian-yi">高级操作与安全建议</h2>

View File

@@ -313,16 +313,16 @@
<li>Linux命令查询<a href="https://wangchujiang.com/linux-command/hot.html">linux-command</a></li> <li>Linux命令查询<a href="https://wangchujiang.com/linux-command/hot.html">linux-command</a></li>
<li>Linux常用命令表<a href="https://wangchujiang.com/reference/docs/linux-command.html">Quick Reference</a></li> <li>Linux常用命令表<a href="https://wangchujiang.com/reference/docs/linux-command.html">Quick Reference</a></li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span> date <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;"></span><span> date
</span><span>Sun Nov 16 09:16:15 PM +08 2025 </span><span style="color:#ffb964;">Sun</span><span> Nov 16 09:16:15 PM +08 2025
</span><span> uname -a </span><span style="color:#ffb964;"></span><span> uname</span><span style="color:#ffb964;"> -a
</span><span>Linux dos 6.17.7-cachyos #1-NixOS SMP PREEMPT_DYNAMIC Sun Nov 2 13:18:05 UTC 2025 x86_64 GNU/Linux </span><span style="color:#ffb964;">Linux</span><span> dos 6.17.7-cachyos </span><span style="color:#888888;">#1-NixOS SMP PREEMPT_DYNAMIC Sun Nov 2 13:18:05 UTC 2025 x86_64 GNU/Linux
</span><span> uptime </span><span style="color:#ffb964;"></span><span> uptime
</span><span> 21:16:23 up 4:54, 0 users, load average: 0.79, 0.74, 0.70 </span><span> </span><span style="color:#ffb964;">21:16:23</span><span> up 4:54, 0 users, load average: 0.79, 0.74, 0.70
</span><span> ls </span><span style="color:#ffb964;"></span><span> ls
</span><span>Data Desktop Documents Downloads Git go Picback Pictures </span><span style="color:#ffb964;">Data</span><span> Desktop Documents Downloads Git go Picback Pictures
</span><span> cd ./Downloads </span><span style="color:#ffb964;"></span><span> cd ./Downloads
</span><span>~/Downloads </span><span style="color:#ffb964;">~/Downloads
</span></code></pre> </span></code></pre>
<p>李华很好奇:这些 <code>ls</code><code>cd</code><code>uname</code><code>date</code> 等命令究竟来自哪里?它们是 Linux 内置的吗其实Linux 里的命令大致可以分为三类:<strong>Shell 内建命令、外部二进制程序、BusyBox 提供的工具</strong></p> <p>李华很好奇:这些 <code>ls</code><code>cd</code><code>uname</code><code>date</code> 等命令究竟来自哪里?它们是 Linux 内置的吗其实Linux 里的命令大致可以分为三类:<strong>Shell 内建命令、外部二进制程序、BusyBox 提供的工具</strong></p>
<ul> <ul>
@@ -341,9 +341,9 @@
<ul> <ul>
<li>在一些精简 Linux例如 Alpine、OpenWrt中命令不来自 GNU coreutils而来自一个叫 <strong>BusyBox</strong> 的单程序。BusyBox 只一个二进制文件,但内部包含了上百个命令,这种方式体积小,适用于嵌入式设备。</li> <li>在一些精简 Linux例如 Alpine、OpenWrt中命令不来自 GNU coreutils而来自一个叫 <strong>BusyBox</strong> 的单程序。BusyBox 只一个二进制文件,但内部包含了上百个命令,这种方式体积小,适用于嵌入式设备。</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>/bin/busybox ls <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">/bin/busybox</span><span> ls
</span><span>/bin/busybox cp </span><span style="color:#ffb964;">/bin/busybox</span><span> cp
</span><span>/bin/busybox tar </span><span style="color:#ffb964;">/bin/busybox</span><span> tar
</span></code></pre> </span></code></pre>
<h2 id="5-shell-terminal-tty">5.Shell/Terminal/TTY</h2> <h2 id="5-shell-terminal-tty">5.Shell/Terminal/TTY</h2>
<p>随着李华在系统中的探索,李华发现常常遇到诸如<code>TerminalConsolebash,zsh,shell,tty</code>等概念,这些概念常常被混淆,似乎都和命令行相关,但又不太清楚它们之间是什么关系?</p> <p>随着李华在系统中的探索,李华发现常常遇到诸如<code>TerminalConsolebash,zsh,shell,tty</code>等概念,这些概念常常被混淆,似乎都和命令行相关,但又不太清楚它们之间是什么关系?</p>

View File

@@ -129,8 +129,8 @@
<li><strong>Ubuntu</strong></li> <li><strong>Ubuntu</strong></li>
</ul> </ul>
<p>以ubuntu24.04为例,首先安装这些包,包括连接工具,工具链和调试器等等。</p> <p>以ubuntu24.04为例,首先安装这些包,包括连接工具,工具链和调试器等等。</p>
<pre data-lang="shell" style="background-color:#151515;color:#e8e8d3;" class="language-shell "><code class="language-shell" data-lang="shell"><span>sudo apt update <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">sudo</span><span> apt update
</span><span>sudo apt install -y git python3 scons openocd stlink-tools gcc-arm-none-eabi gdb-multiarch </span><span style="color:#ffb964;">sudo</span><span> apt install</span><span style="color:#ffb964;"> -y</span><span> git python3 scons openocd stlink-tools gcc-arm-none-eabi gdb-multiarch
</span></code></pre> </span></code></pre>
<ul> <ul>
<li><strong>Nixos</strong></li> <li><strong>Nixos</strong></li>
@@ -166,38 +166,38 @@
</span></code></pre> </span></code></pre>
<h2 id="yuan-ma">源码</h2> <h2 id="yuan-ma">源码</h2>
<p>随后使用Git拉取项目源码</p> <p>随后使用Git拉取项目源码</p>
<pre data-lang="shell" style="background-color:#151515;color:#e8e8d3;" class="language-shell "><code class="language-shell" data-lang="shell"><span>git clone https://github.com/RT-Thread-Studio/sdk-bsp-stm32f407-spark.git <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">git</span><span> clone https://github.com/RT-Thread-Studio/sdk-bsp-stm32f407-spark.git
</span></code></pre> </span></code></pre>
<h2 id="envgong-ju">ENV工具</h2> <h2 id="envgong-ju">ENV工具</h2>
<p>使用Git拉取RT-Thread配套的linux开发环境并添加Shell变量。</p> <p>使用Git拉取RT-Thread配套的linux开发环境并添加Shell变量。</p>
<pre data-lang="shell" style="background-color:#151515;color:#e8e8d3;" class="language-shell "><code class="language-shell" data-lang="shell"><span># 克隆仓库 <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#888888;"># 克隆仓库
</span><span>git clone https://github.com/RT-Thread/env.git ~/env </span><span style="color:#ffb964;">git</span><span> clone https://github.com/RT-Thread/env.git </span><span style="color:#ffb964;">~</span><span>/env
</span><span># 将 ~/env 添加到 PATH </span><span style="color:#888888;"># 将 ~/env 添加到 PATH
</span><span>export PATH=&quot;$PATH:$HOME/env&quot; </span><span style="color:#8fbfdc;">export </span><span style="color:#ffb964;">PATH</span><span>=</span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">$</span><span style="color:#ffb964;">PATH</span><span style="color:#99ad6a;">:$</span><span style="color:#ffb964;">HOME</span><span style="color:#99ad6a;">/env</span><span style="color:#556633;">&quot;
</span><span># 显示 PATH </span><span style="color:#888888;"># 显示 PATH
</span><span>echo &quot;$PATH&quot; </span><span>echo </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">$</span><span style="color:#ffb964;">PATH</span><span style="color:#556633;">&quot;
</span><span># 查看 pkgs 命令是否存在 </span><span style="color:#888888;"># 查看 pkgs 命令是否存在
</span><span>type pkgs </span><span>type pkgs
</span></code></pre> </span></code></pre>
<p>随后可以使用PKG初始化并安装两个必要的包</p> <p>随后可以使用PKG初始化并安装两个必要的包</p>
<pre data-lang="shell" style="background-color:#151515;color:#e8e8d3;" class="language-shell "><code class="language-shell" data-lang="shell"><span>pkgs --update <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">pkgs --update
</span><span>pip install kconfiglib </span><span style="color:#ffb964;">pip</span><span> install kconfiglib
</span><span>pip install scons </span><span style="color:#ffb964;">pip</span><span> install scons
</span></code></pre> </span></code></pre>
<h2 id="lian-jie">连接</h2> <h2 id="lian-jie">连接</h2>
<p>使用USB线连接开发板和开发PC并使用lsusb命令查看是否出现</p> <p>使用USB线连接开发板和开发PC并使用lsusb命令查看是否出现</p>
<pre data-lang="shell" style="background-color:#151515;color:#e8e8d3;" class="language-shell "><code class="language-shell" data-lang="shell"><span>lsusb <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">lsusb
</span><span>Bus 001 Device 004: ID 0483:374b STMicroelectronics ST-LINK/V2.1 </span><span style="color:#ffb964;">Bus</span><span> 001 Device 004: ID 0483:374b STMicroelectronics ST-LINK/V2.1
</span></code></pre> </span></code></pre>
<p>添加成功后可以使用这个命令来检测是否连接成功:</p> <p>添加成功后可以使用这个命令来检测是否连接成功:</p>
<pre data-lang="shell" style="background-color:#151515;color:#e8e8d3;" class="language-shell "><code class="language-shell" data-lang="shell"><span> st-info --probe <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;"></span><span> st-info</span><span style="color:#ffb964;"> --probe
</span><span>Found 1 stlink programmers </span><span style="color:#ffb964;">Found</span><span> 1 stlink programmers
</span><span> version: V2J35S26 </span><span> </span><span style="color:#ffb964;">version:</span><span> V2J35S26
</span><span> serial: 0671FF373654393143244522 </span><span> </span><span style="color:#ffb964;">serial:</span><span> 0671FF373654393143244522
</span><span> flash: 1048576 (pagesize: 16384) </span><span> </span><span style="color:#ffb964;">flash:</span><span> 1048576 (pagesize: 16384)
</span><span> sram: 196608 </span><span> </span><span style="color:#ffb964;">sram:</span><span> 196608
</span><span> chipid: 0x413 </span><span> </span><span style="color:#ffb964;">chipid:</span><span> 0x413
</span><span> dev-type: STM32F4x5_F4x7 </span><span> </span><span style="color:#ffb964;">dev-type:</span><span> STM32F4x5_F4x7
</span></code></pre> </span></code></pre>
<blockquote> <blockquote>
<p>如果你和我一样将Ubuntu安装在QEMU虚拟机中 需要在libvirt中使用Add_hardware添加usb设备。</p> <p>如果你和我一样将Ubuntu安装在QEMU虚拟机中 需要在libvirt中使用Add_hardware添加usb设备。</p>
@@ -238,23 +238,23 @@
</span></code></pre> </span></code></pre>
<h2 id="bian-yi">编译</h2> <h2 id="bian-yi">编译</h2>
<p>在完成以上设置之后我们可以开始编译。STM32使用scons编译系统同样是menuconfig命令</p> <p>在完成以上设置之后我们可以开始编译。STM32使用scons编译系统同样是menuconfig命令</p>
<pre data-lang="shell" style="background-color:#151515;color:#e8e8d3;" class="language-shell "><code class="language-shell" data-lang="shell"><span>scons --menuconfig <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">scons --menuconfig
</span></code></pre> </span></code></pre>
<p>修改配置并保存退出后即可开始编译,$(nproc)代表使用全部CPU线程来编译</p> <p>修改配置并保存退出后即可开始编译,$(nproc)代表使用全部CPU线程来编译</p>
<pre data-lang="shell" style="background-color:#151515;color:#e8e8d3;" class="language-shell "><code class="language-shell" data-lang="shell"><span>scons -j$(nproc) <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">scons -j$(nproc)
</span></code></pre> </span></code></pre>
<h2 id="shao-ru">烧入</h2> <h2 id="shao-ru">烧入</h2>
<p>编译成功后你应该会看到有一个rtthread.bin在目录下这就是我们编译出来的系统</p> <p>编译成功后你应该会看到有一个rtthread.bin在目录下这就是我们编译出来的系统</p>
<p>在烧入之前,我们可以备份一下原来的系统:</p> <p>在烧入之前,我们可以备份一下原来的系统:</p>
<pre data-lang="shell" style="background-color:#151515;color:#e8e8d3;" class="language-shell "><code class="language-shell" data-lang="shell"><span>st-flash read firmware_backup.bin 0x08000000 0x100001 <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">st-flash</span><span> read firmware_backup.bin 0x08000000 0x100001
</span></code></pre> </span></code></pre>
<p>随后使用如下命令烧入系统:</p> <p>随后使用如下命令烧入系统:</p>
<pre data-lang="shell" style="background-color:#151515;color:#e8e8d3;" class="language-shell "><code class="language-shell" data-lang="shell"><span>st-flash write rtthread.bin 0x08000000 <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">st-flash</span><span> write rtthread.bin 0x08000000
</span></code></pre> </span></code></pre>
<h2 id="chuan-kou">串口</h2> <h2 id="chuan-kou">串口</h2>
<p>除了USB之外我们还可以使用串口连接</p> <p>除了USB之外我们还可以使用串口连接</p>
<pre data-lang="shell" style="background-color:#151515;color:#e8e8d3;" class="language-shell "><code class="language-shell" data-lang="shell"><span>sudo apt install picocom <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">sudo</span><span> apt install picocom
</span><span>picocom -b 115200 /dev/ttyACM0 </span><span style="color:#ffb964;">picocom -b</span><span> 115200 /dev/ttyACM0
</span></code></pre> </span></code></pre>
<p>可以使用<code>ctrl + A 然后 ctrl + x</code>退出。</p> <p>可以使用<code>ctrl + A 然后 ctrl + x</code>退出。</p>
<h2 id="shi-yong-cmake">使用Cmake</h2> <h2 id="shi-yong-cmake">使用Cmake</h2>

View File

@@ -218,21 +218,21 @@
<ul> <ul>
<li>修改app/build.gradle.kts</li> <li>修改app/build.gradle.kts</li>
</ul> </ul>
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span> </span><span style="color:#ffb964;">signingConfigs </span><span>{ <pre data-lang="java" style="background-color:#151515;color:#e8e8d3;" class="language-java "><code class="language-java" data-lang="java"><span> signingConfigs {
</span><span> create(</span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">release</span><span style="color:#556633;">&quot;</span><span>) { </span><span> </span><span style="color:#ffb964;">create</span><span>(</span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">release</span><span style="color:#556633;">&quot;</span><span>) {
</span><span> storeFile = System.getenv(</span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">KEYSTORE_FILE</span><span style="color:#556633;">&quot;</span><span>)?.let { file(it) } </span><span> storeFile = </span><span style="color:#ffb964;">System</span><span>.</span><span style="color:#ffb964;">getenv</span><span>(</span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">KEYSTORE_FILE</span><span style="color:#556633;">&quot;</span><span>)?.let { </span><span style="color:#ffb964;">file</span><span>(it) }
</span><span> storePassword = System.getenv(</span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">KEYSTORE_PASSWORD</span><span style="color:#556633;">&quot;</span><span>) </span><span> storePassword = </span><span style="color:#ffb964;">System</span><span>.</span><span style="color:#ffb964;">getenv</span><span>(</span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">KEYSTORE_PASSWORD</span><span style="color:#556633;">&quot;</span><span>)
</span><span> keyAlias = System.getenv(</span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">KEY_ALIAS</span><span style="color:#556633;">&quot;</span><span>) </span><span> keyAlias = </span><span style="color:#ffb964;">System</span><span>.</span><span style="color:#ffb964;">getenv</span><span>(</span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">KEY_ALIAS</span><span style="color:#556633;">&quot;</span><span>)
</span><span> keyPassword = System.getenv(</span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">KEY_PASSWORD</span><span style="color:#556633;">&quot;</span><span>) </span><span> keyPassword = </span><span style="color:#ffb964;">System</span><span>.</span><span style="color:#ffb964;">getenv</span><span>(</span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">KEY_PASSWORD</span><span style="color:#556633;">&quot;</span><span>)
</span><span> } </span><span> }
</span><span> } </span><span> }
</span><span> </span><span>
</span><span> </span><span style="color:#ffb964;">buildTypes </span><span>{ </span><span> buildTypes {
</span><span> release { </span><span> release {
</span><span> signingConfig = signingConfigs.getByName(</span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">release</span><span style="color:#556633;">&quot;</span><span>) // 添加这行 </span><span> signingConfig = signingConfigs.</span><span style="color:#ffb964;">getByName</span><span>(</span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">release</span><span style="color:#556633;">&quot;</span><span>) </span><span style="color:#888888;">// 添加这行
</span><span> isMinifyEnabled = true </span><span> isMinifyEnabled = true
</span><span> proguardFiles( </span><span> </span><span style="color:#ffb964;">proguardFiles</span><span>(
</span><span> getDefaultProguardFile(</span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">proguard-android-optimize.txt</span><span style="color:#556633;">&quot;</span><span>), </span><span> </span><span style="color:#ffb964;">getDefaultProguardFile</span><span>(</span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">proguard-android-optimize.txt</span><span style="color:#556633;">&quot;</span><span>),
</span><span> </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">proguard-rules.pro</span><span style="color:#556633;">&quot; </span><span> </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">proguard-rules.pro</span><span style="color:#556633;">&quot;
</span><span> ) </span><span> )
</span><span> } </span><span> }

View File

@@ -144,28 +144,28 @@
<h3 id="windows">Windows</h3> <h3 id="windows">Windows</h3>
<p>首先下载<a href="https://github.com/aria2/aria2/releases/tag/release-1.37.0">aria2-1.37.0-win-64bit-build1.zip</a>,将下载好的文件解压并放到你喜欢的目录下,设置系统环境变量,类似<code>D:\DATA\Data\AriaNg-1.3.10-AllInOne</code>,随后即可在 CMD 中使用<code>aria2c -v</code>查看Aria2 。</p> <p>首先下载<a href="https://github.com/aria2/aria2/releases/tag/release-1.37.0">aria2-1.37.0-win-64bit-build1.zip</a>,将下载好的文件解压并放到你喜欢的目录下,设置系统环境变量,类似<code>D:\DATA\Data\AriaNg-1.3.10-AllInOne</code>,随后即可在 CMD 中使用<code>aria2c -v</code>查看Aria2 。</p>
<p>然后创建一个配置文件<code>C:\Users\&lt;&gt;\.aria2\aria2.conf</code>,内容如下:</p> <p>然后创建一个配置文件<code>C:\Users\&lt;&gt;\.aria2\aria2.conf</code>,内容如下:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span># 下载目录 <pre data-lang="conf" style="background-color:#151515;color:#e8e8d3;" class="language-conf "><code class="language-conf" data-lang="conf"><span style="color:#888888;"># 下载目录
</span><span>dir=C:/Users/&lt;&gt;/Downloads </span><span style="color:#ffb964;">dir</span><span>=C:/Users/&lt;&gt;/Downloads
</span><span> </span><span>
</span><span># 断点续传 </span><span style="color:#888888;"># 断点续传
</span><span>continue=true </span><span style="color:#ffb964;">continue</span><span>=true
</span><span>file-allocation=prealloc </span><span style="color:#ffb964;">file-allocation</span><span>=prealloc
</span><span> </span><span>
</span><span># RPC 设置 </span><span style="color:#888888;"># RPC 设置
</span><span>enable-rpc=true </span><span style="color:#ffb964;">enable-rpc</span><span>=true
</span><span>rpc-listen-all=true </span><span style="color:#ffb964;">rpc-listen-all</span><span>=true
</span><span>rpc-allow-origin-all=true </span><span style="color:#ffb964;">rpc-allow-origin-all</span><span>=true
</span><span>rpc-listen-port=6800 </span><span style="color:#ffb964;">rpc-listen-port</span><span>=</span><span style="color:#cf6a4c;">6800
</span><span>rpc-secret=&lt;你的密码&gt; </span><span style="color:#ffb964;">rpc-secret</span><span>=&lt;你的密码&gt;
</span></code></pre> </span></code></pre>
<p>随后在这个项目中<a href="https://github.com/winsw/winsw">winsw</a>下载 WinSW-x64.exe到一个目录并重命名为 aria2-service.exe并在同目录下创建<code>aria2-service.xml</code>,内容如下:</p> <p>随后在这个项目中<a href="https://github.com/winsw/winsw">winsw</a>下载 WinSW-x64.exe到一个目录并重命名为 aria2-service.exe并在同目录下创建<code>aria2-service.xml</code>,内容如下:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>&lt;service&gt; <pre data-lang="xml" style="background-color:#151515;color:#e8e8d3;" class="language-xml "><code class="language-xml" data-lang="xml"><span>&lt;</span><span style="color:#ffb964;">service</span><span>&gt;
</span><span> &lt;id&gt;aria2&lt;/id&gt; </span><span> &lt;</span><span style="color:#ffb964;">id</span><span>&gt;aria2&lt;/</span><span style="color:#ffb964;">id</span><span>&gt;
</span><span> &lt;name&gt;Aria2 Service&lt;/name&gt; </span><span> &lt;</span><span style="color:#ffb964;">name</span><span>&gt;Aria2 Service&lt;/</span><span style="color:#ffb964;">name</span><span>&gt;
</span><span> &lt;description&gt;Aria2 Download Manager&lt;/description&gt; </span><span> &lt;</span><span style="color:#ffb964;">description</span><span>&gt;Aria2 Download Manager&lt;/</span><span style="color:#ffb964;">description</span><span>&gt;
</span><span> &lt;executable&gt;C:\Users\&lt;&gt;\scoop\apps\aria2\current\aria2c.exe&lt;/executable&gt; </span><span> &lt;</span><span style="color:#ffb964;">executable</span><span>&gt;C:\Users\&lt;</span><span style="color:#ffb964;"></span><span>&gt;\scoop\apps\aria2\current\aria2c.exe&lt;/</span><span style="color:#ffb964;">executable</span><span>&gt;
</span><span> &lt;arguments&gt;--conf-path=C:\Users\&lt;&gt;\.aria2\aria2.conf&lt;/arguments&gt; </span><span> &lt;</span><span style="color:#ffb964;">arguments</span><span>&gt;--conf-path=C:\Users\&lt;</span><span style="color:#ffb964;"></span><span>&gt;\.aria2\aria2.conf&lt;/</span><span style="color:#ffb964;">arguments</span><span>&gt;
</span><span>&lt;/service&gt; </span><span>&lt;/</span><span style="color:#ffb964;">service</span><span>&gt;
</span></code></pre> </span></code></pre>
<p>随后使用<code>.\aria2-service.exe install</code>安装服务,并使用<code>.\aria2-service.exe start</code>启动服务类似linux上的systemctl.</p> <p>随后使用<code>.\aria2-service.exe install</code>安装服务,并使用<code>.\aria2-service.exe start</code>启动服务类似linux上的systemctl.</p>
<blockquote> <blockquote>
@@ -174,71 +174,71 @@
<h3 id="arch-linux">Arch linux</h3> <h3 id="arch-linux">Arch linux</h3>
<p>Arch linux 和大部分常规发行版可以适用此方法。</p> <p>Arch linux 和大部分常规发行版可以适用此方法。</p>
<p>首先安装aria2本体:</p> <p>首先安装aria2本体:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>paru -S aria2 <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">paru -S</span><span> aria2
</span></code></pre> </span></code></pre>
<p>随后创建配置文件</p> <p>随后创建配置文件</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>nano /home/&lt;you-username&gt;/.config/aria2/aria2.conf <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">nano</span><span> /home/&lt;you-username&gt;/.config/aria2/aria2.conf
</span></code></pre> </span></code></pre>
<p>内容为</p> <p>内容为</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>enable-rpc=true <pre data-lang="conf" style="background-color:#151515;color:#e8e8d3;" class="language-conf "><code class="language-conf" data-lang="conf"><span style="color:#ffb964;">enable-rpc</span><span>=true
</span><span>rpc-listen-all=true </span><span style="color:#ffb964;">rpc-listen-all</span><span>=true
</span><span>rpc-allow-origin-all=true </span><span style="color:#ffb964;">rpc-allow-origin-all</span><span>=true
</span><span>rpc-listen-port=6800 </span><span style="color:#ffb964;">rpc-listen-port</span><span>=</span><span style="color:#cf6a4c;">6800
</span><span>continue=true </span><span style="color:#ffb964;">continue</span><span>=true
</span><span>dir=/home/&lt;you-username&gt;/Downloads </span><span style="color:#ffb964;">dir</span><span>=/home/&lt;you-username&gt;/Downloads
</span><span>input-file=/home/&lt;you-username&gt;/.config/aria2/aria2.session </span><span style="color:#ffb964;">input-file</span><span>=/home/&lt;you-username&gt;/.config/aria2/aria2.session
</span><span>save-session=/home/&lt;you-username&gt;/.config/aria2/aria2.session </span><span style="color:#ffb964;">save-session</span><span>=/home/&lt;you-username&gt;/.config/aria2/aria2.session
</span><span>save-session-interval=60 </span><span style="color:#ffb964;">save-session-interval</span><span>=</span><span style="color:#cf6a4c;">60
</span></code></pre> </span></code></pre>
<p>保存退出;随后创建守护进程以便开机自启动:</p> <p>保存退出;随后创建守护进程以便开机自启动:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>nano ~/.config/systemd/user/aria2.service <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">nano ~</span><span>/.config/systemd/user/aria2.service
</span></code></pre> </span></code></pre>
<p>写入:</p> <p>写入:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>[Unit] <pre data-lang="conf" style="background-color:#151515;color:#e8e8d3;" class="language-conf "><code class="language-conf" data-lang="conf"><span style="color:#8fbfdc;">[Unit]
</span><span>Description=Aria2 Daemon </span><span style="color:#ffb964;">Description</span><span>=Aria2 Daemon
</span><span>After=network.target </span><span style="color:#ffb964;">After</span><span>=network.target
</span><span> </span><span>
</span><span>[Service] </span><span style="color:#8fbfdc;">[Service]
</span><span>ExecStart=/usr/bin/aria2c --conf-path=/home/&lt;you-username&gt;/.config/aria2/aria2.conf </span><span style="color:#ffb964;">ExecStart</span><span>=/usr/bin/aria2c --conf-path=/home/&lt;you-username&gt;/.config/aria2/aria2.conf
</span><span>Restart=on-failure </span><span style="color:#ffb964;">Restart</span><span>=on-failure
</span><span> </span><span>
</span><span>[Install] </span><span style="color:#8fbfdc;">[Install]
</span><span>WantedBy=default.target </span><span style="color:#ffb964;">WantedBy</span><span>=default.target
</span></code></pre> </span></code></pre>
<p>在更新配置文件和服务文件后,执行以下命令以重启服务:</p> <p>在更新配置文件和服务文件后,执行以下命令以重启服务:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>systemctl --user daemon-reload <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">systemctl --user</span><span> daemon-reload
</span><span>systemctl --user enable aria2.service </span><span style="color:#ffb964;">systemctl --user</span><span> enable aria2.service
</span><span>systemctl --user start aria2.service </span><span style="color:#ffb964;">systemctl --user</span><span> start aria2.service
</span></code></pre> </span></code></pre>
<p>使用以下命令检查服务状态:</p> <p>使用以下命令检查服务状态:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>systemctl --user status aria2.service <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">systemctl --user</span><span> status aria2.service
</span></code></pre> </span></code></pre>
<h3 id="nixos">Nixos</h3> <h3 id="nixos">Nixos</h3>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>{ lib, pkgs, username, ... }: <pre data-lang="nix" style="background-color:#151515;color:#e8e8d3;" class="language-nix "><code class="language-nix" data-lang="nix"><span>{ </span><span style="color:#ffb964;">lib</span><span>, </span><span style="color:#ffb964;">pkgs</span><span>, </span><span style="color:#ffb964;">username</span><span>, ... }:
</span><span>{ </span><span>{
</span><span> services.aria2.enable = false; </span><span> </span><span style="color:#ffb964;">services</span><span>.</span><span style="color:#ffb964;">aria2</span><span>.</span><span style="color:#ffb964;">enable </span><span>= false;
</span><span> systemd.services.aria2 = { </span><span> </span><span style="color:#ffb964;">systemd</span><span>.</span><span style="color:#ffb964;">services</span><span>.</span><span style="color:#ffb964;">aria2 </span><span>= {
</span><span> description = &quot;Aria2 Download Manager (dich)&quot;; </span><span> </span><span style="color:#ffb964;">description </span><span>= </span><span style="color:#99ad6a;">&quot;Aria2 Download Manager (dich)&quot;</span><span>;
</span><span> after = [ &quot;network.target&quot; ]; </span><span> </span><span style="color:#ffb964;">after </span><span>= [ </span><span style="color:#99ad6a;">&quot;network.target&quot; </span><span>];
</span><span> wants = [ &quot;network.target&quot; ]; </span><span> </span><span style="color:#ffb964;">wants </span><span>= [ </span><span style="color:#99ad6a;">&quot;network.target&quot; </span><span>];
</span><span> wantedBy = [ &quot;multi-user.target&quot; ]; </span><span> </span><span style="color:#ffb964;">wantedBy </span><span>= [ </span><span style="color:#99ad6a;">&quot;multi-user.target&quot; </span><span>];
</span><span> </span><span>
</span><span> serviceConfig = { </span><span> </span><span style="color:#ffb964;">serviceConfig </span><span>= {
</span><span> Type = &quot;simple&quot;; </span><span> </span><span style="color:#ffb964;">Type </span><span>= </span><span style="color:#99ad6a;">&quot;simple&quot;</span><span>;
</span><span> User = username; </span><span> </span><span style="color:#ffb964;">User </span><span>= </span><span style="color:#ffb964;">username</span><span>;
</span><span> </span><span>
</span><span> ExecStartPre = [ </span><span> </span><span style="color:#ffb964;">ExecStartPre </span><span>= [
</span><span> &quot;${pkgs.coreutils}/bin/mkdir -p /home/${username}/.config/aria2&quot; </span><span> </span><span style="color:#99ad6a;">&quot;${</span><span style="color:#ffb964;">pkgs</span><span style="color:#99ad6a;">.</span><span style="color:#ffb964;">coreutils</span><span style="color:#99ad6a;">}/bin/mkdir -p /home/${</span><span style="color:#ffb964;">username</span><span style="color:#99ad6a;">}/.config/aria2&quot;
</span><span> &quot;${pkgs.coreutils}/bin/touch /home/${username}/.config/aria2/aria2.session&quot; </span><span> </span><span style="color:#99ad6a;">&quot;${</span><span style="color:#ffb964;">pkgs</span><span style="color:#99ad6a;">.</span><span style="color:#ffb964;">coreutils</span><span style="color:#99ad6a;">}/bin/touch /home/${</span><span style="color:#ffb964;">username</span><span style="color:#99ad6a;">}/.config/aria2/aria2.session&quot;
</span><span> ]; </span><span> ];
</span><span> </span><span>
</span><span> ExecStart = &quot;${pkgs.aria2}/bin/aria2c --conf-path=/home/${username}/.config/aria2/aria2.conf&quot;; </span><span> </span><span style="color:#ffb964;">ExecStart </span><span>= </span><span style="color:#99ad6a;">&quot;${</span><span style="color:#ffb964;">pkgs</span><span style="color:#99ad6a;">.</span><span style="color:#ffb964;">aria2</span><span style="color:#99ad6a;">}/bin/aria2c --conf-path=/home/${</span><span style="color:#ffb964;">username</span><span style="color:#99ad6a;">}/.config/aria2/aria2.conf&quot;</span><span>;
</span><span> </span><span>
</span><span> Restart = &quot;always&quot;; </span><span> </span><span style="color:#ffb964;">Restart </span><span>= </span><span style="color:#99ad6a;">&quot;always&quot;</span><span>;
</span><span> RestartSec = &quot;5s&quot;; </span><span> </span><span style="color:#ffb964;">RestartSec </span><span>= </span><span style="color:#99ad6a;">&quot;5s&quot;</span><span>;
</span><span> </span><span>
</span><span> NoNewPrivileges = true; </span><span> </span><span style="color:#ffb964;">NoNewPrivileges </span><span>= true;
</span><span> PrivateTmp = true; </span><span> </span><span style="color:#ffb964;">PrivateTmp </span><span>= true;
</span><span> }; </span><span> };
</span><span> }; </span><span> };
</span><span>} </span><span>}

View File

@@ -286,63 +286,63 @@ Cloudflare Docs</p>
<p>需要注意的是有些CDN的回源IP并不用作节点IP比如Cloudflare的回源IP仅作回源IP使用如果要获取Cloudflare的节点IP可前往https://bgp.tools/as/13335#prefixes。而有些CDN的回源IP同时被用作CDN节点比如BunnyCDN和Gcore CDN。</p> <p>需要注意的是有些CDN的回源IP并不用作节点IP比如Cloudflare的回源IP仅作回源IP使用如果要获取Cloudflare的节点IP可前往https://bgp.tools/as/13335#prefixes。而有些CDN的回源IP同时被用作CDN节点比如BunnyCDN和Gcore CDN。</p>
</blockquote> </blockquote>
<p>Cloudflare</p> <p>Cloudflare</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span># https://www.cloudflare.com/ips-v4 <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#888888;"># https://www.cloudflare.com/ips-v4
</span><span>103.21.244.0/22 </span><span style="color:#ffb964;">103.21.244.0/22
</span><span>103.22.200.0/22 </span><span style="color:#ffb964;">103.22.200.0/22
</span><span>103.31.4.0/22 </span><span style="color:#ffb964;">103.31.4.0/22
</span><span>104.16.0.0/13 </span><span style="color:#ffb964;">104.16.0.0/13
</span><span>104.24.0.0/14 </span><span style="color:#ffb964;">104.24.0.0/14
</span><span>108.162.192.0/18 </span><span style="color:#ffb964;">108.162.192.0/18
</span><span>131.0.72.0/22 </span><span style="color:#ffb964;">131.0.72.0/22
</span><span>141.101.64.0/18 </span><span style="color:#ffb964;">141.101.64.0/18
</span><span>162.158.0.0/15 </span><span style="color:#ffb964;">162.158.0.0/15
</span><span>172.64.0.0/13 </span><span style="color:#ffb964;">172.64.0.0/13
</span><span>173.245.48.0/20 </span><span style="color:#ffb964;">173.245.48.0/20
</span><span>188.114.96.0/20 </span><span style="color:#ffb964;">188.114.96.0/20
</span><span>190.93.240.0/20 </span><span style="color:#ffb964;">190.93.240.0/20
</span><span>197.234.240.0/22 </span><span style="color:#ffb964;">197.234.240.0/22
</span><span>198.41.128.0/17 </span><span style="color:#ffb964;">198.41.128.0/17
</span><span> </span><span>
</span><span># https://www.cloudflare.com/ips-v6 </span><span style="color:#888888;"># https://www.cloudflare.com/ips-v6
</span><span>2400:cb00::/32 </span><span style="color:#ffb964;">2400:cb00::/32
</span><span>2405:8100::/32 </span><span style="color:#ffb964;">2405:8100::/32
</span><span>2405:b500::/32 </span><span style="color:#ffb964;">2405:b500::/32
</span><span>2606:4700::/32 </span><span style="color:#ffb964;">2606:4700::/32
</span><span>2803:f800::/32 </span><span style="color:#ffb964;">2803:f800::/32
</span><span>2a06:98c0::/29 </span><span style="color:#ffb964;">2a06:98c0::/29
</span><span>2c0f:f248::/32 </span><span style="color:#ffb964;">2c0f:f248::/32
</span></code></pre> </span></code></pre>
<p>Gcore</p> <p>Gcore</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>https://api.gcore.com/cdn/public-ip-list <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">https://api.gcore.com/cdn/public-ip-list
</span></code></pre> </span></code></pre>
<p>BunnyCDN</p> <p>BunnyCDN</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>https://api.bunny.net/system/edgeserverlist <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">https://api.bunny.net/system/edgeserverlist
</span><span>https://api.bunny.net/system/edgeserverlist/plain </span><span style="color:#ffb964;">https://api.bunny.net/system/edgeserverlist/plain
</span></code></pre> </span></code></pre>
<p>Cloudfront</p> <p>Cloudfront</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>https://d7uri8nf7uskq.cloudfront.net/tools/list-cloudfront-ips <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">https://d7uri8nf7uskq.cloudfront.net/tools/list-cloudfront-ips
</span><span>https://files.imunify360.com/static/whitelist/v2/cloudfront-cdn.txt </span><span style="color:#ffb964;">https://files.imunify360.com/static/whitelist/v2/cloudfront-cdn.txt
</span></code></pre> </span></code></pre>
<p>CDN77</p> <p>CDN77</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>https://files.imunify360.com/static/whitelist/v2/cdn77.txt <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">https://files.imunify360.com/static/whitelist/v2/cdn77.txt
</span></code></pre> </span></code></pre>
<p>Fastly</p> <p>Fastly</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>https://api.fastly.com/public-ip-list <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">https://api.fastly.com/public-ip-list
</span></code></pre> </span></code></pre>
<p>Keycdn</p> <p>Keycdn</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>https://www.keycdn.com/shield-prefixes.json <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">https://www.keycdn.com/shield-prefixes.json
</span></code></pre> </span></code></pre>
<p>quic.cloud</p> <p>quic.cloud</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>https://quic.cloud/ips <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">https://quic.cloud/ips
</span></code></pre> </span></code></pre>
<p>Google CDN</p> <p>Google CDN</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>https://files.imunify360.com/static/whitelist/v2/google-cdn.txt <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">https://files.imunify360.com/static/whitelist/v2/google-cdn.txt
</span></code></pre> </span></code></pre>
<p>CacheFly</p> <p>CacheFly</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>https://cachefly.cachefly.net/ips/cdn.txt <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">https://cachefly.cachefly.net/ips/cdn.txt
</span></code></pre> </span></code></pre>
<p>Akaima</p> <p>Akaima</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>https://techdocs.akamai.com/origin-ip-acl/docs/update-your-origin-server <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">https://techdocs.akamai.com/origin-ip-acl/docs/update-your-origin-server
</span></code></pre> </span></code></pre>
<hr /> <hr />
<p><strong>Done.</strong></p> <p><strong>Done.</strong></p>

View File

@@ -128,32 +128,32 @@
<ul> <ul>
<li>官方安装脚本:</li> <li>官方安装脚本:</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>curl -fsSL https://get.docker.com -o get-docker.sh <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">curl -fsSL</span><span> https://get.docker.com</span><span style="color:#ffb964;"> -o</span><span> get-docker.sh
</span><span>sudo sh get-docker.sh </span><span style="color:#ffb964;">sudo</span><span> sh get-docker.sh
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>使用 Docker 存储库安装</li> <li>使用 Docker 存储库安装</li>
</ul> </ul>
<p>使用以下命令安装此方法的先决条件:</p> <p>使用以下命令安装此方法的先决条件:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo apt update &amp;&amp; sudo apt install ca-certificates curl gnupg <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">sudo</span><span> apt update &amp;&amp; </span><span style="color:#ffb964;">sudo</span><span> apt install ca-certificates curl gnupg
</span></code></pre> </span></code></pre>
<p>创建一个目录来存储密钥环:</p> <p>创建一个目录来存储密钥环:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo install -m 0755 -d /etc/apt/keyrings <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">sudo</span><span> install</span><span style="color:#ffb964;"> -m</span><span> 0755</span><span style="color:#ffb964;"> -d</span><span> /etc/apt/keyrings
</span></code></pre> </span></code></pre>
<p>使用给定的命令下载 GPG 密钥并将其存储在 <code>/etc/apt/keyrings/etc/apt/keyrings</code> 目录中:</p> <p>使用给定的命令下载 GPG 密钥并将其存储在 <code>/etc/apt/keyrings/etc/apt/keyrings</code> 目录中:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">curl -fsSL</span><span> https://download.docker.com/linux/debian/gpg | </span><span style="color:#ffb964;">sudo</span><span> gpg</span><span style="color:#ffb964;"> --dearmor -o</span><span> /etc/apt/keyrings/docker.gpg
</span></code></pre> </span></code></pre>
<p>使用 chmod 命令更改 docker.gpg 文件的权限:</p> <p>使用 chmod 命令更改 docker.gpg 文件的权限:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo chmod a+r /etc/apt/keyrings/docker.gpg <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">sudo</span><span> chmod a+r /etc/apt/keyrings/docker.gpg
</span></code></pre> </span></code></pre>
<p>使用以下命令为 Docker 设置存储库:</p> <p>使用以下命令为 Docker 设置存储库:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>echo \ <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span>echo \
</span><span> &quot;deb [arch=&quot;$(dpkg --print-architecture)&quot; signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \ </span><span> </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">deb [arch=</span><span style="color:#556633;">&quot;</span><span>$(</span><span style="color:#ffb964;">dpkg --print-architecture</span><span>)</span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;"> signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
</span><span> &quot;$(. /etc/os-release &amp;&amp; echo &quot;$VERSION_CODENAME&quot;)&quot; stable&quot; | \ </span><span style="color:#99ad6a;"> </span><span style="color:#556633;">&quot;</span><span>$(. /etc/os-release &amp;&amp; echo </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">$</span><span style="color:#ffb964;">VERSION_CODENAME</span><span style="color:#556633;">&quot;</span><span>)</span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;"> stable</span><span style="color:#556633;">&quot; </span><span>| \
</span><span> sudo tee /etc/apt/sources.list.d/docker.list &gt; /dev/null </span><span> </span><span style="color:#ffb964;">sudo</span><span> tee /etc/apt/sources.list.d/docker.list &gt; /dev/null
</span></code></pre> </span></code></pre>
<p>现在可以使用以下命令更新存储库索引并安装 Docker</p> <p>现在可以使用以下命令更新存储库索引并安装 Docker</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo apt update &amp;&amp; sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">sudo</span><span> apt update &amp;&amp; </span><span style="color:#ffb964;">sudo</span><span> apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
</span></code></pre> </span></code></pre>
<h2 id="chang-yong-ming-ling">常用命令</h2> <h2 id="chang-yong-ming-ling">常用命令</h2>
<h3 id="ji-chu-ming-ling">基础命令</h3> <h3 id="ji-chu-ming-ling">基础命令</h3>
@@ -253,37 +253,37 @@
<ol> <ol>
<li>首先停止所有正在运行的容器:</li> <li>首先停止所有正在运行的容器:</li>
</ol> </ol>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>docker stop $(docker ps -aq) <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">docker</span><span> stop $(</span><span style="color:#ffb964;">docker</span><span> ps</span><span style="color:#ffb964;"> -aq</span><span>)
</span></code></pre> </span></code></pre>
<ol start="2"> <ol start="2">
<li>删除所有容器</li> <li>删除所有容器</li>
</ol> </ol>
<p>删除所有容器(包括停止的容器):</p> <p>删除所有容器(包括停止的容器):</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>docker rm $(docker ps -aq) <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">docker</span><span> rm $(</span><span style="color:#ffb964;">docker</span><span> ps</span><span style="color:#ffb964;"> -aq</span><span>)
</span></code></pre> </span></code></pre>
<ol start="3"> <ol start="3">
<li>删除所有镜像</li> <li>删除所有镜像</li>
</ol> </ol>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>docker rmi $(docker images -q) <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">docker</span><span> rmi $(</span><span style="color:#ffb964;">docker</span><span> images</span><span style="color:#ffb964;"> -q</span><span>)
</span></code></pre> </span></code></pre>
<ol start="4"> <ol start="4">
<li>删除所有网络</li> <li>删除所有网络</li>
</ol> </ol>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>docker network prune -f <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">docker</span><span> network prune</span><span style="color:#ffb964;"> -f
</span></code></pre> </span></code></pre>
<ol start="5"> <ol start="5">
<li>删除所有未使用的卷</li> <li>删除所有未使用的卷</li>
</ol> </ol>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>docker volume prune -f <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">docker</span><span> volume prune</span><span style="color:#ffb964;"> -f
</span></code></pre> </span></code></pre>
<ol start="6"> <ol start="6">
<li>卸载 Docker</li> <li>卸载 Docker</li>
</ol> </ol>
<p>如果您希望完全删除 Docker 本身,可以执行以下命令:</p> <p>如果您希望完全删除 Docker 本身,可以执行以下命令:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo apt-get purge docker-ce docker-ce-cli containerd.io <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">sudo</span><span> apt-get purge docker-ce docker-ce-cli containerd.io
</span><span>sudo apt-get autoremove --purge </span><span style="color:#ffb964;">sudo</span><span> apt-get autoremove</span><span style="color:#ffb964;"> --purge
</span><span>sudo rm -rf /var/lib/docker </span><span style="color:#ffb964;">sudo</span><span> rm</span><span style="color:#ffb964;"> -rf</span><span> /var/lib/docker
</span><span>sudo rm -rf /etc/docker </span><span style="color:#ffb964;">sudo</span><span> rm</span><span style="color:#ffb964;"> -rf</span><span> /etc/docker
</span></code></pre> </span></code></pre>
<p>这些命令会卸载 Docker 软件并删除 Docker 数据目录。</p> <p>这些命令会卸载 Docker 软件并删除 Docker 数据目录。</p>
<hr /> <hr />
@@ -295,96 +295,96 @@
<ol start="0"> <ol start="0">
<li>首先<code>创建好工作目录</code>,例如:</li> <li>首先<code>创建好工作目录</code>,例如:</li>
</ol> </ol>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>. <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span>.
</span><span>└── docker </span><span style="color:#ffb964;">└──</span><span> docker
</span><span> ├── docker-compose.nginx.yml </span><span> </span><span style="color:#ffb964;">├──</span><span> docker-compose.nginx.yml
</span><span> ├── docker-compose.searxng.yml </span><span> </span><span style="color:#ffb964;">├──</span><span> docker-compose.searxng.yml
</span><span> └── nginx </span><span> </span><span style="color:#ffb964;">└──</span><span> nginx
</span><span> ├── certs </span><span> </span><span style="color:#ffb964;">├──</span><span> certs
</span><span> ├── fullchain.pem </span><span> </span><span style="color:#ffb964;"></span><span> ├── fullchain.pem
</span><span> └── privkey.pem </span><span> </span><span style="color:#ffb964;"></span><span> └── privkey.pem
</span><span> └── searxng.conf </span><span> </span><span style="color:#ffb964;">└──</span><span> searxng.conf
</span></code></pre> </span></code></pre>
<ol> <ol>
<li>在启动服务前,首先创建一个 Docker 外部网络(例如命名为 nginx</li> <li>在启动服务前,首先创建一个 Docker 外部网络(例如命名为 nginx</li>
</ol> </ol>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>docker network create nginx <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">docker</span><span> network create nginx
</span></code></pre> </span></code></pre>
<p>这样,无论是哪个 docker-compose 项目中的容器,只要加入此网络,就能直接通信。</p> <p>这样,无论是哪个 docker-compose 项目中的容器,只要加入此网络,就能直接通信。</p>
<ol start="2"> <ol start="2">
<li>编写 searxng 的 docker-compose 文件</li> <li>编写 searxng 的 docker-compose 文件</li>
</ol> </ol>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>version: &#39;3&#39; <pre data-lang="yaml" style="background-color:#151515;color:#e8e8d3;" class="language-yaml "><code class="language-yaml" data-lang="yaml"><span style="color:#ffb964;">version</span><span>: </span><span style="color:#556633;">&#39;</span><span style="color:#99ad6a;">3</span><span style="color:#556633;">&#39;
</span><span> </span><span>
</span><span>services: </span><span style="color:#ffb964;">services</span><span>:
</span><span> searxng: </span><span> </span><span style="color:#ffb964;">searxng</span><span>:
</span><span> image: searxng/searxng </span><span> </span><span style="color:#ffb964;">image</span><span>: </span><span style="color:#99ad6a;">searxng/searxng
</span><span> container_name: searxng </span><span> </span><span style="color:#ffb964;">container_name</span><span>: </span><span style="color:#99ad6a;">searxng
</span><span> restart: unless-stopped </span><span> </span><span style="color:#ffb964;">restart</span><span>: </span><span style="color:#99ad6a;">unless-stopped
</span><span> ulimits: </span><span> </span><span style="color:#ffb964;">ulimits</span><span>:
</span><span> nproc: 65535 </span><span> </span><span style="color:#ffb964;">nproc</span><span>: </span><span style="color:#cf6a4c;">65535
</span><span> nofile: </span><span> </span><span style="color:#ffb964;">nofile</span><span>:
</span><span> soft: 65535 </span><span> </span><span style="color:#ffb964;">soft</span><span>: </span><span style="color:#cf6a4c;">65535
</span><span> hard: 65535 </span><span> </span><span style="color:#ffb964;">hard</span><span>: </span><span style="color:#cf6a4c;">65535
</span><span> volumes: </span><span> </span><span style="color:#ffb964;">volumes</span><span>:
</span><span> - /var/lib/docker/volumes/searxng/_data:/etc/searxng </span><span> - </span><span style="color:#99ad6a;">/var/lib/docker/volumes/searxng/_data:/etc/searxng
</span><span> networks: </span><span> </span><span style="color:#ffb964;">networks</span><span>:
</span><span> - nginx </span><span> - </span><span style="color:#99ad6a;">nginx
</span><span> ports: </span><span> </span><span style="color:#ffb964;">ports</span><span>:
</span><span> # 如果希望 searxng 只对内部服务开放,则可不映射外部端口 </span><span> </span><span style="color:#888888;"># 如果希望 searxng 只对内部服务开放,则可不映射外部端口
</span><span> - &quot;127.0.0.1:18080:8080&quot; </span><span> - </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">127.0.0.1:18080:8080</span><span style="color:#556633;">&quot;
</span><span> </span><span>
</span><span>networks: </span><span style="color:#ffb964;">networks</span><span>:
</span><span> nginx: </span><span> </span><span style="color:#ffb964;">nginx</span><span>:
</span><span> external: true </span><span> </span><span style="color:#ffb964;">external</span><span>: true
</span></code></pre> </span></code></pre>
<ol start="3"> <ol start="3">
<li>编写 Nginx 的 docker-compose 文件</li> <li>编写 Nginx 的 docker-compose 文件</li>
</ol> </ol>
<p>创建 nginx 的 docker-compose 文件,例如:</p> <p>创建 nginx 的 docker-compose 文件,例如:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>version: &#39;3&#39; <pre data-lang="yaml" style="background-color:#151515;color:#e8e8d3;" class="language-yaml "><code class="language-yaml" data-lang="yaml"><span style="color:#ffb964;">version</span><span>: </span><span style="color:#556633;">&#39;</span><span style="color:#99ad6a;">3</span><span style="color:#556633;">&#39;
</span><span> </span><span>
</span><span>services: </span><span style="color:#ffb964;">services</span><span>:
</span><span> nginx: </span><span> </span><span style="color:#ffb964;">nginx</span><span>:
</span><span> image: nginx:latest </span><span> </span><span style="color:#ffb964;">image</span><span>: </span><span style="color:#99ad6a;">nginx:latest
</span><span> container_name: nginx </span><span> </span><span style="color:#ffb964;">container_name</span><span>: </span><span style="color:#99ad6a;">nginx
</span><span> restart: unless-stopped </span><span> </span><span style="color:#ffb964;">restart</span><span>: </span><span style="color:#99ad6a;">unless-stopped
</span><span> ports: </span><span> </span><span style="color:#ffb964;">ports</span><span>:
</span><span> - &quot;80:80&quot; </span><span> - </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">80:80</span><span style="color:#556633;">&quot;
</span><span> # 如需要 HTTPS请映射 443 端口并挂载证书目录 </span><span> </span><span style="color:#888888;"># 如需要 HTTPS请映射 443 端口并挂载证书目录
</span><span> #- &quot;443:443&quot; </span><span> </span><span style="color:#888888;">#- &quot;443:443&quot;
</span><span> volumes: </span><span> </span><span style="color:#ffb964;">volumes</span><span>:
</span><span> - ./nginx/searxng.conf:/etc/nginx/conf.d/default.conf:ro </span><span> - </span><span style="color:#99ad6a;">./nginx/searxng.conf:/etc/nginx/conf.d/default.conf:ro
</span><span> #- ./nginx/certs:/etc/nginx/certs:ro </span><span> </span><span style="color:#888888;">#- ./nginx/certs:/etc/nginx/certs:ro
</span><span> networks: </span><span> </span><span style="color:#ffb964;">networks</span><span>:
</span><span> - nginx </span><span> - </span><span style="color:#99ad6a;">nginx
</span><span> </span><span>
</span><span>networks: </span><span style="color:#ffb964;">networks</span><span>:
</span><span> nginx: </span><span> </span><span style="color:#ffb964;">nginx</span><span>:
</span><span> external: true </span><span> </span><span style="color:#ffb964;">external</span><span>: true
</span></code></pre> </span></code></pre>
<ol start="4"> <ol start="4">
<li>编写 Nginx 配置文件</li> <li>编写 Nginx 配置文件</li>
</ol> </ol>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>server { <pre data-lang="conf" style="background-color:#151515;color:#e8e8d3;" class="language-conf "><code class="language-conf" data-lang="conf"><span style="color:#8fbfdc;">server </span><span>{
</span><span> listen 80; </span><span> </span><span style="color:#ffb964;">listen </span><span style="color:#cf6a4c;">80</span><span>;
</span><span> server_name searxng.dich.bid; </span><span> </span><span style="color:#ffb964;">server_name </span><span>searxng.dich.bid;
</span><span> </span><span>
</span><span> client_max_body_size 10M; </span><span> </span><span style="color:#ffb964;">client_max_body_size </span><span style="color:#cf6a4c;">10M</span><span>;
</span><span> </span><span>
</span><span> location / { </span><span> location / {
</span><span> proxy_pass http://searxng:8080; </span><span> </span><span style="color:#ffb964;">proxy_pass </span><span style="color:#7697d6;">http://searxng:8080</span><span>;
</span><span> proxy_set_header Host $host; </span><span> </span><span style="color:#ffb964;">proxy_set_header </span><span>Host </span><span style="color:#8fbfdc;">$host</span><span>;
</span><span> proxy_set_header X-Real-IP $remote_addr; </span><span> </span><span style="color:#ffb964;">proxy_set_header </span><span>X-Real-IP </span><span style="color:#8fbfdc;">$remote_addr</span><span>;
</span><span> proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; </span><span> </span><span style="color:#ffb964;">proxy_set_header </span><span>X-Forwarded-For </span><span style="color:#8fbfdc;">$proxy_add_x_forwarded_for</span><span>;
</span><span> proxy_set_header X-Forwarded-Proto $scheme; </span><span> </span><span style="color:#ffb964;">proxy_set_header </span><span>X-Forwarded-Proto </span><span style="color:#8fbfdc;">$scheme</span><span>;
</span><span> proxy_http_version 1.1; </span><span> </span><span style="color:#ffb964;">proxy_http_version </span><span style="color:#cf6a4c;">1</span><span>.</span><span style="color:#cf6a4c;">1</span><span>;
</span><span> proxy_set_header Connection &quot;&quot;; </span><span> </span><span style="color:#ffb964;">proxy_set_header </span><span>Connection </span><span style="color:#99ad6a;">&quot;&quot;</span><span>;
</span><span> } </span><span> }
</span><span> </span><span>
</span><span> error_page 502 /502.html; </span><span> </span><span style="color:#ffb964;">error_page </span><span style="color:#cf6a4c;">502 </span><span>/</span><span style="color:#cf6a4c;">502</span><span>.html;
</span><span> location = /502.html { </span><span> location = /</span><span style="color:#cf6a4c;">502</span><span>.html {
</span><span> root /usr/share/nginx/html; </span><span> </span><span style="color:#ffb964;">root </span><span>/usr/share/nginx/html;
</span><span> internal; </span><span> internal;
</span><span> } </span><span> }
</span><span>} </span><span>}
@@ -395,12 +395,12 @@
<ul> <ul>
<li>启动 searxng 服务:</li> <li>启动 searxng 服务:</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>docker-compose -f docker-compose.searxng.yml up -d <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">docker-compose -f</span><span> docker-compose.searxng.yml up</span><span style="color:#ffb964;"> -d
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>启动 nginx 服务:</li> <li>启动 nginx 服务:</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>docker-compose -f docker-compose.nginx.yml up -d <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">docker-compose -f</span><span> docker-compose.nginx.yml up</span><span style="color:#ffb964;"> -d
</span></code></pre> </span></code></pre>
<p>由于两者都加入了外部网络 nginxnginx 内的<code>proxy_pass http://searxng:8080</code>就能解析到 searxng 容器,实现反向代理效果。现在,访问<code>http://ip:18080</code>就可以访问Searxng搜索引擎。</p> <p>由于两者都加入了外部网络 nginxnginx 内的<code>proxy_pass http://searxng:8080</code>就能解析到 searxng 容器,实现反向代理效果。现在,访问<code>http://ip:18080</code>就可以访问Searxng搜索引擎。</p>
<h2 id="tian-jia-https">添加HTTPS</h2> <h2 id="tian-jia-https">添加HTTPS</h2>
@@ -411,74 +411,74 @@
<ul> <ul>
<li>如果只是用于测试可以生成自签名证书:</li> <li>如果只是用于测试可以生成自签名证书:</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>mkdir -p /home/dich/docker/nginx/certs <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">mkdir -p</span><span> /home/dich/docker/nginx/certs
</span><span>openssl req -x509 -nodes -days 365 -newkey rsa:2048 \ </span><span style="color:#ffb964;">openssl</span><span> req</span><span style="color:#ffb964;"> -x509 -nodes -days</span><span> 365</span><span style="color:#ffb964;"> -newkey</span><span> rsa:2048 \
</span><span> -keyout /home/dich/docker/nginx/certs/privkey.pem \ </span><span style="color:#ffb964;"> -keyout</span><span> /home/dich/docker/nginx/certs/privkey.pem \
</span><span> -out /home/dich/docker/nginx/certs/fullchain.pem \ </span><span style="color:#ffb964;"> -out</span><span> /home/dich/docker/nginx/certs/fullchain.pem \
</span><span> -subj &quot;/CN=your-domain.com&quot; </span><span style="color:#ffb964;"> -subj </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">/CN=your-domain.com</span><span style="color:#556633;">&quot;
</span></code></pre> </span></code></pre>
<ol start="2"> <ol start="2">
<li>更改searxng.conf:</li> <li>更改searxng.conf:</li>
</ol> </ol>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>server { <pre data-lang="conf" style="background-color:#151515;color:#e8e8d3;" class="language-conf "><code class="language-conf" data-lang="conf"><span style="color:#8fbfdc;">server </span><span>{
</span><span> listen 443 ssl; </span><span> </span><span style="color:#ffb964;">listen </span><span style="color:#cf6a4c;">443</span><span> ssl;
</span><span> server_name searxng.dich.bid; </span><span> </span><span style="color:#ffb964;">server_name </span><span>searxng.dich.bid;
</span><span> </span><span>
</span><span> # SSL 证书配置 </span><span> </span><span style="color:#888888;"># SSL 证书配置
</span><span> ssl_certificate /home/dich/docker/nginx/certs/fullchain.pem; </span><span> </span><span style="color:#ffb964;">ssl_certificate </span><span>/home/dich/docker/nginx/certs/fullchain.pem;
</span><span> ssl_certificate_key /home/dich/docker/nginx/certs/privkey.pem; </span><span> </span><span style="color:#ffb964;">ssl_certificate_key </span><span>/home/dich/docker/nginx/certs/privkey.pem;
</span><span> ssl_protocols TLSv1.2 TLSv1.3; </span><span> </span><span style="color:#ffb964;">ssl_protocols </span><span>TLSv1.</span><span style="color:#cf6a4c;">2</span><span> TLSv1.</span><span style="color:#cf6a4c;">3</span><span>;
</span><span> ssl_ciphers HIGH:!aNULL:!MD5; </span><span> </span><span style="color:#ffb964;">ssl_ciphers </span><span>HIGH:!aNULL:!MD5;
</span><span> </span><span>
</span><span> client_max_body_size 10M; </span><span> </span><span style="color:#ffb964;">client_max_body_size </span><span style="color:#cf6a4c;">10M</span><span>;
</span><span> </span><span>
</span><span> location / { </span><span> location / {
</span><span> proxy_pass http://searxng:8080; </span><span> </span><span style="color:#ffb964;">proxy_pass </span><span style="color:#7697d6;">http://searxng:8080</span><span>;
</span><span> proxy_set_header Host $host; </span><span> </span><span style="color:#ffb964;">proxy_set_header </span><span>Host </span><span style="color:#8fbfdc;">$host</span><span>;
</span><span> proxy_set_header X-Real-IP $remote_addr; </span><span> </span><span style="color:#ffb964;">proxy_set_header </span><span>X-Real-IP </span><span style="color:#8fbfdc;">$remote_addr</span><span>;
</span><span> proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; </span><span> </span><span style="color:#ffb964;">proxy_set_header </span><span>X-Forwarded-For </span><span style="color:#8fbfdc;">$proxy_add_x_forwarded_for</span><span>;
</span><span> proxy_set_header X-Forwarded-Proto $scheme; </span><span> </span><span style="color:#ffb964;">proxy_set_header </span><span>X-Forwarded-Proto </span><span style="color:#8fbfdc;">$scheme</span><span>;
</span><span> proxy_http_version 1.1; </span><span> </span><span style="color:#ffb964;">proxy_http_version </span><span style="color:#cf6a4c;">1</span><span>.</span><span style="color:#cf6a4c;">1</span><span>;
</span><span> proxy_set_header Connection &quot;&quot;; </span><span> </span><span style="color:#ffb964;">proxy_set_header </span><span>Connection </span><span style="color:#99ad6a;">&quot;&quot;</span><span>;
</span><span> } </span><span> }
</span><span> </span><span>
</span><span> error_page 502 /502.html; </span><span> </span><span style="color:#ffb964;">error_page </span><span style="color:#cf6a4c;">502 </span><span>/</span><span style="color:#cf6a4c;">502</span><span>.html;
</span><span> location = /502.html { </span><span> location = /</span><span style="color:#cf6a4c;">502</span><span>.html {
</span><span> root /usr/share/nginx/html; </span><span> </span><span style="color:#ffb964;">root </span><span>/usr/share/nginx/html;
</span><span> internal; </span><span> internal;
</span><span> } </span><span> }
</span><span>} </span><span>}
</span><span> </span><span>
</span><span># HTTP 服务器块,将所有流量重定向到 HTTPS </span><span style="color:#888888;"># HTTP 服务器块,将所有流量重定向到 HTTPS
</span><span>server { </span><span style="color:#8fbfdc;">server </span><span>{
</span><span> listen 80; </span><span> </span><span style="color:#ffb964;">listen </span><span style="color:#cf6a4c;">80</span><span>;
</span><span> server_name searxng.dich.bid; </span><span> </span><span style="color:#ffb964;">server_name </span><span>searxng.dich.bid;
</span><span> return 301 https://$host$request_uri; </span><span> </span><span style="color:#ffb964;">return </span><span style="color:#cf6a4c;">301 </span><span style="color:#7697d6;">https://$host$request_uri</span><span>;
</span><span>} </span><span>}
</span></code></pre> </span></code></pre>
<ol start="3"> <ol start="3">
<li>更改docker-compose.nginx.yml</li> <li>更改docker-compose.nginx.yml</li>
</ol> </ol>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>version: &#39;3&#39; <pre data-lang="yaml" style="background-color:#151515;color:#e8e8d3;" class="language-yaml "><code class="language-yaml" data-lang="yaml"><span style="color:#ffb964;">version</span><span>: </span><span style="color:#556633;">&#39;</span><span style="color:#99ad6a;">3</span><span style="color:#556633;">&#39;
</span><span> </span><span>
</span><span>services: </span><span style="color:#ffb964;">services</span><span>:
</span><span> nginx: </span><span> </span><span style="color:#ffb964;">nginx</span><span>:
</span><span> image: nginx:latest </span><span> </span><span style="color:#ffb964;">image</span><span>: </span><span style="color:#99ad6a;">nginx:latest
</span><span> container_name: nginx </span><span> </span><span style="color:#ffb964;">container_name</span><span>: </span><span style="color:#99ad6a;">nginx
</span><span> restart: unless-stopped </span><span> </span><span style="color:#ffb964;">restart</span><span>: </span><span style="color:#99ad6a;">unless-stopped
</span><span> ports: </span><span> </span><span style="color:#ffb964;">ports</span><span>:
</span><span> - &quot;80:80&quot; </span><span> - </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">80:80</span><span style="color:#556633;">&quot;
</span><span> # 如需要 HTTPS请映射 443 端口并挂载证书目录 </span><span> </span><span style="color:#888888;"># 如需要 HTTPS请映射 443 端口并挂载证书目录
</span><span> - &quot;443:443&quot; </span><span> - </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">443:443</span><span style="color:#556633;">&quot;
</span><span> volumes: </span><span> </span><span style="color:#ffb964;">volumes</span><span>:
</span><span> - ./nginx/searxng.conf:/etc/nginx/conf.d/default.conf:ro </span><span> - </span><span style="color:#99ad6a;">./nginx/searxng.conf:/etc/nginx/conf.d/default.conf:ro
</span><span> - ./nginx/certs:/home/dich/docker/nginx/certs </span><span> - </span><span style="color:#99ad6a;">./nginx/certs:/home/dich/docker/nginx/certs
</span><span> networks: </span><span> </span><span style="color:#ffb964;">networks</span><span>:
</span><span> - nginx </span><span> - </span><span style="color:#99ad6a;">nginx
</span><span> </span><span>
</span><span>networks: </span><span style="color:#ffb964;">networks</span><span>:
</span><span> nginx: </span><span> </span><span style="color:#ffb964;">nginx</span><span>:
</span><span> external: true </span><span> </span><span style="color:#ffb964;">external</span><span>: true
</span></code></pre> </span></code></pre>
<ol start="4"> <ol start="4">
<li>启动新配置</li> <li>启动新配置</li>
@@ -486,12 +486,12 @@
<ul> <ul>
<li>重启容器</li> <li>重启容器</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo docker compose -f docker-compose.nginx.yml up -d <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">sudo</span><span> docker compose</span><span style="color:#ffb964;"> -f</span><span> docker-compose.nginx.yml up</span><span style="color:#ffb964;"> -d
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>查看日志</li> <li>查看日志</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo docker logs searxng <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">sudo</span><span> docker logs searxng
</span></code></pre> </span></code></pre>
<h2 id="caddy">Caddy</h2> <h2 id="caddy">Caddy</h2>
<blockquote> <blockquote>
@@ -500,104 +500,104 @@
<ol start="0"> <ol start="0">
<li>示例结构:</li> <li>示例结构:</li>
</ol> </ol>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>. <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span>.
</span><span>└── compose </span><span style="color:#ffb964;">└──</span><span> compose
</span><span> ├── certs </span><span> </span><span style="color:#ffb964;">├──</span><span> certs
</span><span> ├── cert.pem </span><span> </span><span style="color:#ffb964;"></span><span> ├── cert.pem
</span><span> └── key.pem </span><span> </span><span style="color:#ffb964;"></span><span> └── key.pem
</span><span> ├── compose.caddy.yml </span><span> </span><span style="color:#ffb964;">├──</span><span> compose.caddy.yml
</span><span> ├── compose.miniflux.yml </span><span> </span><span style="color:#ffb964;">├──</span><span> compose.miniflux.yml
</span><span> ├── compose.searxng.yml </span><span> </span><span style="color:#ffb964;">├──</span><span> compose.searxng.yml
</span><span> └── conf </span><span> </span><span style="color:#ffb964;">└──</span><span> conf
</span><span> └── Caddyfile </span><span> </span><span style="color:#ffb964;">└──</span><span> Caddyfile
</span></code></pre> </span></code></pre>
<ol> <ol>
<li>同样创建名为Caddy的docker网络</li> <li>同样创建名为Caddy的docker网络</li>
</ol> </ol>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>docker network create caddy <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">docker</span><span> network create caddy
</span></code></pre> </span></code></pre>
<ol start="2"> <ol start="2">
<li>编写Caddy的compose可以看到caddy可以自带签发证书</li> <li>编写Caddy的compose可以看到caddy可以自带签发证书</li>
</ol> </ol>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>version: &#39;3.7&#39; <pre data-lang="yaml" style="background-color:#151515;color:#e8e8d3;" class="language-yaml "><code class="language-yaml" data-lang="yaml"><span style="color:#ffb964;">version</span><span>: </span><span style="color:#556633;">&#39;</span><span style="color:#99ad6a;">3.7</span><span style="color:#556633;">&#39;
</span><span> </span><span>
</span><span># 自动签发模式 </span><span style="color:#888888;"># 自动签发模式
</span><span> </span><span>
</span><span>services: </span><span style="color:#ffb964;">services</span><span>:
</span><span> caddy: </span><span> </span><span style="color:#ffb964;">caddy</span><span>:
</span><span> image: caddy:latest </span><span> </span><span style="color:#ffb964;">image</span><span>: </span><span style="color:#99ad6a;">caddy:latest
</span><span> container_name: caddy </span><span> </span><span style="color:#ffb964;">container_name</span><span>: </span><span style="color:#99ad6a;">caddy
</span><span> restart: unless-stopped </span><span> </span><span style="color:#ffb964;">restart</span><span>: </span><span style="color:#99ad6a;">unless-stopped
</span><span> volumes: </span><span> </span><span style="color:#ffb964;">volumes</span><span>:
</span><span> - ./conf:/etc/caddy:ro </span><span> - </span><span style="color:#99ad6a;">./conf:/etc/caddy:ro
</span><span> - caddy_data:/data </span><span> - </span><span style="color:#99ad6a;">caddy_data:/data
</span><span> - caddy_config:/config </span><span> - </span><span style="color:#99ad6a;">caddy_config:/config
</span><span> ports: </span><span> </span><span style="color:#ffb964;">ports</span><span>:
</span><span> - &quot;80:80&quot; </span><span> - </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">80:80</span><span style="color:#556633;">&quot;
</span><span> - &quot;443:443&quot; </span><span> - </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">443:443</span><span style="color:#556633;">&quot;
</span><span> networks: </span><span> </span><span style="color:#ffb964;">networks</span><span>:
</span><span> - caddy </span><span> - </span><span style="color:#99ad6a;">caddy
</span><span> </span><span>
</span><span>networks: </span><span style="color:#ffb964;">networks</span><span>:
</span><span> caddy: </span><span> </span><span style="color:#ffb964;">caddy</span><span>:
</span><span> external: true </span><span> </span><span style="color:#ffb964;">external</span><span>: true
</span><span> </span><span>
</span><span>volumes: </span><span style="color:#ffb964;">volumes</span><span>:
</span><span> caddy_data: </span><span> </span><span style="color:#ffb964;">caddy_data</span><span>:
</span><span> caddy_config: </span><span> </span><span style="color:#ffb964;">caddy_config</span><span>:
</span><span> </span><span>
</span><span> </span><span>
</span><span># 自备证书模式 </span><span style="color:#888888;"># 自备证书模式
</span><span> </span><span>
</span><span>services: </span><span style="color:#ffb964;">services</span><span>:
</span><span> caddy: </span><span> </span><span style="color:#ffb964;">caddy</span><span>:
</span><span> image: caddy:latest </span><span> </span><span style="color:#ffb964;">image</span><span>: </span><span style="color:#99ad6a;">caddy:latest
</span><span> container_name: caddy </span><span> </span><span style="color:#ffb964;">container_name</span><span>: </span><span style="color:#99ad6a;">caddy
</span><span> restart: unless-stopped </span><span> </span><span style="color:#ffb964;">restart</span><span>: </span><span style="color:#99ad6a;">unless-stopped
</span><span> environment: </span><span> </span><span style="color:#ffb964;">environment</span><span>:
</span><span> - CADDYPATH=/etc/caddycerts </span><span> - </span><span style="color:#99ad6a;">CADDYPATH=/etc/caddycerts
</span><span> volumes: </span><span> </span><span style="color:#ffb964;">volumes</span><span>:
</span><span> - ./conf:/etc/caddy </span><span> - </span><span style="color:#99ad6a;">./conf:/etc/caddy
</span><span> - ./certs:/etc/caddycerts </span><span> - </span><span style="color:#99ad6a;">./certs:/etc/caddycerts
</span><span> - caddy_data:/data </span><span> - </span><span style="color:#99ad6a;">caddy_data:/data
</span><span> - caddy_config:/config </span><span> - </span><span style="color:#99ad6a;">caddy_config:/config
</span><span> ports: </span><span> </span><span style="color:#ffb964;">ports</span><span>:
</span><span> - &quot;80:80&quot; </span><span> - </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">80:80</span><span style="color:#556633;">&quot;
</span><span> - &quot;443:443&quot; </span><span> - </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">443:443</span><span style="color:#556633;">&quot;
</span><span> networks: </span><span> </span><span style="color:#ffb964;">networks</span><span>:
</span><span> - caddy </span><span> - </span><span style="color:#99ad6a;">caddy
</span><span> </span><span>
</span><span>volumes: </span><span style="color:#ffb964;">volumes</span><span>:
</span><span> caddy_data: </span><span> </span><span style="color:#ffb964;">caddy_data</span><span>:
</span><span> caddy_config: </span><span> </span><span style="color:#ffb964;">caddy_config</span><span>:
</span><span>networks: </span><span style="color:#ffb964;">networks</span><span>:
</span><span> caddy: </span><span> </span><span style="color:#ffb964;">caddy</span><span>:
</span><span> external: true </span><span> </span><span style="color:#ffb964;">external</span><span>: true
</span></code></pre> </span></code></pre>
<ol start="3"> <ol start="3">
<li>编写Caddyfile可以看到自动开启HTTPS模式</li> <li>编写Caddyfile可以看到自动开启HTTPS模式</li>
</ol> </ol>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span># 自动签发模式 <pre data-lang="conf" style="background-color:#151515;color:#e8e8d3;" class="language-conf "><code class="language-conf" data-lang="conf"><span style="color:#888888;"># 自动签发模式
</span><span>searxng.dich.bid { </span><span style="color:#ffb964;">searxng</span><span>.dich.bid {
</span><span> reverse_proxy searxng:8080 { </span><span> </span><span style="color:#ffb964;">reverse_proxy </span><span>searxng:</span><span style="color:#cf6a4c;">8080</span><span> {
</span><span> header_up Host {upstream_hostport} </span><span> </span><span style="color:#ffb964;">header_up </span><span>Host {upstream_hostport}
</span><span> } </span><span> }
</span><span>} </span><span>}
</span><span> </span><span>
</span><span>miniflux.dich.bid { </span><span style="color:#ffb964;">miniflux</span><span>.dich.bid {
</span><span> reverse_proxy miniflux:8080 { </span><span> </span><span style="color:#ffb964;">reverse_proxy </span><span>miniflux:</span><span style="color:#cf6a4c;">8080</span><span> {
</span><span> header_up Host {upstream_hostport} </span><span> </span><span style="color:#ffb964;">header_up </span><span>Host {upstream_hostport}
</span><span> } </span><span> }
</span><span>} </span><span>}
</span><span> </span><span>
</span><span># 自备证书模式 </span><span style="color:#888888;"># 自备证书模式
</span><span>searxng.dich.bid { </span><span style="color:#ffb964;">searxng</span><span>.dich.bid {
</span><span> reverse_proxy searxng:8080 </span><span> </span><span style="color:#ffb964;">reverse_proxy </span><span>searxng:</span><span style="color:#cf6a4c;">8080
</span><span> tls /etc/caddycerts/cert.pem /etc/caddycerts/key.pem </span><span> </span><span style="color:#ffb964;">tls </span><span>/etc/caddycerts/cert.pem /etc/caddycerts/key.pem
</span><span>} </span><span>}
</span><span>miniflux.dich.bid { </span><span style="color:#ffb964;">miniflux</span><span>.dich.bid {
</span><span> reverse_proxy miniflux:8080 </span><span> </span><span style="color:#ffb964;">reverse_proxy </span><span>miniflux:</span><span style="color:#cf6a4c;">8080
</span><span> tls /etc/caddycerts/cert.pem /etc/caddycerts/key.pem </span><span> </span><span style="color:#ffb964;">tls </span><span>/etc/caddycerts/cert.pem /etc/caddycerts/key.pem
</span><span>} </span><span>}
</span></code></pre> </span></code></pre>
<ol start="4"> <ol start="4">

View File

@@ -181,34 +181,34 @@
<p>那么在 DKIM 中,发送邮件的服务器,比如 QQ 邮箱,会使用公私钥对邮件内容进行签名,并将签名和邮件内容一起发送。当 Gmail 收到从 163 邮箱转发过来的 QQ 邮箱邮件的时候,就会去查询 <code>qq.com</code> 的 DNS 记录,拿到公钥。然后使用公钥和签名来验证邮件内容。如果验签不通过,则将邮件判定为伪造。</p> <p>那么在 DKIM 中,发送邮件的服务器,比如 QQ 邮箱,会使用公私钥对邮件内容进行签名,并将签名和邮件内容一起发送。当 Gmail 收到从 163 邮箱转发过来的 QQ 邮箱邮件的时候,就会去查询 <code>qq.com</code> 的 DNS 记录,拿到公钥。然后使用公钥和签名来验证邮件内容。如果验签不通过,则将邮件判定为伪造。</p>
<p><strong>5.DMARC</strong></p> <p><strong>5.DMARC</strong></p>
<p>经过了 SPF 和 DKIM 的保证,是不是就可以完美的发送接收邮件了?其实并不能,我们通过邮件后台来看一下邮件的原始文本。</p> <p>经过了 SPF 和 DKIM 的保证,是不是就可以完美的发送接收邮件了?其实并不能,我们通过邮件后台来看一下邮件的原始文本。</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>MIME-Version: 1.0 <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">MIME-Version:</span><span> 1.0
</span><span>Return-Path: xxx@fake.com </span><span style="color:#ffb964;">Return-Path:</span><span> xxx@fake.com
</span><span>DKIM-Signature: d=fake.com,b=adceabkekd12 </span><span style="color:#ffb964;">DKIM-Signature:</span><span> d=fake.com,b=adceabkekd12
</span><span>Date: Tue, 22 Mar 2022 06:37:58 +0000 </span><span style="color:#ffb964;">Date:</span><span> Tue, 22 Mar 2022 06:37:58 +0000
</span><span>Content-Type: multipart/alternative; </span><span style="color:#ffb964;">Content-Type:</span><span> multipart/alternative;
</span><span> boundary=&quot;--=_RainLoop_587_997816661.1647931078&quot; </span><span> </span><span style="color:#ffb964;">boundary</span><span>=</span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">--=_RainLoop_587_997816661.1647931078</span><span style="color:#556633;">&quot;
</span><span>From: admin@a.com </span><span style="color:#ffb964;">From:</span><span> admin@a.com
</span><span>Message-ID: &lt;a67d96a38592cdad46cca89e98dda26d@techfm.club&gt; </span><span style="color:#ffb964;">Message-ID: </span><span>&lt;a67d96a38592cdad46cca89e98dda26d@techfm.club&gt;
</span><span>Subject: Seems it works </span><span style="color:#ffb964;">Subject:</span><span> Seems it works
</span><span>To: &quot;Somebody&quot; &lt;a@gmail.com&gt; </span><span style="color:#ffb964;">To: </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">Somebody</span><span style="color:#556633;">&quot; </span><span>&lt;a@gmail.com&gt;
</span><span> </span><span>
</span><span> </span><span>
</span><span>----=_RainLoop_587_997816661.1647931078 </span><span style="color:#ffb964;">---</span><span>-=</span><span style="color:#99ad6a;">_RainLoop_587_997816661.1647931078
</span><span>Content-Type: text/plain; charset=&quot;utf-8&quot; </span><span style="color:#ffb964;">Content-Type:</span><span> text/plain; </span><span style="color:#ffb964;">charset</span><span>=</span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">utf-8</span><span style="color:#556633;">&quot;
</span><span>Content-Transfer-Encoding: quoted-printable </span><span style="color:#ffb964;">Content-Transfer-Encoding:</span><span> quoted-printable
</span><span> </span><span>
</span><span>~~ </span><span style="color:#ffb964;">~~
</span><span> </span><span>
</span><span>----=_RainLoop_587_997816661.1647931078 </span><span style="color:#ffb964;">---</span><span>-=</span><span style="color:#99ad6a;">_RainLoop_587_997816661.1647931078
</span><span>Content-Type: text/html; charset=&quot;utf-8&quot; </span><span style="color:#ffb964;">Content-Type:</span><span> text/html; </span><span style="color:#ffb964;">charset</span><span>=</span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">utf-8</span><span style="color:#556633;">&quot;
</span><span>Content-Transfer-Encoding: quoted-printable </span><span style="color:#ffb964;">Content-Transfer-Encoding:</span><span> quoted-printable
</span><span> </span><span>
</span><span>&lt;!DOCTYPE html&gt;&lt;html&gt;&lt;head&gt;&lt;meta http-equiv=3D&quot;Content-Type&quot; content=3D&quot;t= </span><span>&lt;!DOCTYPE </span><span style="color:#ffb964;">html</span><span>&gt;&lt;html&gt;&lt;head&gt;&lt;meta http-equiv=3D</span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">Content-Type</span><span style="color:#556633;">&quot;</span><span> content=3D</span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">t=
</span><span>ext/html; charset=3Dutf-8&quot; /&gt;&lt;/head&gt;&lt;body&gt;&lt;div data-html-editor-font-wrap= </span><span style="color:#99ad6a;">ext/html; charset=3Dutf-8</span><span style="color:#556633;">&quot;</span><span> /&gt;&lt;/head&gt;&lt;body&gt;&lt;div data-html-editor-font-wrap=
</span><span>per=3D&quot;true&quot; style=3D&quot;font-family: arial, sans-serif; font-size: 13px;&quot;&gt;&lt;= </span><span style="color:#ffb964;">per</span><span>=</span><span style="color:#99ad6a;">3D</span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">true</span><span style="color:#556633;">&quot; </span><span style="color:#ffb964;">style</span><span>=</span><span style="color:#99ad6a;">3D</span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">font-family: arial, sans-serif; font-size: 13px;</span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">&gt;&lt;=
</span><span>br&gt;~~&lt;signature&gt;&lt;/signature&gt;&lt;/div&gt;&lt;/body&gt;&lt;/html&gt; </span><span style="color:#ffb964;">br</span><span>&gt;</span><span style="color:#ffb964;">~~</span><span>&lt;signature&gt;&lt;/signature&gt;&lt;/div&gt;&lt;/body&gt;&lt;/html&gt;
</span><span> </span><span>
</span><span>----=_RainLoop_587_997816661.1647931078-- </span><span style="color:#ffb964;">---</span><span>-=</span><span style="color:#99ad6a;">_RainLoop_587_997816661.1647931078--
</span><span> </span><span>
</span></code></pre> </span></code></pre>
<p>SPF 解决了接收方验证发件人域名 SPF 记录内 IP 地址从而验证发件人的问题。但是因为 SPF 定义的发件人是 RFC5321 协议中规定的 Return-Path而 DKIM 在邮件头中直接包含了域名,只要使用该域名的公钥验证通过即可。</p> <p>SPF 解决了接收方验证发件人域名 SPF 记录内 IP 地址从而验证发件人的问题。但是因为 SPF 定义的发件人是 RFC5321 协议中规定的 Return-Path而 DKIM 在邮件头中直接包含了域名,只要使用该域名的公钥验证通过即可。</p>

View File

@@ -125,43 +125,43 @@
<p>前言 poste.io 邮件服务基于 Docker 搭建,用的是 Haraka + Dovecot + SQLite 邮件系统,占用资源较少,安装简单,适合个人使用。</p> <p>前言 poste.io 邮件服务基于 Docker 搭建,用的是 Haraka + Dovecot + SQLite 邮件系统,占用资源较少,安装简单,适合个人使用。</p>
<span id="continue-reading"></span><h2 id="vpsshang-de-pei-zhi">VPS上的配置</h2> <span id="continue-reading"></span><h2 id="vpsshang-de-pei-zhi">VPS上的配置</h2>
<h3 id="xiu-gai-vps-hostname">修改VPS hostname</h3> <h3 id="xiu-gai-vps-hostname">修改VPS hostname</h3>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>hostnamectl set-hostname mail.your-domain.com <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">hostnamectl</span><span> set-hostname mail.your-domain.com
</span></code></pre> </span></code></pre>
<h3 id="xiu-gai-hostswen-jian">修改hosts文件</h3> <h3 id="xiu-gai-hostswen-jian">修改hosts文件</h3>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>vim /etc/hosts <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">vim</span><span> /etc/hosts
</span></code></pre> </span></code></pre>
<p>添加一行</p> <p>添加一行</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>127.0.1.1 localhost.localdomain mail.your-domain.com <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">127.0.1.1</span><span> localhost.localdomain mail.your-domain.com
</span></code></pre> </span></code></pre>
<h2 id="an-zhuang-poste">安装poste</h2> <h2 id="an-zhuang-poste">安装poste</h2>
<p>docker compose文件示例</p> <p>docker compose文件示例</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>version: &#39;3.7&#39; <pre data-lang="yaml" style="background-color:#151515;color:#e8e8d3;" class="language-yaml "><code class="language-yaml" data-lang="yaml"><span style="color:#ffb964;">version</span><span>: </span><span style="color:#556633;">&#39;</span><span style="color:#99ad6a;">3.7</span><span style="color:#556633;">&#39;
</span><span> </span><span>
</span><span>services: </span><span style="color:#ffb964;">services</span><span>:
</span><span> mailserver: </span><span> </span><span style="color:#ffb964;">mailserver</span><span>:
</span><span> image: analogic/poste.io </span><span> </span><span style="color:#ffb964;">image</span><span>: </span><span style="color:#99ad6a;">analogic/poste.io
</span><span> hostname: mail.your-domain.com </span><span> </span><span style="color:#ffb964;">hostname</span><span>: </span><span style="color:#99ad6a;">mail.your-domain.com
</span><span> ports: </span><span> </span><span style="color:#ffb964;">ports</span><span>:
</span><span> - &quot;25:25&quot; </span><span> - </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">25:25</span><span style="color:#556633;">&quot;
</span><span> - &quot;110:110&quot; </span><span> - </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">110:110</span><span style="color:#556633;">&quot;
</span><span> - &quot;143:143&quot; </span><span> - </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">143:143</span><span style="color:#556633;">&quot;
</span><span> - &quot;587:587&quot; </span><span> - </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">587:587</span><span style="color:#556633;">&quot;
</span><span> - &quot;993:993&quot; </span><span> - </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">993:993</span><span style="color:#556633;">&quot;
</span><span> - &quot;995:995&quot; </span><span> - </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">995:995</span><span style="color:#556633;">&quot;
</span><span> - &quot;4190:4190&quot; </span><span> - </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">4190:4190</span><span style="color:#556633;">&quot;
</span><span> - &quot;465:465&quot; </span><span> - </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">465:465</span><span style="color:#556633;">&quot;
</span><span> - &quot;127.0.0.1:8808:80&quot; </span><span> - </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">127.0.0.1:8808:80</span><span style="color:#556633;">&quot;
</span><span> - &quot;127.0.0.1:8843:443&quot; </span><span> - </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">127.0.0.1:8843:443</span><span style="color:#556633;">&quot;
</span><span> environment: </span><span> </span><span style="color:#ffb964;">environment</span><span>:
</span><span> - LETSENCRYPT_EMAIL=admin@your-domain.com </span><span> - </span><span style="color:#99ad6a;">LETSENCRYPT_EMAIL=admin@your-domain.com
</span><span> - LETSENCRYPT_HOST=mail.your-domain.com </span><span> - </span><span style="color:#99ad6a;">LETSENCRYPT_HOST=mail.your-domain.com
</span><span> - VIRTUAL_HOST=mail.your-domain.com </span><span> - </span><span style="color:#99ad6a;">VIRTUAL_HOST=mail.your-domain.com
</span><span> - DISABLE_CLAMAV=TRUE </span><span> - </span><span style="color:#99ad6a;">DISABLE_CLAMAV=TRUE
</span><span> - TZ=Asia/Shanghai </span><span> - </span><span style="color:#99ad6a;">TZ=Asia/Shanghai
</span><span> - HTTPS=OFF </span><span> - </span><span style="color:#99ad6a;">HTTPS=OFF
</span><span> volumes: </span><span> </span><span style="color:#ffb964;">volumes</span><span>:
</span><span> - /etc/localtime:/etc/localtime:ro </span><span> - </span><span style="color:#99ad6a;">/etc/localtime:/etc/localtime:ro
</span><span> - ./mail-data:/data </span><span> - </span><span style="color:#99ad6a;">./mail-data:/data
</span></code></pre> </span></code></pre>
<ul> <ul>
<li> <li>

View File

@@ -190,32 +190,32 @@
</span><span style="color:#ffb964;">nexttrace --table --no-rdns</span><span> www.example.org </span><span style="color:#ffb964;">nexttrace --table --no-rdns</span><span> www.example.org
</span></code></pre> </span></code></pre>
<h3 id="shi-li">示例</h3> <h3 id="shi-li">示例</h3>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span> nexttrace 38.207.170.5x <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;"></span><span> nexttrace 38.207.170.5x
</span><span>NextTrace v1.4.0 2025-04-16T01:10:07Z dccc41b </span><span style="color:#ffb964;">NextTrace</span><span> v1.4.0 2025-04-16T01:10:07Z dccc41b
</span><span>[NextTrace API] preferred API IP - 198.18.0.61 - 601.41ms - 🐠 (Relay) → Misaka.HKG </span><span style="color:#ffb964;">[NextTrace</span><span> API] preferred API IP - 198.18.0.61 - 601.41ms - 🐠 (Relay) </span><span style="color:#ffb964;"></span><span> Misaka.HKG
</span><span>IP Geo Data Provider: LeoMoeAPI </span><span style="color:#ffb964;">IP</span><span> Geo Data Provider: LeoMoeAPI
</span><span>traceroute to 38.207.170.5x, 30 hops max, 52 bytes payload, ICMP mode </span><span style="color:#ffb964;">traceroute</span><span> to 38.207.170.5x, 30 hops max, 52 bytes payload, ICMP mode
</span><span>1 192.168.1.1 * RFC1918 </span><span style="color:#ffb964;">1</span><span> 192.168.1.1 * RFC1918
</span><span> 3.80 ms / 2.75 ms / 3.37 ms </span><span> </span><span style="color:#ffb964;">3.80</span><span> ms / 2.75 ms / 3.37 ms
</span><span>2 192.168.0.1 * RFC1918 </span><span style="color:#ffb964;">2</span><span> 192.168.0.1 * RFC1918
</span><span> 4.14 ms / 5.40 ms / 6.76 ms </span><span> </span><span style="color:#ffb964;">4.14</span><span> ms / 5.40 ms / 6.76 ms
</span><span>3 100.64.0.1 * RFC6598 </span><span style="color:#ffb964;">3</span><span> 100.64.0.1 * RFC6598
</span><span> 11.22 ms / 12.22 ms / 13.40 ms </span><span> </span><span style="color:#ffb964;">11.22</span><span> ms / 12.22 ms / 13.40 ms
</span><span>4 * </span><span style="color:#ffb964;">4 </span><span>*
</span><span>5 * </span><span style="color:#ffb964;">5 </span><span>*
</span><span>6 * </span><span style="color:#ffb964;">6 </span><span>*
</span><span>7 * </span><span style="color:#ffb964;">7 </span><span>*
</span><span>8 202.97.66.213 AS4134 [CHINANET-BB] 中国 广东 广州 www.chinatelecom.com.cn </span><span style="color:#ffb964;">8</span><span> 202.97.66.213 AS4134 </span><span style="color:#8fbfdc;">[</span><span>CHINANET-BB</span><span style="color:#8fbfdc;">]</span><span> 中国 广东 广州 www.chinatelecom.com.cn
</span><span> 22.25 ms / 21.00 ms / 20.69 ms </span><span> </span><span style="color:#ffb964;">22.25</span><span> ms / 21.00 ms / 20.69 ms
</span><span>9 * </span><span style="color:#ffb964;">9 </span><span>*
</span><span>10 218.30.53.134 AS4134 [CHINANET-US] 美国 加利福尼亚 洛杉矶 CT-POP-Zenlayer www.chinatelecom.com.cn 电信 </span><span style="color:#ffb964;">10</span><span> 218.30.53.134 AS4134 </span><span style="color:#8fbfdc;">[</span><span>CHINANET-US</span><span style="color:#8fbfdc;">]</span><span> 美国 加利福尼亚 洛杉矶 CT-POP-Zenlayer www.chinatelecom.com.cn 电信
</span><span> 174.40 ms / 173.56 ms / 173.49 ms </span><span> </span><span style="color:#ffb964;">174.40</span><span> ms / 173.56 ms / 173.49 ms
</span><span>11 10.163.0.2 * RFC1918 </span><span style="color:#ffb964;">11</span><span> 10.163.0.2 * RFC1918
</span><span> 173.78 ms / 174.93 ms / 174.35 ms </span><span> </span><span style="color:#ffb964;">173.78</span><span> ms / 174.93 ms / 174.35 ms
</span><span>12 * </span><span style="color:#ffb964;">12 </span><span>*
</span><span>13 38.207.170.5x AS979 美国 加利福尼亚州 洛杉矶 as979.net </span><span style="color:#ffb964;">13</span><span> 38.207.170.5x AS979 美国 加利福尼亚州 洛杉矶 as979.net
</span><span> 176.31 ms / 177.14 ms / 174.71 ms </span><span> </span><span style="color:#ffb964;">176.31</span><span> ms / 177.14 ms / 174.71 ms
</span><span>MapTrace URL: https://assets.nxtrace.org/tracemap/30cce0c3-18a6-582c-8679-xxxxxxxxxx.html </span><span style="color:#ffb964;">MapTrace</span><span> URL: https://assets.nxtrace.org/tracemap/30cce0c3-18a6-582c-8679-xxxxxxxxxx.html
</span></code></pre> </span></code></pre>
<hr /> <hr />
<h2 id="ge-chong-xian-lu-xiang-jie">各种线路详解</h2> <h2 id="ge-chong-xian-lu-xiang-jie">各种线路详解</h2>

View File

@@ -132,85 +132,85 @@
<p>1999年OpenBSD 的开发人员决定写一个<code>SSH 2 协议的开源实现</code> ,这就是 OpenSSH 项目。该项目最初是基于 SSH 1.2.12 版本,那是当时 SSH1 最后一个开源版本。但是OpenSSH 很快就完全摆脱了原始的官方代码在许多开发者的参与下按照自己的路线发展。OpenSSH 随 OpenBSD 2.6 版本一起提供,以后又移植到其他操作系统,成为最流行的 SSH 实现。目前Linux 的所有发行版几乎都自带 OpenSSH。</p> <p>1999年OpenBSD 的开发人员决定写一个<code>SSH 2 协议的开源实现</code> ,这就是 OpenSSH 项目。该项目最初是基于 SSH 1.2.12 版本,那是当时 SSH1 最后一个开源版本。但是OpenSSH 很快就完全摆脱了原始的官方代码在许多开发者的参与下按照自己的路线发展。OpenSSH 随 OpenBSD 2.6 版本一起提供,以后又移植到其他操作系统,成为最流行的 SSH 实现。目前Linux 的所有发行版几乎都自带 OpenSSH。</p>
<h2 id="kai-shi">开始</h2> <h2 id="kai-shi">开始</h2>
<p>李华是一个大学生现在他买了一台服务器公网IPv4为114.514.114.514,李华打算连到上面看看:</p> <p>李华是一个大学生现在他买了一台服务器公网IPv4为114.514.114.514,李华打算连到上面看看:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>ssh -p 22 root@114.514.114.514 <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">ssh -p</span><span> 22 root@114.514.114.514
</span></code></pre> </span></code></pre>
<p>随后命令行弹出了密码输入李华输入了初始密码114514,成功登录了进去;现在每次登录只要输入一行命令就可以,大功告成!</p> <p>随后命令行弹出了密码输入李华输入了初始密码114514,成功登录了进去;现在每次登录只要输入一行命令就可以,大功告成!</p>
<h2 id="an-quan">安全</h2> <h2 id="an-quan">安全</h2>
<p>一段时间后李华的linux知识提高了不少他发现有不少IP在用随机密码不断尝试登录自己的服务器这太危险了</p> <p>一段时间后李华的linux知识提高了不少他发现有不少IP在用随机密码不断尝试登录自己的服务器这太危险了</p>
<p>于是,李华查阅了资料,发现有一篇博客<a href="https://blog.dich.bid/about-server-set/">乱七八糟:服务器初始化与安全设置</a>于是他将openssh-server的端口改成了2333,并开启了fail2ban这下应该安全了</p> <p>于是,李华查阅了资料,发现有一篇博客<a href="https://blog.dich.bid/about-server-set/">乱七八糟:服务器初始化与安全设置</a>于是他将openssh-server的端口改成了2333,并开启了fail2ban这下应该安全了</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>### 更换SSH端口 <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#888888;">### 更换SSH端口
</span><span> </span><span>
</span><span>使用root账户或已经有sudo权限的用户登录到系统。 </span><span style="color:#ffb964;">使用root账户或已经有sudo权限的用户登录到系统。
</span><span> </span><span>
</span><span>打开SSH配置文件`sshd_config`可以使用文本编辑器如nano或vi。以下是使用nano编辑器的示例 </span><span style="color:#ffb964;">打开SSH配置文件</span><span>`</span><span style="color:#ffb964;">sshd_config</span><span>`可以使用文本编辑器如nano或vi。以下是使用nano编辑器的示例
</span><span> </span><span>
</span><span>sudo vim /etc/ssh/sshd_config </span><span style="color:#ffb964;">sudo</span><span> vim /etc/ssh/sshd_config
</span><span> </span><span>
</span><span>在配置文件中找到以下行: </span><span style="color:#ffb964;">在配置文件中找到以下行:
</span><span> </span><span>
</span><span>Port 22 </span><span style="color:#ffb964;">Port</span><span> 22
</span><span> </span><span>
</span><span>这是SSH默认的端口号你可以将其更改为你想要的任何未被占用的端口号。例如将端口更改为2333 </span><span style="color:#ffb964;">这是SSH默认的端口号你可以将其更改为你想要的任何未被占用的端口号。例如将端口更改为2333
</span><span> </span><span>
</span><span>Port 2333 </span><span style="color:#ffb964;">Port</span><span> 2333
</span><span> </span><span>
</span><span>保存并关闭文本编辑器。重新启动SSH服务以应用更改 </span><span style="color:#ffb964;">保存并关闭文本编辑器。重新启动SSH服务以应用更改
</span><span> </span><span>
</span><span>sudo service ssh restart </span><span style="color:#ffb964;">sudo</span><span> service ssh restart
</span><span> </span><span>
</span><span>或者如果你的系统使用systemd可以使用以下命令 </span><span style="color:#ffb964;">或者如果你的系统使用systemd可以使用以下命令
</span><span> </span><span>
</span><span>sudo systemctl restart ssh </span><span style="color:#ffb964;">sudo</span><span> systemctl restart ssh
</span><span> </span><span>
</span><span>### 安装 Fail2ban </span><span style="color:#888888;">### 安装 Fail2ban
</span><span> </span><span>
</span><span>sudo apt-get install fail2ban </span><span style="color:#ffb964;">sudo</span><span> apt-get install fail2ban
</span><span> </span><span>
</span><span>#### Debian 12 及以上的版本需要手动安装 rsyslog </span><span style="color:#888888;">#### Debian 12 及以上的版本需要手动安装 rsyslog
</span><span> </span><span>
</span><span>sudo apt-get install rsyslog </span><span style="color:#ffb964;">sudo</span><span> apt-get install rsyslog
</span><span> </span><span>
</span><span>####启动 Fail2ban 服务 </span><span style="color:#888888;">####启动 Fail2ban 服务
</span><span> </span><span>
</span><span>sudo systemctl start fail2ban </span><span style="color:#ffb964;">sudo</span><span> systemctl start fail2ban
</span><span> </span><span>
</span><span>#### 开机自启动 </span><span style="color:#888888;">#### 开机自启动
</span><span> </span><span>
</span><span>sudo systemctl enable fail2ban </span><span style="color:#ffb964;">sudo</span><span> systemctl enable fail2ban
</span><span> </span><span>
</span><span>#### 查看 Fail2ban 服务状态 </span><span style="color:#888888;">#### 查看 Fail2ban 服务状态
</span><span> </span><span>
</span><span>sudo systemctl status fail2ban </span><span style="color:#ffb964;">sudo</span><span> systemctl status fail2ban
</span><span> </span><span>
</span></code></pre> </span></code></pre>
<p>但是服务器依然在被爆破,李华又又研究了以下教程,决定将自己的服务器由密码登录改为密钥登录,这下没有牛马来爆破了!</p> <p>但是服务器依然在被爆破,李华又又研究了以下教程,决定将自己的服务器由密码登录改为密钥登录,这下没有牛马来爆破了!</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>#### 执行以下命令生成.pub后缀的公钥和无后缀的密钥 <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#888888;">#### 执行以下命令生成.pub后缀的公钥和无后缀的密钥
</span><span> </span><span>
</span><span>ssh-keygen </span><span style="color:#ffb964;">ssh-keygen
</span><span> </span><span>
</span><span>注意不同密钥对名称不能相同;同时可以为这两个文件用密码加密; </span><span style="color:#ffb964;">注意不同密钥对名称不能相同;同时可以为这两个文件用密码加密;
</span><span> </span><span>
</span><span>#### 随后将.pub后缀的公钥中的内容写入服务器的~/.ssh/authorized_keys中 </span><span style="color:#888888;">#### 随后将.pub后缀的公钥中的内容写入服务器的~/.ssh/authorized_keys中
</span><span> </span><span>
</span><span>#### 使用以下命令编译服务器的SSH配置 </span><span style="color:#888888;">#### 使用以下命令编译服务器的SSH配置
</span><span> </span><span>
</span><span>vim /etc/ssh/sshd_config </span><span style="color:#ffb964;">vim</span><span> /etc/ssh/sshd_config
</span><span> </span><span>
</span><span>将其中的该行改为PasswordAuthentication no保存退出随后使用 </span><span style="color:#ffb964;">将其中的该行改为PasswordAuthentication</span><span> no保存退出随后使用
</span><span> </span><span>
</span><span>sudo systemctl restart sshd </span><span style="color:#ffb964;">sudo</span><span> systemctl restart sshd
</span><span> </span><span>
</span><span>重启SSH即可禁用密码登录 </span><span style="color:#ffb964;">重启SSH即可禁用密码登录
</span><span> </span><span>
</span><span>#### 将PermitRootLogin一栏改为PermitRootLogin prohibit-password**即可实现仅root用户密钥登录 </span><span style="color:#888888;">#### 将PermitRootLogin一栏改为PermitRootLogin prohibit-password**即可实现仅root用户密钥登录
</span><span> </span><span>
</span><span>#### 使用以下命令查看输出, </span><span style="color:#888888;">#### 使用以下命令查看输出,
</span><span> </span><span>
</span><span>sudo cat /etc/ssh/sshd_config | grep -E &#39;PasswordAuthentication|PubkeyAuthentication&#39; </span><span style="color:#ffb964;">sudo</span><span> cat /etc/ssh/sshd_config | </span><span style="color:#ffb964;">grep -E </span><span style="color:#556633;">&#39;</span><span style="color:#99ad6a;">PasswordAuthentication|PubkeyAuthentication</span><span style="color:#556633;">&#39;
</span><span> </span><span>
</span><span>如有PasswordAuthentication no → 禁用密码登录以及PubkeyAuthentication yes → 允许密钥登录则成功。 </span><span style="color:#ffb964;">如有PasswordAuthentication</span><span> no → 禁用密码登录以及PubkeyAuthentication yes → 允许密钥登录则成功。
</span><span> </span><span>
</span><span>&gt; 注意authorized_keys**的权限为600如果不是则需要改正chmod 600 ~/.ssh/authorized_keys </span><span>&gt; 注意authorized_keys**的权限为600如果不是则需要改正chmod </span><span style="color:#ffb964;">600 ~</span><span>/.ssh/authorized_keys
</span></code></pre> </span></code></pre>
<h2 id="guan-li">管理</h2> <h2 id="guan-li">管理</h2>
<p>现在服务器安全了但随着服务器数量的增加李华很快发现一个新问题如何管理这些个SSH连接呢手动输入太慢了每次都要复制粘贴也很麻烦但是又不得不用总不能回退到密码时代吧况且数量多了密码也记不住。</p> <p>现在服务器安全了但随着服务器数量的增加李华很快发现一个新问题如何管理这些个SSH连接呢手动输入太慢了每次都要复制粘贴也很麻烦但是又不得不用总不能回退到密码时代吧况且数量多了密码也记不住。</p>
@@ -223,11 +223,11 @@
<p>首先,李华在用户目录下创建了一个<code>.ssh</code>文件夹linux中在<code>/home/username/.ssh</code>这里windows下在<code>C:\Users\username\.ssh</code>这里。</p> <p>首先,李华在用户目录下创建了一个<code>.ssh</code>文件夹linux中在<code>/home/username/.ssh</code>这里windows下在<code>C:\Users\username\.ssh</code>这里。</p>
<p>随后李华安装了openssh在系统上linux中一般已经存在windows上在<code>设置-系统-可选功能-添加功能</code>中选中OpenSSH Client和openssh-server开启即可.</p> <p>随后李华安装了openssh在系统上linux中一般已经存在windows上在<code>设置-系统-可选功能-添加功能</code>中选中OpenSSH Client和openssh-server开启即可.</p>
<p>随后,李华在.ssh文件夹下创建了一个文件名为<code>config</code>,并在其中写入以下内容:</p> <p>随后,李华在.ssh文件夹下创建了一个文件名为<code>config</code>,并在其中写入以下内容:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>Host US <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">Host</span><span> US
</span><span> HostName 114.514.114.514 </span><span> </span><span style="color:#ffb964;">HostName</span><span> 114.514.114.514
</span><span> User root </span><span> </span><span style="color:#ffb964;">User</span><span> root
</span><span> IdentityFile ~/.ssh/US </span><span> </span><span style="color:#ffb964;">IdentityFile ~</span><span>/.ssh/US
</span><span> IdentitiesOnly yes </span><span> </span><span style="color:#ffb964;">IdentitiesOnly</span><span> yes
</span></code></pre> </span></code></pre>
<p>随后李华在对应的位置<code>~/.ssh/US</code>创建了一个文件,李华将服务器的私钥放了进去,里面是以<code>-----BEGIN OPENSSH PRIVATE KEY-----</code>开头<code>-----END OPENSSH PRIVATE KEY-----</code>结尾的私钥。</p> <p>随后李华在对应的位置<code>~/.ssh/US</code>创建了一个文件,李华将服务器的私钥放了进去,里面是以<code>-----BEGIN OPENSSH PRIVATE KEY-----</code>开头<code>-----END OPENSSH PRIVATE KEY-----</code>结尾的私钥。</p>
<p>现在,要登录<code>114.514.114.514</code>这台服务器,只需要使用<code>ssh US</code>命令就可以连上服务器了,不用再手动输入了!</p> <p>现在,要登录<code>114.514.114.514</code>这台服务器,只需要使用<code>ssh US</code>命令就可以连上服务器了,不用再手动输入了!</p>
@@ -241,11 +241,11 @@
<p>这样一来,当你执行<code>ssh xxx</code>ssh 不是去读私钥文件,而是通过<code>SSH_AUTH_SOCK</code>环境变量找到 KeePassXC 的 agent。KeePassXC 会提示你解锁数据库/确认使用密钥。私钥不会离开 KeePassXC只是 KeePassXC <code>用私钥做一次签名</code>,把结果返回给 ssh。这样<code>硬盘上不需要保存私钥文件</code>,安全性更高,且<code>只需要备份.ssh文件夹和keepassxc的kbdx文件</code>即可.</p> <p>这样一来,当你执行<code>ssh xxx</code>ssh 不是去读私钥文件,而是通过<code>SSH_AUTH_SOCK</code>环境变量找到 KeePassXC 的 agent。KeePassXC 会提示你解锁数据库/确认使用密钥。私钥不会离开 KeePassXC只是 KeePassXC <code>用私钥做一次签名</code>,把结果返回给 ssh。这样<code>硬盘上不需要保存私钥文件</code>,安全性更高,且<code>只需要备份.ssh文件夹和keepassxc的kbdx文件</code>即可.</p>
<p>那么该怎么做呢?</p> <p>那么该怎么做呢?</p>
<p>首先,将.ssh文件夹中的config进行修改,把私钥文件改为公钥文件,同时创建对应的<code>~/.ssh/US.pub</code>公钥文件里面是以ssh-ed25519或者ssh-rsa开头的公钥.</p> <p>首先,将.ssh文件夹中的config进行修改,把私钥文件改为公钥文件,同时创建对应的<code>~/.ssh/US.pub</code>公钥文件里面是以ssh-ed25519或者ssh-rsa开头的公钥.</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>Host US <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">Host</span><span> US
</span><span> HostName 114.514.114.514 </span><span> </span><span style="color:#ffb964;">HostName</span><span> 114.514.114.514
</span><span> User root </span><span> </span><span style="color:#ffb964;">User</span><span> root
</span><span> IdentityFile ~/.ssh/US.pub </span><span> </span><span style="color:#ffb964;">IdentityFile ~</span><span>/.ssh/US.pub
</span><span> IdentitiesOnly yes </span><span> </span><span style="color:#ffb964;">IdentitiesOnly</span><span> yes
</span></code></pre> </span></code></pre>
<p>随后在keepassxc的设置-ssh代理中开启<code>启用SSH代理集成</code>.openssh</p> <p>随后在keepassxc的设置-ssh代理中开启<code>启用SSH代理集成</code>.openssh</p>
<p>接下来在keepassxc中左侧栏<code>新建一个文件夹</code>名为SSH里面<code>新建条目</code>标题为US和config中一致然后在右侧<code>高级</code><code>新建</code>附件文件名为US和config中保持一致文件内容为US的私钥.随后在左侧SSH代理中选中<code>在打开或解锁数据库的时候,向代理添加密钥</code><code>数据库锁定或关闭时从SSH代理中删除密钥</code>这两个选项,并将下面的<code>私钥</code>选择<code>附件</code>即为我们刚刚在高级中新建的US可以看到对应的公钥也出现了上一步没有公钥的可以在这里添加.按<code>确定</code>后关闭keepassxc并重新开启这时候就可以使用<code>ssh US</code>命令登录了!</p> <p>接下来在keepassxc中左侧栏<code>新建一个文件夹</code>名为SSH里面<code>新建条目</code>标题为US和config中一致然后在右侧<code>高级</code><code>新建</code>附件文件名为US和config中保持一致文件内容为US的私钥.随后在左侧SSH代理中选中<code>在打开或解锁数据库的时候,向代理添加密钥</code><code>数据库锁定或关闭时从SSH代理中删除密钥</code>这两个选项,并将下面的<code>私钥</code>选择<code>附件</code>即为我们刚刚在高级中新建的US可以看到对应的公钥也出现了上一步没有公钥的可以在这里添加.按<code>确定</code>后关闭keepassxc并重新开启这时候就可以使用<code>ssh US</code>命令登录了!</p>

View File

@@ -163,9 +163,9 @@
<li>Fedora<code>sudo dnf install yt-dlp</code></li> <li>Fedora<code>sudo dnf install yt-dlp</code></li>
<li>Nixos:</li> <li>Nixos:</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>{pkgs, ...}: { <pre data-lang="nix" style="background-color:#151515;color:#e8e8d3;" class="language-nix "><code class="language-nix" data-lang="nix"><span>{</span><span style="color:#ffb964;">pkgs</span><span>, ...}: {
</span><span> home.packages = with pkgs; [ </span><span> </span><span style="color:#ffb964;">home</span><span>.</span><span style="color:#ffb964;">packages </span><span>= with </span><span style="color:#ffb964;">pkgs</span><span>; [
</span><span> peazip </span><span> </span><span style="color:#ffb964;">peazip
</span><span> ]; </span><span> ];
</span><span>} </span><span>}
</span></code></pre> </span></code></pre>
@@ -178,55 +178,55 @@
<ul> <ul>
<li><strong>下载B站带字幕视频</strong>:</li> <li><strong>下载B站带字幕视频</strong>:</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>yt-dlp &quot;https://www.bilibili.com/video/BVxxxxx&quot; --write-subs --embed-subs --sub-langs all,-live_chat <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">yt-dlp </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">https://www.bilibili.com/video/BVxxxxx</span><span style="color:#556633;">&quot;</span><span style="color:#ffb964;"> --write-subs --embed-subs --sub-langs</span><span> all,-live_chat
</span><span> </span><span>
</span><span>--write-subs: 将字幕文件下载为单独文件 (如 .vtt 或 .ass) </span><span style="color:#ffb964;">--write-subs:</span><span> 将字幕文件下载为单独文件 (如 .vtt 或 .ass)
</span><span> </span><span>
</span><span>--embed-subs: 将下载的字幕嵌入到视频文件中(如果格式支持) </span><span style="color:#ffb964;">--embed-subs:</span><span> 将下载的字幕嵌入到视频文件中(如果格式支持)
</span><span> </span><span>
</span><span>--sub-langs all,-live_chat: 下载所有字幕语言,但排除像“弹幕/实时聊天”之类的非标准字幕流 </span><span style="color:#ffb964;">--sub-langs</span><span> all,-live_chat: 下载所有字幕语言,但排除像“弹幕/实时聊天”之类的非标准字幕流
</span></code></pre> </span></code></pre>
<ul> <ul>
<li><strong>下载YouTube视频</strong></li> <li><strong>下载YouTube视频</strong></li>
</ul> </ul>
<p>先使用这个命令查看可用格式:</p> <p>先使用这个命令查看可用格式:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>yt-dlp -F https://www.youtube.com/watch?v=xxxxxxxxxxxx <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">yt-dlp -F</span><span> https://www.youtube.com/watch?v=xxxxxxxxxxxx
</span></code></pre> </span></code></pre>
<p>然后它会列举出所有可用的格式,如下:</p> <p>然后它会列举出所有可用的格式,如下:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>[youtube] MgtOAVOXBWo: Downloading webpage <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">[youtube]</span><span> MgtOAVOXBWo: Downloading webpage
</span><span>[youtube] MgtOAVOXBWo: Downloading tv client config </span><span style="color:#ffb964;">[youtube]</span><span> MgtOAVOXBWo: Downloading tv client config
</span><span>[youtube] MgtOAVOXBWo: Downloading tv player API JSON </span><span style="color:#ffb964;">[youtube]</span><span> MgtOAVOXBWo: Downloading tv player API JSON
</span><span>[youtube] MgtOAVOXBWo: Downloading ios player API JSON </span><span style="color:#ffb964;">[youtube]</span><span> MgtOAVOXBWo: Downloading ios player API JSON
</span><span>[youtube] MgtOAVOXBWo: Downloading m3u8 information </span><span style="color:#ffb964;">[youtube]</span><span> MgtOAVOXBWo: Downloading m3u8 information
</span><span>[info] Available formats for MgtOAVOXBWo: </span><span style="color:#ffb964;">[info]</span><span> Available formats for MgtOAVOXBWo:
</span><span>ID EXT RESOLUTION FPS │ FILESIZE TBR PROTO │ VCODEC VBR ACODEC MORE INFO </span><span style="color:#ffb964;">ID</span><span> EXT RESOLUTION FPS │ FILESIZE TBR PROTO │ VCODEC VBR ACODEC MORE INFO
</span><span>────────────────────────────────────────────────────────────────────────────────────────────────────────── </span><span style="color:#ffb964;">──────────────────────────────────────────────────────────────────────────────────────────────────────────
</span><span>sb2 mhtml 48x27 0 │ mhtml │ images storyboard </span><span style="color:#ffb964;">sb2</span><span> mhtml 48x27 0 │ mhtml │ images storyboard
</span><span>sb1 mhtml 80x45 0 │ mhtml │ images storyboard </span><span style="color:#ffb964;">sb1</span><span> mhtml 80x45 0 │ mhtml │ images storyboard
</span><span>sb0 mhtml 160x90 0 │ mhtml │ images storyboard </span><span style="color:#ffb964;">sb0</span><span> mhtml 160x90 0 │ mhtml │ images storyboard
</span><span>233 mp4 audio only │ m3u8 │ audio only unknown Untested, Default, low </span><span style="color:#ffb964;">233</span><span> mp4 audio only │ m3u8 │ audio only unknown Untested, Default, low
</span><span>234 mp4 audio only │ m3u8 │ audio only unknown Untested, Default, high </span><span style="color:#ffb964;">234</span><span> mp4 audio only │ m3u8 │ audio only unknown Untested, Default, high
</span><span>602 mp4 256x144 15 │ ~ 9.23MiB 81k m3u8 │ vp09.00.10.08 81k video only Untested </span><span style="color:#ffb964;">602</span><span> mp4 256x144 15 │ </span><span style="color:#ffb964;">~</span><span> 9.23MiB 81k m3u8 │ vp09.00.10.08 81k video only Untested
</span><span>269 mp4 256x144 30 │ ~ 14.94MiB 130k m3u8 │ avc1.4D400C 130k video only Untested </span><span style="color:#ffb964;">269</span><span> mp4 256x144 30 │ </span><span style="color:#ffb964;">~</span><span> 14.94MiB 130k m3u8 │ avc1.4D400C 130k video only Untested
</span><span>603 mp4 256x144 30 │ ~ 15.90MiB 139k m3u8 │ vp09.00.11.08 139k video only Untested </span><span style="color:#ffb964;">603</span><span> mp4 256x144 30 │ </span><span style="color:#ffb964;">~</span><span> 15.90MiB 139k m3u8 │ vp09.00.11.08 139k video only Untested
</span><span>229 mp4 426x240 30 │ ~ 33.33MiB 291k m3u8 │ avc1.4D4015 291k video only Untested </span><span style="color:#ffb964;">229</span><span> mp4 426x240 30 │ </span><span style="color:#ffb964;">~</span><span> 33.33MiB 291k m3u8 │ avc1.4D4015 291k video only Untested
</span><span>604 mp4 426x240 30 │ ~ 25.82MiB 225k m3u8 │ vp09.00.20.08 225k video only Untested </span><span style="color:#ffb964;">604</span><span> mp4 426x240 30 │ </span><span style="color:#ffb964;">~</span><span> 25.82MiB 225k m3u8 │ vp09.00.20.08 225k video only Untested
</span><span>230 mp4 640x360 30 │ ~ 73.50MiB 642k m3u8 │ avc1.4D401E 642k video only Untested </span><span style="color:#ffb964;">230</span><span> mp4 640x360 30 │ </span><span style="color:#ffb964;">~</span><span> 73.50MiB 642k m3u8 │ avc1.4D401E 642k video only Untested
</span><span>605 mp4 640x360 30 │ ~ 55.73MiB 487k m3u8 │ vp09.00.21.08 487k video only Untested </span><span style="color:#ffb964;">605</span><span> mp4 640x360 30 │ </span><span style="color:#ffb964;">~</span><span> 55.73MiB 487k m3u8 │ vp09.00.21.08 487k video only Untested
</span><span>231 mp4 854x480 30 │ ~104.35MiB 911k m3u8 │ avc1.4D401F 911k video only Untested </span><span style="color:#ffb964;">231</span><span> mp4 854x480 30 │ </span><span style="color:#ffb964;">~</span><span>104.35MiB 911k m3u8 │ avc1.4D401F 911k video only Untested
</span><span>606 mp4 854x480 30 │ ~ 94.79MiB 827k m3u8 │ vp09.00.30.08 827k video only Untested </span><span style="color:#ffb964;">606</span><span> mp4 854x480 30 │ </span><span style="color:#ffb964;">~</span><span> 94.79MiB 827k m3u8 │ vp09.00.30.08 827k video only Untested
</span><span>311 mp4 1280x720 60 │ ~330.73MiB 2887k m3u8 │ avc1.4D4020 2887k video only Untested </span><span style="color:#ffb964;">311</span><span> mp4 1280x720 60 │ </span><span style="color:#ffb964;">~</span><span>330.73MiB 2887k m3u8 │ avc1.4D4020 2887k video only Untested
</span><span>612 mp4 1280x720 60 │ ~197.04MiB 1720k m3u8 │ vp09.00.40.08 1720k video only Untested </span><span style="color:#ffb964;">612</span><span> mp4 1280x720 60 │ </span><span style="color:#ffb964;">~</span><span>197.04MiB 1720k m3u8 │ vp09.00.40.08 1720k video only Untested
</span><span>312 mp4 1920x1080 60 │ ~486.64MiB 4248k m3u8 │ avc1.64002A 4248k video only Untested </span><span style="color:#ffb964;">312</span><span> mp4 1920x1080 60 │ </span><span style="color:#ffb964;">~</span><span>486.64MiB 4248k m3u8 │ avc1.64002A 4248k video only Untested
</span><span>617 mp4 1920x1080 60 │ ~369.06MiB 3222k m3u8 │ vp09.00.41.08 3222k video only Untested </span><span style="color:#ffb964;">617</span><span> mp4 1920x1080 60 │ </span><span style="color:#ffb964;">~</span><span>369.06MiB 3222k m3u8 │ vp09.00.41.08 3222k video only Untested
</span><span>623 mp4 2560x1440 60 │ ~ 1.00GiB 8945k m3u8 │ vp09.00.50.08 8945k video only Untested </span><span style="color:#ffb964;">623</span><span> mp4 2560x1440 60 │ </span><span style="color:#ffb964;">~</span><span> 1.00GiB 8945k m3u8 │ vp09.00.50.08 8945k video only Untested
</span></code></pre> </span></code></pre>
<p>我们下载312和233,即视频和音频,使用以下命令:</p> <p>我们下载312和233,即视频和音频,使用以下命令:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>yt-dlp -f &quot;312+233&quot; -o &quot;&lt;新视频的名字,要短一点&gt;.%(ext)s&quot; https://www.youtube.com/watch?v=xxxxxxxxxxxx <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">yt-dlp -f </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">312+233</span><span style="color:#556633;">&quot;</span><span style="color:#ffb964;"> -o </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">&lt;新视频的名字,要短一点&gt;.%(ext)s</span><span style="color:#556633;">&quot;</span><span> https://www.youtube.com/watch?v=xxxxxxxxxxxx
</span></code></pre> </span></code></pre>
<p>这行命令会自动将下载的312的1080p/H.264的视频和233的音频合并为一个mp4视频注意新的名称不能太长否则会下载失败。</p> <p>这行命令会自动将下载的312的1080p/H.264的视频和233的音频合并为一个mp4视频注意新的名称不能太长否则会下载失败。</p>
<p>如果要下载带字幕的视频,则使用</p> <p>如果要下载带字幕的视频,则使用</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>yt-dlp -f &quot;312+233&quot; --write-subs --write-auto-subs --embed-subs --sub-langs &quot;zh.*,en.*&quot; -o &quot;&lt;新视频的名字,要短一点&gt;.%(ext)s&quot; https://www.youtube.com/watch?v=xxxxxxxxxxx <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">yt-dlp -f </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">312+233</span><span style="color:#556633;">&quot;</span><span style="color:#ffb964;"> --write-subs --write-auto-subs --embed-subs --sub-langs </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">zh.*,en.*</span><span style="color:#556633;">&quot;</span><span style="color:#ffb964;"> -o </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">&lt;新视频的名字,要短一点&gt;.%(ext)s</span><span style="color:#556633;">&quot;</span><span> https://www.youtube.com/watch?v=xxxxxxxxxxx
</span></code></pre> </span></code></pre>
<p>这个命令会:</p> <p>这个命令会:</p>
<ul> <ul>
@@ -246,11 +246,11 @@
<p>参数说明</p> <p>参数说明</p>
</li> </li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>--write-subs: 下载手动字幕 <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">--write-subs:</span><span> 下载手动字幕
</span><span>--write-auto-subs: 下载自动生成的字幕 </span><span style="color:#ffb964;">--write-auto-subs:</span><span> 下载自动生成的字幕
</span><span>--embed-subs: 将字幕嵌入到视频中 </span><span style="color:#ffb964;">--embed-subs:</span><span> 将字幕嵌入到视频中
</span><span>--sub-langs &quot;zh.*&quot;: 指定下载中文字幕(所有中文变体) </span><span style="color:#ffb964;">--sub-langs </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">zh.*</span><span style="color:#556633;">&quot;</span><span>: 指定下载中文字幕(所有中文变体)
</span><span>--sub-format srt: 指定字幕格式(可选) </span><span style="color:#ffb964;">--sub-format</span><span> srt: 指定字幕格式(可选)
</span></code></pre> </span></code></pre>
<h2 id="chang-yong-can-shu">常用参数</h2> <h2 id="chang-yong-can-shu">常用参数</h2>
<ul> <ul>

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -1 +1 @@
{"version":"1.3.0","languages":{"en":{"hash":"en_b39f2e47c5","wasm":"en","page_count":79}}} {"version":"1.3.0","languages":{"en":{"hash":"en_119f38a44a","wasm":"en","page_count":79}}}

Binary file not shown.

View File

@@ -125,9 +125,9 @@
<p>前言 Windows操作系统作为全球最为普及的桌面操作系统之一其用户界面的设计非常经典但存在许多不足之处本篇记录一些常用脚本。</p> <p>前言 Windows操作系统作为全球最为普及的桌面操作系统之一其用户界面的设计非常经典但存在许多不足之处本篇记录一些常用脚本。</p>
<span id="continue-reading"></span><h2 id="windows11tiao-guo-lian-wang-ji-huo-shi-yong-ben-di-zhang-hao"><strong>Windows11跳过联网激活 &amp; 使用本地账号</strong></h2> <span id="continue-reading"></span><h2 id="windows11tiao-guo-lian-wang-ji-huo-shi-yong-ben-di-zhang-hao"><strong>Windows11跳过联网激活 &amp; 使用本地账号</strong></h2>
<p>开机之前先断网然后输入Shift+F10会弹出命令行界面并输入 <p>开机之前先断网然后输入Shift+F10会弹出命令行界面并输入
<code>oobe\BypassNRO.cmd</code> <code>bash oobe\BypassNRO.cmd </code>
回车之后会重启,之后就可以跳过联网了,选择 回车之后会重启,之后就可以跳过联网了,选择
<code>I don't have internet</code> <code>bash I don't have internet </code>
即可。</p> 即可。</p>
<blockquote> <blockquote>
<p>微软在 Windows 11 最新版中删除了 BypassNRO 脚本,以下是最新方法:</p> <p>微软在 Windows 11 最新版中删除了 BypassNRO 脚本,以下是最新方法:</p>
@@ -146,69 +146,69 @@
<p>需要注意的是目前该命令仅适用于 Windows 11 家庭版和专业版系列 (包括专业版、专业工作站版和专业教育版)。</p> <p>需要注意的是目前该命令仅适用于 Windows 11 家庭版和专业版系列 (包括专业版、专业工作站版和专业教育版)。</p>
<h2 id="ji-huo-windows">激活windows</h2> <h2 id="ji-huo-windows">激活windows</h2>
<p>这里使用MAS的脚本:</p> <p>这里使用MAS的脚本:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>irm https://get.activated.win | iex <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">irm</span><span> https://get.activated.win | </span><span style="color:#ffb964;">iex
</span></code></pre> </span></code></pre>
<h2 id="win11guan-bi-zi-dong-geng-xin"><strong>Win11关闭自动更新</strong></h2> <h2 id="win11guan-bi-zi-dong-geng-xin"><strong>Win11关闭自动更新</strong></h2>
<p>1.按Win+I打开Windows设置页面。</p> <p>1.按Win+I打开Windows设置页面。</p>
<p>2.单击“更新和安全”&gt;“Windows更新”然后在右侧详情页中选择“暂停更新7天”选项即可在此后7天内关闭Windows更新。</p> <p>2.单击“更新和安全”&gt;“Windows更新”然后在右侧详情页中选择“暂停更新7天”选项即可在此后7天内关闭Windows更新。</p>
<p>3.然后就可以使用脚本彻底关闭更新:将以下命令保存为.bat文件运行即可。</p> <p>3.然后就可以使用脚本彻底关闭更新:将以下命令保存为.bat文件运行即可。</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>::Windows auomatic updates <pre data-lang="bat" style="background-color:#151515;color:#e8e8d3;" class="language-bat "><code class="language-bat" data-lang="bat"><span style="color:#888888;">::Windows auomatic updates
</span><span>reg add HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU /v AutoInstallMinorUpdates /t REG_DWORD /d 1 /f </span><span>reg add HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU /v AutoInstallMinorUpdates /t REG_DWORD /d </span><span style="color:#cf6a4c;">1</span><span> /f
</span><span>reg add HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU /v NoAutoUpdate /t REG_DWORD /d 1 /f </span><span>reg add HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU /v NoAutoUpdate /t REG_DWORD /d </span><span style="color:#cf6a4c;">1</span><span> /f
</span><span>reg add HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU /v AUOptions /t REG_DWORD /d 4 /f </span><span>reg add HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU /v AUOptions /t REG_DWORD /d </span><span style="color:#cf6a4c;">4</span><span> /f
</span><span>reg add &quot;HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update&quot; /v AUOptions /t REG_DWORD /d 4 /f </span><span>reg add </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update</span><span style="color:#556633;">&quot;</span><span> /v AUOptions /t REG_DWORD /d </span><span style="color:#cf6a4c;">4</span><span> /f
</span><span>reg add HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate /v DisableWindowsUpdateAccess /t REG_DWORD /d 0 /f </span><span>reg add HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate /v DisableWindowsUpdateAccess /t REG_DWORD /d </span><span style="color:#cf6a4c;">0</span><span> /f
</span><span>reg add HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate /v ElevateNonAdmins /t REG_DWORD /d 0 /f </span><span>reg add HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate /v ElevateNonAdmins /t REG_DWORD /d </span><span style="color:#cf6a4c;">0</span><span> /f
</span><span>reg add HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer /v NoWindowsUpdate /t REG_DWORD /d 1 /f </span><span>reg add HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer /v NoWindowsUpdate /t REG_DWORD /d </span><span style="color:#cf6a4c;">1</span><span> /f
</span><span>reg add &quot;HKLM\SYSTEM\Internet Communication Management\Internet Communication&quot; /v DisableWindowsUpdateAccess /t REG_DWORD /d 0 /f </span><span>reg add </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">HKLM\SYSTEM\Internet Communication Management\Internet Communication</span><span style="color:#556633;">&quot;</span><span> /v DisableWindowsUpdateAccess /t REG_DWORD /d </span><span style="color:#cf6a4c;">0</span><span> /f
</span><span>reg add HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\WindowsUpdate /v DisableWindowsUpdateAccess /t REG_DWORD /d 0 /f </span><span>reg add HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\WindowsUpdate /v DisableWindowsUpdateAccess /t REG_DWORD /d </span><span style="color:#cf6a4c;">0</span><span> /f
</span><span>sc stop wuauserv </span><span>sc stop wuauserv
</span><span>sc config wuauserv start=disabled </span><span>sc config wuauserv start=disabled
</span><span>sc stop WaaSMedicSvc </span><span>sc stop WaaSMedicSvc
</span><span>sc config WaaSMedicSvc start=disabled </span><span>sc config WaaSMedicSvc start=disabled
</span><span>reg add HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\InstallService\State /v AutoUpdateLastSuccessTime /t REG_SZ /d &quot;2100-01-01T00:00:00+08:00&quot; /f </span><span>reg add HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\InstallService\State /v AutoUpdateLastSuccessTime /t REG_SZ /d </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">2100-01-01T00:00:00+08:00</span><span style="color:#556633;">&quot;</span><span> /f
</span><span>reg add HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings /v PauseFeatureUpdatesStartTime /t REG_SZ /d &quot;2100-01-01T00:00:00Z&quot; /f </span><span>reg add HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings /v PauseFeatureUpdatesStartTime /t REG_SZ /d </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">2100-01-01T00:00:00Z</span><span style="color:#556633;">&quot;</span><span> /f
</span><span>reg add HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings /v PauseQualityUpdatesStartTime /t REG_SZ /d &quot;2100-01-01T00:00:00Z&quot; /f </span><span>reg add HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings /v PauseQualityUpdatesStartTime /t REG_SZ /d </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">2100-01-01T00:00:00Z</span><span style="color:#556633;">&quot;</span><span> /f
</span><span>reg add HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings /v PauseUpdatesExpiryTime /t REG_SZ /d &quot;2100-01-01T00:00:00Z&quot; /f </span><span>reg add HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings /v PauseUpdatesExpiryTime /t REG_SZ /d </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">2100-01-01T00:00:00Z</span><span style="color:#556633;">&quot;</span><span> /f
</span><span>reg add HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings /v PauseFeatureUpdatesEndTime /t REG_SZ /d &quot;2100-01-01T00:00:00Z&quot; /f </span><span>reg add HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings /v PauseFeatureUpdatesEndTime /t REG_SZ /d </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">2100-01-01T00:00:00Z</span><span style="color:#556633;">&quot;</span><span> /f
</span><span>reg add HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings /v PauseQualityUpdatesEndTime /t REG_SZ /d &quot;2100-01-01T00:00:00Z&quot; /f </span><span>reg add HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings /v PauseQualityUpdatesEndTime /t REG_SZ /d </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">2100-01-01T00:00:00Z</span><span style="color:#556633;">&quot;</span><span> /f
</span></code></pre> </span></code></pre>
<p>如果要恢复更新,使用以下命令,同样保存为.bat运行</p> <p>如果要恢复更新,使用以下命令,同样保存为.bat运行</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>::Windows auomatic updates <pre data-lang="bat" style="background-color:#151515;color:#e8e8d3;" class="language-bat "><code class="language-bat" data-lang="bat"><span style="color:#888888;">::Windows auomatic updates
</span><span>reg add HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU /v AutoInstallMinorUpdates /t REG_DWORD /d 0 /f </span><span>reg add HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU /v AutoInstallMinorUpdates /t REG_DWORD /d </span><span style="color:#cf6a4c;">0</span><span> /f
</span><span>reg add HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU /v NoAutoUpdate /t REG_DWORD /d 0 /f </span><span>reg add HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU /v NoAutoUpdate /t REG_DWORD /d </span><span style="color:#cf6a4c;">0</span><span> /f
</span><span>reg add HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU /v AUOptions /t REG_DWORD /d 0 /f </span><span>reg add HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU /v AUOptions /t REG_DWORD /d </span><span style="color:#cf6a4c;">0</span><span> /f
</span><span>reg add &quot;HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update&quot; /v AUOptions /t REG_DWORD /d 4 /f </span><span>reg add </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update</span><span style="color:#556633;">&quot;</span><span> /v AUOptions /t REG_DWORD /d </span><span style="color:#cf6a4c;">4</span><span> /f
</span><span>reg add HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate /v DisableWindowsUpdateAccess /t REG_DWORD /d 1 /f </span><span>reg add HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate /v DisableWindowsUpdateAccess /t REG_DWORD /d </span><span style="color:#cf6a4c;">1</span><span> /f
</span><span>reg add HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate /v ElevateNonAdmins /t REG_DWORD /d 1 /f </span><span>reg add HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate /v ElevateNonAdmins /t REG_DWORD /d </span><span style="color:#cf6a4c;">1</span><span> /f
</span><span>reg add HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer /v NoWindowsUpdate /t REG_DWORD /d 0 /f </span><span>reg add HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer /v NoWindowsUpdate /t REG_DWORD /d </span><span style="color:#cf6a4c;">0</span><span> /f
</span><span>reg add &quot;HKLM\SYSTEM\Internet Communication Management\Internet Communication&quot; /v DisableWindowsUpdateAccess /t REG_DWORD /d 1 /f </span><span>reg add </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">HKLM\SYSTEM\Internet Communication Management\Internet Communication</span><span style="color:#556633;">&quot;</span><span> /v DisableWindowsUpdateAccess /t REG_DWORD /d </span><span style="color:#cf6a4c;">1</span><span> /f
</span><span>reg add HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\WindowsUpdate /v DisableWindowsUpdateAccess /t REG_DWORD /d 1 /f </span><span>reg add HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\WindowsUpdate /v DisableWindowsUpdateAccess /t REG_DWORD /d </span><span style="color:#cf6a4c;">1</span><span> /f
</span><span>sc config wuauserv start=auto </span><span>sc config wuauserv start=auto
</span><span>sc start wuauserv </span><span>sc start wuauserv
</span><span>sc config WaaSMedicSvc start=auto </span><span>sc config WaaSMedicSvc start=auto
</span><span>sc start WaaSMedicSvc </span><span>sc start WaaSMedicSvc
</span><span>reg add HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\InstallService\State /v AutoUpdateLastSuccessTime /t REG_SZ /d &quot;2000-01-01T00:00:00+08:00&quot; /f </span><span>reg add HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\InstallService\State /v AutoUpdateLastSuccessTime /t REG_SZ /d </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">2000-01-01T00:00:00+08:00</span><span style="color:#556633;">&quot;</span><span> /f
</span><span>reg add HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings /v PauseFeatureUpdatesStartTime /t REG_SZ /d &quot;2000-01-01T00:00:00Z&quot; /f </span><span>reg add HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings /v PauseFeatureUpdatesStartTime /t REG_SZ /d </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">2000-01-01T00:00:00Z</span><span style="color:#556633;">&quot;</span><span> /f
</span><span>reg add HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings /v PauseQualityUpdatesStartTime /t REG_SZ /d &quot;2000-01-01T00:00:00Z&quot; /f </span><span>reg add HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings /v PauseQualityUpdatesStartTime /t REG_SZ /d </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">2000-01-01T00:00:00Z</span><span style="color:#556633;">&quot;</span><span> /f
</span><span>reg add HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings /v PauseUpdatesExpiryTime /t REG_SZ /d &quot;2000-01-01T00:00:00Z&quot; /f </span><span>reg add HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings /v PauseUpdatesExpiryTime /t REG_SZ /d </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">2000-01-01T00:00:00Z</span><span style="color:#556633;">&quot;</span><span> /f
</span><span>reg add HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings /v PauseFeatureUpdatesEndTime /t REG_SZ /d &quot;2000-01-01T00:00:00Z&quot; /f </span><span>reg add HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings /v PauseFeatureUpdatesEndTime /t REG_SZ /d </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">2000-01-01T00:00:00Z</span><span style="color:#556633;">&quot;</span><span> /f
</span><span>reg add HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings /v PauseQualityUpdatesEndTime /t REG_SZ /d &quot;2000-01-01T00:00:00Z&quot; /f </span><span>reg add HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings /v PauseQualityUpdatesEndTime /t REG_SZ /d </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">2000-01-01T00:00:00Z</span><span style="color:#556633;">&quot;</span><span> /f
</span><span>pause </span><span>pause
</span></code></pre> </span></code></pre>
<h2 id="shi-yong-cmdhui-fu-wan-zheng-you-jian-cai-dan"><strong>使用CMD恢复完整右键菜单</strong></h2> <h2 id="shi-yong-cmdhui-fu-wan-zheng-you-jian-cai-dan"><strong>使用CMD恢复完整右键菜单</strong></h2>
<p>Win11的<code>显示更多选项</code>的二级菜单过于繁琐,怎么设置才能将其关闭,并恢复成Win10的状态呢</p> <p>Win11的<code>显示更多选项</code>的二级菜单过于繁琐,怎么设置才能将其关闭,并恢复成Win10的状态呢</p>
<p><strong>步骤1.</strong><strong>Win+S</strong>打开搜索框,输入<strong>cmd</strong>并以管理员身份运行命令提示符。</p> <p><strong>步骤1.</strong><strong>Win+S</strong>打开搜索框,输入<strong>cmd</strong>并以管理员身份运行命令提示符。</p>
<p><strong>步骤2.</strong> 输入以下命令并按<strong>Enter</strong>键执行。</p> <p><strong>步骤2.</strong> 输入以下命令并按<strong>Enter</strong>键执行。</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>reg add HKCU\Software\Classes\CLSID{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32 /ve /d “” /f <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">reg</span><span> add HKCU\Software\Classes\CLSID{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32 /ve /d “” /f
</span></code></pre> </span></code></pre>
<p>或者</p> <p>或者</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>reg add &quot;HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32&quot; /f /ve <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">reg</span><span> add </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32</span><span style="color:#556633;">&quot;</span><span> /f /ve
</span><span>taskkill /f /im explorer.exe </span><span style="color:#ffb964;">taskkill</span><span> /f /im explorer.exe
</span><span>start explorer.exe </span><span style="color:#ffb964;">start</span><span> explorer.exe
</span></code></pre> </span></code></pre>
<p>如果想要重新打开Win11新样式的右键菜单的话以同样的方式在命令提示符中执行此命令</p> <p>如果想要重新打开Win11新样式的右键菜单的话以同样的方式在命令提示符中执行此命令</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>reg delete &quot;HKCU\Software\Classes\CLSID{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}&quot; /f <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">reg</span><span> delete </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">HKCU\Software\Classes\CLSID{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}</span><span style="color:#556633;">&quot;</span><span> /f
</span></code></pre> </span></code></pre>
<h2 id="win11guan-bi-windows-defender">Win11关闭 Windows Defender</h2> <h2 id="win11guan-bi-windows-defender">Win11关闭 Windows Defender</h2>
<p><code>Windows Defender</code>具有防篡改保护,因此需要先在<code>设置-安全中心-设备保护</code>中将实时防护关闭,然后在组策略或者注册表中将其禁用。</p> <p><code>Windows Defender</code>具有防篡改保护,因此需要先在<code>设置-安全中心-设备保护</code>中将实时防护关闭,然后在组策略或者注册表中将其禁用。</p>
@@ -240,45 +240,45 @@
<ul> <ul>
<li>如果有linux/win双系统可以让 Windows 使用 UTC 作为硬件时钟时间:</li> <li>如果有linux/win双系统可以让 Windows 使用 UTC 作为硬件时钟时间:</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span># 在 Windows 中以管理员权限运行命令提示符,执行: <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#888888;"># 在 Windows 中以管理员权限运行命令提示符,执行:
</span><span>reg add &quot;HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TimeZoneInformation&quot; /v RealTimeIsUniversal /t REG_DWORD /d 1 /f </span><span style="color:#ffb964;">reg</span><span> add </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TimeZoneInformation</span><span style="color:#556633;">&quot;</span><span> /v RealTimeIsUniversal /t REG_DWORD /d 1 /f
</span></code></pre> </span></code></pre>
<h2 id="diao-zheng-wang-luo-you-xian-ji">调整网络优先级</h2> <h2 id="diao-zheng-wang-luo-you-xian-ji">调整网络优先级</h2>
<ul> <ul>
<li>查看当前优先级PowerShell/管理员)</li> <li>查看当前优先级PowerShell/管理员)</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>Get-NetIPInterface <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">Get-NetIPInterface
</span></code></pre> </span></code></pre>
<p>你会看到类似:</p> <p>你会看到类似:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>IfIndex InterfaceMetric InterfaceAlias <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">IfIndex</span><span> InterfaceMetric InterfaceAlias
</span><span>------- -------------- -------------- </span><span style="color:#ffb964;">-------</span><span> -------------- --------------
</span><span>15 25 Wi-Fi </span><span style="color:#ffb964;">15</span><span> 25 Wi-Fi
</span><span>3 15 以太网 </span><span style="color:#ffb964;">3</span><span> 15 以太网
</span><span> </span><span>
</span><span># InterfaceMetric 值越小,优先级越高。 </span><span style="color:#888888;"># InterfaceMetric 值越小,优先级越高。
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>修改网络优先级</li> <li>修改网络优先级</li>
</ul> </ul>
<p>将有线网络(以太网) 设为更高优先级(值更小):</p> <p>将有线网络(以太网) 设为更高优先级(值更小):</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>Set-NetIPInterface -InterfaceIndex 3 -InterfaceMetric 10 <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">Set-NetIPInterface -InterfaceIndex</span><span> 3</span><span style="color:#ffb964;"> -InterfaceMetric</span><span> 10
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>将 WiFi 设为更低优先级:</li> <li>将 WiFi 设为更低优先级:</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>Set-NetIPInterface -InterfaceIndex 15 -InterfaceMetric 25 <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">Set-NetIPInterface -InterfaceIndex</span><span> 15</span><span style="color:#ffb964;"> -InterfaceMetric</span><span> 25
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>重启网络</li> <li>重启网络</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>Restart-NetAdapter -Name &quot;以太网&quot; <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">Restart-NetAdapter -Name </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">以太网</span><span style="color:#556633;">&quot;
</span></code></pre> </span></code></pre>
<p>这样当网线插入时Windows 会优先使用有线网络;断开网线后,自动切换到 WiFi。</p> <p>这样当网线插入时Windows 会优先使用有线网络;断开网线后,自动切换到 WiFi。</p>
<ul> <ul>
<li>如需永久设置,可修改注册表:</li> <li>如需永久设置,可修改注册表:</li>
</ul> </ul>
<p>Win + R 输入 regedit 打开注册表编辑器,进入路径:</p> <p>Win + R 输入 regedit 打开注册表编辑器,进入路径:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces
</span></code></pre> </span></code></pre>
<p>在 Interfaces 里找到你的有线网卡和无线网卡(可以根据 IP 或 MAC 地址确认)。</p> <p>在 Interfaces 里找到你的有线网卡和无线网卡(可以根据 IP 或 MAC 地址确认)。</p>
<ul> <ul>
@@ -292,10 +292,10 @@
<blockquote> <blockquote>
<p>保存为.bat格式</p> <p>保存为.bat格式</p>
</blockquote> </blockquote>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>@echo off <pre data-lang="bat" style="background-color:#151515;color:#e8e8d3;" class="language-bat "><code class="language-bat" data-lang="bat"><span>@echo off
</span><span>REM 清理代理设置 </span><span>REM</span><span style="color:#888888;"> 清理代理设置
</span><span>REG DELETE &quot;HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings&quot; /v ProxyEnable /f </span><span>REG DELETE </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings</span><span style="color:#556633;">&quot;</span><span> /v ProxyEnable /f
</span><span>REG DELETE &quot;HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings&quot; /v ProxyServer /f </span><span>REG DELETE </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings</span><span style="color:#556633;">&quot;</span><span> /v ProxyServer /f
</span><span>echo 代理设置已清除 </span><span>echo 代理设置已清除
</span></code></pre> </span></code></pre>
<h2 id="kai-guan-3djia-su">开/关3D加速</h2> <h2 id="kai-guan-3djia-su">开/关3D加速</h2>
@@ -303,26 +303,26 @@
<p>保存为.reg格式</p> <p>保存为.reg格式</p>
</blockquote> </blockquote>
<p>开启3D加速</p> <p>开启3D加速</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>Windows Registry Editor Version 5.00 <pre data-lang="bat" style="background-color:#151515;color:#e8e8d3;" class="language-bat "><code class="language-bat" data-lang="bat"><span>Windows Registry Editor Version </span><span style="color:#cf6a4c;">5</span><span>.</span><span style="color:#cf6a4c;">00
</span><span>[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DirectDraw] </span><span>[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DirectDraw]
</span><span>&quot;EmulationOnly&quot;=dword:00000000 </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">EmulationOnly</span><span style="color:#556633;">&quot;</span><span>=dword:</span><span style="color:#cf6a4c;">00000000
</span><span>[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Direct3D\Drivers] </span><span>[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Direct3D\Drivers]
</span><span>&quot;SoftwareOnly&quot;=dword:00000000 </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">SoftwareOnly</span><span style="color:#556633;">&quot;</span><span>=dword:</span><span style="color:#cf6a4c;">00000000
</span><span>[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\DirectDraw] </span><span>[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\DirectDraw]
</span><span>&quot;EmulationOnly&quot;=dword:00000000 </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">EmulationOnly</span><span style="color:#556633;">&quot;</span><span>=dword:</span><span style="color:#cf6a4c;">00000000
</span><span>[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Direct3D\Drivers] </span><span>[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Direct3D\Drivers]
</span><span>&quot;SoftwareOnly&quot;=dword:00000000 </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">SoftwareOnly</span><span style="color:#556633;">&quot;</span><span>=dword:</span><span style="color:#cf6a4c;">00000000
</span></code></pre> </span></code></pre>
<p>关闭3D加速</p> <p>关闭3D加速</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>Windows Registry Editor Version 5.00 <pre data-lang="bat" style="background-color:#151515;color:#e8e8d3;" class="language-bat "><code class="language-bat" data-lang="bat"><span>Windows Registry Editor Version </span><span style="color:#cf6a4c;">5</span><span>.</span><span style="color:#cf6a4c;">00
</span><span>[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DirectDraw] </span><span>[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DirectDraw]
</span><span>&quot;EmulationOnly&quot;=dword:00000001 </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">EmulationOnly</span><span style="color:#556633;">&quot;</span><span>=dword:</span><span style="color:#cf6a4c;">00000001
</span><span>[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Direct3D\Drivers] </span><span>[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Direct3D\Drivers]
</span><span>&quot;SoftwareOnly&quot;=dword:00000001 </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">SoftwareOnly</span><span style="color:#556633;">&quot;</span><span>=dword:</span><span style="color:#cf6a4c;">00000001
</span><span>[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\DirectDraw] </span><span>[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\DirectDraw]
</span><span>&quot;EmulationOnly&quot;=dword:00000001 </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">EmulationOnly</span><span style="color:#556633;">&quot;</span><span>=dword:</span><span style="color:#cf6a4c;">00000001
</span><span>[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Direct3D\Drivers] </span><span>[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Direct3D\Drivers]
</span><span>&quot;SoftwareOnly&quot;=dword:00000001 </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">SoftwareOnly</span><span style="color:#556633;">&quot;</span><span>=dword:</span><span style="color:#cf6a4c;">00000001
</span></code></pre> </span></code></pre>
<hr /> <hr />
<p><strong>Done.</strong></p> <p><strong>Done.</strong></p>

View File

@@ -141,167 +141,167 @@
<blockquote> <blockquote>
<p>linux中安装Miniconda</p> <p>linux中安装Miniconda</p>
</blockquote> </blockquote>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span># Miniconda安装脚本 <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#888888;"># Miniconda安装脚本
</span><span>wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh </span><span style="color:#ffb964;">wget</span><span> https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
</span><span># 执行以下命令启动安装程序: </span><span style="color:#888888;"># 执行以下命令启动安装程序:
</span><span>bash Miniconda3-latest-Linux-x86_64.sh </span><span style="color:#ffb964;">bash</span><span> Miniconda3-latest-Linux-x86_64.sh
</span><span># 验证安装 </span><span style="color:#888888;"># 验证安装
</span><span>conda --version </span><span style="color:#ffb964;">conda --version
</span></code></pre> </span></code></pre>
<h2 id="shi-yong">使用</h2> <h2 id="shi-yong">使用</h2>
<ul> <ul>
<li>创建环境后面的python=3.6是指定python的版本</li> <li>创建环境后面的python=3.6是指定python的版本</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>conda create --name env_name python=3.6 <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">conda</span><span> create</span><span style="color:#ffb964;"> --name</span><span> env_name python=3.6
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>创建包含某些包的环境(也可以加上版本信息)</li> <li>创建包含某些包的环境(也可以加上版本信息)</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>conda create --name env_name python=3.7 numpy scrapy <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">conda</span><span> create</span><span style="color:#ffb964;"> --name</span><span> env_name python=3.7 numpy scrapy
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>激活某个环境</li> <li>激活某个环境</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>conda activate env_name <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">conda</span><span> activate env_name
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>关闭某个环境</li> <li>关闭某个环境</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>conda deactivate env_name <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">conda</span><span> deactivate env_name
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>复制某个环境</li> <li>复制某个环境</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>conda create --name new_env_name --clone old_env_name <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">conda</span><span> create</span><span style="color:#ffb964;"> --name</span><span> new_env_name</span><span style="color:#ffb964;"> --clone</span><span> old_env_name
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>删除某个环境</li> <li>删除某个环境</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>conda remove --name env_name --all <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">conda</span><span> remove</span><span style="color:#ffb964;"> --name</span><span> env_name</span><span style="color:#ffb964;"> --all
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>生成需要分享环境的yml文件需要在虚拟环境中执行</li> <li>生成需要分享环境的yml文件需要在虚拟环境中执行</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>conda env export &gt; environment.yml <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">conda</span><span> env export &gt; environment.yml
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>在本地使用yml文件创建虚拟环境</li> <li>在本地使用yml文件创建虚拟环境</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>conda env create -f environment.yml <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">conda</span><span> env create</span><span style="color:#ffb964;"> -f</span><span> environment.yml
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>列出本机的所有环境如下可见当前有2个环境当前激活的是test环境</li> <li>列出本机的所有环境如下可见当前有2个环境当前激活的是test环境</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>(test) ➜ ~ conda info -e <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span>(</span><span style="color:#ffb964;">test</span><span>) ➜ </span><span style="color:#ffb964;">~</span><span> conda info</span><span style="color:#ffb964;"> -e
</span><span>- conda environments: </span><span style="color:#ffb964;">-</span><span> conda environments:
</span><span># </span><span style="color:#888888;">#
</span><span>base /Volumes/300g/opt/anaconda3 </span><span style="color:#ffb964;">base</span><span> /Volumes/300g/opt/anaconda3
</span><span>test * /Volumes/300g/opt/anaconda3/envs/test </span><span style="color:#ffb964;">test </span><span>* /Volumes/300g/opt/anaconda3/envs/test
</span></code></pre> </span></code></pre>
<h3 id="bao-guan-li">包管理</h3> <h3 id="bao-guan-li">包管理</h3>
<ul> <ul>
<li>列出当前环境下所有安装的包</li> <li>列出当前环境下所有安装的包</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>conda list <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">conda</span><span> list
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>列举一个指定环境下的所有包</li> <li>列举一个指定环境下的所有包</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>conda list -n env_name <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">conda</span><span> list</span><span style="color:#ffb964;"> -n</span><span> env_name
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>查询库</li> <li>查询库</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>conda search scrapys <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">conda</span><span> search scrapys
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>安装库安装时可以指定版本例如scrapy=1.5.0</li> <li>安装库安装时可以指定版本例如scrapy=1.5.0</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>conda install scrapy <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">conda</span><span> install scrapy
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>为指定环境安装某个包</li> <li>为指定环境安装某个包</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>conda install --name target_env_name package_name <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">conda</span><span> install</span><span style="color:#ffb964;"> --name</span><span> target_env_name package_name
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>更新安装的库</li> <li>更新安装的库</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>conda update scrapy <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">conda</span><span> update scrapy
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>更新指定环境某个包</li> <li>更新指定环境某个包</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>conda update -n target_env_name package_name <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">conda</span><span> update</span><span style="color:#ffb964;"> -n</span><span> target_env_name package_name
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>更新所有包</li> <li>更新所有包</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>conda update --all <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">conda</span><span> update</span><span style="color:#ffb964;"> --all
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>删除已经安装的库</li> <li>删除已经安装的库</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>conda remove scrapy <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">conda</span><span> remove scrapy
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>删除指定环境某个包</li> <li>删除指定环境某个包</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>conda remove -n target_env_name package_name <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">conda</span><span> remove</span><span style="color:#ffb964;"> -n</span><span> target_env_name package_name
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>更多命令请查看官方文档或者查询帮助命令:</li> <li>更多命令请查看官方文档或者查询帮助命令:</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>conda --help <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">conda --help
</span><span> </span><span>
</span><span>conda install --help </span><span style="color:#ffb964;">conda</span><span> install</span><span style="color:#ffb964;"> --help
</span></code></pre> </span></code></pre>
<h2 id="jupytershi-yong">Jupyter使用</h2> <h2 id="jupytershi-yong">Jupyter使用</h2>
<p>安装Anaconda并启动一个环境之后如何让Jupyter Notebook在我们要的环境中启动呢</p> <p>安装Anaconda并启动一个环境之后如何让Jupyter Notebook在我们要的环境中启动呢</p>
<ul> <ul>
<li>安装jupyter</li> <li>安装jupyter</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>conda install jupyter notebook <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">conda</span><span> install jupyter notebook
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>配置虚拟机中允许宿主机访问</li> <li>配置虚拟机中允许宿主机访问</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span># 生成配置 <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#888888;"># 生成配置
</span><span>jupyter notebook --generate-config </span><span style="color:#ffb964;">jupyter</span><span> notebook</span><span style="color:#ffb964;"> --generate-config
</span><span># 编辑配置 </span><span style="color:#888888;"># 编辑配置
</span><span>nano ~/.jupyter/jupyter_notebook_config.py </span><span style="color:#ffb964;">nano ~</span><span>/.jupyter/jupyter_notebook_config.py
</span><span># 写入这三行 </span><span style="color:#888888;"># 写入这三行
</span><span>c.NotebookApp.ip = &#39;0.0.0.0&#39; # 允许任何 IP 访问 </span><span style="color:#ffb964;">c.NotebookApp.ip</span><span> = </span><span style="color:#556633;">&#39;</span><span style="color:#99ad6a;">0.0.0.0</span><span style="color:#556633;">&#39; </span><span style="color:#888888;"># 允许任何 IP 访问
</span><span>c.NotebookApp.port = 8888 # 指定端口 </span><span style="color:#ffb964;">c.NotebookApp.port</span><span> = 8888 </span><span style="color:#888888;"># 指定端口
</span><span>c.NotebookApp.open_browser = False # 不自动开浏览器 </span><span style="color:#ffb964;">c.NotebookApp.open_browser</span><span> = False </span><span style="color:#888888;"># 不自动开浏览器
</span><span># 重启jupyter </span><span style="color:#888888;"># 重启jupyter
</span><span>jupyter notebook </span><span style="color:#ffb964;">jupyter</span><span> notebook
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>安装 ipykernel</li> <li>安装 ipykernel</li>
</ul> </ul>
<p>为了让 Jupyter Notebook 能识别该环境中的 Python 解释器,你需要在该环境中安装 ipykernel</p> <p>为了让 Jupyter Notebook 能识别该环境中的 Python 解释器,你需要在该环境中安装 ipykernel</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>conda install ipykernel <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">conda</span><span> install ipykernel
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>注册环境内核</li> <li>注册环境内核</li>
</ul> </ul>
<p>将该环境注册为 Jupyter 的一个内核kernel这样启动 Jupyter Notebook 后就能选择这个内核:</p> <p>将该环境注册为 Jupyter 的一个内核kernel这样启动 Jupyter Notebook 后就能选择这个内核:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>python -m ipykernel install --user --name myenv --display-name &quot;Python (myenv)&quot; <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">python -m</span><span> ipykernel install</span><span style="color:#ffb964;"> --user --name</span><span> myenv</span><span style="color:#ffb964;"> --display-name </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">Python (myenv)</span><span style="color:#556633;">&quot;
</span></code></pre> </span></code></pre>
<p>这里 --name 指定内核的名称,--display-name 是在 Jupyter Notebook 界面中显示的名称,你可以根据需要自定义。</p> <p>这里 --name 指定内核的名称,--display-name 是在 Jupyter Notebook 界面中显示的名称,你可以根据需要自定义。</p>
<ul> <ul>
<li>启动 Jupyter Notebook依然在激活后的环境中启动 Jupyter Notebook启动后你在新建 notebook 时可以选择刚刚注册的内核 “Python (myenv)” 来确保使用该环境的 Python 解释器。</li> <li>启动 Jupyter Notebook依然在激活后的环境中启动 Jupyter Notebook启动后你在新建 notebook 时可以选择刚刚注册的内核 “Python (myenv)” 来确保使用该环境的 Python 解释器。</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>jupyter notebook <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">jupyter</span><span> notebook
</span></code></pre> </span></code></pre>
<ul> <ul>
<li>汉化jupyter(可选)</li> <li>汉化jupyter(可选)</li>
</ul> </ul>
<p>Jupyter Notebook 本身没有官方语言包,但可以用第三方扩展 <code>jupyter_contrib_nbextensions</code><code>notebook-translation</code>来实现部分汉化</p> <p>Jupyter Notebook 本身没有官方语言包,但可以用第三方扩展 <code>jupyter_contrib_nbextensions</code><code>notebook-translation</code>来实现部分汉化</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>pip install jupyter_contrib_nbextensions <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">pip</span><span> install jupyter_contrib_nbextensions
</span><span>jupyter contrib nbextension install --user </span><span style="color:#ffb964;">jupyter</span><span> contrib nbextension install</span><span style="color:#ffb964;"> --user
</span><span>pip install jupyter-notebook-translation </span><span style="color:#ffb964;">pip</span><span> install jupyter-notebook-translation
</span></code></pre> </span></code></pre>
<blockquote> <blockquote>
<p>当然,你也可以使用其他编辑器/IDE如 Sublime Text 或者 JetBrains 系列的 PyCharm 。</p> <p>当然,你也可以使用其他编辑器/IDE如 Sublime Text 或者 JetBrains 系列的 PyCharm 。</p>
@@ -383,42 +383,42 @@
</tbody></table> </tbody></table>
<h2 id="ipynbzhuan-markdown">ipynb转markdown</h2> <h2 id="ipynbzhuan-markdown">ipynb转markdown</h2>
<p>首先安装 nbformat 和 nbconvert包</p> <p>首先安装 nbformat 和 nbconvert包</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>conda install nbformat nbconvert -y <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">conda</span><span> install nbformat nbconvert</span><span style="color:#ffb964;"> -y
</span><span>touch ipynb2md.py &amp;&amp; nano ipynb2md.py </span><span style="color:#ffb964;">touch</span><span> ipynb2md.py &amp;&amp; </span><span style="color:#ffb964;">nano</span><span> ipynb2md.py
</span></code></pre> </span></code></pre>
<p>写入以下脚本:</p> <p>写入以下脚本:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>import nbformat <pre data-lang="python" style="background-color:#151515;color:#e8e8d3;" class="language-python "><code class="language-python" data-lang="python"><span style="color:#8fbfdc;">import </span><span>nbformat
</span><span>from nbconvert import MarkdownExporter </span><span style="color:#8fbfdc;">from </span><span>nbconvert </span><span style="color:#8fbfdc;">import </span><span>MarkdownExporter
</span><span>from pathlib import Path </span><span style="color:#8fbfdc;">from </span><span>pathlib </span><span style="color:#8fbfdc;">import </span><span>Path
</span><span> </span><span>
</span><span>def ipynb_to_md(ipynb_path: Path, output_dir: Path): </span><span style="color:#8fbfdc;">def </span><span style="color:#fad07a;">ipynb_to_md</span><span>(</span><span style="color:#ffb964;">ipynb_path</span><span>: Path, </span><span style="color:#ffb964;">output_dir</span><span>: Path):
</span><span> &quot;&quot;&quot;单个 ipynb 转 md&quot;&quot;&quot; </span><span> </span><span style="color:#888888;">&quot;&quot;&quot;单个 ipynb 转 md&quot;&quot;&quot;
</span><span> with open(ipynb_path, &quot;r&quot;, encoding=&quot;utf-8&quot;) as f: </span><span> </span><span style="color:#8fbfdc;">with </span><span style="color:#ffb964;">open</span><span>(ipynb_path, </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">r</span><span style="color:#556633;">&quot;</span><span>, </span><span style="color:#ffb964;">encoding</span><span>=</span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">utf-8</span><span style="color:#556633;">&quot;</span><span>) </span><span style="color:#8fbfdc;">as </span><span>f:
</span><span> nb = nbformat.read(f, as_version=4) </span><span> nb = nbformat.</span><span style="color:#ffb964;">read</span><span>(f, </span><span style="color:#ffb964;">as_version</span><span>=</span><span style="color:#cf6a4c;">4</span><span>)
</span><span> </span><span>
</span><span> exporter = MarkdownExporter() </span><span> exporter = </span><span style="color:#ffb964;">MarkdownExporter</span><span>()
</span><span> body, resources = exporter.from_notebook_node(nb) </span><span> body, resources = exporter.</span><span style="color:#ffb964;">from_notebook_node</span><span>(nb)
</span><span> </span><span>
</span><span> output_file = output_dir / (ipynb_path.stem + &quot;.md&quot;) </span><span> output_file = output_dir / (ipynb_path.stem + </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">.md</span><span style="color:#556633;">&quot;</span><span>)
</span><span> with open(output_file, &quot;w&quot;, encoding=&quot;utf-8&quot;) as f: </span><span> </span><span style="color:#8fbfdc;">with </span><span style="color:#ffb964;">open</span><span>(output_file, </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">w</span><span style="color:#556633;">&quot;</span><span>, </span><span style="color:#ffb964;">encoding</span><span>=</span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">utf-8</span><span style="color:#556633;">&quot;</span><span>) </span><span style="color:#8fbfdc;">as </span><span>f:
</span><span> f.write(body) </span><span> f.</span><span style="color:#ffb964;">write</span><span>(body)
</span><span> </span><span>
</span><span> print(f&quot;✔ 转换完成: {ipynb_path} -&gt; {output_file}&quot;) </span><span> </span><span style="color:#ffb964;">print</span><span>(</span><span style="color:#8fbfdc;">f</span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">✔ 转换完成: </span><span>{ipynb_path}</span><span style="color:#99ad6a;"> -&gt; </span><span>{output_file}</span><span style="color:#556633;">&quot;</span><span>)
</span><span> </span><span>
</span><span>def batch_convert(input_dir: str, output_dir: str = &quot;markdown_output&quot;): </span><span style="color:#8fbfdc;">def </span><span style="color:#fad07a;">batch_convert</span><span>(</span><span style="color:#ffb964;">input_dir</span><span>: str, </span><span style="color:#ffb964;">output_dir</span><span>: str = </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">markdown_output</span><span style="color:#556633;">&quot;</span><span>):
</span><span> input_dir = Path(input_dir) </span><span> input_dir = </span><span style="color:#ffb964;">Path</span><span>(input_dir)
</span><span> output_dir = Path(output_dir) </span><span> output_dir = </span><span style="color:#ffb964;">Path</span><span>(output_dir)
</span><span> output_dir.mkdir(parents=True, exist_ok=True) </span><span> output_dir.</span><span style="color:#ffb964;">mkdir</span><span>(</span><span style="color:#ffb964;">parents</span><span>=True, </span><span style="color:#ffb964;">exist_ok</span><span>=True)
</span><span> </span><span>
</span><span> for ipynb_file in input_dir.glob(&quot;*.ipynb&quot;): </span><span> </span><span style="color:#8fbfdc;">for </span><span>ipynb_file </span><span style="color:#8fbfdc;">in </span><span>input_dir.</span><span style="color:#ffb964;">glob</span><span>(</span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">*.ipynb</span><span style="color:#556633;">&quot;</span><span>):
</span><span> ipynb_to_md(ipynb_file, output_dir) </span><span> </span><span style="color:#ffb964;">ipynb_to_md</span><span>(ipynb_file, output_dir)
</span><span> </span><span>
</span><span>if __name__ == &quot;__main__&quot;: </span><span style="color:#8fbfdc;">if </span><span>__name__ == </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">__main__</span><span style="color:#556633;">&quot;</span><span>:
</span><span> # 修改这里的目录路径即可 </span><span> </span><span style="color:#888888;"># 修改这里的目录路径即可
</span><span> batch_convert(input_dir=&quot;.&quot;) </span><span> </span><span style="color:#ffb964;">batch_convert</span><span>(</span><span style="color:#ffb964;">input_dir</span><span>=</span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">.</span><span style="color:#556633;">&quot;</span><span>)
</span></code></pre> </span></code></pre>
<p>运行脚本:</p> <p>运行脚本:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>python ipynb2md.py <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">python</span><span> ipynb2md.py
</span></code></pre> </span></code></pre>
<p>脚本会自动扫描当前目录下的所有 .ipynb 文件,并把 .md 文件输出到 markdown_output/ 文件夹。</p> <p>脚本会自动扫描当前目录下的所有 .ipynb 文件,并把 .md 文件输出到 markdown_output/ 文件夹。</p>
<hr /> <hr />

View File

@@ -164,12 +164,12 @@
<ul> <ul>
<li>回到 Visual Studio Code 继续配置。点击左侧的资源管理器,点击打开文件夹,创建一个<code>.cpp</code>文件,里面代码可以是</li> <li>回到 Visual Studio Code 继续配置。点击左侧的资源管理器,点击打开文件夹,创建一个<code>.cpp</code>文件,里面代码可以是</li>
</ul> </ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>#include &lt;iostream&gt; <pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#888888;">#include &lt;iostream&gt;
</span><span> </span><span>
</span><span>int main() { </span><span style="color:#ffb964;">int</span><span> main() {
</span><span> std::cout &lt;&lt; &quot;Hello&quot; &lt;&lt; std::endl; </span><span> </span><span style="color:#ffb964;">std::cout </span><span style="color:#99ad6a;">&lt;&lt; </span><span style="color:#556633;">&quot;</span><span style="color:#8fbfdc;">Hello</span><span style="color:#556633;">&quot; </span><span style="color:#99ad6a;">&lt;&lt; </span><span style="color:#8fbfdc;">std</span><span>::endl;
</span><span> return 0; </span><span style="color:#99ad6a;"> return 0;
</span><span>} </span><span style="color:#99ad6a;">}
</span></code></pre> </span></code></pre>
<ul> <ul>
<li> <li>