普通视图

发现新文章,点击刷新页面。
昨天以前优秀博客
  • ✇杜老师说
  • 使用 Docker 部署 tinyMediaManager 刮削工具Teacher Du
    杜老师使用 Emby 管理媒体文件,但刮削时经常报错。tinyMediaManager 是款功能强大的开源媒体管理工具,能够帮助轻松整理和管理媒体库。本文将详细介绍 tinyMediaManager 的搭建过程和基本使用方法。什么是 tinyMediaManagertinyMediaManager 简称 TMM 是一款用 Java/Swing 编写的媒体管理工具,能够为 Jellyfin、Emby 等媒体服务器提供元数据。通过 TMM 可以抓取和整理影片详细信息、封面图像、演员列表、导演信息等元数据,让媒体库更加丰富、完整。搭建准备准备好想要管理的电影、电视剧等媒体文件,并将其存放在一个固定的目录中,方便 TMM 进行扫描和管理。我们假设电影文件放入</path/to/movies>目录中,命令可参考 mkdir </path/to/movies>。电视文件放入</path/to/tv_shows/>目录中,命令可参考 mkdir </path/to/tv_shows/>。新建数据文件夹</path/to/local/data/&g
     

使用 Docker 部署 tinyMediaManager 刮削工具

作者 Teacher Du
2025年3月10日 00:00

杜老师使用 Emby 管理媒体文件,但刮削时经常报错。tinyMediaManager 是款功能强大的开源媒体管理工具,能够帮助轻松整理和管理媒体库。本文将详细介绍 tinyMediaManager 的搭建过程和基本使用方法。

什么是 tinyMediaManager

tinyMediaManager 简称 TMM 是一款用 Java/Swing 编写的媒体管理工具,能够为 Jellyfin、Emby 等媒体服务器提供元数据。

通过 TMM 可以抓取和整理影片详细信息、封面图像、演员列表、导演信息等元数据,让媒体库更加丰富、完整。

搭建准备

准备好想要管理的电影、电视剧等媒体文件,并将其存放在一个固定的目录中,方便 TMM 进行扫描和管理。

我们假设电影文件放入</path/to/movies>目录中,命令可参考 mkdir </path/to/movies>

电视文件放入</path/to/tv_shows/>目录中,命令可参考 mkdir </path/to/tv_shows/>

新建数据文件夹</path/to/local/data/>,命令可参考 mkdir </path/to/local/data/>

部署安装

这里我们使用 Docker 来部署,docker-compose.yml 的参考内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
---
version: "2.1"
services:
tinymediamanager:
image: tinymediamanager/tinymediamanager:latest
container_name: tinymediamanager
environment:
- USER_ID=1000
- GROUP_ID=100
- ALLOW_DIRECT_VNC=true
- LC_ALL=en_US.UTF-8 # force UTF8
- LANG=en_US.UTF-8 # force UTF8
- PASSWORD=<password>
- TZ=Asia/Shanghai
volumes:
- </path/to/local/data/>:/data
- </path/to/movies>:/media/movies
- </path/to/tv_shows/>:/media/tv_shows
ports:
- 5900:5900 # VNC port
- 4000:4000 # Webinterface
restart: unless-stopped

将上方代码中<password>改为 TMM 访问密码,配置好后执行如下命令即可:

1
docker-compose up -d

基本使用

第一次启动时,会进入 TMM 设置向导。需要选择媒体类型、设置媒体目录路径、选择元数据来源等。按照向导提示逐步完成设置即可:

设置完成后 TMM 会自动扫描指定的媒体目录,识别其中媒体文件,并尝试从在线数据库中获取相应的元数据:

TMM 会根据文件标题到电影资料网站上匹配电影信息,下载电影资料及图片到本地。可以查看和编辑这些元数据,确保信息的准确性和完整性:

TMM 还可按照一定的规则批量重命名和整理媒体文件,使文件名称更加规范和统一,方便管理、查找:

  • ✇杜老师说
  • RSSHub 搭建指南打造个性化资讯中心Teacher Du
    RSSHub 可以根据我们的需求生成个性化的 RSS 订阅源,让我们轻松地获取到各种平台的最新资讯。本文将详细介绍 RSSHub 搭建过程,快速搭建起属于自己的资讯中心。RSSHub 的简介RSSHub 是一个轻量、易于扩展 RSS 生成器,它基于 Node.js 开发,支持多种平台和类型订阅源,包括但不限于微博、知乎、B 站、GitHub 等。通过简单的配置和路由规则,我们就能生成自己想要的 RSS 订阅链接,随时随地获取最新内容更新。搭建前的准备在开始搭建 RSSHub 之前,我们需做一些准备工作。需一台服务器,可以是云主机,也可以是本地的计算机。服务器需要具备公网 IP 地址,以便我们能够从外部访问搭建好的 RSSHub 服务。RSSHub 基于 Docker 部署,因此需要在服务器上安装 Docker 环境。RSSHub 支持缓存中间件,如 Redis。为方便访问和使用,建议注册一个域名,并将其解析到服务器的 IP 地址上。RSSHub 的搭建步骤将下面的内容保存为 docker-compose.yml 文件:1234567891011121314151617181920212
     

RSSHub 搭建指南打造个性化资讯中心

作者 Teacher Du
2025年3月7日 00:00

RSSHub 可以根据我们的需求生成个性化的 RSS 订阅源,让我们轻松地获取到各种平台的最新资讯。本文将详细介绍 RSSHub 搭建过程,快速搭建起属于自己的资讯中心。

RSSHub 的简介

RSSHub 是一个轻量、易于扩展 RSS 生成器,它基于 Node.js 开发,支持多种平台和类型订阅源,包括但不限于微博、知乎、B 站、GitHub 等。

通过简单的配置和路由规则,我们就能生成自己想要的 RSS 订阅链接,随时随地获取最新内容更新。

搭建前的准备

在开始搭建 RSSHub 之前,我们需做一些准备工作。需一台服务器,可以是云主机,也可以是本地的计算机。服务器需要具备公网 IP 地址,以便我们能够从外部访问搭建好的 RSSHub 服务。

RSSHub 基于 Docker 部署,因此需要在服务器上安装 Docker 环境。

RSSHub 支持缓存中间件,如 Redis。

为方便访问和使用,建议注册一个域名,并将其解析到服务器的 IP 地址上。

RSSHub 的搭建步骤

将下面的内容保存为 docker-compose.yml 文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
services:
rsshub:
# two ways to enable puppeteer:
# * comment out marked lines, then use this image instead: diygod/rsshub:chromium-bundled
# * (consumes more disk space and memory) leave everything unchanged
image: diygod/rsshub
restart: always
ports:
- "1200:1200"
environment:
NODE_ENV: production
CACHE_TYPE: redis
REDIS_URL: "redis://redis:6379/"
PUPPETEER_WS_ENDPOINT: "ws://browserless:3000" # marked
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:1200/healthz"]
interval: 30s
timeout: 10s
retries: 3
depends_on:
- redis
- browserless # marked

browserless: # marked
image: browserless/chrome # marked
restart: always # marked
ulimits: # marked
core: # marked
hard: 0 # marked
soft: 0 # marked
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:3000/pressure"]
interval: 30s
timeout: 10s
retries: 3

redis:
image: redis:alpine
restart: always
volumes:
- redis-data:/data
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 30s
timeout: 10s
retries: 5
start_period: 5s

volumes:
redis-data:

使用下面命令来启动 RSSHub 服务:

1
docker-compose up -d

如需拉取新版 RSSHub 的镜像,可使用下面的命令:

1
docker-compose pull

如需停止服务,可使用下面的命令:

1
docker-compose down

如果不喜欢使用 Docker Compose 部署,可使用下面的命令运行有 Puppeteer 依赖的 RSSHub 服务:

1
docker run -d --name rsshub -p 1200:1200 diygod/rsshub:chromium-bundled

可使用下面的命令运行无 Puppeteer 依赖的 RSSHub 服务:

1
docker run -d --name rsshub -p 1200:1200 diygod/rsshub

为 Follow 添加实例

如果使用 Follow 调用 RSSHub 示例,需在 docker-compose.yml 中添加一些变量。其中 FOLLOW_OWNER_USER_ID 是指您的关注账户 ID 或用户名;FOLLOW_DESCRIPTION 指实例描述;FOLLOW_PRICE 指实例月费,如设为 0 表示免费;FOLLOW_USER_LIMIT 指实例用户限制,将其设置为 0 或 1 可将实例设为私有,留空则表示无限制;ACCESS_KEY 指访问密钥:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
services:
rsshub:
image: diygod/rsshub:chromium-bundled
restart: always
ports:
- "1200:1200"
environment:
NODE_ENV: production
FOLLOW_OWNER_USER_ID=杜老师说
FOLLOW_DESCRIPTION=大带宽境外服务器
FOLLOW_PRICE=1
FOLLOW_USER_LIMIT=1000
ACCESS_KEY=ubzG7H3t9TJaFp
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:1200/healthz"]
interval: 30s
timeout: 10s
retries: 3

登录 Follow 后,点击头像,选择 RSSHub 项。在显示页面中,点添加新实例。依次输入 RSSHub 的地址,访问密钥,最后点击添加即可:

  • ✇杜老师说
  • 加密 NFS 搭建保障数据传输与存储安全Teacher Du
    在现代企业环境中,数据的安全性至关重要。NFS 作为一种广泛使用的文件共享协议,其数据在传输和存储过程中若是缺乏加密保护,将面临被窃取或篡改的风险。本文将详细介绍加密 NFS 搭建过程。NFS 的简介NFS 是允许用户通过网络访问远程文件系统,就像访问本地文件系统一样方便。它支持跨平台文件共享,广泛应用于 Linux 和 Unix 系统。然而,传统的 NFS 传输数据时以明文形式在网络中传输,很容易受到中间人攻击和数据泄露的威胁。在 NFS 的基础上,我们可以使用加密技术来保护数据传输和存储。加密 NFS 必要性随着数据安全法规的日益严格和企业对数据保护的重视,对 NFS 进行加密变得必不可少。在企业中,NFS 的加密功能可以提供数据传输和存储的安全保障。加密 NFS 可有效防止数据在传输过程中被窃取或篡改,确保数据的完整性和机密性。同时,它也可以满足企业对数据安全合规的要求,为企业的数据资产提供更可靠的保护。搭建加密 NFS 的步骤在 NFS 服务器安装支持加密的 NFS 软件包。例如,在基于 Debian 的系统上,可以使用下面命令进行安装:1sudo apt -y install
     

加密 NFS 搭建保障数据传输与存储安全

作者 Teacher Du
2025年3月4日 00:00

在现代企业环境中,数据的安全性至关重要。NFS 作为一种广泛使用的文件共享协议,其数据在传输和存储过程中若是缺乏加密保护,将面临被窃取或篡改的风险。本文将详细介绍加密 NFS 搭建过程。

NFS 的简介

NFS 是允许用户通过网络访问远程文件系统,就像访问本地文件系统一样方便。

它支持跨平台文件共享,广泛应用于 Linux 和 Unix 系统。

然而,传统的 NFS 传输数据时以明文形式在网络中传输,很容易受到中间人攻击和数据泄露的威胁。

在 NFS 的基础上,我们可以使用加密技术来保护数据传输和存储。

加密 NFS 必要性

随着数据安全法规的日益严格和企业对数据保护的重视,对 NFS 进行加密变得必不可少。

在企业中,NFS 的加密功能可以提供数据传输和存储的安全保障。

加密 NFS 可有效防止数据在传输过程中被窃取或篡改,确保数据的完整性和机密性。

同时,它也可以满足企业对数据安全合规的要求,为企业的数据资产提供更可靠的保护。

搭建加密 NFS 的步骤

在 NFS 服务器安装支持加密的 NFS 软件包。例如,在基于 Debian 的系统上,可以使用下面命令进行安装:

1
sudo apt -y install nfs-kernel-server

使用下面的命令编辑 NFS 配置文件,添加加密相关选项。例如,可使用 sec = krb5isec = krb5p 选项来启用 Kerberos 加密。其中,krb5i 提供数据完整性保护,而 krb5p 则同时提供了数据加密和完整性保护:

1
sudo vim /etc/exports

在配置文件中指定要共享的目录及其访问权限。这表示允许客户端 IP 以读写模式访问共享目录,并启用 Kerberos 加密。例如:

1
/path/to/shared/directory client_ip(rw,sync,no_subtree_check,sec=krb5i)

完成配置后重启 NFS 服务。可以使用下面命令重启服务:

1
sudo systemctl restart nfs-kernel-server

使用下面的命令使配置文件生效:

1
exports -rv

在需访问加密 NFS 共享的客户端上安装 NFS 客户端软件。例如,在基于 Debian 的系统上,可以使用下面命令进行安装:

1
sudo apt -y install nfs-common

使用挂载命令将加密的 NFS 共享挂载到本地目录。这将把服务器上的共享目录挂载到客户端本地目录,并启用 Kerberos 加密。例如:

1
sudo mount -t nfs4 -o sec=krb5i server_ip:/path/to/shared/directory /local/mount/point

使用下面命令查看挂载文件系统,确保加密 NFS 共享已成功挂载:

1
df -h 

加密 NFS 优势与注意事项

加密 NFS 有多种优势,例如数据加密传输、身份认证和数据完整性保护等等。

它能够有效防止数据泄露和篡改,提高数据的安全性。

然而,在搭建加密 NFS 时也需要注意一些事项。

首先,加密过程可能会增加系统的性能开销,因此需根据实际需求进行性能评估和优化。

其次,配置过程较为复杂,需仔细检查配置文件和参数设置,确保正确无误。

此外,还需要定期更新加密软件和认证机制,以应对不断变化的安全威胁。

  • ✇杜老师说
  • 去不图床数据清理通知Teacher Du
    近期发现外链流量激增,经分析了解并非是攻击导致,通过 URL 判断其来源是一些匿名及到期用户所上传的图片。因此决定发文公告:清理去不图床所有匿名用户所上传的图片,并周期检查已到期用户。免费服务的初心与挑战2019 年,去不图床怀着为各位小伙伴提供免费、便捷图片托管服务赤子之心,正式上线!那会儿杜老师的目标就是给大伙儿搭个稳定可靠的平台,让大家轻轻松松的分享图片,舒舒服服存储图片。这服务的确是受到了大家的一致好评,用户数量跟图片上传量,那叫一个节节攀升,直冲云霄!可是好景不长,随着用户规模像滚雪球一样越滚越大,这流量成本也成了杜老师心头一块大石头。图片托管需要海量的带宽和存储空间,这费用那是哗哗地往外流啊!杜老师也是一直在绞尽脑汁优化成本,可那流量费用,像脱缰的野马,一发不可收拾,最终,在 2021 年不得不调整策略,从免费转向了收费,这都是为了咱这平台能继续坚挺地活下去!流量成本与运营的压力虽然 2021 年去不图床改成收费模式,但之前游客用户免费上传的图片,一直没有清理。这些图片,虽然丰富了平台的内容,但是占用的存储空间和流量资源,那也是相当可观啊!据统计游客上传的图片数量,那简直是
     

去不图床数据清理通知

作者 Teacher Du
2025年3月1日 00:00

近期发现外链流量激增,经分析了解并非是攻击导致,通过 URL 判断其来源是一些匿名及到期用户所上传的图片。因此决定发文公告:清理去不图床所有匿名用户所上传的图片,并周期检查已到期用户。

免费服务的初心与挑战

2019 年,去不图床怀着为各位小伙伴提供免费、便捷图片托管服务赤子之心,正式上线!

那会儿杜老师的目标就是给大伙儿搭个稳定可靠的平台,让大家轻轻松松的分享图片,舒舒服服存储图片。

