Blog

  • C盘爆满?还得是 WinDirStat

    你是否遇到过 C 盘爆满的情况?你是否也有垃圾文件太多拖慢系统运行速度,风扇狂转的情况?你需要 WinDirStat 来帮你。

    WinDirStat 是一款免费的磁盘空间分析与清理工具。它通过彩色方块(树状图)和大小排序列表,让你一眼看出哪些文件和文件夹占用了空间。

    WinDirStat 可以帮你分析和清理个人下载的文件、大型游戏或软件的残留数据、微信/QQ 缓存文件夹、浏览器下载目录中的无用安装包等等。

    游戏和软件的缓存和残留数据主要集中在以下目录,这些垃圾文件不会随着软件删除而删除,会越积越多:

    • %APPDATA%:当前用户的漫游应用数据目录
    • %LOCALAPPDATA%:当前用户的本地应用数据目录
    • %PROGRAMFILES%:64位软件安装目录,如 C:\Program Files

    Windows 文件夹、System32 等核心系统文件。如果不确定某个大文件是什么,请先上网搜索它的名字,避免删掉关键系统数据导致电脑无法开机。这些目录别碰:

    • %WINDIR% 或 %SYSTEMROOT%:Windows 系统根目录,如 C:\Windows
    • %SYSTEM32%:系统核心组件目录,如 C:\Windows\System32

    用这个软件需要谨慎,如果不确定你删掉的是什么,最好先搞清楚再删除。😄

  • 鸿蒙 HarmonyOS 7.0

    HongMeng Kernel 1.13

    最近手上的两个华为设备 Pura X Max 和 MateBook Pro 先后升级到了鸿蒙 HarmonyOS 7.0 系统。据称,鸿蒙7.0(HarmonyOS NEXT)是华为首个 100% 纯血自研版本,彻底砍掉安卓兼容层,底层重构带来巨大性能提升。

    到底什么是鸿蒙 HarmonyOS 系统?

    鸿蒙系统(HarmonyOS)是华为开发的全场景分布式操作系统。它能把手机、平板、手表、电视和汽车等不同设备连成一个“超级终端”,让设备之间互相分享硬件和资源,实现万物互联。

    鸿蒙从诞生起,目标就是用一套系统打通所有设备。它可以根据硬件的能力自由裁剪,大到智能汽车、电视,小到手机、手表,甚至只有几百 KB 内存的智能灯泡,运行的都是同一种系统语言。

    • 分布式技术:打破设备之间的孤岛,音视频、文件或网络可以跨设备无缝流转。
    • 一次开发,多端部署:开发人员写一次程序,就能在多种大大小小的设备上运行。
    • 硬件互助:不同设备的优点可以结合在一起,比如用平板当电脑的副屏或直接调用手机的摄像头。
    • 应用流转:你在手机上看到一半的视频、写到一半的文档,可以一键“飞”到电视或平板上继续进行,不需要任何重新登录或配对的过程。

    鸿蒙系统的这些先进特性得益于其系统架构和微内核设计,为了解释什么是微内核,先解释下什么是宏内核。

    Linux 内核

    什么是宏内核操作系统?

    Linux, BSD, 和 Unix 属于典型的宏内核:所有系统服务(驱动、文件系统、网络协议栈、内存管理)全部打包在内核空间运行。代码量极其庞大(千万行级别),运行效率高,但牵一发而动全身。

    任何一个第三方驱动程序出现严重崩溃(如蓝屏或死机),都会直接导致整个操作系统崩溃。

    体积大、对硬件要求高。虽然有裁剪版,但很难直接运行在几百 KB 内存的极小型物联网(IoT)设备上。

    由于服务都在内核内部,相互调用直接读取内存,通信速度极快。

    什么是微内核操作系统?

    鸿蒙内核(HongMeng Kernel)是华为自主研发的计算机操作系统核心,主要采用微内核架构,具备极简高效和高安全性的特点。它摆脱了对传统Linux或安卓(AOSP)底层的依赖,是纯血鸿蒙的底层核心。

    鸿蒙内核与 Linux 内核最核心的区别在于架构设计理念:Linux 是“全能型”的宏内核,而鸿蒙是“精简型”的微内核。

    • 仅在内核中保留最基础的核心能力(如进程调度、内存管理、基础进程间通信 IPC)。
    • 把文件系统、驱动程序、网络协议栈等移到用户态运行,单个服务崩溃不会导致整个系统瘫痪。

    微内核的核心优势在于:

    内核空间只保留最核心的功能(进程调度、基础内存管理)。驱动和文件系统被剥离到用户空间。内核代码量极小,安全边界清晰。

    由于服务相互隔离,即使相机驱动或文件系统崩溃,也只是该服务重启,系统整体依然能稳定运行。

    原生采用解耦设计。一套内核既可以通过裁剪去驱动智能手环(KB 级内存),也可以扩展去驱动手机、智能汽车(GB 级内存)。

    由于服务分在不同的用户空间,需要频繁进行进程间通信。鸿蒙通过硬件特性优化了 IPC 性能,弥补了传统微内核通信慢的缺点。

    鸿蒙 7.0 用完整代码大概 1.1 亿行,鸿蒙内核核心代码只有万行级别。根据需要,微内核的代码甚至还可以再精简:在几百 KB 内存的手环上,它只加载最基础的微内核模块;在手机上,它再动态加载完整的系统服务。它是“一套底层,随处部署”。

    所以,那些说华为把不同设备甚至是嵌入式设备上跑的系统都叫一个名字,以此嘲笑华为用名字实现了万物互联的说法是不正确的。

  • 蔚来 ET5T

    蔚来 ET5T

    蔚来 ET5T 两个月用车体验

    「颜值」

    猎装车就是旅行车但又不叫它“瓦罐”的原因就是因为它好看。

    「内饰」

    好像记得几年前某国产车企专程去奔驰请教如何把车做豪华,这才几年呀,无论是设计(语言)还是用料已经做出了 BBA 下一代的水平。

    「驾驶辅助系统」

    油车把驾驶辅助系统的各种功能放在不同的配置上已获得更高溢价,但国产车驾驶辅助是标配,各配置相同。

    「操控」

    他们说 BMW 的操控好,因为动力好,方向盘指向精准。

    自从开了电动车之后,这都不是事。相反的,因为有同价位两倍以上油车都给不了的驾驶辅助,比如 HUD ,比如预碰撞提醒,比如盲区监测等等,电动车肯定是更好开的。

    电动车的方向盘和刹车有程序在控制,我也说不清到底何时程序在介入,总之就是有。

    「辅助驾驶系统」

    对智能驾驶祛魅了,不想用,因为车好开,而且我还比它开得快。

    蔚来的智能驾驶像是 ACC 的加强版,有车的时候在路上或是过红绿灯喜欢跟在别的车后面,这个系统设计之初我感觉它比较信任和依赖人类驾驶员的判断。

    当然了,没车它也能自己开。车道线和红绿灯识别其实是可以的。但是它预判不到我能做到的预判,比如,我都看到辅路有车出来它还加速 [破涕为笑]

    自动泊车和手机遥控进出车库用一次就戒不掉了。

    「车机系统」

    Cedar 雪松这个系统极其流畅,比我在其它同价位的国产电动车上看到的都流畅,PPI 很高显示更细腻,配合 16:10 的屏幕比例堪称完美。高通 8295 确实为未来数年升级留足了空间。

    「电池,租电 Vs. 买断,换电」

    电动车开四五年电池健康度下降的很厉害,残值还没有新电池值钱,这是别的车企用户才会面对的问题。

    75 度磷酸铁锂,还是 100 度三元锂?三元锂更容易起火,所以还是磷酸铁锂,主要是车价更便宜。租还是买,卖车的时候用开 5 年计算了一下,租比买段便宜。

    「没有车是完美的」

    内后视镜:我坐姿调好之后,感觉位置有点太靠后,看流媒体后视镜感觉太近了。

    外后视镜:坐姿和后视镜位置调好之后,停车的时候看不到车位(线),虽然有 360 ,晚上也是看不见。

    「开电动车之前不知道的」

    充满电啥都不干,每天都在掉电,续航每天在减少。

    相比较油车,松开油门,电动车速度下降的非常快。

  • FreeBSD 15 下使用 ddns-go

    以前介绍过如何在 FreeBSD 14 上安装和使用 ddns-go ,因为不会写 rc.d 脚本,所以不能实现开机自启动,只能使用 supervisor 守护 ddns-go 的进程。

    最近几天折腾 FreeBSD 15,用 Gemeni 写了一个 ddns-go 的 rc.d 脚本,终于可以实现用 BSD 系统来管理 ddns-go 进程了。

    参考官方文档,ddns-go 的启动命令是:

    /usr/local/bin/ddns-go -s install -f 600 -c /usr/local/etc/ddns_go_config.yaml

    我用 Google AI 帮我写了一个 FreeBSD 15 的 rc.d 系统服务启动脚本。

    # 在 FreeBSD 中创建 /usr/local/etc/rc.d/ddns-go 文件
    
    $ doas nano /usr/local/etc/rc.d/ddns-go

    写入如下内容:

    #!/bin/sh
    
    # PROVIDE: ddns-go
    # REQUIRE: NETWORKING
    # KEYWORD: shutdown
    
    . /etc/rc.subr
    
    name="ddns_go"
    rcvar="ddns_go_enable"
    
    # Load configuration and set default value
    load_rc_config $name
    : ${ddns_go_enable:="NO"}
    
    # Absolute paths
    daemon_bin="/usr/sbin/daemon"
    ddns_go_bin="/usr/local/bin/ddns-go"
    ddns_go_args="-f 600 -c /usr/local/etc/ddns_go_config.yaml"
    
    pidfile="/var/run/${name}.pid"
    logfile="/var/log/${name}.log"
    
    # Use procname so that 'service ddns-go status/stop' knows exactly what to track
    procname="${ddns_go_bin}"
    
    # Override the default start command to enforce explicit log redirection
    start_cmd="ddns_go_start"
    
    ddns_go_start() {
        echo "Starting ${name}."
        # -f redirects stderr, -o redirects stdout, -p records the child PID
        ${daemon_bin} -f -o ${logfile} -p ${pidfile} ${ddns_go_bin} ${ddns_go_args}
    }
    
    run_rc_command "$1"
    

    接下来,给这个脚本添加可执行权限,并且添加到 /etc/rc.conf 文件。

    # 添加可执行权限
    
    $ doas chmod +x /usr/local/etc/rc.d/ddns-go
    
    # 将服务加入 /etc/rc.conf 配置文件中以实现开机自启
    
    $ doas service ddns-go enable
    
    # 启动 ddns-go
    
    $ doas service ddns-go start
    
    # 查看 ddns-go 运行状态
    
    $ doas service ddns-go status

    搞定!

  • 养“虾”指南

    养“虾”指南

    俗称“龙虾”的人工智能助理 OpenClaw 席卷全球,热度有增无减。“龙虾”是一款的免费开源AI代理(AI Agent)软件,可以像真人一样直接操作电脑的自动化助理,可阅读浏览器、存取文件、调用应用程式等等。

    虽然之前说过 OpenClaw 比 CoPaw 使用起来更麻烦,不太适合新手,但奈何它的热度实在是太高了。我的 X 时间线上几乎每天都有人在讨论它。

    这不,有人编写各种养“虾”教程,我也在学习如何使用它,让它变成我的私人助理,所以手机了不少教程。你可以:

  • 让 FreeBSD 的 sh shell 不显示用户名

    以前我连什么是 shell 都不知道,不是没查过资料,但是查资料也理解不了。后来慢慢知道了,而且知道各种不同的 shell ,比如 FreeBSD 的 sh , csh , zsh ,还有 Linux 的 Bash 等等。

    除了 FreeBSD 之外,其它的 BSD 系统我也装过,对 OpenBSD 的 ksh 印象深刻,ksh 为什么只显示主机名不显示用户名呢?起初我还以为这是 ksh 和 sh 的区别。最近装了 NetBSD ,突然发现 NetBSD 的 sh 也只显示主机名。NetBSD 的 sh 和 FreeBSD 的 sh 应该是同一个东西。这才发现,原来 shell 是否显示用户名,是各种 shell 配置后的结果。

    让 FreeBSD 的 Shell 不显示用户名

    如何让 FreeBSD 的 sh 不显示用户名

    # 编辑 ~/.shrc 文件
    
    $ ee ~/.shrc

    接着在这个文件中找到 PS1 变量的位置,修改如下:

    # 更新 PS1 变量包含主机名 (\h) 和你当前目录 (\w):
    
    PS1="\h:\w \$ "

    最终显示效果如:FreeBSD:/usr/home $

    接着执行下面的命令让修改生效:

    $ . ~/.shrc

    2026年9月24日更新:

    今天找到了另一个方法,直接在系统默认的 .shrc 文件末尾加入如下内容:

    if [ "\$(id -u)" = "0" ]; then
        PS1="`hostname`# "
    else
        PS1="`hostname`$ "
    fi
    export PS1

    然后执行如下命令使其生效即可。

    $. ~/.shrc

    搞定!

  • 国产 NAS 系统卷起来了

    国产 NAS 系统卷起来了

    刚刚又看到有国人开发了一款免费的通用国产 NAS 系统,这个叫 GEAKOS 的系统目前还处在 Beta 开发阶段,不过根据评测来看,目前完成度已经相当高了。

    跟飞牛 OS 一样,AI 智能相册和影视功能是其主打功能,也支持GEAKLink 远程访问,以及外联分享等功能。没想到居然连 NAS 系统都卷起来了,这是好事,不愁找不到好用的免费的 NAS 系统了。不过目前我还是更喜欢飞牛,暂时不想尝试这个新系统了。主要是我也没有多余的硬件来安装。🙂

  • Cloudways 最佳优化实践

    Cloudways 最佳优化实践

    最近我 Cloudways 上托管的一个用 WordPress 搭建的跨境电商独立站遇到访问速度变慢、服务器 CPU 占用经常 100% 的情况,虽然用 Cloudflare 拦截了一部分可能是机器人的流量但还是无济于事。

    以前 Cloudways 网站的优化情况

    我用 Cloudways 有些年头了,这个电商网站一直托管在 Cloudways 上。服务器换过 Vultr (High Frequency) 也换过 DigitalOcean (Premium) 家的,因为就托管了一个 WordPress 网站,所以一直都用的是 1C1G 的机型,这个网站的流量并不大,以前一直感觉挺流畅的。

    Cloudways 默认给服务器安装了多种缓存软件,比如 Apache(动态请求)+ Nginx(静态内容),Memcached(MySQL 数据库缓存),Redis + Object Cache Pro(缓存一些数据到内存中),以及 Varnish(HTTP加速,缓存页面内容到内存)。

    简直是武装到牙齿了,所以以前除了 Cloudways 官方的 WordPress 优化插件 Breeze 之外,就再也没考考虑更多的 WordPress 优化措施。由于 Breeze 没有 FlyingPress 那么好用,以前只是开启了一部分基础功能,并没有启用页面缓存。

    对了,话说 Object Cache Pro 前几年好像只对 2G 内存以上的服务器开放,最近才知道 1G 内存的服务器也可以安装了。这玩意儿确实有用,以前用 Breeze 的时候就遇到过页面被 Redis 缓存的情况。

    Cloudways 就该用 FlyingPress 优化插件

    我也用 Siteground ,这个博客还有一个跨境电商独立站托管在 Siteground 上。这两个网站都用了 FlyingPress 插件,套了 Cloudflare 免费版 CDN (没有开 APO),静态内容比如图片用的 BunnyCDN ,访问速度一直很理想,也很稳定。

    相比 Breeze ,FlyingPress 可以为每个页面生成静态的 html 页面。我这才决定把 Cloudways 上的网站也换成 FlyingPress 。

    在搜索 Cloudways 上如何配置 FlyingPress 的时候发现 Varnish 生成的 Cache 要搭配 Breeze 插件才能清空缓存,于是干脆把 Varnish 给停用了。

    停用 Varnish 之后,没想到 CPU 占用率立即下来了。我们这小网站小服务器根本就不需要那么多缓存软件,用 Object Cache Pro 和 FlyingPress 足够了!没必要过度优化。😄

    话虽如此,使用 FlyingPress 压缩图片体积(其实就是把 jpg/png 转换成 webp/avif ),以及用 CDN 分发静态内容也是必不可少的给服务器 CPU 减压的必要手段。

  • 全面转向 .avif 图片格式

    全面转向 .avif 图片格式

    我最喜欢的 WordPress 优化插件 FlyingPress 推出了图片优化功能,可以将博客/网站上的图片一键优化成 .webp 或者 .avif 格式。相对于 .jpg/.png/.jpeg 图片格式, .avif 在相同画质下拥有极高的压缩率,比 JPEG 小 50% 以上,甚至优于 WebP 。

    以前,WordPress 的图片优化插件以及一些 CDN 厂商在推广 WebP 格式,也不知道他们是如何做到的,在不改变文件后缀名的情况下,浏览器直接访问的是其 .webp 的版本。

    而 FlyingPress 似乎更激进,它直接转换成 .avif 格式的图片,并且自动在缓存页面将图片地址替换成 .avif 。这样,似乎以前如果浏览器访问 .webp 不支持的时候还可以回退到 .jpg 格式。但是它没有这么做。

    这都 6202 年了,AVIF 的浏览器支持率已经十分接近 WebP 。这个博客,以及我的几个跨境电商独立站已经转移到 .avif 了。如果浏览器不支持怎么办?这种人用着多年前的操作系统或浏览器,大概也不是我想要的潜在客户吧。

  • Ubuntu 24.04 设置 NTP 客户端

    Ubuntu Server 初始化完成之后第一件事情就是设置时区和配置 NTP 时间同步服务器。

    把服务器的时区设置成北京时间所在的时区,通常是 Asia/Shanghai 。

    $ sudo timedatectl set-timezone Asia/Shanghai

    接下来就可以使用 ntp 服务器同步和调整系统时间了。Ubuntu 24.04 默认使用 systemd-timesyncd 来和 NTP 服务器同步时间。

    查看 systemd-timesyncd 是否在运行:

    $ sudo systemctl status systemd-timesyncd

    编辑 systemd-timesyncd 的配置文件

    $ sudo nano /etc/systemd/timesyncd.conf
    
    取消 NTP= 的注释(删掉 #)然后添加一个 NTP 服务器,国外的 VPS 我使用 time.cloudflare.com
    
    [Time]
    NTP=time.cloudflare.com
    #FallbackNTP=ntp.ubuntu.com
    #RootDistanceMaxSec=5
    #PollIntervalMinSec=32
    #PollIntervalMaxSec=2048
    #ConnectionRetrySec=30
    #SaveIntervalSec=60
    
    其余部分可以不用管

    重启 systemd-timesyncd

    $ sudo systemctl restart systemd-timesyncd

    查看 systemd-timesyncd 的运行状态

    $ timedatectl timesync-status

    输出结果如下:

           Server: 2606:4700:f1::123 (time.cloudflare.com)
    Poll interval: 1min 4s (min: 32s; max 34min 8s)
             Leap: normal
          Version: 4
          Stratum: 3
        Reference: A0C03BE
        Precision: 1us (-25)
    Root distance: 18.226ms (max: 5s)
           Offset: -210us
            Delay: 1.375ms
           Jitter: 0
     Packet count: 1
        Frequency: -12.374ppm

    也可以使用如下命令查看系统的时间和时区等信息。

    $ timedatectl status

    输出结果:

                   Local time: Fri 2026-01-30 20:27:06 CST
               Universal time: Fri 2026-01-30 12:27:06 UTC
                     RTC time: Fri 2026-01-30 12:27:07
                    Time zone: Asia/Shanghai (CST, +0800)
    System clock synchronized: yes
                  NTP service: active
              RTC in local TZ: no

    国内的云服务器厂商比如腾讯云和阿里云的轻量应用服务器的 Ubuntu 系统下的 NTP 客户端换成了 chrony ,Fedora 系统也使用 chrony 而不是 systemd-timesyncd 。你可以自己搜索下如何设置 chrony 。我这里就不多说了。