奇奇怪怪的知识又增长了

奇奇怪怪的知识又增长了

在MacOS里,桌面隐藏移动硬盘的图标

假如你有个移动硬盘,里面装满了学习资料,当你把它连到你的Mac电脑之后,MacOS非常贴心地在桌面上显示了一个大大的图标,以方便你打开你的学习资料好好学习。

但是,且慢,假如我不想让桌面显示那个大大的图标呢?我可不太愿意让别人知道我那么热爱学习。咋办?

你可以这么办:你的移动硬盘其实挂载在/Volumes 目录下,你只需要把它标记为 hidden 就不会在桌面上显示了,打开终端:

# 首先看看你的移动硬盘叫什么名字(其实你知道):
ls /Volumes

# 然后将它标记为 hidden
chflags hidden /Volumes/Portable

再看看你的桌面,是不是移动硬盘不见了。

那我怎么找到我的移动硬盘去打开学习资料好好学习呢?不会是让我用Finder直接打开Volumes吧?其实这样是可以的,但是还有更简单的方法:

虽然移动硬盘在桌面上不显示了,但是它依然以一个小小的图标不怎么显眼地显示在Finder的侧边栏里:

0

看见没,“弹出”这个移动硬盘也可以在这里操作。


魔改MacOS的邮件应用里新邮件到达的提示音

MacOS的Mail应用设置新邮件到达的提示音非常简单,按 ⌘ + , 打开设置,选择 General 标签,从 “New messages sound: ” 的下拉菜单里选你喜欢的提示音就好了。

但是头脑一热的你头脑狂热起来了:这里能选择的都是系统自带的一些提示音,我能不能网上找个酷酷的“You've got mail”的提示音,然后在这里选它呢?

于是问题变成了,怎么把我找到的提示音列在这个“New messages sound: ” 的下拉菜单里。

其实要做到这一点一点都不难,你只需要把你下载的音频文件(mp3或者wav都可以,网上有人说必须要转换成什么aiff或者caf格式文件,那是扯淡,没必要,直接用mp3或者wav也是可以的)扔到 ~/Library/Sounds/ 里,就可以了,几个细节要注意一下:

  1. ~/Library是隐藏的,要在 Finder里访问它,你可能需要按 ⇧ + ⌘ + G 然后输入~/Library
  2. 如果还没有~/Library/Sounds/目录,劳烦您新建一个
  3. 把音频文件扔到~/Library/Sounds/目录之后,你需要完全退出Mail重新打开才能在设置里看到你新添加的提示音

Have a nice one, pease!


Linux的Bash里的 ⌃ + R

最近在 MacOS 的 zsh 里安装了oh-my-zsh ,发现它的自动补全功能是真香,你只需要输入几个字符,它就能把上一次你以这几个字符开头所输入的命令提示出来,你继续按一下向右箭头键就自动补全了命令:

0

你是真希望在你的Linux服务器上也能这样。很可惜,Linux常用的Shell是Bash 目前没有类似的插件。

但是,你可以按 ⌃ + R (做 reverse-i-search),然后类似地输入几个字符就能在历史记录里搜索最近你输入这几个字符相关的命令,然后直接回车就可以执行了,也是非常的Nice:

0

重点是,reverse-i-search 匹配的不是以某几个字符开头的最后一条命令,而是能帮你找命令里包含了那几个字符的历史记录,我感觉这比oh-my-zsh的sugguetion插件更Nice。

你甚至还可以多次按 ⌃ + R 继续往前找历史记录,直到找到你想要的那条记录。有些系统还支持 ⌃ + S 在你按太多 ⌃ + R 之后往回倒一倒,但是有些系统不支持。

彩蛋

⌘ ⇧ ⌃ ⌥ ⌫ ↑ ↓ ← → ⬆️ ⬇️ ⬅️ ➡️


Ghost配置

官方文档有全套的配置说明:https://docs.ghost.org/config

用Docker来部署的,修改配置有两种方式:
✅ 修改compose.yml 文件里的environment参数,这其实是跟config对应的,"--"代表一层 {}
✅ 修改容器里的/var/lib/ghost/config.production.json文件

两种方式修改之后都需要重启ghost 才生效。重启ghost 也有两种方法:
docker compose restart ghost 这是在compose.yml所在目录执行,后面的ghost其实是服务名
docker restart ghost 这是在任何目录都可以执行,后面的ghost其实是容器名

以及一种正确但是不可行的方法:
docker exec ghost ghost restart 这会报错,说不允许用root用户来执行ghost命令。

所以我们换一个用户身份就可以执行了,这其实是最好的方法:
docker exec -u node ghost ghost restart前面一个ghost是容器名,后面一个ghost是容器里的一个命令。(ghost是用nodejs写的,所以有个node用户很正常)

如果你懒得去看官方文档了,下面几个配置项你可以了解了解

  • portal:注册、订阅等等一整套的会员机制都是这玩意,不需要的话,把url设为false,像这样:
portal: {
    url: false
}
其实在后台,你可以通过 Settings -> Membership -> Access -> Who should be able to subscribe to your site? 设置为 Nobody 将Portal功能关闭,下面的comments也是类似地可以的。而sodoSearch就不行,这是为什么网上有不少人在问怎么关闭那个sodoSearch功能,因为有时候浏览我们的网站时从jsdelivr.net下载不了sodoSearch对应的js文件,造成了转圈半天然后控制台还报个错,而后台里还没有关闭sodoSearch功能的开关。
  • sodoSearch:站内搜索功能,如果你的模版,连个搜索框都没有的,那你用不了这玩意,也可以将url设置为false
  • comments:帖子评论功能,如果你不需要,也将url设置为false就好了