这服务的确是受到了大家的一致好评,用户数量跟图片上传量,那叫一个节节攀升,直冲云霄!

可是好景不长,随着用户规模像滚雪球一样越滚越大,这流量成本也成了杜老师心头一块大石头。

图片托管需要海量的带宽和存储空间,这费用那是哗哗地往外流啊!

杜老师也是一直在绞尽脑汁优化成本,可那流量费用,像脱缰的野马,一发不可收拾,最终,在 2021 年不得不调整策略,从免费转向了收费,这都是为了咱这平台能继续坚挺地活下去!

流量成本与运营的压力

虽然 2021 年去不图床改成收费模式,但之前游客用户免费上传的图片,一直没有清理。

这些图片,虽然丰富了平台的内容,但是占用的存储空间和流量资源,那也是相当可观啊!

据统计游客上传的图片数量,那简直是天文数字,而且很多图片访问频率低得可怜,却依然霸占着咱宝贵的存储资源!

随着平台业务蒸蒸日上,对流量成本的控制也越来越严格。

现在运营环境,杜老师得精打细算,合理分配资源,保证已兑换容量的小伙伴能享受到更优质、更稳定的服务。

所以,经过一番深思熟虑,杜老师决定对游客用户的图片进行清理啦!

匿名用户上传图片清理

为了降低流量以及存储损耗,优化资源分配,杜老师将于 2025 年 3 月 1 日起,清理所有游客用户上传图片。

这个决定,杜老师也是万般的无奈,但这是目前运营环境下,必须采取的措施啊!

希望各位游客用户能够理解杜老师的苦衷,赶紧备份需要保存的图片吧!如有疑问,欢迎随时在评论区留言!

游客数据保留至本月中「2025 年 3 月 15 日」因为无法进行用户判定,所以杜老师已经整体打包备份了,需要的小伙伴可留言索要图片压缩包。

到期用户上传图片清理

为了进一步降低流量及存储损耗,优化资源分配,杜老师将于 2025 年 3 月 15 日起,清理所有到期用户上传图片。

已到期的用户数据清理规则如下:当月 15 日之前到期用户,数据保留至当月的最后一天;当月 15 日之后到期用户,数据保留至下个月月中。

数据清理之前,杜老师都会邮件通知用户进行再续费,通知七天后未续费则会清理数据「即当月 15 日之前到期的用户,会在当月 23 日发送通知;当月 15 日之后到期用户,会在次月 8 日发送通知」

注意图片清理是多节点同步执行,不会保留备份数据!最终解释权归去不图床所有。

  • ✇杜老师说
  • 使用 Python 脚本验证指定目录的图片文件Teacher Du
    有小伙伴说杜老师说侧边栏随机图片素材太少,翻来覆去只有那么几张。为了充实随机图片,杜老师采集了一个图片网站。奈何能力有限,某些图片采集失败,保存为空文件,所以需要编写一个脚本,来验证图片是否为正常。代码需求使用 Python 语言编写一个小项目,需要遍历指定目录下所有子目录「子目录名称为中文」验证子目录下的图片文件是否能正常打开,如果能则跳过,如果无法正常打开则返回其路径。变更解释使用 os 模块来遍历目录和子目录;使用 PIL 库来验证图片文件是否能正常打开。注意事项请确保安装了 Pillow 库,可以使用下面的命令来安装:1pip install pillow将 root_directory 变量设置为需要遍历的目录路径:12345678910111213141516171819202122232425262728import osfrom PIL import Imagedef validate_images_in_directory(root_dir): invalid_image_paths = [] for dirpath, dirnames, file
     

使用 Python 脚本验证指定目录的图片文件

作者 Teacher Du
2025年2月26日 00:00

有小伙伴说杜老师说侧边栏随机图片素材太少,翻来覆去只有那么几张。为了充实随机图片,杜老师采集了一个图片网站。奈何能力有限,某些图片采集失败,保存为空文件,所以需要编写一个脚本,来验证图片是否为正常。

代码需求

使用 Python 语言编写一个小项目,需要遍历指定目录下所有子目录「子目录名称为中文」

验证子目录下的图片文件是否能正常打开,如果能则跳过,如果无法正常打开则返回其路径。

变更解释

  1. 使用 os 模块来遍历目录和子目录;

  2. 使用 PIL 库来验证图片文件是否能正常打开。

注意事项

请确保安装了 Pillow 库,可以使用下面的命令来安装:

1
pip install pillow

root_directory 变量设置为需要遍历的目录路径:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import os
from PIL import Image

def validate_images_in_directory(root_dir):
invalid_image_paths = []

for dirpath, dirnames, filenames in os.walk(root_dir):
for filename in filenames:
if filename.lower().endswith(('.png', '.jpg', '.jpeg', '.gif', '.bmp')):
file_path = os.path.join(dirpath, filename)
try:
with Image.open(file_path) as img:
img.verify() # 尝试验证图片文件
except (IOError, SyntaxError) as e:
invalid_image_paths.append(file_path)

return invalid_image_paths

if __name__ == "__main__":
root_directory = '指定目录路径' # 替换为实际的目录路径
invalid_images = validate_images_in_directory(root_directory)

if invalid_images:
print("无法打开的图片文件路径:")
for path in invalid_images:
print(path)
else:
print("所有图片文件都能正常打开。")

执行代码

1
python3 images.py

注意:将上面的代码保存为 images.py 文件,然后在命令行中执行上面的命令。

  • ✇杜老师说
  • 探索 Linux 内存占用找出最吃内存的进程Teacher Du
    无论是服务器还是个人电脑,了解哪些进程占用了最多的内存,对于系统管理员和普通用户来说至关重要。不仅可以帮助我们优化系统性能,还能避免因内存不足而导致系统崩溃。本文将介绍如何在 Linux 系统中统计内存占用最多的前 10 个进程。为什么要统计内存占用多任务操作系统中,内存是有限的资源。当多个进程同时运行时,它们会争夺有限的内存空间。如果某些进程占用内存过多,可能导致系统响应变慢,甚至出现内存不足错误。因此,定期检查内存占用情况,找出占用最多进程,可以帮助我们更好管理资源,优化系统性能。使用命令工具统计内存占用使用 ps 和 sort 的命令组合:1ps -eo pid,comm,%mem --sort=-%mem | head -n 11解释:参数作用ps -eo pid,comm,%mem列出所有进程的 PID、进程名称和内存占用百分比。–sort=-%mem按内存占用百分比降序排序。head -n 11显示前 11 行的内容「第一行是标题,接下来是前 10 个进程的信息」虽然 top 命令主要用于实时的监控系统资源,但也可通过以下方式快速查看内存占用最多的进程:1top -o %M
     

探索 Linux 内存占用找出最吃内存的进程

作者 Teacher Du
2025年2月23日 00:00

无论是服务器还是个人电脑,了解哪些进程占用了最多的内存,对于系统管理员和普通用户来说至关重要。不仅可以帮助我们优化系统性能,还能避免因内存不足而导致系统崩溃。本文将介绍如何在 Linux 系统中统计内存占用最多的前 10 个进程。

为什么要统计内存占用

多任务操作系统中,内存是有限的资源。

当多个进程同时运行时,它们会争夺有限的内存空间。

如果某些进程占用内存过多,可能导致系统响应变慢,甚至出现内存不足错误。

因此,定期检查内存占用情况,找出占用最多进程,可以帮助我们更好管理资源,优化系统性能。

使用命令工具统计内存占用

使用 pssort 的命令组合:

1
ps -eo pid,comm,%mem --sort=-%mem | head -n 11

解释:

参数作用
ps -eo pid,comm,%mem列出所有进程的 PID、进程名称和内存占用百分比。
–sort=-%mem按内存占用百分比降序排序。
head -n 11显示前 11 行的内容「第一行是标题,接下来是前 10 个进程的信息」

虽然 top 命令主要用于实时的监控系统资源,但也可通过以下方式快速查看内存占用最多的进程:

1
top -o %MEM -b -n 1 | head -n 18

解释:

参数作用
-o %MEM按照内存占用排序。
-b以批处理模式运行,输出到终端上。
-n 1只需运行一次。
head -n 18过滤出前 18 行「因为 top 输出的前几行是系统信息,实际进程从第 8 行开始」

如果需要更详细的内存占用信息,可结合 pmap 命令:

1
ps -eo pid,%mem,comm --sort=-%mem | head -n 11 | awk '{print $1}' | xargs -I {} pmap {} | grep total

解释:

参数作用
ps -eo pid,%mem,comm –sort=-%mem获取内存占用最高的进程 PID。
awk ‘{print $1}’提取 PID 进程号。
xargs -I {} pmap {}获取每个进程详细内存映射信息。
grep total过滤 total 行,显示每个进程的总内存占用情况。

如果系统安装了 smem 工具,可以更直观地查看内存占用:

1
smem -s rss -c "pid user command rss" --sort=rss | head -n 11

解释:

参数作用
-s rss按 RSS 排序。
-c “pid user command rss”指定显示的列。
–sort=rss按 RSS 排序。
head -n 11显示前 11 行的内容。

如何分析内存占用情况

确认进程是否必要。有些进程可能是系统正常运行所必需,例如 systemd 等。这些进程通常不会占用过多内存。然而,如果某些进程是用户启动的,如某个应用程序或脚本,需确认它们是否在正常运行。

检查进程是否内存泄漏。如某个进程的内存占用持续增加,可能是内存泄漏导致的。内存泄漏是指程序在申请内存后,无法正确释放已分配的内存,导致内存占用不断增加。这种情况下需要检查程序的代码,查找可能导致内存泄漏地方。

限制进程内存使用。如果某个进程占用过多内存,但又不能轻易终止,可以尝试限制它的内存使用。

Linux 提供 ulimit 命令,可设置进程的资源限制。例如,限制某个进程的最大内存使用量为 1GB,可使用命令 ulimit -m 1048576

内存管理其它技巧

除了统计内存占用最多进程,还可通过以下方式优化 Linux 系统的内存管理。

调整交换空间。交换空间是磁盘上的一部分空间,当物理内存不足时,系统会将一些不常用的内存页面移到交换空间。虽然使用交换空间可以避免系统崩溃,但磁盘速度远慢于内存,因此过多地使用交换空间会导致系统性能下降。

可以通过命令 swapon --show 查看交换空间的使用情况。如果交换空间使用过多,可以考虑增加物理内存,或者调整交换空间大小。

使用内存清理工具。Linux 系统会自动管理内存分配、回收,但有时也可以手动清理内存。

例如,可以使用 sync 命令将缓存数据写入磁盘,然后用 echo 3 > /proc/sys/vm/drop_caches 命令清理缓存。

但请注意,这种方法可能会对系统性能产生一定影响,因此需要谨慎使用。

  • ✇杜老师说
  • 使用 SlimToolkit 打造更小的容器镜像Teacher Du
    现在容器技术很火,镜像又肥又大,部署较慢不说,安全风险还蹭蹭往上窜,简直让人头大!SlimToolkit 就像一位经验老道的镜像瘦身大师,能把镜像体积缩小到令人咋舌的程度,最多能瘦 30 倍!到底是啥简单来说,SlimToolkit 就是一个开源的镜像减肥专家,它能智能分析镜像,找出那些又大又没用的文件、库和依赖,然后干净利落地咔嚓下,统统删掉!就像一位技艺精湛的雕塑家,将冗余的部分精雕细琢,留下最精髓的部分。之前叫 DockerSlim,现在已经是云原生计算基金会沙盒项目了,实力是杠杠的!它的核心思想就是原封不动优化,通过动态、静态分析,自动识别并移除镜像里垃圾文件。支持 Docker 以及 Kubernetes,各种类云原生工具,妥妥全能选手!不只瘦身,还可以提供命令行工具,方便检查、调试、管理镜像,简直贴心到家!SlimToolkit 的绝活镜像瘦身大法:这是它的看家本领!它能像一位经验丰富的裁缝,精准剪裁镜像,去除冗余部分。如一个基于 Ubuntu 的 Python 应用,原本约 438MB,经过它的一通操作,能瘦到 16.8MB,足足瘦了 26 倍!安全防护专家:它不仅能瘦身
     

使用 SlimToolkit 打造更小的容器镜像

作者 Teacher Du
2025年2月20日 00:00

现在容器技术很火,镜像又肥又大,部署较慢不说,安全风险还蹭蹭往上窜,简直让人头大!SlimToolkit 就像一位经验老道的镜像瘦身大师,能把镜像体积缩小到令人咋舌的程度,最多能瘦 30 倍!

到底是啥

简单来说,SlimToolkit 就是一个开源的镜像减肥专家,它能智能分析镜像,找出那些又大又没用的文件、库和依赖,然后干净利落地咔嚓下,统统删掉!

就像一位技艺精湛的雕塑家,将冗余的部分精雕细琢,留下最精髓的部分。

之前叫 DockerSlim,现在已经是云原生计算基金会沙盒项目了,实力是杠杠的!

它的核心思想就是原封不动优化,通过动态、静态分析,自动识别并移除镜像里垃圾文件。

支持 Docker 以及 Kubernetes,各种类云原生工具,妥妥全能选手!

不只瘦身,还可以提供命令行工具,方便检查、调试、管理镜像,简直贴心到家!

SlimToolkit 的绝活

  1. 镜像瘦身大法:这是它的看家本领!它能像一位经验丰富的裁缝,精准剪裁镜像,去除冗余部分。如一个基于 Ubuntu 的 Python 应用,原本约 438MB,经过它的一通操作,能瘦到 16.8MB,足足瘦了 26 倍!

  2. 安全防护专家:它不仅能瘦身,还可以增强安全性!它可以自动生成 Seccomp 和 AppArmor 安全配置文件,像给容器穿上了一层坚不可摧的盔甲,限制系统调用,防止各种安全漏洞入侵。再也不用担心容器被黑客攻破了!

  3. 动态分析、调试:它就像一位经验丰富的侦探,可以创建一个临时容器模拟运行环境,通过 HTTP 探针等方式收集运行数据,分析应用程序行为,确保瘦身后的镜像依然可以正常工作。而且,它还提供调试工具,在优化后的容器中运行调试命令,排查问题方便!

  4. 无缝集成:它就像一位老练的管家,能无缝集成到开发和部署流程中。不用改动 Dockerfile 或构建工具,只需在构建过程中添加 SlimToolkit 的优化步骤即可。还支持各种 CI/CD 工具,如 Jenkins、GitHub Actions 等,自动化部署 so easy!

上手玩转

先安装 SlimToolkit。SlimToolkit 提供了多种安装方式,含直接下载二进制文件、使用脚本安装或通过 Docker 运行。对于大多数的用户,使用脚本安装是最简单方式:

1
curl -sL https://raw.githubusercontent.com/slimtoolkit/slim/master/scripts/install-slim.sh | sudo -E bash -

优化容器镜像。假设已经有一个 Docker 镜像,如一个基于 Python 的 Web 应用。可使用以下命令对镜像进行优化:

1
slim build my/sample-python-app

SlimToolkit 会自动创建一个临时容器,运行动态分析,并生成优化后镜像。优化后的镜像名称会自动加上.slim 后缀,例如:

1
my/sample-python-app.slim

验证优化效果。优化完成后可以使用以下命令查看优化后镜像大小:

1
docker images

