{"id":17984394,"url":"https://github.com/adoyle-h/today-i-learned","last_synced_at":"2025-05-07T17:51:43.897Z","repository":{"id":149887902,"uuid":"53023934","full_name":"adoyle-h/Today-I-Learned","owner":"adoyle-h","description":"博观而约取，厚积而薄发。","archived":false,"fork":false,"pushed_at":"2025-04-27T21:03:28.000Z","size":1228,"stargazers_count":114,"open_issues_count":0,"forks_count":11,"subscribers_count":10,"default_branch":"master","last_synced_at":"2025-05-07T17:51:37.806Z","etag":null,"topics":["cheatsheet","learn","til","today-i-learned"],"latest_commit_sha":null,"homepage":"https://til.adoyle.me","language":"JavaScript","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/adoyle-h.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"security/do-not-bind-0.0.0.0.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"patreon":"adoyle_h","liberapay":"adoyle","custom":["https://media.githubusercontent.com/media/adoyle-h/_imgs/master/sponsor.png"]}},"created_at":"2016-03-03T05:37:24.000Z","updated_at":"2025-04-27T21:03:32.000Z","dependencies_parsed_at":"2024-04-25T23:29:22.952Z","dependency_job_id":"bf9ce199-6f1d-4fd9-b311-5fc38cf96175","html_url":"https://github.com/adoyle-h/Today-I-Learned","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adoyle-h%2FToday-I-Learned","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adoyle-h%2FToday-I-Learned/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adoyle-h%2FToday-I-Learned/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adoyle-h%2FToday-I-Learned/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/adoyle-h","download_url":"https://codeload.github.com/adoyle-h/Today-I-Learned/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252931391,"owners_count":21827104,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cheatsheet","learn","til","today-i-learned"],"created_at":"2024-10-29T18:21:10.788Z","updated_at":"2025-05-07T17:51:43.875Z","avatar_url":"https://github.com/adoyle-h.png","language":"JavaScript","funding_links":["https://patreon.com/adoyle_h","https://liberapay.com/adoyle","https://media.githubusercontent.com/media/adoyle-h/_imgs/master/sponsor.png"],"categories":[],"sub_categories":[],"readme":"# 今天我学了什么 (Today I Learned)\n\n\u003e 博观而约取，厚积而薄发。\n\nADoyle 的碎片化知识笔记。https://til.adoyle.me\n\n## 订阅\n\n推荐订阅 [Weekly Report](https://github.com/adoyle-h/Today-I-Learned/discussions/categories/weekly-report)。每周一获取每周总结。\n订阅方法：点击 [Github](https://github.com/adoyle-h/Today-I-Learned) 右上角的 watch 按钮。\n\n## 提醒\n\n1. 在网页端，建议搜索英文用最上方的搜索框，体验比较好。搜索框不支持中文。建议搜中文用浏览器自带的搜索功能。\n2. 文章不保证正确，请自己判断对错。如果你有不同意见，欢迎到 [Discussions](https://github.com/adoyle-h/Today-I-Learned/discussions) 提出意见。\n\n## 内容约定\n\n所有文件一旦创建就不会改变路径，以保证永久链接。\n文章内容可能随时会改动。\n\n部分外部链接会引用 [archive.today](https://archive.today/) 以及 [archive.org](https://web.archive.org/) 的链接，以保证永久链接。永久链接需要挂代理浏览。\n\n部分外部链接使用原链接的考虑因素有：\n\n- 原文内容会更新，比如 wiki 类型的文章。\n- 原链接很稳定，即使变动也会有重定向到最新的内容链接。\n- Stack Exchange 其下网站都用原链接。\n- 指向 Github Issue/Disussion/PR/Code 的都用原链接。\n- RFC 文档都使用 https://www.rfc-editor.org 的链接。\n\n\n## 反馈问题或建议\n\n本项目不接受 Pull Request。如果你有什么好的想法，或者改进的建议，请使用 [Discussions](https://github.com/adoyle-h/Today-I-Learned/discussions) 与我探讨。\n\n**建议 Star 本项目。不要 Fork，这没有意义。**\n\n\n## 版权声明\n\nCopyright 2016-2025 ADoyle (adoyle.h@gmail.com). Some Rights Reserved.\nThe project is licensed under the **BSD 3-clause License**.\n\nRead the [LICENSE](./LICENSE) file for the specific language governing permissions and limitations under the License.\n\nRead the [NOTICE](./NOTICE) file distributed with this work for additional information regarding copyright ownership.\n\n\n## TOC\n\n\u003c!-- toc --\u003e\n\u003c!-- \u003cdetails close\u003e --\u003e\n\u003c!-- \u003csummary\u003e点击展开/折叠目录\u003c/summary\u003e --\u003e\n\n- [算法](#算法)\n- [Android](#android)\n- [C](#c)\n- [计算机](#计算机)\n- [设计](#设计)\n- [Docker](#docker)\n- [Elixir](#elixir)\n- [嵌入式](#嵌入式)\n- [函数式编程](#函数式编程)\n- [前端](#前端)\n  - [React](#react)\n- [Git](#git)\n- [Github](#github)\n- [Go](#go)\n- [硬件](#硬件)\n- [Java](#java)\n- [Javascript](#javascript)\n- [K8S](#k8s)\n- [语言设计](#语言设计)\n- [Linux](#linux)\n  - [Debian](#debian)\n  - [Systemd](#systemd)\n- [Language Server Protocol (LSP)](#language-server-protocol-(lsp))\n- [Lua](#lua)\n- [Mac](#mac)\n- [数学](#数学)\n- [机器学习](#机器学习)\n- [网络](#网络)\n- [Nix](#nix)\n- [Nodejs](#nodejs)\n- [运维](#运维)\n- [其他](#其他)\n- [哲学](#哲学)\n- [箴言录](#箴言录)\n- [Python](#python)\n- [Racket](#racket)\n- [Redis](#redis)\n- [Ruby](#ruby)\n- [安全攻防](#安全攻防)\n- [Shell](#shell)\n- [Startup](#startup)\n- [存储](#存储)\n  - [Etcd](#etcd)\n  - [Mongo](#mongo)\n  - [Mysql](#mysql)\n  - [Postgres](#postgres)\n- [思考](#思考)\n- [Typescript](#typescript)\n- [Vim](#vim)\n- [虚拟机](#虚拟机)\n- [Web](#web)\n- [Windows](#windows)\n\n\u003c!-- \u003c/details\u003e --\u003e\n\u003c!-- tocstop --\u003e\n\n## 算法\n\n- [Raft 算法](algorithm/raft.md)\n\n[`⬆ 返回目录`](#toc)\n\n## Android\n\n- [ADB](android/adb.md)\n- [boot.img](android/bootimg.md)\n- [Android Root](android/root.md)\n- [Termux](android/termux.md)\n\n[`⬆ 返回目录`](#toc)\n\n## C\n\n- [在 MacOS 中找不到 C 程序的标准头文件](c/std-library-not-found-in-macos.md)\n\n[`⬆ 返回目录`](#toc)\n\n## 计算机\n\n记录与计算机硬件相关的知识。\n\n- [内存管理单元 MMU](computer/MMU.md)\n- [RDMA](computer/RDMA.md)\n- [单指令流多数据流 (SIMD)](computer/SIMD.md)\n- [TLB](computer/TLB.md)\n- [CPU 伪共享 (CPU Cache Line False Sharing)](computer/cpu-cache-line-false-sharing.md)\n- [CPU 缓存](computer/cpu-cache.md)\n- [CPU](computer/cpu.md)\n- [风扇](computer/fan.md)\n- [内存屏障](computer/memory-barrier.md)\n- [我的硬盘分区规划](computer/my-disk-partitions.md)\n- [随机存取存储器 (RAM)](computer/ram.md)\n\n[`⬆ 返回目录`](#toc)\n\n## 设计\n\n记录平面设计的相关知识\n\n- [8 点栅格](design/8-point-grid.md)\n- [Illuminant D65](design/D65.md)\n- [CIE 色彩空间](design/cie-color-space.md)\n- [色域](design/color-gamut.md)\n- [色彩模式](design/color-mode.md)\n- [色彩空间](design/color-space.md)\n- [色彩理论](design/color-theory.md)\n- [UI 的加载状态](design/loading-status-of-ui.md)\n- [OpenType](design/opentype.md)\n- [使用 sketchtool 操作 sketch 文档：diff 以及其他功能](design/sketchtool-for-diff.md)\n- [Sketch 的文本样式与颜色](design/text-style-with-colors-in-sketch.md)\n- [排版](design/topography.md)\n\n[`⬆ 返回目录`](#toc)\n\n## Docker\n\n- [苹果芯片的 Mac 电脑构建 x86 镜像](docker/build-x86-image-with-apple-silicon.md)\n- [ContainerD OverlayFS](docker/containerd-overlayfs.md)\n- [Containerd](docker/containerd.md)\n- [客户端连接多个 docker daemon](docker/context.md)\n- [容器里的 Core Dump](docker/core-dump-in-container.md)\n- [容器里的 CPU 信息](docker/cpu-in-container.md)\n- [device or resource busy](docker/device-or-resource-busy.md)\n- [docker-compose 启动容器顺序](docker/docker-compose-startup-order.md)\n- [Docker 容器与 Cgroup](docker/docker-container-and-cgroup.md)\n- [docker desktop](docker/docker-desktop.md)\n- [进入 docker for mac 的虚拟机](docker/docker-for-mac-tty.md)\n- [docker for mac](docker/docker-for-mac.md)\n- [学习 Docker](docker/docker-learning.md)\n- [Docker OverlayFS](docker/docker-overlayfs.md)\n- [Docker 的坑](docker/docker-pitfalls.md)\n- [docker 代理](docker/docker-proxy.md)\n- [Docker Run With Namespace](docker/docker-run-with-namespace.md)\n- [Docker Tag/Id/Digest](docker/docker-tag-id-digests.md)\n- [docker 小技巧](docker/docker-tricks.md)\n- [Dockerfile](docker/dockerfile.md)\n- [查找 Overlay ID 与哪个容器相关](docker/find-which-container-includes-overlay.md)\n- [修正 alpine 镜像的时区问题](docker/fix-timezone-in-alpine-image.md)\n- [修正 Docker for mac 时区问题](docker/fix-timezone-in-docker-for-mac.md)\n- [host.docker.internal](docker/host-docker-internal.md)\n- [Docker for Mac 中磁盘文件占用过大](docker/large-disk-space-usage-in-docker-for-mac.md)\n- [docker macvlan](docker/macvlan.md)\n- [构建多架构镜像](docker/multi-arch-build.md)\n- [docker 多阶段构建 (Multi-Stage Build)](docker/multi-stage-build.md)\n- [nerdctl 容器](docker/nerdctl-container.md)\n- [nerdctl 网络](docker/nerdctl-network.md)\n- [nerdctl](docker/nerdctl.md)\n- [rootless docker 网络](docker/networks-in-rootless-docker.md)\n- [ping: Operation not permitted](docker/ping-operation-not-permmitted.md)\n- [Podman netns](docker/podman-netns.md)\n- [Podman](docker/podman.md)\n- [rootless containerd](docker/rootless-containerd.md)\n- [rootless 问题](docker/rootless-problems.md)\n- [在后台运行 docker 容器且不会自动退出](docker/run-docker-in-background.md)\n- [docker security_opt](docker/security-opt.md)\n- [Docker 安全](docker/security.md)\n- [在 rootless 容器中，用非 root 用户无法操作 volume 里的文件](docker/volume-in-non-root-rootless.md)\n- [volume 单个文件到容器](docker/volume-single-file.md)\n- [volume](docker/volume.md)\n- [在 rootless podman 获取不到真实远端 ip](docker/wrong-remote-ip-in-rootless-podman.md)\n\n[`⬆ 返回目录`](#toc)\n\n## Elixir\n\n- [tuple 与 list 的选择](elixir/choosing-between-tuple-and-list.md)\n- [尾递归优化](elixir/tail-call-optimization.md)\n\n[`⬆ 返回目录`](#toc)\n\n## 嵌入式\n\n- [zephyr与 esp32](embedded/zephyr-esp32.md)\n\n[`⬆ 返回目录`](#toc)\n\n## 函数式编程\n\n- [Cache-Control](fp/cache-control.md)\n- [chrome 开发者工具观察响应 Failed to load response data](fp/chrome-dev-tool-failed-to-inspect-response.md)\n- [重定向 window.location 是异步的](fp/redirect-location-is-async.md)\n- [什么是 Monad](fp/what-is-monad.md)\n\n[`⬆ 返回目录`](#toc)\n\n## 前端\n\n- [SSR (Server Side Render)](front-end/SSR.md)\n- [关于 webpack 2](front-end/all-about-webpack-2.md)\n- [`\u003cscript async\u003e` 与 `\u003cscript defer\u003e`](front-end/async-defer-script-dom.md)\n- [圆角的玩法](front-end/border-radius-tricks.md)\n- [Chrome 浏览器 DNS 解析](front-end/chrome-dns-resolver.md)\n- [Chrome Stalled 请求](front-end/chrome-stalled-requests.md)\n- [Safari 浏览器的类继承 Bug](front-end/class-extend-bug-in-safari.md)\n- [代码分离](front-end/code-split.md)\n- [颜色对比度](front-end/color-contrast.md)\n- [编译前端 JS 库](front-end/compile-js-library.md)\n- [contentEditable](front-end/contentEditable.md)\n- [CORS](front-end/cors.md)\n- [css-modules vs css-in-js](front-end/css-modules-vs-css-in-js.md)\n- [CSS Selector list invalidation](front-end/css-selector-list-invalidation.md)\n- [开发一个油猴 (Tampermonkey) 脚本](front-end/develop-a-tampermonkey-script.md)\n- [前端类库打包的注意点](front-end/fe-library-bundle.md)\n- [XMLHttpRequest 的继承者：Fetch](front-end/fetch.md)\n- [浮动侧边栏](front-end/float-sidebar.md)\n- [Functional CSS](front-end/functional-css.md)\n- [307 Internal Redirect 与浏览器的 HSTS 功能](front-end/hsts-307.md)\n- [HTTP 缓存机制](front-end/http-cache.md)\n- [Input Method Editor (IME)](front-end/input-method-editor.md)\n- [学习 Chrome DevTools](front-end/learning-chrome-dev-tools.md)\n- [前端工程的模块控制反转](front-end/module-ioc-in-web-application.md)\n- [redux 入门](front-end/redux-ABC.md)\n- [Rollup Dynamic Import](front-end/rollup-dynamic-import.md)\n- [script 和 link 标签的事件属性](front-end/script-link-event.md)\n- [弹性滚动](front-end/scroll-bouncing.md)\n- [Mac 浏览器中显示滚动条](front-end/show-scroball-in-mac.md)\n- [状态机与状态图](front-end/state-machine-and-statecharts.md)\n- [媒体查询的断点设置](front-end/the-breakpoint-in-media-query.md)\n- [使用 browserify 和 uglifyjs](front-end/using-browserify-and-uglifyjs.md)\n- [wasm](front-end/wasm.md)\n- [Webkit 浏览器渲染效率](front-end/webkit-render-performance.md)\n- [webpack 配置为数组](front-end/webpack-config-is-an-array.md)\n- [webpack 配置](front-end/webpack-config.md)\n- [Webpack Dynamic Import](front-end/webpack-dynamic-import.md)\n- [奇怪的 parse html](front-end/weird-parse-html.md)\n- [富文本编辑器选型](front-end/wysiwyg-editor.md)\n- [z-index](front-end/z-index.md)\n\n[`⬆ 返回目录`](#toc)\n\n### React\n\n- [使用 jquery 改变 React 的 input DOM](front-end/react/change-react-input-dom-via-jquery.md)\n- [组件生命周期](front-end/react/component-lifecycle.md)\n- [Compound Components](front-end/react/compound-components.md)\n- [不要在 render 里直接定义 ref callback](front-end/react/dont-define-ref-callback-in-render.md)\n- [ref callback 何时触发？](front-end/react/when-ref-callback-get-invoked.md)\n\n[`⬆ 返回目录`](#toc)\n\n## Git\n\n- [用 shell 脚本查询 git commit hash](git/a-shell-script-to-get-current-commit-hash.md)\n- [Connection closed by UNKNOWN port 65535](git/connection-closed-by-unknown-port-65535.md)\n- [Git Diff](git/diff.md)\n- [Git 学习资料](git/git-books.md)\n- [git ssh 代理](git/git-ssh-proxy.md)\n- [git 小技巧](git/git-tricks.md)\n- [git credentials](git/gitcredentials.md)\n- [gitignore 与 gitkeep](git/gitignore-with-gitkeep.md)\n- [grafted commit](git/grafted-commit.md)\n- [git http clone](git/http-clone.md)\n- [忽略 Git submodule](git/ignore-git-submodule.md)\n- [--ours vs --theirs](git/ours-vs-theirs.md)\n- [git proxy](git/proxy.md)\n- [指定分支与另一个远端仓库绑定](git/push-branch-for-another-remote.md)\n- [git shallow clone](git/shallow-clone.md)\n- [Git sign-off](git/sign-off.md)\n\n[`⬆ 返回目录`](#toc)\n\n## Github\n\n- [Github Markdown 中的锚点引用](github/anchor-in-github-markdown.md)\n- [构建 github page](github/build-page.md)\n- [Github 下载最新 release 文件](github/download-latest-release-file.md)\n- [github 中 markdown 折叠文本](github/fold-text-in-github.md)\n- [如何在 github 项目里搜索代码](github/how-to-use-github-to-browse-codes.md)\n- [在 Github Markdown 中如何填写图片的链接](github/relative-link-in-github-markdown.md)\n- [Github Template (模板)](github/template.md)\n\n[`⬆ 返回目录`](#toc)\n\n## Go\n\n- [go 交叉编译安卓程序](go/cgo-build-for-android.md)\n- [Golang GC](go/gc.md)\n- [GO 汇编](go/go-assembler.md)\n- [go build](go/go-build.md)\n- [go doc](go/go-doc.md)\n- [go generate](go/go-generate.md)\n- [Go Module](go/go-module.md)\n- [go tool](go/go-tool.md)\n- [Golang 学习](go/golang-learning.md)\n- [gopls](go/gopls.md)\n- [Gorutine](go/gorutine.md)\n- [在 MacOS 上使用 gvm install](go/gvm-install-in-macos.md)\n- [interface 与 nil](go/interface-vs-nil.md)\n- [//go:linkname](go/linkname.md)\n- [Go 语言的几大坑](go/pitfalls.md)\n\n[`⬆ 返回目录`](#toc)\n\n## 硬件\n\n- [微处理器 MCU](hardware/MCU.md)\n- [Over The Air (OTA)](hardware/OTA.md)\n- [RFID](hardware/RFID.md)\n- [EMMC](hardware/emmc.md)\n- [固件 (Firmware)](hardware/firmware.md)\n- [Home Assistant](hardware/home-assistant.md)\n- [红外测温仪](hardware/ir-thermometer.md)\n- [ET X08 鼠标](hardware/mouse-et-x08.md)\n- [网件 R6900 刷梅林固件](hardware/netgear-R6900-asuswrt-merlin.md)\n- [网络交换机](hardware/network-switch.md)\n- [无线电波 (Radio Waves)](hardware/radio-waves.md)\n- [USB](hardware/usb.md)\n\n[`⬆ 返回目录`](#toc)\n\n## Java\n\n- [Java GC](java/gc.md)\n\n[`⬆ 返回目录`](#toc)\n\n## Javascript\n\n- [babel 小技巧](javascript/babel-tricks.md)\n- [JavaScript 中的相等性判断](javascript/equality-comparisons.md)\n- [为什么 eval('{}') 返回 undefined ？](javascript/eval-empty-bracket.md)\n- [JS 的 fiber 技术](javascript/fiber-in-js.md)\n- [lodash 陷阱](javascript/lodash-trips.md)\n- [Javascript Proxy](javascript/proxy.md)\n- [JS 保留字](javascript/reserved-words.md)\n- [尾递归优化](javascript/tail-call-optimization.md)\n- [Promise 的坑](javascript/trap-of-promise.md)\n- [使用 Promise 的技巧](javascript/trick-of-promise.md)\n- [JS 编程技巧](javascript/tricks-of-js.md)\n\n[`⬆ 返回目录`](#toc)\n\n## K8S\n\n- [OCI、CNI](k8s/OCI-spec.md)\n- [Cilium](k8s/cilium.md)\n- [调试 CrashLoopBackOff 状态的 Pod](k8s/debug-CrashLoopBackOff-pod.md)\n- [Helm](k8s/helm.md)\n- [Pod containerStatuses 的镜像版本与 Pod 指定版本不同](k8s/image-version-different-from-containerStatuses.md)\n- [容器里装 K3S](k8s/k3s-in-container.md)\n- [K8S CSI 开发](k8s/k8s-csi.md)\n- [K8S Dashboard](k8s/k8s-dashboard.md)\n- [K8S 部署踩坑记](k8s/k8s-deployment.md)\n- [K8S 垃圾回收 (GC)](k8s/k8s-gc.md)\n- [K8S 学习](k8s/k8s-learning.md)\n- [K8S 资源规划](k8s/k8s-resources-management.md)\n- [K8S Resource Spec](k8s/k8s_resource_spec.md)\n- [kubectl 学习](k8s/kubectl.md)\n- [Kubespray](k8s/kubespray.md)\n- [kustomize](k8s/kustomize.md)\n- [重启 Pod 中的容器](k8s/restart-container-in-pod.md)\n- [configmap 和 secret 的滚动更新](k8s/rolling-update-of-configmap-and-secret.md)\n- [多个 Pod 不重复部署在同一个节点上](k8s/two-pods-not-in-same-node.md)\n\n[`⬆ 返回目录`](#toc)\n\n## 语言设计\n\n记录编程语言的内部设计与思想\n\n- [CFLAGS](language/CFLAGS.md)\n- [Actor 并发模型](language/actor.md)\n- [编译器](language/compiler.md)\n- [协程 (Coroutine)](language/coroutine.md)\n- [CSP 并发模型](language/csp.md)\n- [Debuger](language/debuger.md)\n- [垃圾回收 Garbage Collection (GC)](language/gc.md)\n- [栈帧](language/stack-frame.md)\n\n[`⬆ 返回目录`](#toc)\n\n## Linux\n\n记录 Linux 系统设计、系统命令，UNIX/Linux 命令和软件等相关知识\n\n- [XDG 基础目录标准](linux/XDG-base-directory-spec.md)\n- [ab 与 wrk 比较](linux/ab-vs-wrk.md)\n- [ABI](linux/abi.md)\n- [用户线程，内核线程，CPU 超线程技术](linux/about-multi-thread.md)\n- [用户增加用户组](linux/add-group-to-user.md)\n- [adduser 与 useradd](linux/adduser-and-useradd.md)\n- [硬盘电源管理](linux/advanced-power-management.md)\n- [ag 和 rg](linux/ag-and-rg.md)\n- [Alfred 找不到文件](linux/alfred-cannot-find-files.md)\n- [alpine 的 /sbin/init](linux/alpine-sbin-init.md)\n- [Alpine Linux](linux/alpine.md)\n- [anon_inode](linux/anon_inode.md)\n- [ansible 部署到 centos7 时，不能找到 service](linux/ansible-deploy-fault-with-centos7-and-service.md)\n- [apt](linux/apt.md)\n- [arch linux](linux/arch-linux.md)\n- [Armbian 关闭 swap](linux/armbian-turn-swap-off.md)\n- [Armbian](linux/armbian.md)\n- [BIOS](linux/bios.md)\n- [Block Layer](linux/block-layer.md)\n- [BootLoader](linux/boot-loader.md)\n- [btrfs](linux/btrfs.md)\n- [内存的 buffer 和 cache](linux/buffer-and-cache-in-memory.md)\n- [在容器中构建 Package](linux/build-package-in-container.md)\n- [Busybox](linux/busybox.md)\n- [CFS (Completely Fair Scheduler)](linux/cfs.md)\n- [更改默认 shell](linux/change-default-shell.md)\n- [sudo 找不到可执行文件](linux/change-path-for-sudo.md)\n- [clamav](linux/clamav.md)\n- [命令格式标准](linux/command-arguments-syntax-standard.md)\n- [linux 命令被 hash 缓存](linux/command-be-hashed.md)\n- [compgen](linux/compgen.md)\n- [configfs](linux/configfs.md)\n- [连接 tty](linux/connect-tty.md)\n- [conntrack](linux/conntrack.md)\n- [上下文切换](linux/context-switch.md)\n- [CPU](linux/cpu.md)\n- [判断文件编码](linux/detect-encoding-of-file.md)\n- [Device Mapper](linux/device-mapper.md)\n- [diff 与 patch](linux/diff-and-patch.md)\n- [shutdown, poweroff, halt 的不同](linux/differences-between-shutdown-poweroff-halt.md)\n- [硬盘分区](linux/disk-partition.md)\n- [dmesg](linux/dmesg.md)\n- [dnsmasq](linux/dnsmasq.md)\n- [dpkg](linux/dpkg.md)\n- [du](linux/du.md)\n- [eBPF 与 XDP](linux/ebpf-and-xdp.md)\n- [编辑二进制文件](linux/edit-binary-file.md)\n- [ELF 文件](linux/elf.md)\n- [终端开启真彩色 (true color)](linux/enable-true-color-in-terminal.md)\n- [用环境变量替换文本内容 envsubst](linux/envsubst.md)\n- [exfat](linux/exfat.md)\n- [ExtFS (Extended File System)](linux/ext-fs.md)\n- [fakeroot](linux/fakeroot.md)\n- [快速删除文件](linux/fast-delete-files.md)\n- [快速创建大文件](linux/fast-generate-large-file.md)\n- [快速删文件](linux/fast-remove-files.md)\n- [文件描述符，open file table 与 inode](linux/fd-oft-inode.md)\n- [file 命令](linux/file-command.md)\n- [CentOS 与 Debian 文件上的差异](linux/file-differences-between-centos-and-debian.md)\n- [Linux 文件系统](linux/file-system.md)\n- [文件名大小写问题](linux/filename-case-problem.md)\n- [文件路径](linux/files.md)\n- [查找 USB 串口设备对应的是哪个 /dev tty 文件](linux/find-dev-tty-for-serial-usb.md)\n- [find -print0 的坑](linux/find-print0-pitfall.md)\n- [ftrace](linux/ftrace.md)\n- [gpg-agent](linux/gpg-agent.md)\n- [GPG 与 Keybase](linux/gpg-and-keybase.md)\n- [gpg](linux/gpg.md)\n- [grep](linux/grep.md)\n- [GNU GRUB](linux/grub.md)\n- [hash 命令](linux/hash-command.md)\n- [Here Strings 与 Here Documents](linux/here-strings-and-here-documents.md)\n- [隐藏进程](linux/hidden-process.md)\n- [Hostname in Linux](linux/hostname.md)\n- [iconv](linux/iconv.md)\n- [查看进程的环境变量](linux/inspect-process-environment.md)\n- [安装 Linux 系统](linux/install-linux-system.md)\n- [网络接口名称的 @](linux/interface-name-with-@.md)\n- [中断](linux/interrupt.md)\n- [调用原生 shell 命令](linux/invoke-origin-shell-command-with-backslash.md)\n- [IO、select、epoll](linux/io-select-epoll.md)\n- [iproute2 与 ifconfig 命令](linux/iproute2-vs-ifconfig.md)\n- [iptables 与 nftables](linux/iptables.md)\n- [在 arch linux 中升级 curl 碰到的问题](linux/issue-with-upgrade-curl-on-arch-linux.md)\n- [kconfig](linux/kconfig.md)\n- [Linux 内核模块](linux/kernel-module.md)\n- [Linux 内核](linux/kernel.md)\n- [kswapd0](linux/kswapd0.md)\n- [libc](linux/libc.md)\n- [Linux 系统日志](linux/linux-sys-log.md)\n- [修改 Linux 系统语言 (locale)](linux/locale.md)\n- [Linux 日志文件](linux/log-files.md)\n- [lsof 与 fuser](linux/lsof-and-fuser.md)\n- [LVM (Logical Volume Manager)](linux/lvm.md)\n- [制作 deb 包](linux/make-deb-package.md)\n- [man 命令](linux/man.md)\n- [mdadm](linux/mdadm.md)\n- [命令行中的乱码](linux/messy-codes-in-console.md)\n- [mkisofs](linux/mkisofs.md)\n- [创建临时文件的命令](linux/mktemp.md)\n- [mount](linux/mount.md)\n- [musl libc](linux/musl-libc.md)\n- [Netfilter](linux/netfilter.md)\n- [netns](linux/netns.md)\n- [netstat 与 ss](linux/netstat-and-ss.md)\n- [网络接口配置 (ifcfg)](linux/network-interface-configuration.md)\n- [网络配置工具](linux/network-manage-tools.md)\n- [硬盘空间占满问题](linux/no-space-left-on-device.md)\n- [nsenter](linux/nsenter.md)\n- [NTP 时间同步](linux/ntp.md)\n- [OpenRC](linux/openrc.md)\n- [OverlayFS](linux/overylay-fs.md)\n- [PAM](linux/pam.md)\n- [perf 命令](linux/perf.md)\n- [不需要 root 权限执行 ping](linux/ping-without-sudo.md)\n- [管道重定向](linux/pipe-redirect.md)\n- [PostmarketOS](linux/postmarketos.md)\n- [打印环境变量](linux/printenv.md)\n- [进程中断](linux/proc-interrupts.md)\n- [进程内存](linux/process-memory.md)\n- [进程亲和性 (Processor Affinity)](linux/processor-affinity.md)\n- [命令行中提示用户 Yes/No](linux/read-prompt.md)\n- [rm 命令](linux/rm.md)\n- [旋转终端屏幕](linux/rotate-console-screen.md)\n- [rsync 与 scp](linux/rsync-and-scp.md)\n- [rsyslog](linux/rsyslog.md)\n- [用别的用户运行命令](linux/run-command-with-different-user.md)\n- [runit](linux/runit.md)\n- [SATA 热拔插](linux/sata-hotplug.md)\n- [scp: Connection closed](linux/scp-failure.md)\n- [程序的退出码 (Exit Code)](linux/script-exit-code.md)\n- [sed](linux/sed.md)\n- [在 alpine 中找不到 setup-apkcache 等 setup-* 命令](linux/setup-scripts-in-alpine.md)\n- [shebang](linux/shebang.md)\n- [共享内存](linux/shm.md)\n- [拆分与合并文件](linux/split-and-merge-file.md)\n- [SSH](linux/ssh.md)\n- [sshd -R 参数](linux/sshd--R.md)\n- [strace](linux/strace.md)\n- [sudo and su](linux/sudo-and-su.md)\n- [sudoer](linux/sudoer.md)\n- [sysctl](linux/sysctl.md)\n- [syslinux](linux/syslinux.md)\n- [Linux 系统调用](linux/system-call.md)\n- [tailf](linux/tailf.md)\n- [tar](linux/tar.md)\n- [基于内存的虚拟文件系统 tmpfs/ramfs/RamDisk](linux/temporary-fs-in-memory.md)\n- [Terminfo](linux/terminfo.md)\n- [Linux Thermal 框架](linux/thermal-framework.md)\n- [线程与进程](linux/thread-and-process.md)\n- [time 命令](linux/time.md)\n- [UFW](linux/ufw.md)\n- [UNIX Domain Socket](linux/unix-domain-socket.md)\n- [unlink 是删除任何文件](linux/unlink.md)\n- [unshare 命令](linux/unshare.md)\n- [用户登录与 passwd](linux/user-login-and-passwd.md)\n- [/usr/bin/env](linux/usr-bin-env.md)\n- [虚拟文件系统 (VFS, Virtual File System)](linux/virtual-file-system.md)\n- [虚拟内存](linux/virtual-memory.md)\n- [奇怪的 ESC](linux/weird-esc-key.md)\n- [Welcome Message Banner](linux/welcome-message-banner.md)\n- [监听 0.0.0.0 与 127.0.0.1 的区别](linux/whats-the-difference-between-ip-address-0-0-0-0-and-127-0-0-1.md)\n- [为什么创建 Daemon 进程要 Fork 两次？](linux/why-fork-twice-when-create-daemon-process.md)\n- [XDP](linux/xdp.md)\n- [ZFS](linux/zfs.md)\n- [Zsh 的坑](linux/zsh-pitfalls.md)\n\n[`⬆ 返回目录`](#toc)\n\n### Debian\n\n- [升级 debian 系统](linux/debian/upgrade-system.md)\n\n[`⬆ 返回目录`](#toc)\n\n### Systemd\n\n- [systemd-mount](linux/systemd/mount.md)\n- [systemd-network](linux/systemd/network.md)\n- [networking.service](linux/systemd/networking-service.md)\n- [systemd-path](linux/systemd/path.md)\n- [systemd-resolved](linux/systemd/resolved.md)\n- [systemd](linux/systemd/systemd.md)\n- [systemd-timesyncd](linux/systemd/timesyncd.md)\n\n[`⬆ 返回目录`](#toc)\n\n## Language Server Protocol (LSP)\n\n- https://microsoft.github.io/language-server-protocol/\n- https://langserver.org/\n\n- [YAML Language Server](lsp/yaml-language-server.md)\n\n[`⬆ 返回目录`](#toc)\n\n## Lua\n\n- [lua 没有 continue 关键字](lua/continue.md)\n- [lua 错误处理](lua/error.md)\n- [lua 正则](lua/regex.md)\n\n[`⬆ 返回目录`](#toc)\n\n## Mac\n\n- [MacOS 通过命令行修改 IP 地址](mac/change-ip-address-via-cmd.md)\n- [Mac 的 DNS 问题](mac/dns-troubles-in-mac.md)\n- [多网卡在 Mac 系统的问题](mac/double-network-card-problems-in-mac.md)\n- [Mac 下按住键盘不能输出重复的字符](mac/hold-down-key-cannot-keep-print-character.md)\n- [Homebrew](mac/homebrew.md)\n- [MacOS log](mac/log.md)\n- [Mac 快捷键](mac/mac-shortcuts.md)\n- [用命令触发系统通知](mac/notification-with-command.md)\n- [Mac 自启动配置 plist](mac/plist.md)\n- [Mac 删除允许在后台运行的设置](mac/remove-allow-in-background.md)\n- [Finder 显示隐藏文件](mac/show-hidden-files-in-finder.md)\n- [Tab 键不能切换弹出框的选中焦点](mac/tab-not-always-work.md)\n- [关闭 Mac 的 Gatekeeper](mac/turn-off-gatekeeper.md)\n- [Mac 微信备份显示不在同一网络](mac/weixin-backup-failed.md)\n- [xcode 重新安装](mac/xcode.md)\n\n[`⬆ 返回目录`](#toc)\n\n## 数学\n\n数学，不仅仅是算法\n\n- [豪斯多夫维数](math/hausdorff-besicovitch-dimension.md)\n- [进制表示法](math/positional-notation.md)\n- [空间填充曲线 (Space-Filling Curve)](math/space-filling-curve.md)\n\n[`⬆ 返回目录`](#toc)\n\n## 机器学习\n\n- [Stable Diffusion](ml/stable-diffusion.md)\n\n[`⬆ 返回目录`](#toc)\n\n## 网络\n\n记录网络相关知识\n\n- [ARP](network/arp.md)\n- [自治系统 (Autonomous System)](network/autonomous-system.md)\n- [组播地址](network/boardcast-ip.md)\n- [网桥 (Bridge)](network/bridge.md)\n- [DHCP](network/dhcp.md)\n- [DNS](network/dns.md)\n- [DNS SRV](network/dns_srv.md)\n- [DoH 与 DoT](network/doh-and-dot.md)\n- [Envoy](network/envoy.md)\n- [网关 gateway](network/gateway.md)\n- [HTTP Request/Response 网络包](network/http-request-and-response-package.md)\n- [link](network/link.md)\n- [MQTT](network/mqtt.md)\n- [NAT](network/nat.md)\n- [网络风暴 (Network Storm)](network/network-storm.md)\n- [pfctl](network/pfctl.md)\n- [私有网段](network/private-ip.md)\n- [Samba](network/samba.md)\n- [SDN](network/sdn.md)\n- [TCP Buffer 大小](network/tcp-buffer-size.md)\n- [TUN/TAP](network/tun-tap.md)\n- [虚拟网络设备](network/virtual-interface.md)\n- [虚拟 IP](network/virtual-ip.md)\n- [虚拟网络设备](network/virtual-network-devices.md)\n- [vlan](network/vlan.md)\n- [vxlan](network/vxlan.md)\n- [Wake On Lan (WOL)](network/wake-on-lan.md)\n- [zigbee](network/zigbee.md)\n\n[`⬆ 返回目录`](#toc)\n\n## Nix\n\n- [nix flake](nix/flake.md)\n- [学习 Nix](nix/learning.md)\n- [nixos installer](nix/nixos-installer.md)\n- [nixpkgs](nix/nixpkgs.md)\n\n[`⬆ 返回目录`](#toc)\n\n## Nodejs\n\n- [MaxListenersExceededWarning](nodejs/MaxListenersExceededWarning.md)\n- [命令行的工具和类库](nodejs/cli-libraries-and-tools.md)\n- [不要对函数参数重新赋值](nodejs/don-t-reassign-function-arguments.md)\n- [EJS 渲染引擎的空白问题](nodejs/ejs-blanks.md)\n- [Error.captureStackTrace 的 stack 缺少 message 问题](nodejs/error-captureStackTrace.md)\n- [fs 函数抛出的异常没有堆栈信息](nodejs/fs-error-has-no-stack.md)\n- [NodeJS GC](nodejs/gc.md)\n- [node 中发 ICMP 包](nodejs/icmp-in-node.md)\n- [Jest](nodejs/jest.md)\n- [npm publish 不会包含 .gitignore 文件](nodejs/missing-gitignore-when-node-publish.md)\n- [配置 node 开发环境](nodejs/node-dev.md)\n- [npm 命令](nodejs/npm-commands.md)\n- [npm run scripts](nodejs/npm-run-scripts.md)\n- [nvm 不是一个可执行文件，而是一个函数](nodejs/nvm-is-not-a-executable-but-a-function.md)\n- [npm 发包](nodejs/publish.md)\n- [调整 rejectUnauthorized 选项来容许 https 证书无效](nodejs/rejectUnauthorized-of-https.md)\n- [report 文件](nodejs/report-file.md)\n- [require 路径名大小写问题](nodejs/require-typo.md)\n- [流 (stream)](nodejs/stream.md)\n- [EventEmitter 需要注意的三个地方](nodejs/three-notes-of-eventemitter.md)\n- [Warning 缺少堆栈信息](nodejs/warning-missing-stack.md)\n- [winston 日志库](nodejs/winston.md)\n- [Yarn 用法](nodejs/yarn-usage.md)\n\n[`⬆ 返回目录`](#toc)\n\n## 运维\n\n- [Ansible Role](ops/ansible-role.md)\n- [Ansible 技巧](ops/ansible-tricks.md)\n- [Ansible 变量](ops/ansible-vars.md)\n- [Ansible](ops/ansible.md)\n- [dig 命令](ops/dig.md)\n- [DNF](ops/dnf.md)\n- [以太网](ops/ethernet.md)\n- [IPMI 与 BMC](ops/ipmi-and-bmc.md)\n- [运维小技巧 - 硬件](ops/ops-tricks-hardwares.md)\n- [运维小技巧 - 网络](ops/ops-tricks-networks.md)\n- [运维小技巧](ops/ops-tricks.md)\n- [PCI](ops/pci.md)\n- [RPM 创建仓库](ops/rpm-create-repo.md)\n- [RPM 制作和安装离线包](ops/rpm-offline-package-and-install.md)\n- [YUM](ops/yum.md)\n\n[`⬆ 返回目录`](#toc)\n\n## 其他\n\n记录各种奇奇怪怪的小知识\n\n- [0.30000000000000004](others/0.30000000000000004.md)\n- [Today I learned (TIL) 资源列表](others/TIL.md)\n- [使用 acme.sh 生成证书](others/acme-cert.md)\n- [adguard home](others/adguard-home.md)\n- [在梅林固件路由器里安装 AdGuard Home](others/adguardhome-in-asuswrt-merlin-device.md)\n- [Alfred Workflow debug 技巧](others/alfred-workflow-debug.md)\n- [aliyun cli](others/aliyun-cli.md)\n- [永久链接](others/archive-webpage.md)\n- [在 Alpine docker 容器里启动 aria2](others/aria2-in-alpine-docker.md)\n- [aria2](others/aria2.md)\n- [ASCII 与 ANSI](others/ascii-and-ansi.md)\n- [梅林固件 asuswrt-merlin](others/asuswrt-merlin.md)\n- [脱字符 (caret)](others/caret.md)\n- [Chrome 小技巧](others/chrome-tricks.md)\n- [cloudflare 缓存](others/cloudflare-cache.md)\n- [托管域名到 Cloudflare](others/cloudflare-hosting.md)\n- [Cloudflare Page](others/cloudflare-page.md)\n- [cloudflare proxy](others/cloudflare-proxy.md)\n- [一个复杂的小 bug: cd 补全问题](others/complex-and-small-bug-with-cd.md)\n- [复制粘贴好过手写](others/copy-paste-better-than-handwriting.md)\n- [curl 快速失败](others/curl-fail-fast.md)\n- [Mac 文件系统的剪切快捷键](others/cut-in-mac-file-system.md)\n- [数据恢复工具](others/data-recovery-tool.md)\n- [YAML 中的 Date 类型陷阱](others/date-trap-in-yaml.md)\n- [MacOS 彻底删除搜狗输入法](others/delete-sogou-input-in-macos.md)\n- [dropbear](others/dropbear.md)\n- [Duplicati](others/duplicati.md)\n- [editorconfig](others/editorconfig.md)\n- [在浏览器里启动 DoH](others/enable-doh-in-browser.md)\n- [文件命名，下划线还是中划线？](others/file-naming-with-underscores-and-dashes.md)\n- [fonts.googleapis.com 不可访问](others/fonts.googleapis.com-is-inaccessible.md)\n- [fzf](others/fzf.md)\n- [从微信公众号提取原图](others/get-raw-image-from-weixin.md)\n- [gRPC](others/grpc.md)\n- [通过 Hash 密码到 url 来验证密码](others/hashed-password-to-url.md)\n- [如何学习一门编程语言](others/how-to-learn-a-program-language.md)\n- [如何阅读标准](others/how-to-read-spec.md)\n- [如何审核代码](others/how-to-review-code.md)\n- [httrack](others/httrack.md)\n- [Hyper.js 中文问题](others/hyper-js-chinese-problems.md)\n- [图床](others/image-board.md)\n- [无法在 Tmux 显示图片](others/imgcat-not-work-in-tmux.md)\n- [Jekyll](others/jekyll.md)\n- [jellyfin 中文字体](others/jellyfin-chinese-font.md)\n- [Jinja2](others/jinja2.md)\n- [Language Server Protocol](others/language-server-protocol.md)\n- [Makefile](others/makefile.md)\n- [箴言](others/maxim.md)\n- [修改进程的内存数据](others/memory-cheat.md)\n- [元语法 （Metasyntax)](others/metasyntax.md)\n- [乱码问题](others/mojibake.md)\n- [终端邮件客户端 Mutt](others/mutt.md)\n- [nextcloud](others/nextcloud.md)\n- [NFS](others/nfs.md)\n- [堆外内存](others/off-heap-memory.md)\n- [原码, 反码, 补码](others/one_complement-and-two_complement.md)\n- [如何打开超大文件](others/open-huge-file-with-editor.md)\n- [Ubnt EdgeRouter X (er-x) 刷 OpenWRT](others/openwrt-with-ubnt-edgerouter-x.md)\n- [POST /cdn-cgi/rum](others/post-request-cdn-cgi-rum.md)\n- [Protocol Buffers](others/protocal-buffers.md)\n- [在美区 app store 充值](others/recharge-app-store-in-US.md)\n- [正则表达式的小技巧](others/regexp-tricks.md)\n- [Markdown 里写反引号](others/reverse-quote-in-markdown.md)\n- [rsync](others/rsync.md)\n- [Semver](others/semver.md)\n- [SSL 证书校验失败](others/ssl-cert-verify-failed.md)\n- [SSL 证书](others/ssl-cert.md)\n- [停止词 (Stop Words)](others/stop-words.md)\n- [mac 里的 tmux 内无法用 sublime 打开文件](others/subl-in-tmux-on-mac.md)\n- [svn 设置代理加速](others/svn-set-proxy.md)\n- [teleport](others/teleport.md)\n- [vim textwidth=78 的约定](others/textwidth-78-of-vim.md)\n- [KB 与 KiB 的不同](others/the-difference-between-kb-and-kib.md)\n- [时间回跳问题](others/time-backward-issue.md)\n- [Dockerfile 里使用 tini](others/tini-in-dockerfile.md)\n- [tmux 环境变量](others/tmux-environment-variable.md)\n- [umami.is 网站被反广告规则屏蔽](others/umami-is-blocked.md)\n- [usbipd 与 Windows WSL](others/usbipd-windows-wsl.md)\n- [UTF-8 vs UTF-16](others/utf-8-vs-utf-16.md)\n- [Vagrant DNS](others/vagrant-dns.md)\n- [vagrant-vbguest](others/vagrant-vbguest.md)\n- [不用 lsblk 查看块设备](others/view-block-devices-without-lsblk.md)\n- [查看 Chrome 通知历史列表](others/view-chrome-notification-history.md)\n- [Virtualbox VBoxManage](others/virtualbox-VBoxManage.md)\n- [vsftpd](others/vsftpd.md)\n- [水快速加热](others/water-heating-in-seconds.md)\n- [wget 爬站](others/wget-for-crawler.md)\n- [为何 Protobuf 3 移除了 required 和 optional](others/why-protobuf-3-remove-required-and-optional.md)\n- [为什么 Unicode U+F8FF 是苹果 Logo？](others/why-unicode-f8ff-is-apple-logo.md)\n- [zookeeper 健康检查](others/zookeeper-health-check.md)\n- [零宽字符加密](others/zwj-encode.md)\n\n[`⬆ 返回目录`](#toc)\n\n## 哲学\n\n- [Toulmin Model](philosophy/toulmin-model.md)\n\n[`⬆ 返回目录`](#toc)\n\n## 箴言录\n\n- [箴言录 - 人生](proverbs/life.md)\n- [箴言录 - 哲学](proverbs/philosophy.md)\n- [箴言录 - 编程](proverbs/programming.md)\n- [箴言录 - 学习](proverbs/study.md)\n\n[`⬆ 返回目录`](#toc)\n\n## Python\n\n- [python 环境配置](python/environment.md)\n- [pycache](python/pycache.md)\n- [Python Dockerfile](python/python-dockerfile.md)\n- [Python Virtualenv](python/virtualenv.md)\n\n[`⬆ 返回目录`](#toc)\n\n## Racket\n\n- [学习 Racket](racket/racket-learning.md)\n\n[`⬆ 返回目录`](#toc)\n\n## Redis\n\n- [Redis ACL](redis/acl.md)\n- [Redis Cluster](redis/cluster.md)\n- [拷贝一个 Sorted Set 到新的 key](redis/copy-a-sorted-set.md)\n\n[`⬆ 返回目录`](#toc)\n\n## Ruby\n\n- [Ruby 代理镜像](ruby/proxy.md)\n- [使用 scientist 科学重构代码](ruby/using-scientist-for-refactoring.md)\n\n[`⬆ 返回目录`](#toc)\n\n## 安全攻防\n\n- [不要在生产环境绑定 0.0.0.0](security/do-not-bind-0.0.0.0.md)\n- [hashcat](security/hashcat.md)\n- [Kali Linux](security/kali.md)\n- [Reverse Shell](security/reverse-shell.md)\n\n[`⬆ 返回目录`](#toc)\n\n## Shell\n\n- [给命令的每一行输出加前缀的方法](shell/add-prefix-to-each-output-line.md)\n- [多行字符串赋值给变量](shell/assign-multi-lines-string-to-variable.md)\n- [bash completion](shell/bash-completion.md)\n- [Bash 镜像有 bug](shell/bash-docker-image-has-bug.md)\n- [bash error exit](shell/bash-error-exit.md)\n- [bash history](shell/bash-history.md)\n- [bash 开启 vi 模式](shell/bash-in-vi-mode.md)\n- [学习 Bash](shell/bash-learning.md)\n- [Bash 的坑](shell/bash-pitfalls.md)\n- [Bash 小技巧](shell/bash-tricks.md)\n- [shell 中改变光标样式](shell/change-cursor-style.md)\n- [修改 console 环境的字体大小](shell/change-fontsize-in-console.md)\n- [当存在与命令同名的别名，如何调用原命令](shell/command-alias-in-same-names.md)\n- [Shell 操作文件描述符](shell/file-descriptor.md)\n- [刷新命令的路径缓存](shell/flush-cache-of-command-path.md)\n- [在 console 里滚屏翻页](shell/page-up-down-in-console.md)\n- [printf 打印多行](shell/printf-array.md)\n- [Readline](shell/readline.md)\n- [学习 Shell](shell/shell-learning.md)\n- [Bash 的 subshell 与子进程](shell/subshell-and-child-process.md)\n- [set 命令](shell/the-set-command.md)\n- [终端输入的文字不可见怎么办？](shell/type-character-is-invisible.md)\n- [Bash xtrace](shell/xtrace.md)\n\n[`⬆ 返回目录`](#toc)\n\n## Startup\n\n- [商标注册](startup/trademark-registration.md)\n\n[`⬆ 返回目录`](#toc)\n\n## 存储\n\n- [flyway 用法](storage/flyway-usage.md)\n- [RAID](storage/raid.md)\n- [物理删除与逻辑删除](storage/soft-delete.md)\n- [存储](storage/storage.md)\n\n[`⬆ 返回目录`](#toc)\n\n### Etcd\n\n- [etcdctl](storage/etcd/etcdctl.md)\n- [ETCD 报错 request ignored (cluster ID mismatch)](storage/etcd/request-ignored-cluster-id-mismatch.md)\n\n[`⬆ 返回目录`](#toc)\n\n### Mongo\n\n- [MongoDB 的丢数据问题](storage/mongo/data-lost.md)\n\n[`⬆ 返回目录`](#toc)\n\n### Mysql\n\n- [连接 MYSQL 显示中文](storage/mysql/encoding-in-connection.md)\n- [mysqldump](storage/mysql/mysqldump.md)\n- [Date/Datetime/Timestamp 比较](storage/mysql/timestamp-vs-datetime.md)\n- [Transaction 与 autocommit](storage/mysql/transaction-and-autocommit.md)\n\n[`⬆ 返回目录`](#toc)\n\n### Postgres\n\n- [permission denied for schema public](storage/postgres/permission-denied-for-schema-public.md)\n\n[`⬆ 返回目录`](#toc)\n\n## 思考\n\n记录我的碎片式思考\n\n- [CLD 图](thinking/causal-loop-diagram.md)\n- [声明式配置 vs 编程式配置](thinking/declarable-vs-programmable.md)\n- [项目代码如何组织](thinking/how-to-make-code-organization.md)\n- [如何编程](thinking/how-to-programming.md)\n- [不完整的函数](thinking/non-total-function.md)\n- [提问的智慧](thinking/smartquestion.md)\n- [讲故事](thinking/story-telling.md)\n\n[`⬆ 返回目录`](#toc)\n\n## Typescript\n\n- [export default 的类型注明](typescript/type-annotations-for-export-default.md)\n- [Typescript 与 Rollup](typescript/typescript-and-rollup.md)\n- [typescript 的缺点](typescript/typescript-cons.md)\n\n[`⬆ 返回目录`](#toc)\n\n## Vim\n\n- [`\u003cC-I\u003e` 在 nvim 里等同于 `\u003cTab\u003e`](vim/ctrl-i-in-neovim.md)\n- [用于调试的最小 neovim 配置](vim/minimal-nvim-config-for-reproduce.md)\n- [学习 Neovim](vim/neovim-learning.md)\n- [在 vim 中执行 shell 命令，同时将结果输出到 buffer](vim/pipe-shell-output-to-buffer.md)\n- [vim 插件教程](vim/plugins-tutorial.md)\n- [在 vim 中运行终端，以及如何退出终端模式](vim/run-terminal-in-vim.md)\n- [sudo :write](vim/sudo-write.md)\n- [VIM filetype](vim/vim-filetype.md)\n- [vim-go 出现问题](vim/vim-go-fail.md)\n- [学习 Vim](vim/vim-learning.md)\n- [VIM 搜索和替换技巧](vim/vim-search-and-replace-tips.md)\n\n[`⬆ 返回目录`](#toc)\n\n## 虚拟机\n\n- [KVM (Kernel-based Virtual Machine)](vm/kvm.md)\n- [Libvirt 网络](vm/libvirt-network.md)\n- [Libvirt](vm/libvirt.md)\n- [虚拟 CPU](vm/vCPU.md)\n- [virsh shutdown 命令无效](vm/virsh-shutdown-not-work.md)\n- [virt-install Couldn't find kernel for install tree](vm/virt-install-cannot-find-kernel.md)\n- [Virtualbox](vm/virtualbox.md)\n\n[`⬆ 返回目录`](#toc)\n\n## Web\n\n记录 Web 服务开发涉及的相关知识。\n\n- [URL QueryString 传数组参数](web/array-params-in-url.md)\n- [DNS](web/dns.md)\n- [国际化 SEO](web/international-SEO.md)\n- [看懂 V8 项目代码](web/read-v8-project.md)\n- [socket](web/socket.md)\n- [下划线在 HTTP Header 里是非法字符串](web/underscore-is-invalid-in-header.md)\n- [URI 转义](web/uri-encode.md)\n- [Websocket](web/websocket.md)\n\n[`⬆ 返回目录`](#toc)\n\n## Windows\n\n- [在虚拟机里安装 Windows 10](windows/install-win10-in-vm.md)\n- [在虚拟机里安装 Windows 11](windows/install-win11-in-vm.md)\n- [legend bios 无损转 uefi](windows/legend-bios-to-uefi.md)\n- [PE 系统](windows/pe-system.md)\n- [winget](windows/winget.md)\n- [Windows WSL](windows/wsl.md)\n\n[`⬆ 返回目录`](#toc)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fadoyle-h%2Ftoday-i-learned","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fadoyle-h%2Ftoday-i-learned","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fadoyle-h%2Ftoday-i-learned/lists"}