笔记
0工具
0此页用于记录用户反馈问题后的每一次改进
关于
“写笔记”支持四种格式——Word 文档、Excel 表格、Markdown、纯文本,起稿或二次编辑时都能随时切换,同一篇笔记想用哪种形态来记,都由你说了算。
md、txt、csv、json 这类纯文本则原样载入,不做多余加工。拿一张现成的表倒进来、改几笔、再导出去,等于白用一台免费的格式转换器。
要带走就在右上角点“下载”,可导出 PDF、Word、Markdown、Excel、TXT 等格式;列表卡片“⋯”菜单里,也有同样的下载入口。
在“工具”页点“+ 上传工具”即可发布:填好名称与链接,再用 Markdown 把使用方法写清楚——能解决什么问题、怎么装、怎么用,比堆介绍实在。
要分发安装包就一并上传压缩包(ZIP、RAR、7Z、TAR.GZ,最大 35MB),别人在详情页一键下载;只放链接不带附件也可以。
工具按大家的收藏热度排序,好用的自然会被顶上来。发布后可在详情页或卡片菜单里编辑、下架。
写笔记时勾上“隐藏”,这篇就只存在于你自己的账号里:不进列表、不进搜索、不上首页精选,也不会出现在任何公开的页面,链接发给别人同样打不开。
适合放密码、草稿、日记这类只给自己看的内容;想公开,去“发布”打开它,把“隐藏”的勾去掉再保存,之后编辑会默认保持原状态,不会悄悄变回公开。
不想公开、只想临时给人看:点“分享”生成一条带密码和有效期的链接,到期自动失效,你也能随时撤销。
你的内容会同时保存在多个副本上,系统定期做备份与完整性校验,再配合异地容灾机制:就算某台机器出问题,数据也不会丢,可以长期放心存放;特别重要的资料,仍建议你另外再留一份备份。
全站跑在容器化、模块化的现代架构上,更新、部署、回滚都很快,扩展性和稳定性都按长期运营的标准来设计(Built for reliability, designed to scale)。
这个网站最早只是一个人的笔记仓库,后来慢慢长成现在的知识中枢。设计上很克制——没有广告、没有追踪、没有推荐算法,只是干干净净地存放一些东西;既然做好了,就公开出来,万一有人用得上呢。
不做大而全,不做平台梦,保持简单、保持克制、保持好奇。所有内容都由用户贡献、由用户维护:不会突然冒出付费墙,不会在角落塞广告位,也不会把你的数据卖给第三方。
产品会持续迭代,站内日志页记录着每一次改动,改了什么都有迹可循;想了解这个站是怎么一步步走到今天的,翻翻日志就能看到来龙去脉。
如果在这里看到涉嫌违规的内容,点对应卡片右侧的“举报”按钮就能提交,我们会尽快核实处理;也谢谢你花一点时间,一起把这里维护干净。
趋势
SSH 上去中文全变方块问号,先查 locale
新开了一台 Debian 机器,SSH 登上去发现两个怪象。一个是跑 git log,提交信息里的中文全变成乱码;另一个是 ls 一个中文文件名目录,显示出来是一串问号。终端字体明明没问题,本地终端也是 UTF-8,那多半是服务端 locale 没配对。
先看当前 locale 是什么:
locale
输出里 LANG= 如果是 C 或者 POSIX,或者压根没设,非 ASCII 字符就按字节处理,终端看到 UTF-8 字节流但程序按 C locale 解释,中文自然显示成乱码或者问号。ls 显示 ? 是因为 C locale 下 ls 把不可打印字节替换成问号了,不是文件名的字节坏了。
再看系统装了哪些 locale:
locale -a
我这边输出里只有 C 和 C.UTF-8,没有 zh_CN.UTF-8 也没有 en_US.UTF-8。Debian 的 locale 生成是两步,编辑 /etc/locale.gen 把要的取消注释,然后跑 locale-gen:
# /etc/locale.gen 里去掉这行的注释
zh_CN.UTF-8 UTF-8
en_US.UTF-8 UTF-8
locale-gen
跑完再 locale -a 就能看到新生成的。然后设默认 locale,Debian 上用 update-locale 写 /etc/default/locale:
update-locale LANG=en_US.UTF-8
我这边没有中文显示需求,命令行界面要的是"能正确显示 UTF-8",en_US.UTF-8 就够了,关键在 UTF-8 三个字母,不在 zh 还是 en。重新登录一次,locale 输出里 LANG=en_US.UTF-8,git log 和 ls 的中文就都正常了。
还有一个常见场景容易跟上面混:终端中文全是方框/方块,但服务端 locale 是好的。这种多半是终端字体里没有 CJK 字形,或者 SSH 客户端自己不是 UTF-8 编码。Windows 自带的终端经常踩这个,把编码切到 UTF-8 或者换支持中文的字体就好,跟服务端没关系。
perl 那条经典的警告也顺手记一下。在 Debian/Ubuntu 上跑很多命令会先冒出来:
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LANG = "en_US.UTF-8"
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
这个场景跟上面不太一样:是你本机的 SSH 客户端把 LANG=en_US.UTF-8 这个环境变量通过 SSH 转发给了服务器,但服务器上根本没生成 en_US.UTF-8 这个 locale,perl 就报警告。修法一模一样,服务器上 locale-gen en_US.UTF-8 再 update-locale 就行。不想让客户端环境变量转发过去,也可以改 sshd 配置里的 AcceptEnv / 客户端 SendEnv,把 LC_* 那几行去掉,但一般没必要,把服务器 locale 补齐是正路。
排查中文乱码我现在的顺序是:先 echo $LANG 和 locale -a 看服务端,再用 file 文件名 确认文件本身的编码,再怀疑终端字体。文件内容乱码跟文件名乱码是两码事,文件内容那种要用 iconv 转码,比如从 GBK 转 UTF-8:
iconv -f GBK -t UTF-8 old.txt > new.txt
文件名编码错了用 convmv 批量转。老机器上从 Windows 传上来的文件经常是 GBK 的,跟 locale 没关系,别混在一起查。
还有一个隐蔽点:改了 /etc/default/locale 之后,已经在跑的进程不会自动拿到新 locale,要重新登录。用 tmux 或者 screen 挂着的老会话里 locale 还是旧的,容易误判成"改了没用",其实新开一个连接就好了。systemd 服务的话要 restart 服务才会重新读环境,cron 任务同理。
补一条环境变量优先级容易搞混的:locale 相关的变量从高到低大概是 LC_ALL 压过 LC_CTYPE、LC_TIME 这些单项,单项又压过 LANG。LC_ALL 是一票否决,设了它其它全失效。排查的时候三个一起看:
echo "LC_ALL=$LC_ALL LC_CTYPE=$LC_CTYPE LANG=$LANG"
有些程序不读 LANG 只读 LC_CTYPE,所以只设 LANG 没设 LC_CTYPE 时它们可能还是按 C 处理,中文照样乱。图省事可以 LC_ALL=C.UTF-8 一把梭,但不建议长期这么干,LC_ALL 设了会影响货币、排序、时间格式等一堆行为,可能让某些程序的输出格式变得很奇怪。
systemd service 跑起来的进程是另一条路:它不读 /etc/default/locale 那套,而是继承 systemd 启动进程时从 /etc/locale.conf(RHEL 系)或者 /etc/default/locale(Debian 系)读到的环境。想给某个服务单独指定 locale,在它的 unit 文件里加一行:
Environment=LANG=en_US.UTF-8
cron 任务同理,跑的时候环境变量被清得很干净,经常拿不到 LANG,脚本里要是依赖 UTF-8 或者有中文输出,在脚本开头自己 export LANG=C.UTF-8 最稳,别指望 crontab 帮你带过去。今天这条就记到这,回去再把服务器上的 cron 脚本统一补一遍 export。