SlimToolkit 的优势

  1. 自动与智能化:它能够自动识别容器中不必要的部分,并且进行优化,无需开发者手动修改 Dockerfile 或者删除文件。这种自动化不仅节省了时间,还减少了人为错误的可能性。

  2. 安全:通过生成 Seccomp 和 AppArmor 的配置文件,SlimToolkit 为容器提供了额外的安全保障。这些配置文件能够限制容器系统调用,防止潜在安全威胁,而无需开发者深入了解安全框架细节。

  3. 无缝集成:SlimToolkit 设计目标是无缝集成到现有的开发和部署流程中。它支持多种容器运行时和 CI/CD 工具,能够轻松集成到自动化构建和部署流程中。开发者无需改变现有的工具链或工作流程,即可享受 SlimToolkit 带来的优化效果。

  4. 开源:完全开源,社区活跃,有问必答!

  • ✇杜老师说
  • 图片为啥用 Base64 格式进行传输Teacher Du
    在互联网的世界里,图片传输是再平常不过的事情了,而 Base64 格式常常出现在这一过程中。那为啥图片要用 Base64 格式来传输呢?这背后有不少门道。本文将介绍 Base64 格式的应用场景和优点,以及一些应用场景下的缺点。Base64 是什么Base64 是种用 64 个可打印字符来表示二进制数据的编码方法。这 64 个字符含大小写字母各 26 个,还有 10 个数字以及两个符号。例如,当我们看到一串像 SGVsbG8gV29ybGQh 这样的字符,这就是 Base64 编码后的结果,其实代表了 Hello World!易于文本传输在很多网络传输场景中,尤其是早期的网络应用,传输通道主要被设计为传输文本数据。因为文本数据格式相对简单、统一,而且不容易出现乱码等问题。而图片是二进制的数据,直接传输二进制数据可能会因为不同系统、不同软件对二进制数据的处理方式不同而出现问题。Base64 把图片的二进制数据转换成了文本形式。这样一来,通过电子邮件、网页表单等主要以文本传输为主的渠道时,图片就可以顺利跟着文本一起传输了。比如,在发送带有图片附件的电子邮件,邮件系统会把图片转换成 Base
     

图片为啥用 Base64 格式进行传输

作者 Teacher Du
2025年2月17日 00:00

在互联网的世界里,图片传输是再平常不过的事情了,而 Base64 格式常常出现在这一过程中。那为啥图片要用 Base64 格式来传输呢?这背后有不少门道。本文将介绍 Base64 格式的应用场景和优点,以及一些应用场景下的缺点。

Base64 是什么

Base64 是种用 64 个可打印字符来表示二进制数据的编码方法。这 64 个字符含大小写字母各 26 个,还有 10 个数字以及两个符号。

例如,当我们看到一串像 SGVsbG8gV29ybGQh 这样的字符,这就是 Base64 编码后的结果,其实代表了 Hello World!

易于文本传输

在很多网络传输场景中,尤其是早期的网络应用,传输通道主要被设计为传输文本数据。

因为文本数据格式相对简单、统一,而且不容易出现乱码等问题。

而图片是二进制的数据,直接传输二进制数据可能会因为不同系统、不同软件对二进制数据的处理方式不同而出现问题。

Base64 把图片的二进制数据转换成了文本形式。这样一来,通过电子邮件、网页表单等主要以文本传输为主的渠道时,图片就可以顺利跟着文本一起传输了。

比如,在发送带有图片附件的电子邮件,邮件系统会把图片转换成 Base64 格式,然后和邮件的正文一起发送。

接收方收到邮件后,邮件客户端再把 Base64 格式的数据转换回图片,这样我们就能看到图片。

兼容性好

不同的操作系统和不同的软件应用对数据处理方式可能存在差异。Base64 编码后的文本数据在各种平台都能被正确识别和处理。

例如,一个在 Windows 系统上生成的 Base64 编码的图片数据,在 Linux 服务器上也能轻松解码并还原成图片,不用担心因为平台不同而出现数据损坏或者无法读取的情况。

几乎所有的编程语言都有内置的库或者函数来处理 Base64 编码和解码。这使得开发人员在开发涉及图片传输的应用程序时,能够很方便使用 Base64 格式。

比如,在一个基于 Python 的 Web 应用,开发人员可以使用库轻松地将图片文件读取并编码为 Base64 格式,然后通过网络发送给服务器或客户端。

方便在网页中嵌入图片

在网页设计中,如果一个网页中有大量的小图标或小图片,每次加载这些图片都需要发送一个 HTTP 请求。

这不仅会增加服务器的负担,还会影响网页加载速度。

而将这些小图片转换为 Base64 格式后,可以直接将 Base64 编码的数据嵌入到 HTML 或 CSS 文件中。

这样浏览器在加载 HTML 或 CSS 文件的时候,就可以直接读取到图片数据,而不需要单独发送 HTTP 请求去获取图片,从而提高了网页的加载效率。

嵌入 Base64 格式的图片还可以简化网页的结构。不需要在网页文件目录中单独存放这些小图片文件,减少了文件管理复杂性。

对于一些简单的网页应用或前端框架,这种方式非常实用。

安全性的考虑

虽然 Base64 编码不能算是真正的加密方法,但它在一定程度上可起到隐藏信息的作用。

因为对于不了解 Base64 编码的人来说,看到一串 Base64 编码的数据可能不知道它代表的是图片内容。

在一些对安全性要求不是特别高的场景下,可作为一种简单的保护措施。

比如,在一些内部文档分享系统中,把图片转换 Base64 格式传输,可防止非授权用户轻易地获取到原始图片文件。

在某些情况下,直接传输二进制图片文件可能会带来安全风险,如图片文件可能被恶意篡改,包含恶意代码。

将图片转换为 Base64 格式后,这些恶意代码在 Base64 编码文本环境中很难被执行,从而降低安全风险。

缺点

不过,Base64 传输图片也有其缺点。比如,Base64 编码后数据量比原始的二进制图片数据要大,大概会增加百分之三十三左右的大小。

所以在传输大图片或者对带宽要求很高的场景,可能需要权衡下是否使用 Base64 格式。

  • ✇杜老师说
  • DPanel 让 Docker 管理变得轻松又高效Teacher Du
    Docker 作为容器化领域的佼佼者,其强大的功能和灵活性,赢得众多开发者的青睐。然而,对于许多用户来说,Docker 的命令行操作可能显得有些复杂和繁琐。幸运的是,DPanel 的出现为 Docker 的管理和使用带来了全新的体验。什么是 DPanelDPanel 是一款轻量化的 Docker 可视化管理面板,专为简化容器的管理而设计。它提供一套完善的容器管理功能,让用户可通过直观的图形界面轻松管理 Docker 容器,无需深入复杂的命令行操作。无论是初学者还是经验丰富的开发者,DPanel 都能帮助他们更高效地管理和部署容器。DPanel 的优势DPanel 的界面简洁直观,操作简单易懂,即使新手也能轻松上手。DPanel 提供了丰富功能,涵盖了网站管理的各个方面,能够满足各种用户的需求。基于容器设计,安装和部署都非常简单。用户无需复杂配置,只需通过简单步骤即可快速启动面板。其简洁直观操作界面让用户能够轻松上手,即使是第一次接触 Docker 的用户也能快速掌握基本操作。DPanel 与 Docker 官方的兼容性非常好,能够无缝对接 Docker 的各项功能。支持多种操作系统和
     

DPanel 让 Docker 管理变得轻松又高效

作者 Teacher Du
2025年2月14日 00:00

Docker 作为容器化领域的佼佼者,其强大的功能和灵活性,赢得众多开发者的青睐。然而,对于许多用户来说,Docker 的命令行操作可能显得有些复杂和繁琐。幸运的是,DPanel 的出现为 Docker 的管理和使用带来了全新的体验。

什么是 DPanel

DPanel 是一款轻量化的 Docker 可视化管理面板,专为简化容器的管理而设计。它提供一套完善的容器管理功能,让用户可通过直观的图形界面轻松管理 Docker 容器,无需深入复杂的命令行操作。

无论是初学者还是经验丰富的开发者,DPanel 都能帮助他们更高效地管理和部署容器。

DPanel 的优势

DPanel 的界面简洁直观,操作简单易懂,即使新手也能轻松上手。

DPanel 提供了丰富功能,涵盖了网站管理的各个方面,能够满足各种用户的需求。

基于容器设计,安装和部署都非常简单。用户无需复杂配置,只需通过简单步骤即可快速启动面板。其简洁直观操作界面让用户能够轻松上手,即使是第一次接触 Docker 的用户也能快速掌握基本操作。

DPanel 与 Docker 官方的兼容性非常好,能够无缝对接 Docker 的各项功能。支持多种操作系统和 Docker 版本,确保用户在不同环境下都能稳定使用。

服务安装

我们可以使用官方提供的集成脚本安装 DPanel。当宿主机没有 Docker 环境时,集成脚本会尝试安装 Docker 环境:

1
curl -sSL https://dpanel.cc/quick.sh -o quick.sh && sudo bash quick.sh

按照提示操作。安装完成后通过浏览器访问面板地址,即可进入管理界面:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
[DPanel Install Log]: 选择你需要安装的版本 
1. 标准版 (需要绑定 80 及 443 端口)
2. Lite版 (不包含域名转发相关功能)
3. 标准版 (Pro)
4. Lite版 (Pro)
5. Beta版 (内测版本)
输入你要安装的版本编号 [默认: 2]: 1
1. Docker Hub
2. ALiYun
选择镜像源 [默认: 1]: 2
[DPanel Install Log]: 你安装使用的镜像为 registry.cn-hangzhou.aliyuncs.com/dpanel/dpanel:latest
[DPanel Install Log]: 设置 DPanel 容器名称,更新面板时请配置为当前面板容器名称
请输入名称 [默认: dpanel]:
[DPanel Install Log]: 你指定的容器名称为 dpanel
设置 DPanel 容器挂载目录 [默认: /home/dpanel]:
[DPanel Install Log]: 您选择的面板容器挂载目录是 /home/dpanel
设置 DPanel 端口 [默认: 25128]:
[DPanel Install Log]: 您设置的端口是: 25128
[DPanel Install Log]: 如果端口已经被占用,请再次执行脚本更换端口后重新安装
Unable to find image 'registry.cn-hangzhou.aliyuncs.com/dpanel/dpanel:latest' locally
latest: Pulling from dpanel/dpanel
1f3e46996e29: Pull complete
b6dde5f749cd: Pull complete
459b8d93d51a: Pull complete
7d52a0c67d85: Pull complete
4b97f8a613e7: Pull complete
1d46bacd0854: Pull complete
3eac9a9b4fcb: Pull complete
2c5c0b90bb2b: Pull complete
4f4fb700ef54: Pull complete
Digest: sha256:9daa4f411b2bd7845cfd71e747ba2827797ea5fe9e754b8db475541c3700ba01
Status: Downloaded newer image for registry.cn-hangzhou.aliyuncs.com/dpanel/dpanel:latest
d492b83d8c546297836a8735d73f0b3f8943f134065dea4ef5ffff834f028715
[DPanel Install Log]:
[DPanel Install Log]: =================感谢您的耐心等待,安装、升级已完成==================
[DPanel Install Log]:
[DPanel Install Log]: 请使用您的浏览器访问面板,并初始化管理员帐号:
[DPanel Install Log]: 外部地址: http://123.116.127.26:25128
[DPanel Install Log]: 内部地址: http://192.168.31.187:25128
[DPanel Install Log]: 如果您使用的是云服务器,请在安全组中打开端口 25128
[DPanel Install Log]:
[DPanel Install Log]: 官方网站及文档: https://dpanel.cc
[DPanel Install Log]: 代码仓库: https://github.com/donknap/dpanel
[DPanel Install Log]:
[DPanel Install Log]: ================================================================

面板效果

首页概览:

容器管理:

文件管理:

镜像管理:

创建镜像:

系统管理:

  • ✇杜老师说
  • 本博出现图碎问题说明Teacher Du
    近期本博访问时出现了图碎问题,经排查系 CDN 回源失败导致的。有小伙伴可能会说,保证成功就可以修复了,其实没有那么简单。本文简单描述下存储节点数据流,顺便科普一下如何清理单站数据缓存。数据流向通过下图可以看出,图片文件保存在主机上,通过转换处理为 WebP 格式文件,经由 CDN 回源并实现访问加速:问题分析登录 CDN 管理后台查看其日志,发现出现超时记录。超时原因一般两种,一种是因线路问题导致回源超时,一种是因主机没有及时返回数据造成。本地图片经由 WebP 中间件处理,再回源给 CDN 做反代,经查是 WebP 服务突然宕机导致 CDN 未收到响应数据导致超时。除超时问题外,因无返回数据导致 CDN 响应 404,而服务器设置 404 默认跳转至主站首页,这就导致好多小伙伴频繁刷新页面依然不显示图片。解决方案目前已关闭 CDN,流量直接回源至源主机,缺点就是会影响访问的速度。带调试维护后会重新挂上 CDN。WebP 图片转换是为了减少图片体积,进而减轻带宽压力「轻量级服务器有流量的限制」因此不能暂停使用,已修改其参数,尽量保障响应的成功率。如之前有访问记录,会留下 404 跳转
     

本博出现图碎问题说明

作者 Teacher Du
2025年2月11日 00:00

近期本博访问时出现了图碎问题,经排查系 CDN 回源失败导致的。有小伙伴可能会说,保证成功就可以修复了,其实没有那么简单。本文简单描述下存储节点数据流,顺便科普一下如何清理单站数据缓存。

数据流向

通过下图可以看出,图片文件保存在主机上,通过转换处理为 WebP 格式文件,经由 CDN 回源并实现访问加速:

问题分析

登录 CDN 管理后台查看其日志,发现出现超时记录。

超时原因一般两种,一种是因线路问题导致回源超时,一种是因主机没有及时返回数据造成。

本地图片经由 WebP 中间件处理,再回源给 CDN 做反代,经查是 WebP 服务突然宕机导致 CDN 未收到响应数据导致超时。

除超时问题外,因无返回数据导致 CDN 响应 404,而服务器设置 404 默认跳转至主站首页,这就导致好多小伙伴频繁刷新页面依然不显示图片。

解决方案

目前已关闭 CDN,流量直接回源至源主机,缺点就是会影响访问的速度。带调试维护后会重新挂上 CDN。

WebP 图片转换是为了减少图片体积,进而减轻带宽压力「轻量级服务器有流量的限制」因此不能暂停使用,已修改其参数,尽量保障响应的成功率。

如之前有访问记录,会留下 404 跳转缓存,需要清理相关数据。

有小伙伴分享了两种清理缓存的方法,需要的小伙伴可以参考操作。

清理缓存

首先进入到浏览器的开发者工具,一般浏览器点击F12即可,进入更多设置,勾选 Disable cache while DevTools is open 项:

或者切换到网络标签页,勾选禁用缓存,刷新页面即可「注意保持开发者工具一直处于开启的状态」

  • ✇杜老师说
  • 新版本去不图床免费公测开始啦Teacher Du
    有不少的小伙伴为去不图床提供建议,包括但不限于增加支持格式、图片处理、水印功能等等。杜老师也收集了这些建议转交给程序的设计者,经过了几个月更新迭代,V2 版本已推出。由于使用了新框架,无论是操作逻辑和功能支持,都有较大改变,所以在正式上线前,杜老师决定免费公测下!新版界面新版主页相较老版而言更加简洁,仅包含站点名称及描述信息,还有图片托管数据。最下方是两个功能入口,一个是图片上传的窗口,一个是用户登录的界面:在上传界面中,可以选择从本地计算机上传图片文件,也可接入到摄影头,拍摄照片后再上传。目前支持访客上传,所有图片会经过审核后存放在服务器:用户可以通过邮箱、用户名两种方式来登录。目前程序强制要求注册用户进行邮件验证,不能关闭验证。但因 bug 收不到验证信息,所以杜老师提供了一些体验账号用需要的小伙伴们使用:在用户的仪表盘中可看到当前拥有的存储容量,可以查看图片、相册、分享,可以购买订阅、查看订单,提交工单或申请 API Tokens:体验账号体验账号密码统一为 7bu.top,默认容量为 1G。如选择了账号,请在评论区中留下编号,杜老师会根据使用备注信息,避免有小伙伴重复选择账号:
     