让ChatGPT给你讲讲,这些个都是什么玩意吧:

好 👌,那我就系统性地给你讲一遍 TryGhost(Ghost 博客系统) 里关于 注册、会员机制、订阅、评论、搜索 等功能,帮你把 Ghost 的整体“产品观”梳理清楚。

Ghost 一开始(2013)是一个简洁的 Markdown 博客平台,后来逐渐演变成一个完整的 内容出版 + 会员订阅 系统。Ghost 的定位是「独立出版者的工具」,有点像 WordPress 的“轻量版 + 邮件订阅 + 会员付费支持”。


1. 注册 / 会员机制(Members)

Ghost 在 4.0 开始引入了 会员(Members)系统,这是 Ghost 的一大特色。

  • 会员注册

    • 读者可以在博客前端点击“Subscribe”按钮,通过邮件地址注册账号。
    • 注册后,Ghost 会发送邮件确认(类似 double opt-in)。
    • 账号数据存储在 Ghost 的数据库里,不依赖第三方。
  • 会员登录

    • 登录方式是邮箱验证(Magic Link),Ghost 默认不支持密码,而是通过邮件链接完成登录。
  • 会员管理

    • 在 Ghost Admin → Members,可以看到所有注册的用户,包括他们的订阅状态、付费情况等。
    • 你可以手动添加/导入会员。

2. 订阅机制(Newsletters & Tiers)

Ghost 的订阅功能和邮件系统是深度集成的。

  • Newsletter(通讯/邮件订阅)

    • 博主可以通过 Ghost 直接发送 newsletter(电子报)给所有订阅的会员。
    • 邮件发送由 Ghost 内置的 Mailgun(默认集成)或自定义 SMTP 提供支持。
  • 订阅分层(Tiers)

    • Ghost 6.x 开始支持多层订阅(类似 Patreon):

      • 免费用户
      • 付费 Tier(比如 5 美元/月,10 美元/月)
    • 每个 Tier 可以配置:

      • 可见内容范围(免费、会员专属、付费会员专属)
      • 是否包含 Newsletter
      • 是否有额外 perks(特权)
  • 付费机制

    • Ghost 内置 Stripe 集成,支持付费订阅。
    • 你可以在后台设置订阅计划、价格、周期(月/年)。
    • 收入直接进你的 Stripe 账户,Ghost 不抽成(除非用 Ghost(Pro) 托管)。

3. 评论(Comments)

Ghost 的评论功能比较特别:

  • 早期 Ghost 不提供评论,需要接入 DisqusCommento 或自己嵌入评论系统。

  • Ghost 5.9 开始,Ghost 内置了 评论系统

    • 只有注册会员可以发表评论(可以是免费会员,也可以付费会员)。
    • 评论与会员系统绑定,确保用户身份可追踪。
    • 管理员可以在后台审核、删除评论。
    • 前端评论 UI 是 Ghost 官方 Portal 里的一部分。

4. 搜索(Sodo Search)

Ghost 核心没有内建全文搜索,而是通过前端组件 Sodo Search 实现的:

  • 工作方式

    • 前端 JavaScript 组件(@tryghost/sodo-search),在页面加载时调用 Ghost Content API 拉取文章索引。
    • 搜索时在浏览器本地完成匹配(instant search)。
    • 不依赖第三方搜索服务,轻量快速。
  • 限制

    • 默认只能搜索公开文章,且搜索精度不如 Elasticsearch 之类的专业方案。
    • 没有后台设置开关(只能通过主题/配置禁用)。

5. Portal(会员入口)

Ghost 提供一个内置的 Portal 小组件,就是前端右下角常见的“订阅 / 登录 / 账户管理”按钮。

  • Portal 提供:

    • 注册 / 登录
    • 订阅计划选择
    • Newsletter 订阅管理
    • 评论入口
  • 可以通过后台 Settings → Membership → Signup portal 配置:

    • 是否显示按钮
    • 按钮位置(浮动、嵌入)
    • 样式主题(亮/暗色)

6. 总结:Ghost 的整体生态

功能 内置 / 插件 技术实现
注册 / 登录 内置 Email magic link 登录,不用密码
会员管理 内置 后台 Members 管理页
订阅 / 付费 内置(Stripe) Newsletter + Tiers,支持收费订阅
邮件群发 内置(Mailgun) Newsletter,支持自动发文章 / 手动群发
评论 内置(Ghost 5.9+) 会员绑定评论系统,Portal UI
搜索 外挂组件(Sodo Search) 前端 instant search via Content API
Portal 内置 注册/订阅/登录 UI,小组件,可配置可关闭

👉 这样看下来,Ghost 不仅仅是“博客”,更像是一个 出版 + 社区 + 邮件订阅 + 商业化 一体化工具。
如果你只想写博客,可以关掉 Members/Portal/Sodo-search,只用核心 Markdown + 主题功能;
如果你想做类似 Substack / Patreon,就能全盘用上。


要不要我帮你画一张 Ghost 功能模块图,把这些注册/订阅/评论/搜索的关系和依赖画清楚?

自从ChatGPT学会画画之后,就整天在回答最后问你要不要“帮你画一张……”,其实,它画画能力很菜,画得不如它说得好。