新版本去不图床免费公测开始啦

作者 Teacher Du
2025年2月8日 00:00

有不少的小伙伴为去不图床提供建议,包括但不限于增加支持格式、图片处理、水印功能等等。杜老师也收集了这些建议转交给程序的设计者,经过了几个月更新迭代,V2 版本已推出。由于使用了新框架,无论是操作逻辑和功能支持,都有较大改变,所以在正式上线前,杜老师决定免费公测下!

新版界面

新版主页相较老版而言更加简洁,仅包含站点名称及描述信息,还有图片托管数据。最下方是两个功能入口,一个是图片上传的窗口,一个是用户登录的界面:

在上传界面中,可以选择从本地计算机上传图片文件,也可接入到摄影头,拍摄照片后再上传。目前支持访客上传,所有图片会经过审核后存放在服务器:

用户可以通过邮箱、用户名两种方式来登录。目前程序强制要求注册用户进行邮件验证,不能关闭验证。但因 bug 收不到验证信息,所以杜老师提供了一些体验账号用需要的小伙伴们使用:

在用户的仪表盘中可看到当前拥有的存储容量,可以查看图片、相册、分享,可以购买订阅、查看订单,提交工单或申请 API Tokens:

体验账号

体验账号密码统一为 7bu.top,默认容量为 1G。如选择了账号,请在评论区中留下编号,杜老师会根据使用备注信息,避免有小伙伴重复选择账号:

编号账号邮箱备注
1dusays1dusays1@dusays.com已用
2dusays2dusays2@dusays.com暂无
3dusays3dusays3@dusays.com暂无
4dusays4dusays4@dusays.com暂无
5dusays5dusays5@dusays.com暂无
6dusays6dusays6@dusays.com暂无
7dusays7dusays7@dusays.com暂无
8dusays8dusays8@dusays.com暂无
9dusays9dusays9@dusays.com暂无
10dusays10dusays10@dusays.com暂无
11dusays11dusays11@dusays.com暂无
12dusays12dusays12@dusays.com暂无
13dusays13dusays13@dusays.com暂无
14dusays14dusays14@dusays.com暂无
15dusays15dusays15@dusays.com暂无
16dusays16dusays16@dusays.com暂无
17dusays17dusays17@dusays.com暂无
18dusays18dusays18@dusays.com暂无
19dusays19dusays19@dusays.com暂无
20dusays20dusays20@dusays.com暂无
21dusays21dusays21@dusays.com暂无
22dusays22dusays22@dusays.com暂无
23dusays23dusays23@dusays.com暂无
24dusays24dusays24@dusays.com暂无
25dusays25dusays25@dusays.com暂无
26dusays26dusays26@dusays.com已用
27dusays27dusays27@dusays.com暂无
28dusays28dusays28@dusays.com暂无
29dusays29dusays29@dusays.com暂无
30dusays30dusays30@dusays.com暂无
31dusays31dusays31@dusays.com暂无
32dusays32dusays32@dusays.com暂无
33dusays33dusays33@dusays.com暂无
34dusays34dusays34@dusays.com暂无
35dusays35dusays35@dusays.com暂无
36dusays36dusays36@dusays.com暂无
37dusays37dusays37@dusays.com暂无
38dusays38dusays38@dusays.com暂无
39dusays39dusays39@dusays.com暂无
40dusays40dusays40@dusays.com暂无
41dusays41dusays41@dusays.com暂无
42dusays42dusays42@dusays.com暂无
43dusays43dusays43@dusays.com暂无
44dusays44dusays44@dusays.com暂无
45dusays45dusays45@dusays.com暂无
46dusays46dusays46@dusays.com暂无
47dusays47dusays47@dusays.com暂无
48dusays48dusays48@dusays.com暂无
49dusays49dusays49@dusays.com暂无
50dusays50dusays50@dusays.com暂无
51dusays51dusays51@dusays.com暂无
52dusays52dusays52@dusays.com暂无
53dusays53dusays53@dusays.com暂无
54dusays54dusays54@dusays.com暂无
55dusays55dusays55@dusays.com暂无
56dusays56dusays56@dusays.com暂无
57dusays57dusays57@dusays.com暂无
58dusays58dusays58@dusays.com暂无
59dusays59dusays59@dusays.com暂无
60dusays60dusays60@dusays.com暂无
61dusays61dusays61@dusays.com暂无
62dusays62dusays62@dusays.com暂无
63dusays63dusays63@dusays.com暂无
64dusays64dusays64@dusays.com暂无
65dusays65dusays65@dusays.com暂无
66dusays66dusays66@dusays.com已用
67dusays67dusays67@dusays.com暂无
68dusays68dusays68@dusays.com暂无
69dusays69dusays69@dusays.com暂无
70dusays70dusays70@dusays.com暂无
71dusays71dusays71@dusays.com暂无
72dusays72dusays72@dusays.com暂无
73dusays73dusays73@dusays.com暂无
74dusays74dusays74@dusays.com暂无
75dusays75dusays75@dusays.com暂无
76dusays76dusays76@dusays.com暂无
77dusays77dusays77@dusays.com暂无
78dusays78dusays78@dusays.com暂无
79dusays79dusays79@dusays.com暂无
80dusays80dusays80@dusays.com暂无
81dusays81dusays81@dusays.com暂无
82dusays82dusays82@dusays.com暂无
83dusays83dusays83@dusays.com暂无
84dusays84dusays84@dusays.com暂无
85dusays85dusays85@dusays.com暂无
86dusays86dusays86@dusays.com暂无
87dusays87dusays87@dusays.com暂无
88dusays88dusays88@dusays.com已用
89dusays89dusays89@dusays.com暂无
90dusays90dusays90@dusays.com暂无
91dusays91dusays91@dusays.com暂无
92dusays92dusays92@dusays.com暂无
93dusays93dusays93@dusays.com暂无
94dusays94dusays94@dusays.com暂无
95dusays95dusays95@dusays.com暂无
96dusays96dusays96@dusays.com已用
97dusays97dusays97@dusays.com暂无
98dusays98dusays98@dusays.com暂无
99dusays99dusays99@dusays.com已用
100dusays100dusays100@dusays.com已用

站点地址

公测站点地址如下,点击访问即可。因为公测站点是单线路,与图片外链同线路,所以访问速度较慢,请访问慢的小伙伴耐心等待页面加载:

公测规则

  1. 本站仅供测试使用,请勿用于非法用途;

  2. 原去不图床的账号无法在测试平台中使用,请使用提供的体验账号;

  3. 如选择好体验账号,请将编号留言至评论区,杜老师会备注信息,方便其它的小伙伴选择;

  4. 公测平台预计运营至三月底,届时所有数据将被释放,请勿保存重要数据;

  5. 在使用的过程中如发现有任何 bug,欢迎在评论区留言,杜老师会第一时间提交给程序开发者,尽量完善新版图床程序;

  6. 最终解释权归杜老师说所有。

  • ✇杜老师说
  • Hugo 渲染超时问题的解决笔记Teacher Du
    hehe 童鞋选择将所有的站点托管到杜老师这「是收费的」这样就可以专心维护网站的内容,也不用费心思在运维上。在做站点迁移时遇到了 Hugo 框架的一个报错,原因是使用 Hugo 搭建相册网站需要遍历大量图片,而在生成站点文件时出现了超时问题,本文记录解决方法。报错信息123ERROR render of "page" failed: "/home/runner/work/photo/photo/themes/gallery/layouts/_default/single.html:3:5": execute of template failed: template: _default/single.html:3:5: executing "main" at <partial "gallery.html" .>: error calling partial: partial "gallery.html" timed out after 30s. This is most likely due to infinite recursion. If this is just a s
     

Hugo 渲染超时问题的解决笔记

作者 Teacher Du
2025年2月5日 00:00

hehe 童鞋选择将所有的站点托管到杜老师这「是收费的」这样就可以专心维护网站的内容,也不用费心思在运维上。在做站点迁移时遇到了 Hugo 框架的一个报错,原因是使用 Hugo 搭建相册网站需要遍历大量图片,而在生成站点文件时出现了超时问题,本文记录解决方法。

报错信息

1
2
3
ERROR render of "page" failed: "/home/runner/work/photo/photo/themes/gallery/layouts/_default/single.html:3:5": execute of template failed: template: _default/single.html:3:5: executing "main" at <partial "gallery.html" .>: error calling partial: partial "gallery.html" timed out after 30s. This is most likely due to infinite recursion. If this is just a slow template, you can try to increase the 'timeout' config setting.
Total in 60412 ms
Error: error building site: render: failed to render pages: render of "page" failed: "/home/runner/work/photo/photo/themes/gallery/layouts/_default/single.html:3:5": execute of template failed: template: _default/single.html:3:5: executing "main" at <partial "gallery.html" .>: error calling partial: partial "gallery.html" timed out after 30s. This is most likely due to infinite recursion. If this is just a slow template, you can try to increase the 'timeout' config setting.

注意:杜老师是通过 GitHub Actions 来部署,逻辑是先准备 Hugo 的运行环境,再根据站点的数据渲染站点文件。在生成站点文件时出现如上错误信息。

解决思路

从错误信息看,Hugo 网站在渲染页面时出现了问题,具体是 gallery.html 这个 partial 文件在执行时超时了,并且怀疑是由于无限递归导致的。

首先检查 gallery.html 中代码。无限递归问题可能是 gallery.html 中调用了自身,或者在调用其它 partial 时形成了循环。仔细检查文件,确保没有递归调用自己或其它可能导致循环的部分。

其次检查数据结构。如果 gallery.html 中依赖某些数据结构,可能是数据结构中存在循环引用。例如,某个对象或者列表在渲染时不断递归调用。

再次增加超时时间。如果确认不是无限递归问题,而是模板渲染确实很慢,可以尝试增加超时时间。在 Hugo 的配置文件中,增加 timeout 配置项,如 timeout = '60000'

然后优化模板性能。如果模板渲染确实很慢,可能是模板的代码过于复杂。可以尝试优化模板代码,减少不必要循环和复杂逻辑。

接着调试模板。使用 Hugo 的调试工具来逐步检查模板的执行过程。可通过在模板中添加日志输出来帮助调试。

再者检查依赖插件。如果网站使用第三方插件或依赖,可能是插件导致了问题。尝试禁用插件,看看能否解决问题。

最后检查 Hugo 的版本。确保使用的 Hugo 版本是最新的。旧版本可能存在已知的 bug,而新版本可能已修复了这些问题。

  • ✇杜老师说
  • 麒麟服务器操作系统 yum 升级报错处理Teacher Du
    因为公司要求,杜老师一直使用麒麟服务器操作系统,为了保证系统的新特性,需要经常升级系统。这次在升级过程中遇到错误,本文记录该错误及其解决的方法。如果小伙伴也遇到了类似的问题,可以参考本文或在评论区中留言!报错信息123456The downloaded packages were saved in cache until the next successful transaction.You can remove cached packages by executing 'yum clean packages'.Error: Transaction test error: file /usr/share/doc/ipmitool/ChangeLog from install of ipmitool-1.8.19-1.p01.ky10.x86_64 conflicts with file from package ipmitool-help-1.8.18-19.p02.ky10.noarch file /usr/share/doc/ipmitool/README from insta
     

麒麟服务器操作系统 yum 升级报错处理

作者 Teacher Du
2025年2月2日 00:00

因为公司要求,杜老师一直使用麒麟服务器操作系统,为了保证系统的新特性,需要经常升级系统。这次在升级过程中遇到错误,本文记录该错误及其解决的方法。如果小伙伴也遇到了类似的问题,可以参考本文或在评论区中留言!

报错信息

1
2
3
4
5
6
The downloaded packages were saved in cache until the next successful transaction.
You can remove cached packages by executing 'yum clean packages'.
Error: Transaction test error:
file /usr/share/doc/ipmitool/ChangeLog from install of ipmitool-1.8.19-1.p01.ky10.x86_64 conflicts with file from package ipmitool-help-1.8.18-19.p02.ky10.noarch
file /usr/share/doc/ipmitool/README from install of ipmitool-1.8.19-1.p01.ky10.x86_64 conflicts with file from package ipmitool-help-1.8.18-19.p02.ky10.noarch
file /usr/share/man/man1/ipmitool.1.gz from install of ipmitool-1.8.19-1.p01.ky10.x86_64 conflicts with file from package ipmitool-help-1.8.18-19.p02.ky10.noarch

注意;杜老师执行命令 yum -y update 用户升级所有软件,在升级过程中提示如上错误信息。

解决思路

根据所提供的错误信息,问题在于 ipmitool-1.8.19-1.p01.ky10.x86_64ipmitool-help-1.8.18-19.p02.ky10.noarch 间存在文件冲突。以下是解决此问题步骤,首先移除冲突的包:

1
yum -y remove ipmitool-help-1.8.18-19.p02.ky10.noarch

清理缓存,确保后续操作不会受到旧缓存的影响:

1
yum clean all

在移除冲突包并清理缓存后,重新安装 ipmitool 软件包:

1
yum -y install ipmitool-1.8.19-1.p01.ky10.x86_64

最后,更新系统中所有包,以确保所有的依赖关系都已解决:

1
yum -y update
  • ✇杜老师说
  • 2 月 5 日图床故障说明Teacher Du
    这是篇补更文,所以发布时间不符。本文对 2 月 5 日的图床故障进行详细说明,并为了避免再次出现类似的问题,所做的一系列措施。如小伙伴们有任何问题,欢迎在评论区留言。问题描述根据监控服务平台数据显示,于 2 月 5 日上午十点左右发生了图床故障,导致所有图床服务「包括去不官网、图片外链、容量兑换」无法访问。问题出现后很多小伙伴前往本站的评论区留言,反馈图床问题。杜老师收到反馈后,第一时间进行了问题的排查,并尝试了多种修复作业,但因为不在服务器附近,很多操作无法进行,最终只能暂时安抚小伙伴们。问题原因杜老师于当日 17 点返京,18 点到达服务器所在地,第一时间确认问题,开始进行修复工作,在短时间内恢复了图床相关服务的正常访问与使用,以减少对小伙伴们影响。经排查是短期内产生大量的流量,达到家庭版光猫的性能瓶颈,产出较大热量,又因为光猫放置的地点问题,最终导致光猫宕机,影响了数据的正常传输。解决方案使用去不图床的小伙伴都很清楚,图床运营成本较大,为了减少成本,杜老师将服务器放置在家里的机柜中,通过家庭网络穿透公网,通过 CDN 反向代理来加速访问。在重启光猫后,第一时间修正域名解析,在清理
     

2 月 5 日图床故障说明

作者 Teacher Du
2025年1月30日 00:00

这是篇补更文,所以发布时间不符。本文对 2 月 5 日的图床故障进行详细说明,并为了避免再次出现类似的问题,所做的一系列措施。如小伙伴们有任何问题,欢迎在评论区留言。

问题描述

根据监控服务平台数据显示,于 2 月 5 日上午十点左右发生了图床故障,导致所有图床服务「包括去不官网、图片外链、容量兑换」无法访问。

问题出现后很多小伙伴前往本站的评论区留言,反馈图床问题。杜老师收到反馈后,第一时间进行了问题的排查,并尝试了多种修复作业,但因为不在服务器附近,很多操作无法进行,最终只能暂时安抚小伙伴们。

问题原因

杜老师于当日 17 点返京,18 点到达服务器所在地,第一时间确认问题,开始进行修复工作,在短时间内恢复了图床相关服务的正常访问与使用,以减少对小伙伴们影响。

经排查是短期内产生大量的流量,达到家庭版光猫的性能瓶颈,产出较大热量,又因为光猫放置的地点问题,最终导致光猫宕机,影响了数据的正常传输。

解决方案

使用去不图床的小伙伴都很清楚,图床运营成本较大,为了减少成本,杜老师将服务器放置在家里的机柜中,通过家庭网络穿透公网,通过 CDN 反向代理来加速访问。

在重启光猫后,第一时间修正域名解析,在清理 CDN 域名解析缓存后,图床恢复正常。

后续措施

为了避免再次出现类似问题,杜老师已下单企业级的光猫,并选购了半导体制冷器,放置机柜中实现光猫和服务器的降温工作,保障在高流量下的稳定运行。

同时下单了新带宽安装,在双线路下即可保证图床的高速访问,又可防止单线路的故障问题。最后杜老师会尽可能的保障去不图床服务稳定运营,不会出现数据丢失,更不会出现跑路的问题!

  • ✇陶小桃Blog
  • Typecho插件FailDebug:禁止网站被调试,增加网站攻击的难度52txr
    FailDebug 是一款专为 Typecho 网站设计的安全防护插件,旨在防止用户通过开发者工具或其他调试手段对网站进行逆向工程或调试。通过禁用右键菜单、快捷键(如 F12、Ctrl+U、Ctrl+Shift+I 等)以及检测开发者工具的开启状态,FailDebug 能够有效保护网站的前端代码和逻辑,防止内容被盗用或篡改。插件支持灵活的配置选项,用户可以根据需求启用或禁用特定功能。评价没啥根本的卵用,但是可以恶心想攻击你博客的人。防止网站被攻击,是一个系统性功能,CDN端、服务器端、前端,可能缺一不可。本插件无法完全阻止调试:虽然插件可以增加调试难度,但无法完全阻止专业开发者通过其他手段调试网站。下载地址FailDebug 1.0.0 For Typecho By 陶小桃Blog.zip - 蓝奏云下载链接配置把下载的文件放在插件目录下即可:在后台启动插件默认已经全部勾选,可以根据的需要进行关闭。配置选项:禁用右键菜单禁用F12按键禁用Ctrl+U快捷键禁用Ctrl+Shift+I快捷键启用无限debugger检测开发者工具并替换内容效果本站已经启用。插件适合那种长期不折腾网站的人,
     

Typecho插件FailDebug:禁止网站被调试,增加网站攻击的难度

作者 52txr
2025年3月14日 21:26

FailDebug 是一款专为 Typecho 网站设计的安全防护插件,旨在防止用户通过开发者工具或其他调试手段对网站进行逆向工程或调试。通过禁用右键菜单、快捷键(如 F12、Ctrl+U、Ctrl+Shift+I 等)以及检测开发者工具的开启状态,FailDebug 能够有效保护网站的前端代码和逻辑,防止内容被盗用或篡改。插件支持灵活的配置选项,用户可以根据需求启用或禁用特定功能。

评价

没啥根本的卵用,但是可以恶心想攻击你博客的人。

防止网站被攻击,是一个系统性功能,CDN端、服务器端、前端,可能缺一不可。

本插件无法完全阻止调试:虽然插件可以增加调试难度,但无法完全阻止专业开发者通过其他手段调试网站。

下载地址

FailDebug 1.0.0 For Typecho By 陶小桃Blog.zip - 蓝奏云下载链接

配置

把下载的文件放在插件目录下即可:

插件目录

在后台启动插件默认已经全部勾选,可以根据的需要进行关闭。

配置选项

  • 禁用右键菜单
  • 禁用F12按键
  • 禁用Ctrl+U快捷键
  • 禁用Ctrl+Shift+I快捷键
  • 启用无限debugger
  • 检测开发者工具并替换内容

效果

本站已经启用。

插件适合那种长期不折腾网站的人,如果经常折腾,是在给自己添麻烦。

小陶可能启用一段时间就关掉了。

  • ✇陶小桃Blog
  • 读博随笔 | 突然想唠唠曾经卷生卷死的本科生活52txr
    本文通过作者对两位准研究生的观察,探讨了当下学术竞争与本科教育的现状。一位考研学生收到导师严苛的邮件回复,折射出学术圈高压、功利的环境,作者提醒不要过度神化学术热情;另一位保研学生则通过搭建个人学术主页(作者提供源码)积极争取机会,凸显竞争的白热化。作者结合自身经历,反思本科阶段的“内卷”本质:课程流于形式、科研参与功利化,自己曾为保研极度焦虑,将同伴视为竞争对手,陷入“草木皆兵”的心态,最终虽达成目标,却深感精神扭曲。文末,作者以烹饪日常收尾,隐喻人生价值的回归——相较于虚耗精力的恶性竞争,平凡生活的烟火气更显真实可贵。全文批判了教育体系的形式主义与过度竞争,倡导跳出功利陷阱,重新审视生活本真。遇到的准研究生这段时间,保研人和考研人也都开始蠢蠢欲动套磁联系导师了。小陶接连看到两位优秀的本科生,一个是考研的,一个是保研的。考研人,则是收到了老师的邮件回复:说实话,看着邮件的内容我就感到有些窒息,一看就是个奋斗逼,严于律己、严以待人的风格。对于本科生而言,我的忠告永远是:不要高估自己对学术的热情,科研这东西本身也只是混口饭吃的工作,并没有多么高尚。保研人则是联系我要了我的学术主页的源码,
     

读博随笔 | 突然想唠唠曾经卷生卷死的本科生活

作者 52txr
2025年3月14日 19:57

本文通过作者对两位准研究生的观察,探讨了当下学术竞争与本科教育的现状。一位考研学生收到导师严苛的邮件回复,折射出学术圈高压、功利的环境,作者提醒不要过度神化学术热情;另一位保研学生则通过搭建个人学术主页(作者提供源码)积极争取机会,凸显竞争的白热化。作者结合自身经历,反思本科阶段的“内卷”本质:课程流于形式、科研参与功利化,自己曾为保研极度焦虑,将同伴视为竞争对手,陷入“草木皆兵”的心态,最终虽达成目标,却深感精神扭曲。文末,作者以烹饪日常收尾,隐喻人生价值的回归——相较于虚耗精力的恶性竞争,平凡生活的烟火气更显真实可贵。全文批判了教育体系的形式主义与过度竞争,倡导跳出功利陷阱,重新审视生活本真。

遇到的准研究生

这段时间,保研人和考研人也都开始蠢蠢欲动套磁联系导师了。小陶接连看到两位优秀的本科生,一个是考研的,一个是保研的。

考研人,则是收到了老师的邮件回复:

老师的邮件回复

说实话,看着邮件的内容我就感到有些窒息,一看就是个奋斗逼,严于律己、严以待人的风格。对于本科生而言,我的忠告永远是:不要高估自己对学术的热情,科研这东西本身也只是混口饭吃的工作,并没有多么高尚。

保研人则是联系我要了我的学术主页的源码,然后做一个自己的学术主页准备去联系硕导:

(打个广告:https://www.52txr.cn/xueshu/

学术主页的源码

学术主页的源码

我的内卷本科生活

本科生活就是高中的一个延续,还是为了应付考试、应付作业。本科的教育在我看来,其实就是学生与老师的双败,相互浪费时间和精力。大部分老师都是在念着十几年前的PPT,学生则是上课玩着自己的手机。

虽然现在很多学校也在尝试让本科生进实验室,但是大多是情况都是不了了之,毕竟搞这些动静都是领导层好宣传自己的功绩,而大多数的本科生也只是在想着能不能蹭点成果来为自己的保研、考研加分。

我本科在内卷什么呢?我是带着直接简单的功利性,就是卷保研。我的口号就是奖学金可以不要、荣誉可以不要,但是我是真的不想考研,必须所有的精力梭哈获得保研。我是幸运的,最后也如愿以偿了。但是再想想,感觉多少有点心理扭曲,并没有静下心来去思考和学习,只是一直担心受怕。

在文章《读研随笔 | 有趣的读研生活足以治愈一生》中,曾提到我曾将每一个同平台的人都当做是竞争对手,就像一只随时准备被攻击和攻击别人的孤狼,对周围的环境充满了不安,更想要通过获胜来证明自己的力量,这是真的,因为我高中、本科这一共七年的时间,逐渐养成了我的“草木皆兵”的心态。

我担心别人知道了我不知道的考试重点;

我担心别人竞赛相互挂名加分把我挤没了;

我担心别人去了更好的去处......

我曾经觉得早上多睡一会就是罪恶,一定要把知识点滚瓜烂熟(即便现在我已经忘光了),别人做一遍的题目我要多做几遍,为了课程设计可能多得一两分宁愿通宵去优化调整,会把报告写的很详细很好看很厚......

走了很远很远的路

直到我走了很远很远的路,也一直在思考。

对于内卷的原因,内卷的结果,我已经不太在意,也不想去思考;既然身处其中,就接着卷;如果有自己觉得有意义的事情,那就去做。

人的一生,终究要回归到生活,事业再成功,也少有人能在历史上留下一笔,死后的五年或十年,也便不会再有什么人想起你。

做顿饭吧,感觉比科研有意思多了。

准备小料

黄焖鸡

排骨

辣子鸡

  • ✇陶小桃Blog
  • ZBlog用户有福了!用Auth76Times插件为七牛云CDN添加URL鉴权,使链接在短时间过期防盗刷52txr
    千呼万唤始出来,ZBlog版本的Auth76Times插件终于发布了!在当今互联网时代,内容盗刷和资源滥用问题日益严重,尤其是对于使用CDN加速的网站,如何保护静态资源(如图片、视频、CSS、JS等)不被恶意盗用成为了站长们的一大难题。今天,我们为大家带来一款专为ZBlog用户设计的插件——Auth76Times,它能够轻松为七牛云CDN资源添加时间戳防盗链功能,有效防止资源被盗刷!什么是时间戳防盗链?时间戳防盗链是一种基于URL签名的防盗链机制。通过为资源链接添加签名参数(如sign和t),使得链接在指定的时间内有效,过期后链接将无法访问。这种机制不仅能够有效防止资源被盗用,还能减少CDN流量浪费,提升资源的安全性。Auth76Times插件的核心功能本文所述的Auth76Times插件专为ZBlog用户设计,支持七牛云CDN的时间戳防盗链功能,具有以下核心特性:多域名密钥绑定支持为多个域名配置不同的密钥,灵活适配复杂的CDN资源管理需求。自定义链接有效期可设置链接的有效时长(单位为秒),例如120秒、600秒等,确保链接在短时间内过期。文件后缀鉴权支持自定义需要鉴权的文件后缀(如.
     

ZBlog用户有福了!用Auth76Times插件为七牛云CDN添加URL鉴权,使链接在短时间过期防盗刷

作者 52txr
2025年3月12日 10:43

千呼万唤始出来,ZBlog版本的Auth76Times插件终于发布了!在当今互联网时代,内容盗刷和资源滥用问题日益严重,尤其是对于使用CDN加速的网站,如何保护静态资源(如图片、视频、CSS、JS等)不被恶意盗用成为了站长们的一大难题。今天,我们为大家带来一款专为ZBlog用户设计的插件——Auth76Times,它能够轻松为七牛云CDN资源添加时间戳防盗链功能,有效防止资源被盗刷!

什么是时间戳防盗链?

时间戳防盗链是一种基于URL签名的防盗链机制。通过为资源链接添加签名参数(如signt),使得链接在指定的时间内有效,过期后链接将无法访问。这种机制不仅能够有效防止资源被盗用,还能减少CDN流量浪费,提升资源的安全性。

Auth76Times插件的核心功能

本文所述的Auth76Times插件专为ZBlog用户设计,支持七牛云CDN的时间戳防盗链功能,具有以下核心特性:

  1. 多域名密钥绑定

    支持为多个域名配置不同的密钥,灵活适配复杂的CDN资源管理需求。

  2. 自定义链接有效期

    可设置链接的有效时长(单位为秒),例如120秒、600秒等,确保链接在短时间内过期。

  3. 文件后缀鉴权

    支持自定义需要鉴权的文件后缀(如.jpg.png.mp4等),避免对非静态资源进行不必要的签名处理。

  4. 自动签名

    插件会自动为HTML中的静态资源URL添加签名参数,无需手动修改代码。

配置七牛云CDN

关于七牛云的CDN配置,我就不做过多介绍了。配置好应该是下面的CNAME"已配置"绿色的。如果七牛云的CDN不会配置,可以提交一下工单或者咨询一下博客的QQ群。

配置好cname解析

开启时间戳防盗链

七牛云的鉴权方式比较特殊,并不是常见的TypeA,因此之前写的《Typecho/WordPress的CDN鉴权插件URLAuth1.2.0版本发布!支持任意多个域名的自定义鉴权》虽然在腾讯云、七牛云、火山云、阿里云、多吉云等等都适用,但是唯独在七牛云CDN中无法使用。

在七牛云的CDN配置中找到域名管理:

进行域名管理

然后在域名的配置中找到时间戳防盗链,点击修改配置

时间戳防盗链

时间戳防盗链

此时点击确定会弹出这个让人讨厌的检验时间戳防盗链

检验时间戳防盗链

点击下面的时间戳计算器网站。随便整一个存在的域名下的静态资源链接。过期时间可以填f2fdd543(代表的是2099-03-09 14:37:55)。然后点击生成。把生成的连接复制到检验时间戳防盗链再点击确定即可。

时间戳防盗链计算器 - 七牛云 - 网页有点慢,推荐开着科学上网

时间戳防盗链计算器

复制结果

Auth76Times插件下载与配置

一些效果展示

如果你的CDN开了鉴权,但是没有鉴权参数:

没有鉴权参数

鉴权成功:

鉴权成功

鉴权参数失效:

鉴权参数失效

  • ✇陶小桃Blog
  • ZBlog版本URLAuth插件来了!支持主流CDN(Type-A类型鉴权),为链接添加有效期有效防盗刷52txr
    本文介绍了ZBlog平台新推出的URLAuth插件,该插件通过为静态资源URL添加时效性鉴权参数(Type-A类型),有效防止CDN资源被盗刷,支持多吉云、腾讯云、阿里云等主流CDN服务商。文章详细说明了CDN鉴权的必要性——通过验证用户身份、限制非法访问,保障服务器资源不被恶意占用;并以多吉云和腾讯EdgeOne为例,演示了插件配置流程,包括密钥生成、鉴权参数设置及域名授权绑定。插件通过动态生成带时间戳和加密签名的URL,实现静态资源访问控制,当鉴权参数缺失或过期时自动拦截请求,从而显著提升网站安全性与稳定性。CDN为什么要鉴权?通过鉴权机制,CDN可以确保只有经过授权的用户才能访问特定内容。鉴权有助于减少CDN中的攻击、刷流量等问题,保证服务器的稳定运行‌。没有鉴权的情况下,大量恶意请求可能会涌入CDN节点,占用宝贵的带宽和资源,导致正常用户的请求无法得到及时响应‌。通过鉴权,可以限制非法用户访问网站和内容,降低安全风险。例如,通过验证用户身份、检查请求头部的特定字段等方式,可以有效防止恶意请求和爬虫攻击‌。‌URL鉴权是一种常见的鉴权方式,在URL中添加特定的鉴权参数,CDN节点
     

ZBlog版本URLAuth插件来了!支持主流CDN(Type-A类型鉴权),为链接添加有效期有效防盗刷

作者 52txr
2025年3月11日 00:05

本文介绍了ZBlog平台新推出的URLAuth插件,该插件通过为静态资源URL添加时效性鉴权参数(Type-A类型),有效防止CDN资源被盗刷,支持多吉云、腾讯云、阿里云等主流CDN服务商。文章详细说明了CDN鉴权的必要性——通过验证用户身份、限制非法访问,保障服务器资源不被恶意占用;并以多吉云和腾讯EdgeOne为例,演示了插件配置流程,包括密钥生成、鉴权参数设置及域名授权绑定。插件通过动态生成带时间戳和加密签名的URL,实现静态资源访问控制,当鉴权参数缺失或过期时自动拦截请求,从而显著提升网站安全性与稳定性。

CDN为什么要鉴权?

通过鉴权机制,CDN可以确保只有经过授权的用户才能访问特定内容。

鉴权有助于减少CDN中的攻击、刷流量等问题,保证服务器的稳定运行‌。没有鉴权的情况下,大量恶意请求可能会涌入CDN节点,占用宝贵的带宽和资源,导致正常用户的请求无法得到及时响应‌。通过鉴权,可以限制非法用户访问网站和内容,降低安全风险。例如,通过验证用户身份、检查请求头部的特定字段等方式,可以有效防止恶意请求和爬虫攻击‌。

‌URL鉴权是一种常见的鉴权方式,在URL中添加特定的鉴权参数,CDN节点根据这些参数验证请求的合法性。例如,阿里云CDN提供了在标准URL基础上添加加密信息(如timestamp、md5hash和Filename)的方式进行鉴权‌。

URLAuth就是一种基于Type-A的鉴权方式,支持主流的CDN,例如多吉云、腾讯云、火山引擎、华为云等等。具体可以去咨询一下客服或者看看帮助文档。

CDN鉴权配置

本文就以多吉云CDN为例(腾讯云、阿里云都是差不多的)来介绍一下如何配置插件,因为我看Typecho圈子里大家用的多吉云还是蛮多的。多吉云融合CDN,免费境内融合CDN加速、图片储存等,月免费流量20GB,免费有效请求次数200w次,博客站个人站点加速必备。欢迎大家使用!

点击注册多吉云

关于如何配置多吉云CDN的教程网上有很多,多吉云的帮助文档也有细节说明。本文就不再赘述。

配置好之后到"访问控制"中,开启URL鉴权:

开启URL鉴权

然后填写配置参数:

(a)、打开URL鉴权;

(b)、随机生成密钥(密钥需要牢记,建议定期更换一个);

(c)、鉴权范围输入文件名后缀,一般是对静态资源进行鉴权防止盗刷。

提供参考:.webp;.png;.jpg;.jpeg;.css;.js

配置鉴权参数

然后启动URLAuth插件进行配置:

配置插件

腾讯EdgeOne鉴权配置

1、登录 边缘安全加速平台 EO 控制台,在左侧菜单栏中,单击站点列表,在站点列表内单击需配置的站点。

2、在站点详情页面,单击站点加速,进入站点全局配置页面,单击规则引擎 Tab 页。

3、在规则引擎页面,单击创建规则,选择新增空白规则

4、在规则编辑页面,设置触发该规则的匹配条件。

5、单击操作 > 选择框,在弹出的操作列表内,选择操作为Token 鉴权,参数配置说明如下:

EdgeOne 提供了 Token 鉴权 URL 的生成工具和校验工具,开发者可以使用该工具快速准确地生成和校验符合要求的防盗链 URL。

阿里云和多吉云都是auth_key,腾讯云的EgdeOne和CDN好像是sign来着,也可以自定义为auth_key。根据自己的需求配置即可。

EdgeOne配置鉴权参数

插件下载

开发耗费了很多的精力以及冒了很多的险,掉了很多头发。希望大佬可以请小陶喝一杯奶茶!一杯咖啡的价格,可以让自己的CDN很大程度上避免被刷还是很划算的!

鉴权效果

添加鉴权这时候加载静态资源文件:

鉴权效果

鉴权参数过期:

鉴权参数过期

不包含鉴权参数:

不包含鉴权参数

  • ✇陶小桃Blog
  • WordPress插件Auth76Times : 避免七牛云CDN被爆刷的利器,为链接添加时间戳鉴权52txr
    本文介绍了一款针对WordPress的插件Auth76Times,旨在解决七牛云CDN因缺乏时间戳鉴权导致流量被恶意刷取的问题。作者小陶因七牛云频繁出现流量封顶、无QPS限制等缺陷转投多吉云,但为帮助仍需使用七牛云的用户,开发了该插件。插件通过为静态资源链接添加时间戳签名,实现访问权限控制,防止资源被非法盗用。文章详细说明了七牛云CDN配置时间戳防盗链的步骤,包括通过域名管理开启鉴权、使用官方工具生成测试链接完成验证。插件需授权后使用,支持自定义密钥与过期时间配置,未授权或过期请求将返回403错误。此外,作者建议结合Referer防盗链、Cloudflare防护等进阶措施增强安全性,并推荐多吉云与Cloudflare作为更稳定的替代方案。插件通过简单配置即可提升七牛云资源访问安全性,适合需防范流量滥用的个人站长使用。为什么要时间戳鉴权小陶个人虽然曾经是七牛云的粉丝,现在已经粉转黑了,经常骂七牛云是傻逼(竟然每天流量封顶、没有QPS等),之前甚至注销了七牛云账号(见文《七牛云CDN真的不适合个人站长使用,小陶已注销账号》)。使用七牛云之后被爆刷流量的事件也是频繁发生。后来小陶转战到了多吉
     

WordPress插件Auth76Times : 避免七牛云CDN被爆刷的利器,为链接添加时间戳鉴权

作者 52txr
2025年3月10日 00:28

本文介绍了一款针对WordPress的插件Auth76Times,旨在解决七牛云CDN因缺乏时间戳鉴权导致流量被恶意刷取的问题。作者小陶因七牛云频繁出现流量封顶、无QPS限制等缺陷转投多吉云,但为帮助仍需使用七牛云的用户,开发了该插件。插件通过为静态资源链接添加时间戳签名,实现访问权限控制,防止资源被非法盗用。文章详细说明了七牛云CDN配置时间戳防盗链的步骤,包括通过域名管理开启鉴权、使用官方工具生成测试链接完成验证。插件需授权后使用,支持自定义密钥与过期时间配置,未授权或过期请求将返回403错误。此外,作者建议结合Referer防盗链、Cloudflare防护等进阶措施增强安全性,并推荐多吉云与Cloudflare作为更稳定的替代方案。插件通过简单配置即可提升七牛云资源访问安全性,适合需防范流量滥用的个人站长使用。

为什么要时间戳鉴权

小陶个人虽然曾经是七牛云的粉丝,现在已经粉转黑了,经常骂七牛云是傻逼(竟然每天流量封顶、没有QPS等),之前甚至注销了七牛云账号(见文《七牛云CDN真的不适合个人站长使用,小陶已注销账号》)。使用七牛云之后被爆刷流量的事件也是频繁发生。

七牛云被爆刷

后来小陶转战到了多吉云,并且开启了URL鉴权,感觉巴适了。每月赠送的20GB流量、QPS、URL鉴权、流量封顶,妈妈再也不用担心我的流量被刷爆了。

但是也有朋友非要用七牛云,并且对我的TypeA鉴权很感兴趣。URL鉴权是一种网络安全机制,用于验证用户对特定资源的访问权限,通过在URL中嵌入时间戳、随机数、用户ID等参数,并结合密钥生成签名来实现。 实现步骤包括确定鉴权参数、生成签名、构造带有签名的URL以及验证签名。于是小陶就针对七牛云的使用做了一款插件。

配置七牛云CDN

关于七牛云的CDN配置,我就不做过多介绍了。配置好应该是下面的CNAME"已配置"绿色的。如果七牛云的CDN不会配置,可以提交一下工单或者咨询一下博客的QQ群。

配置好cname解析

开启时间戳防盗链

七牛云的鉴权方式比较特殊,并不是常见的TypeA,因此之前写的《Typecho/WordPress的CDN鉴权插件URLAuth1.2.0版本发布!支持任意多个域名的自定义鉴权》虽然在腾讯云、七牛云、火山云、阿里云、多吉云等等都适用,但是唯独在七牛云CDN中无法使用。

在七牛云的CDN配置中找到域名管理:

进行域名管理

然后在域名的配置中找到时间戳防盗链,点击修改配置

时间戳防盗链

时间戳防盗链

此时点击确定会弹出这个让人讨厌的检验时间戳防盗链

检验时间戳防盗链

点击下面的时间戳计算器网站。随便整一个存在的域名下的静态资源链接。过期时间可以填f2fdd543(代表的是2099-03-09 14:37:55)。然后点击生成。把生成的连接复制到检验时间戳防盗链再点击确定即可。

时间戳防盗链计算器 - 七牛云 - 网页有点慢,推荐开着科学上网

时间戳防盗链计算器

复制结果

插件下载与配置

链接有效期默认时长为120秒,理论上可以设置1秒,但是前提是你的网页在1秒内打开。

设置有效期的时间应该略长于你网站打开的时间。

插件的效果

没有进行鉴权的话,会返回403:

禁止访问

启用并且配置了鉴权参数的话:

正确显示

如果过了指定的时间,也就是链接过期了,则也是403:

链接过期禁止访问

进阶防盗刷方法推荐

  • Referer 防盗链:静态资源只允许自己的网站可以访问,空 Referer 禁止访问。
  • 告警配置要开启(虽然说经常延迟也傻B):

七牛云告警配置

  • 用好cloudflare这个赛博菩萨。

推荐阅读:

  • ✇陶小桃Blog
  • Typecho插件Auth76Times:七牛云CDN开启URL时间戳鉴权强力防盗刷,使链接变得带有效期52txr
    本文介绍了一款针对Typecho平台的插件——Auth76Times,旨在通过七牛云CDN的URL时间戳鉴权功能实现静态资源防盗刷。插件通过为链接添加有效期参数,有效防止资源被恶意盗用。文章详细说明了配置步骤:首先是 七牛云CDN配置 ,需完成基础域名设置,并通过“时间戳防盗链”功能生成带有效期的测试链接(如使用时间戳计算器设置2099年的过期时间),然后是 插件部署与授权 ,配置时需绑定域名与密钥,支持多域名管理。链接有效期建议略长于网站加载时间(默认120秒)。最后作者给出了效果验证 ,启用后,未授权或过期链接将返回403错误,确保资源访问安全。此外,文章推荐结合Referer防盗链、Cloudflare防护等进阶措施,并附相关技术文章链接供读者参考,强调通过多层防护提升CDN资源安全性。[...]
     

Typecho插件Auth76Times:七牛云CDN开启URL时间戳鉴权强力防盗刷,使链接变得带有效期

作者 52txr
2025年3月9日 15:24

本文介绍了一款针对Typecho平台的插件——Auth76Times,旨在通过七牛云CDN的URL时间戳鉴权功能实现静态资源防盗刷。插件通过为链接添加有效期参数,有效防止资源被恶意盗用。文章详细说明了配置步骤:首先是 七牛云CDN配置 ,需完成基础域名设置,并通过“时间戳防盗链”功能生成带有效期的测试链接(如使用时间戳计算器设置2099年的过期时间),然后是 插件部署与授权 ,配置时需绑定域名与密钥,支持多域名管理。链接有效期建议略长于网站加载时间(默认120秒)。最后作者给出了效果验证 ,启用后,未授权或过期链接将返回403错误,确保资源访问安全。此外,文章推荐结合Referer防盗链、Cloudflare防护等进阶措施,并附相关技术文章链接供读者参考,强调通过多层防护提升CDN资源安全性。

[...]

  • ✇陶小桃Blog
  • 放弃Rsync或Syncthing,七牛对象存储(私有)+上海云盾CDN,更加通用且免费的多服务器数据库或者网站目录同步的方式52txr
    以两台服务器为例,一台为主服务器A,另一台为从服务器B。现在从服务器想要定时同步得到主服务器A中的数据库或者指定的网站全部目录。一开始我是想着部署Rsync或Syncthing,但是由于小陶现在所有的服务器都不走公网而是部署在内网(见文《小陶为了防止自己服务器公网IP暴露,直接不用公网,境内外路线全部内网穿透》),所以会出现各种奇奇怪怪的问题,比如22端口SSH不咋顶用,又或者配置出现各种问题。小陶突然想到自己的服务器有自动备份任务,备份是上传到七牛云、多吉云、腾讯云的对象存储桶。于是我就想着既然在桶里,不如直接下载下来恢复到数据库或者网站目录不就行了吗?于是说干就干,还真被我干出来了!由于小陶现在也不用七牛云作为正儿八经的静态资源存储,因此创建的存储桶为私有,并且限制了可以访问的IP(理论上只设置从服务器B的IP可以访问就可以了),可以避免被盗刷。 此外,私有空间的文件对象必须获得拥有者的授权才能访问,相对来说还是安全很多。公开空间和私有空间介绍现在的思路是:主服务器A备份包——>(上传)七牛云(下载)<——从服务器B数据库恢复的效果如下,当然也支持直接下载备份的网站目录
     

放弃Rsync或Syncthing,七牛对象存储(私有)+上海云盾CDN,更加通用且免费的多服务器数据库或者网站目录同步的方式

作者 52txr
2025年3月8日 16:04

以两台服务器为例,一台为主服务器A,另一台为从服务器B。现在从服务器想要定时同步得到主服务器A中的数据库或者指定的网站全部目录。一开始我是想着部署Rsync或Syncthing,但是由于小陶现在所有的服务器都不走公网而是部署在内网(见文《小陶为了防止自己服务器公网IP暴露,直接不用公网,境内外路线全部内网穿透》),所以会出现各种奇奇怪怪的问题,比如22端口SSH不咋顶用,又或者配置出现各种问题。小陶突然想到自己的服务器有自动备份任务,备份是上传到七牛云、多吉云、腾讯云的对象存储桶。于是我就想着既然在桶里,不如直接下载下来恢复到数据库或者网站目录不就行了吗?于是说干就干,还真被我干出来了!由于小陶现在也不用七牛云作为正儿八经的静态资源存储,因此创建的存储桶为私有,并且限制了可以访问的IP(理论上只设置从服务器B的IP可以访问就可以了),可以避免被盗刷。 此外,私有空间的文件对象必须获得拥有者的授权才能访问,相对来说还是安全很多。公开空间和私有空间介绍

现在的思路是:主服务器A备份包——>(上传)七牛云(下载)<——从服务器B

设置一个私有七牛云存储

数据库恢复的效果如下,当然也支持直接下载备份的网站目录然后解压覆盖到从服务器中。本文就来详细介绍一下该如何操作。

数据库恢复正常

准备工作

主服务器A创建自动备份到七牛云,可以是数据库或者网站。这里小陶是都进行了备份:

创建主服务器同步

然后就是在服务器B中创建一个虚拟环境,我的服务器是Debian12,可以看之前的文章《在服务器上使用python虚拟环境pip安装库并运行自己的py脚本》,本文就不做过多的介绍。

创建好虚拟环境(例如名称为back_rec)之后,在终端激活环境再安装以下必要的Python库:

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple qiniu requests tqdm

七牛云对象存储绑定域名

七牛云如何绑定域名我就不做过多介绍了,因为官方有很详细的说明。最重要的是得到CNAME解析地址。如果得到了cname地址,不论你是使用七牛云自己的融合CDN还是别的CDN,都是可以的。小陶选择的是上海云盾CDN,因为流量是免费的。

给七牛云绑定域名

在上海云盾启用之后,应该是下面的样子。

在云盾上使用CDN

需要注意,上海云盾的话是由内置的WAF规则集,需要自动去关掉一些设置,以免被拦截。具体的设置我也不再赘述,可以联系云盾客服进行沟通。

WAF防火墙的拦截

服务器B的数据同步请求

现在我使用的功能是比较全面的,主要有两个,第一个是数据库的同步,第二个是图床站目录的同步。

为了让代码具有比较强的拓展性,把目录等设置成下面的样子:

# 同步备份文件任务配置
backup_tasks = [
    {   # 数据库备份任务
        'remote_dir': 'bt_backup/database/mysql/www_52txr_cn/', #七牛云的数据库备份路径
        'local_storage': '/www/backup/database/backfrom76',     #下载到服务器的路径
        'extract_to': None,  # 数据库不需要文件解压路径
        'type': 'database'
    },
    {   # 站点备份任务
        'remote_dir': 'bt_backup/site/imgbed.52txr.cn/',   # 七牛云的网站目录备份路径
        'local_storage': '/www/backup/site/backfrom76',    # 下载到服务器的路径
        'extract_to': '/www/wwwroot/imgbed.52txr.cn',      # 解压到的路径
        'type': 'site'
    }
]

完整的代码如下,可以保存到服务器/www/wwwroot/MyPythonScripts/synchronous76.py

处理任务:bt_backup/www_52txr_cn/

下载 www_52txr_cn_2025-03-08_xxxxxxxx_mysql_data.sql.gz:   0%|          | 0.00/5.81M [00:00<?, ?B/s]
下载 www_52txr_cn_2025-03-08_xxxxxxxx_mysql_data.sql.gz:   0%| | 8.19k/5.81M [00:00<02:05, 46.3kB/s]
下载 www_52txr_cn_2025-03-08_xxxxxxxx_mysql_data.sql.gz:  10%|▏ | 598k/5.81M [00:00<00:01, 2.64MB/s]
下载 www_52txr_cn_2025-03-08_xxxxxxxx_mysql_data.sql.gz:  74%|▋| 4.30M/5.81M [00:00<00:00, 15.8MB/s]
下载 www_52txr_cn_2025-03-08_xxxxxxxx_mysql_data.sql.gz: 100%|█| 5.81M/5.81M [00:00<00:00, 13.9MB/s]
文件下载成功:/www/backup/www_52txr_cn_2025-03-08_xxxxxxxx_mysql_data.sql.gz
SQL文件已解压到:/www/backup/www_52txr_cn_2025-03-xxxxxxxx_mysql_data.sql
数据库恢复成功
临时文件已清理

处理任务:bt_backup/site/imgbed.52txr.cn/
文件下载成功:/www/web_imgbed.52txr.cn_xxxxxxxx_Yxxx.tar.gz
文件已解压到:/www/imgbed_52txr_cn
压缩文件已清理
----------------------------------------------------------------------------
★[2025-03-08 15:52:07] Successful
----------------------------------------------------------------------------
  • ✇陶小桃Blog
  • 缅怀之前攻击我博客的哥们,被警察抓起来了52txr
    网络攻击事件:作者提到一位网络攻击者被杭州警方逮捕,并对此表示感慨。作者认为网络并非法外之地,攻击者应为其行为负责。尽管作者曾遭受攻击,但他认为这些经历帮助他在心态和技术上有所成长。作者还提到自己经常对攻击者进行言语反击,并享受攻击者无法得逞的感觉。解决问题的过程与焦虑:作者分享了自己在解决问题过程中的收获,例如开发了一款软件。他还提到一位学弟因读研感到迷茫,作者鼓励他通过行动来缓解焦虑,强调行动与想法匹配的重要性。作者认为焦虑源于对未来的过度思考,建议通过小步骤开始行动,并放下完美主义和自我苛责。网络老鼠屎被抓起来了对这位哥们表示深切的缅怀!目前应该是被杭州警察抓起来了。记得好好反省一下自己,反省一下自己怎么这么菜和作死。虽然可能你只是运气不好,但是网络不是法外之地,自掘坟墓就没有办法了。其实对我个人而言,我还是很感激攻击对我的服务器和网站进行攻击的人,因为正是在攻击中我成长了很多,不论是心态上还是技术上。还是那句话,网络并非法外之地,要对自己的行为负责。虽然我承认我嘴臭,对于这种在我面前炫技搞攻击的人我经常骂骂咧咧,但是你也确实没把我怎么样,没做成啥巨大损失。难道是我嘴太欠所以经常
     

缅怀之前攻击我博客的哥们,被警察抓起来了

作者 52txr
2025年3月7日 10:03

网络攻击事件:作者提到一位网络攻击者被杭州警方逮捕,并对此表示感慨。作者认为网络并非法外之地,攻击者应为其行为负责。尽管作者曾遭受攻击,但他认为这些经历帮助他在心态和技术上有所成长。作者还提到自己经常对攻击者进行言语反击,并享受攻击者无法得逞的感觉。

解决问题的过程与焦虑:作者分享了自己在解决问题过程中的收获,例如开发了一款软件。他还提到一位学弟因读研感到迷茫,作者鼓励他通过行动来缓解焦虑,强调行动与想法匹配的重要性。作者认为焦虑源于对未来的过度思考,建议通过小步骤开始行动,并放下完美主义和自我苛责。

网络老鼠屎被抓起来了

对这位哥们表示深切的缅怀!目前应该是被杭州警察抓起来了。记得好好反省一下自己,反省一下自己怎么这么菜和作死。虽然可能你只是运气不好,但是网络不是法外之地,自掘坟墓就没有办法了。

网络老鼠屎被抓起来了

网络老鼠屎被抓起来了

其实对我个人而言,我还是很感激攻击对我的服务器和网站进行攻击的人,因为正是在攻击中我成长了很多,不论是心态上还是技术上。

还是那句话,网络并非法外之地,要对自己的行为负责。

虽然我承认我嘴臭,对于这种在我面前炫技搞攻击的人我经常骂骂咧咧,但是你也确实没把我怎么样,没做成啥巨大损失。难道是我嘴太欠所以经常被攻击?

(下文为之前写的一些骂骂咧咧)

见文《对于藏在阴暗处对个人博客进行攻击的人,我有一些想说的话》。

骂骂咧咧

骂骂咧咧

好吧,我确实喜欢让这些攻击者气急败坏又不能怎么样的感觉。

解决问题的过程自然有产出

昨天又花了一天的时间做了一款软件。无聊的东西又增加了。具体见文《SolidWorks/UG/Catia等三维软件通用,3D空间曲线批量散点化软件V1.0正式发布,将空间线条导出坐标点》。

写的软件

前几天有个学弟对我进行咨询,可能是读研有些迷茫了。谁的青春不迷茫呢?但是请记住,跑起来就会有风。一定要去做,做的时候还要动脑子想。当用自己的方法去解决一些问题,论文、专利啥的不都有了吗?

一个人焦虑了,一定是因为行动和想法不匹配!但是实际情况是,越焦虑越不想去做任何事。

学弟的咨询

因为焦虑的时候,大脑想的是未来,想着宏大的目标与自己现状之间的鸿沟,觉得无法完成这个目标。

我们的大脑是个思维机器,如果只有大脑的想法没有行动时,我们的潜意识就通过焦虑提醒我们,此路不通,你必须行动。

这就是我们很焦虑,通过刷手机,玩游戏,喝酒逃避现实,结果结束后感觉更痛苦的原因。

以我的体会,完美主义的人容易有焦虑的倾向。越不行动,就越焦虑。好的方法是,尝试着开始这个大目标的一小步。

同时允许自己的一切,放下对自己的苛责,放下一些执念

表情包

  • ✇陶小桃Blog
  • 打包PySide或者PyQt软件时,同目录下的文件添加h后但封装成exe找不到的解决方案52txr
    前面写了一个软件《SolidWorks/UG/Catia等三维软件通用,3D空间曲线批量散点化软件V1.0正式发布,将空间线条导出坐标点》,里面用到了一个东西就是main.py调用同目录下的scripts.py。我在使用PyInstaller打包之后,以main.py作为主程序,把scripts.py添加到--add-data,在实际运行的时候发现找不到这个脚本。这个问题是由于打包后的程序运行时的工作目录和文件路径与开发环境不同导致的。下面说说科学的解决方案(当然这个方法只限于打包成exe文件,也就是Windows平台下)。(1)确认文件被打包到正确位置首先,确保scripts.py与main.py是在同一个目录下(也就是同一个文件夹下面)。然后使用--add-data或者在一些图形化界面中添加文件:(2)在代码中动态定位文件路径在测试的代码中,可能直接使用相对路径就完事了,(如 "your_script.py")。但是如果想要封装成exe还能路径正确,需要加一个函数来获取文件路径:def resource_path(relative_path): """ 动态获取资源的绝对路
     

打包PySide或者PyQt软件时,同目录下的文件添加h后但封装成exe找不到的解决方案

作者 52txr
2025年3月6日 15:22

前面写了一个软件《SolidWorks/UG/Catia等三维软件通用,3D空间曲线批量散点化软件V1.0正式发布,将空间线条导出坐标点》,里面用到了一个东西就是main.py调用同目录下的scripts.py。我在使用PyInstaller打包之后,以main.py作为主程序,把scripts.py添加到--add-data,在实际运行的时候发现找不到这个脚本。

这个问题是由于打包后的程序运行时的工作目录和文件路径与开发环境不同导致的。下面说说科学的解决方案(当然这个方法只限于打包成exe文件,也就是Windows平台下)。

(1)确认文件被打包到正确位置

首先,确保scripts.py与main.py是在同一个目录下(也就是同一个文件夹下面)。

然后使用--add-data或者在一些图形化界面中添加文件:

添加文件

(2)在代码中动态定位文件路径

在测试的代码中,可能直接使用相对路径就完事了,(如 "your_script.py"。但是如果想要封装成exe还能路径正确,需要加一个函数来获取文件路径:

def resource_path(relative_path):
    """ 动态获取资源的绝对路径(兼容开发环境和打包环境) """
    if getattr(sys, 'frozen', False):  # 判断是否在打包后的环境中
        base_path = sys._MEIPASS  # 打包后的资源目录
    else:
        base_path = os.path.dirname(__file__)  # 开发环境的当前目录
    return os.path.join(base_path, relative_path)

使用示例:

script_path = resource_path("your_script.py")
with open(script_path, "r", encoding="utf-8") as f:
    content = f.read()

(3)实际案例

下面是我软件打包的实际案例:

实际案例

  • ✇陶小桃Blog
  • SolidWorks/UG/Catia等三维软件通用,3D空间曲线批量散点化软件V1.0正式发布,将空间线条导出坐标点52txr
    在三维设计领域,工程师常需将复杂空间曲线转化为离散坐标点以用于逆向工程、有限元分析、数控加工或数据交互等场景。然而,主流CAD软件(如SolidWorks、UG、Catia)在此需求上长期存在功能短板。针对这一痛点,我们正式推出“3D空间曲线批量散点化软件V1.0”,以高效、精准、通用的特性重新定义三维曲线数据处理流程!行业痛点:传统方案的局限性尽管大部分三维软件都能支持创建点的操作,例如先绘制一个空间曲线,然后在空间曲线上在绘制若干个点的方法。但是存在各种各样的问题。例如Catia以及Solidworks都有上限,SolidWorks最多支持绘制100个参考点,然后再通过设计表的方式导出excel表格提取点的坐标,难以满足高精度需求,效率也是特别低。之前小陶则是制订过一个Catia插件程序,但是仅支持单一平台,无法适配SolidWorks、UG等主流软件。单条曲线处理耗时过长,复杂模型需逐一手动操作。此外,导出后的散点数据无法直观验证,易导致后续流程返工。本软件的优势本软件突破传统限制,为多平台用户提供一站式高精度散点化工具,核心优势如下:全平台兼容,告别“软件壁垒”支持SolidW
     

SolidWorks/UG/Catia等三维软件通用,3D空间曲线批量散点化软件V1.0正式发布,将空间线条导出坐标点

作者 52txr
2025年3月6日 01:41

在三维设计领域,工程师常需将复杂空间曲线转化为离散坐标点以用于逆向工程、有限元分析、数控加工或数据交互等场景。然而,主流CAD软件(如SolidWorks、UG、Catia)在此需求上长期存在功能短板。针对这一痛点,我们正式推出“3D空间曲线批量散点化软件V1.0”,以高效、精准、通用的特性重新定义三维曲线数据处理流程!

行业痛点:传统方案的局限性

尽管大部分三维软件都能支持创建点的操作,例如先绘制一个空间曲线,然后在空间曲线上在绘制若干个点的方法。但是存在各种各样的问题。例如Catia以及Solidworks都有上限,SolidWorks最多支持绘制100个参考点,然后再通过设计表的方式导出excel表格提取点的坐标,难以满足高精度需求,效率也是特别低。之前小陶则是制订过一个Catia插件程序,但是仅支持单一平台,无法适配SolidWorks、UG等主流软件。单条曲线处理耗时过长,复杂模型需逐一手动操作。此外,导出后的散点数据无法直观验证,易导致后续流程返工。

Solidworks局限性

本软件的优势

本软件突破传统限制,为多平台用户提供一站式高精度散点化工具,核心优势如下:

全平台兼容,告别“软件壁垒”

支持SolidWorks、UG(NX)、Catia等主流三维软件,无需切换平台或依赖定制插件,真正实现“一次操作,多场景通用”。

极速批量处理,效率提升100倍+

  • 批量处理:支持一个文件有多条空间曲线(直线、圆弧、样条曲线等),一键批量生成散点数据。
  • 超高性能:采用高效算法优化,,采用多线程方式进行数据处理,万级点云生成仅需秒级响应,告别卡顿等待。

理论精度0.001mm,点数自定义控制

  • 用户可自由设定离散点间距或数量,满足从粗加工到微米级精密分析的全场景需求。
  • 数据导出格式兼容性强(导出TXT格式的XYZ坐标点),无缝对接MATLAB、Python、ANSYS等工具。

可视化验证,效果立马看

  • 内置3D可视化模块,及时显示散点化结果,支持旋转、缩放;
功能传统方案本软件
多软件支持仅限单一平台基于STP格式,SolidWorks/UG/Catia等全兼容
处理速度手动操作,单条曲线≥10分钟批量处理,秒级完成
点数限制通常≤200点无限制,按需生成
可视化交互3D结果显示

一些应用场景如下:

  • CAE仿真:为有限元网格划分提供高精度边界条件。
  • 数控加工:生成刀具路径规划所需的离散坐标。
  • 逆向工程:将扫描曲线转化为可编辑点云数据。
  • 科研教学:快速提取曲线参数,助力算法开发与验证。

软件安装及使用

可以先看看B站视频:Solidworks/UG/Catia等通用3D空间曲线批量散点化软件V1.0演示操作 - B站视频

(1)下载FreeCAD

FreeCAD:你自己的三维参数化建模软件 - 下载1.0.0版本软件

安装软件的时候注意一下软件的安装路径,后续会用到!

Python.exe位于安装目录子文件夹bin下。

FreeCAD安装

(2)下载3D空间曲线批量散点化软件V1.0

包含的内容

里面的STP和TXT两个文件夹均是作为一个示例的存在,用于测试软件是否可用。

(3)软件操作流程

软件的界面以及操作流程如下:

软件操作流程

运行的结果示例:

软件操作结果

我觉得操作起来是非常简单!!

  • ✇陶小桃Blog
  • 放假在家总有种寄人篱下的感觉,多希望我的年假只有三天而不是三个月52txr
    给我太长的假期,实在是太折磨了。折磨的主要来源是我并不喜欢在家里住着。看了看这个狗大学的春季入学竟然是四月份(根据2024年以及2023年的入学月份推测的)。目测导师也懒得push我提前去学校干活,因为好像也没有那么多十万火急的工作需要做。在家的氛围实在是太影响我的学习进度。在《过年只想找个安静的地方睡几天,不想看见热闹,不想听见嘈杂,哪也不想去》中就已经讲过为什么了,我有时候真的觉得自己的成长似乎是老天爷在照顾着,原生家庭只是在不断内耗我的精气神。也许是老天爷的一种补偿吧。现在我已经是一名硕士而不是硕士生了。其实说到底,攒一笔属于自己的钱是一个人“摆脱控制”的底气,也是做出自己选择的底气,男生女生都是一样的道理。打算去外地租两个月房子,然后好好学习,闲暇之余看看风景。这才是我向往的生活。看了看一个月的房租也不错一两千而已,其实还好。其实我家确实挺穷的,我爸的工作近几年也是极不稳定(见文《2024年,我听到最多的话就是辞职和失业了》)。但是我觉得贫穷只是导火索,而不是根本原因。虽然下面的视频有点营销号,但是又有那么点道理,让我狠狠共情住了,真的是感觉“确实如此”。狗血的生活,早已耗尽每
     

放假在家总有种寄人篱下的感觉,多希望我的年假只有三天而不是三个月

作者 52txr
2025年2月4日 20:55

给我太长的假期,实在是太折磨了。折磨的主要来源是我并不喜欢在家里住着。看了看这个狗大学的春季入学竟然是四月份(根据2024年以及2023年的入学月份推测的)。

2024年春季博士入学

2023年春季博士入学

目测导师也懒得push我提前去学校干活,因为好像也没有那么多十万火急的工作需要做。

在家的氛围实在是太影响我的学习进度。在《过年只想找个安静的地方睡几天,不想看见热闹,不想听见嘈杂,哪也不想去》中就已经讲过为什么了,我有时候真的觉得自己的成长似乎是老天爷在照顾着,原生家庭只是在不断内耗我的精气神。

也许是老天爷的一种补偿吧。现在我已经是一名硕士而不是硕士生了。其实说到底,攒一笔属于自己的钱是一个人“摆脱控制”的底气,也是做出自己选择的底气,男生女生都是一样的道理。

打算去外地租两个月房子,然后好好学习,闲暇之余看看风景。这才是我向往的生活。看了看一个月的房租也不错一两千而已,其实还好。其实我家确实挺穷的,我爸的工作近几年也是极不稳定(见文《2024年,我听到最多的话就是辞职和失业了》)。但是我觉得贫穷只是导火索,而不是根本原因。虽然下面的视频有点营销号,但是又有那么点道理,让我狠狠共情住了,真的是感觉“确实如此”。

狗血的生活,早已耗尽每个家庭成员的精力和心血。满心憋屈、烦躁,不宣泄一下憋的慌,面对伴侣、兄弟姐妹、孩子时不会好好说话,一张嘴就是尖酸刻薄,一开口就是挖苦嘲讽,把不如意迁怒于家人。

普通家庭的孩子,只有真正走上社会,脱离原生家庭之后,反而能渐渐意识到自己的不足,待人接物也没有以前那么极端刻薄了。因为没有情绪黑洞在不断索取情绪价值,但是内心的伤痛需要慢慢医治。

好在我已经足够养活自己,我想勇敢一次。

外面的世界还很大,要学的知识还很多。

  • ✇陶小桃Blog
  • 重学ROS2:(8)在ROS中能用到的C++新特性(自动推导类型auto、智能指针、Lambda表达式、函数包装器)52txr
    这篇博客文章介绍了在ROS2开发中可以利用的C++新特性,具体包括自动推导类型、智能指针、Lambda表达式和函数包装器。首先,文章讨论了C++11引入的auto关键字,它可以自动推导变量类型,简化代码。接着,智能指针被介绍为一种避免内存泄漏的工具,特别是在ROS2中创建节点时使用的std::make_shared。Lambda表达式作为一种便捷的匿名函数方式,在处理简单逻辑时能够提升代码的可读性和效率。最后,文章介绍了std::function,一个函数包装器,可以统一存储和调用不同类型的函数,如自由函数、成员函数和Lambda表达式,简化函数调用的管理。这些C++新特性大大提高了开发效率,特别是在ROS2环境中,可以帮助开发者编写更加简洁、高效的代码。[...]
     

重学ROS2:(8)在ROS中能用到的C++新特性(自动推导类型auto、智能指针、Lambda表达式、函数包装器)

作者 52txr
2025年2月3日 21:44

这篇博客文章介绍了在ROS2开发中可以利用的C++新特性,具体包括自动推导类型、智能指针、Lambda表达式和函数包装器。首先,文章讨论了C++11引入的auto关键字,它可以自动推导变量类型,简化代码。接着,智能指针被介绍为一种避免内存泄漏的工具,特别是在ROS2中创建节点时使用的std::make_shared。Lambda表达式作为一种便捷的匿名函数方式,在处理简单逻辑时能够提升代码的可读性和效率。最后,文章介绍了std::function,一个函数包装器,可以统一存储和调用不同类型的函数,如自由函数、成员函数和Lambda表达式,简化函数调用的管理。这些C++新特性大大提高了开发效率,特别是在ROS2环境中,可以帮助开发者编写更加简洁、高效的代码。

[...]

  • ✇陶小桃Blog
  • 一想到"情侣博主"头上长了摄像头,就有点出戏52txr
    抖音上有很多“情侣博主”,他们通过分享日常生活、恋爱故事和互动瞬间,吸引了大量粉丝(虽然可能靠这个吃饭)。情侣博主在拍摄日常生活时,很多都是使用头戴式摄像头的方式,主要是为了获得第一人称视角的画面效果。这种拍摄方式能够让观众更直观地感受到情侣之间的互动和情感交流,增强视频的代入感和真实感。当你发现每个吵架现场都自带广角运镜,每个分手场景都恰巧对着落地窗逆光拍摄,这些精心设计的"真实"比偶像剧还离谱。镜头语言早就出卖了表演痕迹:刻意虚化的前景暗示着隐藏的摄像团队,突然切换的机位暴露了NG重拍,就连"素颜出镜"的女主角,睫毛根部都藏着心机的接睫技术。这些视频与其说是生活记录,不如说是当代情感情景剧。打开情侣博主的选题库,"十亿直男看了都沉默"、"女生必看警惕PUA"、“情人节到了这些礼物感动到哭”这类标题永远占据C位。他们深谙平台算法钟爱极端对立的秘密,把两性关系简化成永不停歇的攻防战:男生必定是忘记节日的榆木疙瘩,女生必须是敏感多疑的福尔摩斯。这些被精心计算的情绪炸弹,炸碎了屏幕前观众对亲密关系的正常认知。当我们为"该不该查伴侣手机"吵得不可开交时,始作俑者正在数着流量分成偷笑。真正可怕
     

一想到"情侣博主"头上长了摄像头,就有点出戏

作者 52txr
2025年2月3日 18:20

抖音上有很多“情侣博主”,他们通过分享日常生活、恋爱故事和互动瞬间,吸引了大量粉丝(虽然可能靠这个吃饭)。情侣博主在拍摄日常生活时,很多都是使用头戴式摄像头的方式,主要是为了获得第一人称视角的画面效果。这种拍摄方式能够让观众更直观地感受到情侣之间的互动和情感交流,增强视频的代入感和真实感。

头戴摄像头

当你发现每个吵架现场都自带广角运镜,每个分手场景都恰巧对着落地窗逆光拍摄,这些精心设计的"真实"比偶像剧还离谱。

镜头语言早就出卖了表演痕迹:刻意虚化的前景暗示着隐藏的摄像团队,突然切换的机位暴露了NG重拍,就连"素颜出镜"的女主角,睫毛根部都藏着心机的接睫技术。这些视频与其说是生活记录,不如说是当代情感情景剧。

打开情侣博主的选题库,"十亿直男看了都沉默"、"女生必看警惕PUA"、“情人节到了这些礼物感动到哭”这类标题永远占据C位。他们深谙平台算法钟爱极端对立的秘密,把两性关系简化成永不停歇的攻防战:男生必定是忘记节日的榆木疙瘩,女生必须是敏感多疑的福尔摩斯。

这些被精心计算的情绪炸弹,炸碎了屏幕前观众对亲密关系的正常认知。当我们为"该不该查伴侣手机"吵得不可开交时,始作俑者正在数着流量分成偷笑。

头戴摄像头

真正可怕的是,这种人造焦虑正在改写我们年轻人的情感认知,越来越多的人要求伴侣"像视频里那样道歉"、“像视频里那样送礼物”,把亲密关系异化成打卡集章的表演。当00后开始用"求生欲测试"衡量爱情纯度,我们正在批量生产情感PUA大师。

我想到了一句话:是我们玷污了爱情,所以渴望却又不配拥有爱情。

今天我给对象分享了抖音上的一条视频,觉得还是蛮有意思的:

"从前车马很慢,一生只够爱一个人。"撕开镜头下的表演,真实的情感本就该有狼狈的素颜、笨拙的拥抱和忘了镜头的亲吻。下次再看到类似的视频时,不妨笑着划走——毕竟真正的生活,从来不需要场记板。

头戴摄像头

在这个人人都是楚门的世界里,保持清醒或许就是最大的叛逆。当我们停止用点赞数丈量爱情,放下对完美关系的偏执想象,或许就能在某个没有摄像头的清晨,遇见那个愿意陪你一起笑场的人。

  • ✇陶小桃Blog
  • 同样的宽带、同样的电脑,Linux和Windows的网速测试竟然相差两三倍52txr
    本文通过同一台电脑在Windows 10与Ubuntu 22.04系统下的网络测速对比(使用中国科学技术大学测速网站),发现Windows环境下网速可达Linux的2-3倍。针对这一差异,文章从四个维度分析可能原因:驱动优化不足:Linux开源驱动对部分高端网卡支持较弱,需手动安装厂商驱动或升级内核;网络协议栈配置差异:Linux默认可能关闭硬件加速功能(如TSO/GRO),需通过ethtool和sysctl优化;电源管理干扰:Linux的网卡节能模式可能影响性能,建议强制全速运行;防火墙限制:需排查流量控制规则或临时关闭防火墙测试。作者指出,尽管已知问题存在,但因Ubuntu仅用于ROS学习场景,暂未深入调试。该测试为跨系统网络性能优化提供了参考方向,尤其对需要高效网络负载的开发者具有实用价值。[...]
     

同样的宽带、同样的电脑,Linux和Windows的网速测试竟然相差两三倍

作者 52txr
2025年2月3日 14:16

本文通过同一台电脑在Windows 10与Ubuntu 22.04系统下的网络测速对比(使用中国科学技术大学测速网站),发现Windows环境下网速可达Linux的2-3倍。针对这一差异,文章从四个维度分析可能原因:

  1. 驱动优化不足:Linux开源驱动对部分高端网卡支持较弱,需手动安装厂商驱动或升级内核;
  2. 网络协议栈配置差异:Linux默认可能关闭硬件加速功能(如TSO/GRO),需通过ethtoolsysctl优化;
  3. 电源管理干扰:Linux的网卡节能模式可能影响性能,建议强制全速运行;
  4. 防火墙限制:需排查流量控制规则或临时关闭防火墙测试。
    作者指出,尽管已知问题存在,但因Ubuntu仅用于ROS学习场景,暂未深入调试。该测试为跨系统网络性能优化提供了参考方向,尤其对需要高效网络负载的开发者具有实用价值。

[...]

  • ✇陶小桃Blog
  • 我一直搞错了,原来在头文件中尽量避免使用"using namespace std”52txr
    在C++编程中,using namespace std; 语句用于引入标准命名空间 std,使得在代码中可以直接使用标准库中的类和函数,而无需每次都加上 std:: 前缀。 例如,使用 cout 代替 std::cout,使用 string 代替 std::string。 虽然这种做法在编写小型程序时可能方便,但在头文件中使用 using namespace std; 却存在一些潜在问题。我也是最近看很多代码大佬们写std::cout感到好奇才一探究竟的。本文将详细讲解为什么在头文件中避免使用 using namespace std;,并给出一些更好的替代方案。1. 命名冲突的风险在大型项目中,我们可能会引入多个库或模块,而这些库或模块的命名空间中可能会有与标准库中相同名称的类或函数。假如你在头文件中使用了 using namespace std;,那么标准库中的所有类、函数和对象都会被引入到当前作用域中。这样,如果其他库也有相同的名字,就会发生命名冲突。举个例子,假设你引入了一个名为 math 的第三方库,它里面也定义了一个 sort 函数。由于 std 命名空间中也有一个 sort
     

我一直搞错了,原来在头文件中尽量避免使用"using namespace std”

作者 52txr
2025年2月1日 23:14

在C++编程中,using namespace std; 语句用于引入标准命名空间 std,使得在代码中可以直接使用标准库中的类和函数,而无需每次都加上 std:: 前缀。 例如,使用 cout 代替 std::cout,使用 string 代替 std::string。 虽然这种做法在编写小型程序时可能方便,但在头文件中使用 using namespace std; 却存在一些潜在问题。我也是最近看很多代码大佬们写std::cout感到好奇才一探究竟的。本文将详细讲解为什么在头文件中避免使用 using namespace std;,并给出一些更好的替代方案。

1. 命名冲突的风险

在大型项目中,我们可能会引入多个库或模块,而这些库或模块的命名空间中可能会有与标准库中相同名称的类或函数。假如你在头文件中使用了 using namespace std;,那么标准库中的所有类、函数和对象都会被引入到当前作用域中。这样,如果其他库也有相同的名字,就会发生命名冲突。

举个例子,假设你引入了一个名为 math 的第三方库,它里面也定义了一个 sort 函数。由于 std 命名空间中也有一个 sort 函数,当这两个命名空间的功能混合时,编译器将无法判断你想调用的是哪个 sort,从而导致编译错误或逻辑错误。

2. 影响代码的可维护性

头文件通常会被多个源文件(.cpp 文件)所包含。如果在头文件中使用了 using namespace std;,那么每个包含该头文件的源文件都会自动引入标准命名空间。这意味着,即使某些源文件根本不需要标准库的功能,std 命名空间中的标识符也会被引入。这样会增加代码的复杂度和维护难度,因为你不再清楚哪些标识符来自标准库,哪些来自其他库或模块。

3. 增加编译时间

当你在头文件中使用 using namespace std; 时,编译器需要在每次编译时都处理这个语句。这对于小型项目影响不大,但在大型项目中,头文件通常会被多个源文件引用,这会导致编译器在每个源文件中都处理一次 using namespace std;,从而增加编译时间,影响开发效率。

4. 降低代码的可读性

明确地使用 std:: 前缀可以让代码的来源一目了然。你能够立刻知道某个标识符是来自标准库,而不是其他库或模块。这有助于提升代码的可读性和可理解性。如果在头文件中使用了 using namespace std;,那么标识符的来源就变得模糊不清,可能会让其他开发者感到困惑,特别是在大型项目中,代码的清晰度至关重要。

推荐的做法

为了避免上述问题,最好在头文件中避免使用 using namespace std;。相反,应该采取以下两种方法之一:

  1. 在源文件中局部使用 using 声明
    你可以在 .cpp 文件的函数或代码块中使用 using namespace std;,这样只有在需要使用标准库的地方才会引入 std 命名空间,避免全局引入。

    #include <iostream>
    #include <string>
    
    // 在源文件中局部使用 using 声明
    void func() {
        using namespace std;
        cout << "Hello, World!" << endl;
    }
  2. 明确使用 std:: 前缀
    在每个需要使用标准库功能的地方,显式地加上 std:: 前缀。这种方法虽然稍显繁琐,但它最大程度地避免了命名冲突,并且使得代码更加清晰和易于维护。

    #include <iostream>
    #include <string>
    
    void func() {
        std::cout << "Hello, World!" << std::endl;
    }

总结

尽管 using namespace std; 在小型程序中可以提高编写效率,但在头文件中使用它会带来命名冲突、维护难度增加、编译时间延长以及代码可读性差等问题。因此,为了保持代码的清晰、简洁和高效,建议在头文件中避免使用 using namespace std;。通过在源文件中局部使用 using 声明或明确使用 std:: 前缀,我们可以有效地避免这些问题。

C++标准命名

❌
❌