今日(きょう)(さわ)がしく(たわむ)れ生きる人々の漫画映画(まんがえいが)

Linux 日用软件记录 (有空再补)

学习

Marvin: ChemDraw 替代 VESTA: 绘制晶胞 TeXmacs: 写论文(但是参考文献管理有点麻烦) GeoGebra: 简单数学绘图

效率

gThumb: 管理图片、表情包 Thunderbird: 除邮件之外,使用支持iCalendar、CalDAV的提供商管理日程

最近在找管理文献的软件

安卓折腾笔记 (不定期缓慢更新)

之前折腾的基本忘了…

Google 全家桶

OpenGapps.org 这个要在刷好 LineageOS 之后的第一次开机之前刷好, 否则会引发一系列的报错 (eg. Google Play/Google/Photos 已停止).

错误安装 Google 全家桶

首先安卓有好几个分区, vendor, system, data, sd卡. 全家桶应该主要更改了 system 分区, 而一般来说 system 分区是不会被修改的 (除非 xposed, magisk, root 等). 所以理论上重新刷一遍 ROM 就可以了, 只清 system 分区, 其他保留数据. 之后再重装一遍 magisk 之类的就可以. 但是我刷了之后现在还是有挺多问题, 基本什么应用都开始闪退了… 待解决… (作死操作请勿模仿) 补充: 后来一个一个重装过一遍好像就好了…不知原因…

设计徽标总结

最近班里说要设计一个班徽, 分成几组, 半个小时之后出方案投票. 当然, 最后我们组惨败. 这里总结一下.

创意元素收集

我们想到的元素可以说是还是比较有创意的了, 但是之后的骚操作可能才是败因.

分工

分工是个问题, 现在我也想不到解决方案. 比如我们每个人可能都有不太一样的方案, 各自着手, 而不是先有一个雏形, 再共同改善. 然后我们同时还要设计口号, 也不好分工, 但是多任务效率就特别低. 可能还是让大家认领任务好些.

要素过多

徽章就简单点啦. 我们的主要设计就是把想到的元素一股脑往上堆, 结果没有重点, 没有中心. 获胜组就正是选择了更有创意的铀元素作为中心, 简明, 有新意, 突出重点, 一看就分出好坏. 我们虽然也想到了铀这一点, 但是要素过多应该会是主要败因.

Linux From Scratch SystemD 笔记 (不定期缓慢更新)

LFS 地址: http://www.linuxfromscratch.org/lfs/ 本文原来是基于 LFS Systemd 8.4 版的,但拖着拖着 9.1 版就出来了,所以以 Systemd 9.1 版为准。

创建用于编译及安装系统的磁盘镜像

官方是直接用物理硬盘, 创一个分区来专门弄 LFS. 但是对我这种硬盘乱糟糟的, 还是弄一个镜像文件放会省事一点.

$ mkdir LFS $ cd LFS $ truncate -s 16G lfs.img # 创建 16G 大小的虚拟硬盘镜像 $ fdisk lfs.img Command (m for help): o # 这里输入 o 回车, 创建 MBR 分区表 (GPT 可能也行? 但好像要创多个 boot 分区) Command (m for help): n # 输入 n 回车, 之后一路回车, 创建分区项 Command (m for help): w # w 回车, 写入 $ fdisk -l lfs.img Disk lfs.img: 16 GiB, 17179869184 bytes, 33554432 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x14bfb794

Device Boot Start End Sectors Size Id Type lfs.img1 2048 33554431 33552384 16G 83 Linux $ losetup —offset $((512 * 2048)) —sizelimit $((512 * 33554431)) /dev/loop0 lfs.img # 请照应 fdisk 输出, 相应更改对应的数字 $ mkfs.ext4 /dev/loop0 $ mkdir mnt $ mount /dev/loop0 mnt # 挂载 $ umount /dev/loop0 # 卸载 $ losetup —detach /dev/loop0 # 卸载 loop 设备

怕麻烦, 弄两个脚本:

$ cat > mountup.sh <<EOF

!/bin/sh

losetup —offset $((512 * 2048)) —sizelimit $((512 * 33554431)) /dev/loop0 lfs.img mount /dev/loop0 mnt export LFS=”`pwd`/mnt” EOF

$ cat > umount.sh <<EOF

!/bin/sh

umount /dev/loop0 losetup —detach /dev/loop0 EOF

最后:

$ chmod a+x *.sh

之后就可以 sudo ./mountup.shsudo ./umount.sh 了.

所需文件的下载

大概跟着书里走就行了。但是国内的网络不一定很好,这个还请自己解决…… 提示:wget支持使用代理: http_proxy=PROXY https_proxy=PROXY ftp_proxy=PROXY wget ...PROXY替换为自己的代理就行了,例如替换为http://127.0.0.1:8080之类的。 算了,我把我下载的传到了坚果云上: * LFS Systemd 8.4: https://www.jianguoyun.com/p/DWbL-y8Q-dnWCBiVurAD * LFS Systemd 9.1: https://www.jianguoyun.com/p/Deir9HEQ-dnWCBjGv7AD 实在下不了的也可以到这里下载。 无论从什么途径下载,不要忘了进到下载目录然后校验: $ md5sum -c /path/to/md5sums 后面一个/path/to/md5sums在书里有下载地址。

准备环境

书里基本是搭了一个新环境,创了新用户、改了权限、设了一般的环境变量,按着操作可以学一点东西。但我懒,就直接用自己的用户了。

一句 ln 命令的解释

看到官方文档里特地标出来了, ln -s $LFS/tool / 不是写错了. 其实就是在 / 文件夹里创建与 tool 同名的指向 tool 文件夹的软链接而已. 不是把 / 变成软链接. (怕不是很多人都报 bug 了才特地指出…)

教训1

然后呢最开始我觉得弄乱根目录不太好,将书里的/tools链接改到了./tools 我也相应改了一点,比如下面编译的时候要把相关的/tools全部改成$ROOT/tools,其中$ROOT是我设的变量。但最后编译完 glibc 之后没有能通过校验。 当时的错误是这样: .../ld: cannot find $ROOT/tools/lib/libc.so.6 inside $LFS (稍微修改了一下)总之路径有点问题啦。重来一遍。 其实,书里也说了:

The created symlink enables the toolchain to be compiled so that it always refers to /tools, meaning that the compiler, assembler, and linker will work both in Chapter 5 (when we are still using some tools from the host) and in the next (when we are “chrooted” to the LFS partition). 基本上在没有进一步的理解时还是得跟着教程走。

搭建临时编译环境

注意事项

书里有一段话需要注意,说的是每一小节的编译,除非特别说明,默认读者都重新做了一次一下动作: 1. 解压相应的压缩文件:$ tar -xf __压缩文件__ 2. 进入压缩文件解压出来的目录:$ cd __解压出来的目录__

并且,在进行完一小节的编译后,默认读者应该将本小节解压出来的目录删除,即: 3. $ cd .. 4. $ rm -Rf __解压出来的目录__

例如在开始的 GCC Pass 1 编译完之后,如果把文件夹留到 Pass 2 继续用,就会出现问题,因为 Pass 2 的配置已经不同了。避免这种情况最简单的方法就是删掉重来。

关于补丁(patch)

之前下载的除了源码压缩包外,还有补丁(.patch文件)。需要打补丁的时候文中会有说明,只要按着原文一步一步走下来,就不用担心自己忘了做什么。(漏了倒有可能 :P)

zsh 下可能需要的改动

编译的时候,书里有一个提示说在 bash 下可以用time { ../configure ... && .. && make install; }来计时。 在 zsh 下不行,要稍微改动一下变成time ( ../configure ... && ... && make install ),也就是把大括号改为括号。 (我稍微记录一下,我编译 binutils 的编译时间:170.20s user 23.73s system 278% cpu 1:09.72 total(使用了MAKEFLAGS="-j 4"))

自搭笔记服务器

个人对笔记系统的要求:

  1. 以树状形式整理笔记 (hierarchical);
  2. 有一定的多媒体支持;
  3. 支持移动平台, 可离线使用.

上网搜到的有一下几个:

    • Leanote
    • Trilium
    • OpenNote
    • Paperwork

Leanote

Trilium

OpenNote

Paperwork

项目状态

最近几个月有更新

最近几个月有更新

最近几个月有更新

最近几个月有更新 (仍位于早期开发阶段)

树状

有限, 笔记不能作为父节点

有限, 笔记不能作为父节点

媒体支持

有限

有限

暂无

移动平台离线

PWA

暂无

目前先把 Trilium 搭在了 http://note.liberty.gensokyoradio.moe, 自己写的话感觉也没到那个水平, 先凑合着用吧…

如果某一天自己开始写了的话

细化一下 feature:

  1. 树状: 直接以目录形式储存/图数据库/关系数据库, 因为懒, 大概率选第一个;
  2. 多媒体支持: 数据库也倒是可以, 但更倾向于直接文件;
  3. 离线: 能够下载内容, 非实时同步, 要处理冲突 (或者直接服务器端 git merge 算了);
  4. 移动平台+离线: 如果是目录的话, 直接整个目录结构下载下来算了.

需要知识:

  • 服务器端: Node.JS
  • 网页端: 当今的前端框架 (老年人真的跟不上啊… 才过好几年就翻天覆地…);
  • 移动端: 只考虑 Android.

一些奇奇怪怪的分区布局

笔记本有个空 SATA 口, 就装了块机械. 日用的操作系统又是 Linux, SSD 就给 Linux. SSD 对我这种没钱的人又容易心疼, 就在 Linux 下弄了乱七八糟的分区.

固态

没什么好说, 要只是这样子那就不会那么麻烦了.

机械

前五个是 Windows 10 的分区, 后三个是 Linux 的. Linux 下的 /var 和 /home 独立出另外的分区还是比较常见的操作, 不说不说.

Ext4 外部日志分区

/dev/sda6 是 SSD 上的 root 分区的日志分区. 是的, ext4 分区的日志可以独立出来写到另一个分区, 甚至另一个硬盘也可以. 应该可以省点写入量, 但是其他方面有没有影响就不知道了. Arch Wiki 有简单的介绍 (https://wiki.archlinux.org/index.php/Ext4#Use_external_journal_to_optimize_performance):

For those with concerns about both data integrity and performance, the journaling can be significantly sped up with the journal_async_commit mount option. Note that it does not work with the balanced default of data=ordered, so this is only recommended when the filesystem is already cautiously using data=journal. You can then format a dedicated device to journal to with mke2fs -O journal_dev /dev/journal_device. Use tune2fs -J device=/dev/journal_device /dev/ext4_fs to assign the journal to an existing device, or replace tune2fs with mkfs.ext4 if you are making a new filesystem. —引用于 2019年8月8日

简单说就是 ext4 在挂载选项里设置了 data=journal (优先记录日志) 之后, 可以启用 journal_async_commit 来让写入日志和写入数据同时异步进行, 从而加快速度. 在这之后可以设置日志到外部的设备.

# # 把一个分区格式化成日志分区

mke2fs -O journal_dev /dev/journal_device

# 创建用以上分区作为日志分区的 ext4 分区

mkfs.ext4 -J device=/dev/journal_device /dev/ext4_fs

# 或者用以下命令来调整现有分区的日志设置

tune2fs -J device=/dev/journal_device /dev/ext4_fs

一般来说, 调整挂载选项是在 /etc/fstab 里改的. 这对于普通分区可行, 但是这次对 root 分区不行:

data={journal|ordered|writeback} Specifies the journalling mode for file data. Metadata is always journaled. To use modes other than ordered on the root filesystem, pass the mode to the kernel as boot parameter, e.g. rootflags=data=journal. —来自 mount 的 man page

然后就去改 GRUB 的内核参数, /etc/default/grub 里:

GRUB_CMDLINE_LINUX=”” 改为 GRUB_CMDLINE_LINUX=”rootflags=data=journal,journal_async_commit”

然后又在 /etc/fstab 里加上常见的什么 noatime,discard 之类的 (其实 journal_async_commit 应该也可以放在 fstab 里, 但是懒得试了).

继续作死

SSD 不那么心疼了, 但是 HDD 又心疼了. 笔记本电脑不可能当台式来用吧, 平时挪一挪磕一磕碰一碰也心疼. 正好常用软件装齐了, 脑洞大开一下, 要便携的时候换个 fstab 是不是就可以直接把机械硬盘休眠关掉了? 然后就想到另一个奇奇怪怪的分区方案 (已坑, 妥协了):

/ —- 根目录, ro 挂载, 不用日志 /var —- 不用机械的分区, 直接 tmpfs /home —- 同样直接 tmpfs

但是基本不知道怎么实现 (禁用日志好麻烦, 更改 fstab 好麻烦, 休眠硬盘好麻烦…). 先把用的到的东西列一列:

禁用日志: mount option: ro,noload 会不会有不用每次修改 fstab 的方法? 尝试: kernel para: init=… 休眠硬盘: hdparm, 但是就没有从一开始就整个硬盘禁用的方法吗…

剩下等我作完死先…(大坑预定)发现可能要把 systemd 学一遍, 然后自己写一个 target…(大坑确立) 待会儿待会儿待会儿, 好像 systemd 里有个 systemd-fstab-generator, 可以接受内核参数 fstab, 设成 fstab=no 就可以忽略 fstab 了? 之后试一下. (试了一下, 根文件系统只读会有很多很多出错, 待会儿试一下可读写但是关掉日志) 如果要设成根文件系统只读可能要依靠 overlay filesystem, 但是查了一下真是一脸懵逼, 不打算继续搞.

通过内核参数临时禁用日志/禁用 fstab

好了, 不打算搞了, 目前方案如下:

  1. 只挂载根文件系统, 用 noload 或者 norecovery 的挂载选项来禁用日志 (此时相应地要把之前提到的 data=journal,journal_async_commit 的选项删掉, 不兼容), 这样就不会用到机械硬盘了, 但是 SSD 必须可读写;
  2. 为了容易切换两种状态, 只用 GRUB 来调整相应的内核参数, 之后选择相应的 GRUB entry, 再在进入 Linux 后手动 hdparm -Y </dev/device> 让机械硬盘休眠停转, 就可以不用心疼机械了.

具体操作:

  1. 打开 /boot/grub/grub.cfg 把最常用的那个 menuentry 整个复制到 /boot/grub/custom.cfg, 作为编辑的基础, 我的是下面这样:

    ### BEGIN /etc/grub.d/10_linux ### menuentry ‘Manjaro Linux’ —class manjaro —class gnu-linux —class gnu —class os $menuentry_id_option ‘gnulinux-simple-d85fb039-b7e0-4e7e-ac24-f8fd16215efe’ { savedefault load_video set gfxpayload=keep insmod gzio insmod part_gpt insmod ext2 set root=’hd1,gpt2’ if [ x$feature_platform_search_hint = xy ]; then search —no-floppy —fs-uuid —set=root —hint-ieee1275=’ieee1275//dis k@0,gpt2’ —hint-bios=hd1,gpt2 —hint-efi=hd1,gpt2 —hint-baremetal=ahci1,gpt2
    d85fb039-b7e0-4e7e-ac24-f8fd16215efe else search —no-floppy —fs-uuid —set=root d85fb039-b7e0-4e7e-ac24-f8fd16 215efe fi linux /boot/vmlinuz-5.1-x86_64 root=UUID=d85fb039-b7e0-4e7e-ac24-f8fd1 6215efe rw rootflags=data=journal,journal_async_commit acpi_osi=! acpi_osi=’Wind ows 2018.2’ acpi_backlight=vendor modprobe.blacklist=nouveau initrd /boot/intel-ucode.img /boot/initramfs-5.1-x86_64.img }

  2. 要编辑的有两行: 其一:

    menuentry ‘Manjaro Linux’ —class manjaro —class gnu-linux —class gnu —class os $menuentry_id_option ‘gnulinux-simple-d85fb039-b7e0-4e7e-ac24-f8fd16215efe’

    1. menuentry 后面的 'Manjaro Linux' 改成容易记的其他名字如 'Manjaro Linux Portable', 这是开机时 GRUB 显示的名字; 2. $menuentry_id_option 后面的一长串东西改成喜欢的名字, 应该是作为 id, 所以独一无二会好一点 (但是似乎不改也没影响), 我改成了 'gnulinux-portable'. 3. 要编辑的两行: 其二:

    linux /boot/vmlinuz-5.1-x86_64 root=UUID=d85fb039-b7e0-4e7e-ac24-f8fd1 6215efe rw rootflags=data=journal,journal_async_commit acpi_osi=! acpi_osi=’Wind ows 2018.2’ acpi_backlight=vendor modprobe.blacklist=nouveau

    1. 其他不用管;
    2. (如果设置了外部日志的) 首先把 rootflags=data=journal,journal_async_commit 删掉, 不兼容;
    3. 添加 fstab=no (用空格与其他部分分隔开不用说了吧);
    4. 查看自己的 fstab, 添加上相应的 rootflags (因为不用 fstab 了, 所以要在这里手动设置), 我的 fstab 里挂载选项是 defaults,noatime,discard,data=journal,journal_async_commit ,所以添加 rootflags=noatime,discard,noload (比原来的 fstab 多了 noload, 当然如果不心疼 SSD 又没有设置外部日志的也可以不用多加这个 noload);
    5. 添加 systemd.unit=multi-user.target, 因为我的 Linux 默认直接进入图形界面 (默认 target 是 graphical.target), 没有了 /home 目录可能不能顺利进入, 所以设置这个让系统只进入命令行界面.
    6. 最后:

    menuentry ‘Manjaro Linux Portable’ —class manjaro —class gnu-linux —class gnu —class os $menuentry_id_option ‘gnulinux-portable’ { savedefault load_video set gfxpayload=keep insmod gzio insmod part_gpt insmod ext2 set root=’hd1,gpt2’ if [ x$feature_platform_search_hint = xy ]; then search —no-floppy —fs-uuid —set=root —hint-ieee1275=’ieee1275//disk@0,gpt2’ —hint-bios=hd1,gpt2 —hint-efi=hd1,gpt2 —hint-baremetal=ahci1,gpt2 d85fb039-b7e0-4e7e-ac24-f8fd16215efe else search —no-floppy —fs-uuid —set=root d85fb039-b7e0-4e7e-ac24-f8fd16215efe fi linux /boot/vmlinuz-5.1-x86_64 root=UUID=d85fb039-b7e0-4e7e-ac24-f8fd16215efe rw rootflags=noatime,discard,noload acpi_osi=! acpi_osi=’Windows 2018.2’ acpi_backlight=vendor modprobe.blacklist=nouveau fstab=no systemd.unit=multi-user.target initrd /boot/intel-ucode.img /boot/initramfs-5.1-x86_64.img }

  3. 当然, 开机之后要记得 hdparm -Y <机械硬盘>, 不然没用.

参考文献

低等数学 (测试 MathJax)

差强人意… 映射: 设 \(X\), \(Y\) 是两个非空集合, 如果存在一个法则 \(f\), 使得对 \(X\) 中每个元素 \(x\), 按法则 \(f\),在 \(Y\) 中有唯一确定的元素 \(y\) 与之对应, 那么称 \(f\) 为从 \(X\) 到 \(Y\) 的映射记做 \[ f : X \rightarrow Y, \] 其中 \(y\) 称为元素 \(y\)(在映射 \(f\) 下)的像, 并记做 \(f (x)\), 即 \[ y = f (x), \] 而元素 \(x\) 成为元素 \(y\)(在映射 \(f\) 下)的一个原像; 集合 \(X\) 称为映射 \(f\) 的定义域, 记做 \(D_f\), 即 \(D_f = X\); \(X\)中所有元素的像所组成的集合称为映射 \(f\) 的值域, 记做 \(R_f\) 或 \(f (X)\) , 即 \[ R_f = f (X) = \{ f (x) |x \in X \} . \]

其他名词: 映射又称为算子, 根据集合 \(X\), \(Y\) 的不同情形, 在不同的数学分支中, 映射又有不同的惯用名称. 例如, 从非空集 \(X\) 到数集 \(Y\) 的映射又称为 \(X\) 上的泛函, 从非空集X到它自身的映射又称为X上的变换,从实数集(或其子集)X到实数集的映射通常称为定义在X上的函数

满射: 若 \(f\) 是从集合 \(X\) 到集合 \(Y\) 的映射, 若 \(R_f = Y\), 则称 \(f\) 为 \(X\) 到 \(Y\) 上的映射或满射; 单射: 若对 \(X\) 中任意两个不同元素 \(x_1 \neq x_2\), 它们的像 \(f (x_1) \neq f (x_2)\), 则称 \(f\) 为 \(X\) 到 \(Y\) 的单射; 一一映射 (或双射): 若映射 \(f\) 既是单射, 又是满射, 则称 \(f\) 为一一映射 (或双射). 逆映射: 设 \(f\) 是 \(X\) 到 \(Y\) 的单射, 定义一个从 \(R_f\) 到 \(X\) 的新映射 \(g\), 即 \[ g : R_f \rightarrow X, \] 对每个 \(y \in R_f\), 规定 \(g (y) = x\), 这 \(x\) 满足 \(f (x) = y\). 这个映射称为 \(f\) 的逆映射, 记做 \(f^{- 1}\). 复合映射: 设有两个映射 \(g : X \rightarrow Y_1\),\(f : Y_2 \rightarrow Z\),其中 \(Y_1 \subset Y_2\),则由映射 \(g\) 和 \(f\) 可以定出一个从 \(X\) 到 \(Z\) 的对应法则, 它将每个 \(x \in X\) 映成 \(f [g (x)] \in Z\). 将这个对应法则确定的映射成为映射 \(g\) 和 \(f\) 构成的复合映射, 记做 \(f \nosymbol \circ g\), 即 \[ f \circ g : X \rightarrow Z, (f \circ g) (x) = f [g (x)], x \in X. \]

函数: 设数集 \(D \subset R\), 则称映射 \(f : D \rightarrow R\) 为定义在 \(D\) 上的函数, 通常简记为 \[ y = f (x), x \in D, \] 其中 \(x\) 称为自变量, \(y\) 称为因变量, \(D\) 称为定义域, 记作 \(D_f\), 即 \(D_f = D\). 函数的定义中, 对每个 \(x \in D\), 按对应法则 \(f\), 总有唯一确定的值 \(y\) 与之对应, 这个值称为函数 \(f\) 在 \(x\) 处的函数值, 记作 \(f (x)\), 即 \(y = f (x)\). 因变量 \(y\) 与自变量 \(x\) 之间的这种依赖关系, 通常称为函数关系. 函数值 \(f (x)\) 的全体所构成的集合称为函数 \(f\) 的值域, 记作 \(R\) 或 \(f (D)\), 即 \[ R_f = f (D) = \{ y|y = f (x), x \in D \} . \]

函数的几种特性: 有界性, 单调性, 奇偶性, 周期性. 分段函数: 在自变量的不同变化范围中, 用不同式子来表示不同对应法则的函数, 通常称为分段函数. 反函数: 设函数 \(f : D \rightarrow f (D)\) 是单射, 则它存在逆映射 \(f^{- 1} : f (D) \rightarrow D\), 称此映射 \(f^{- 1}\) 为函数 \(f\) 的反函数. 按此定义, 对每个 \(y \in f (D)\), 有唯一的 \(x \in D\), 使得 \(f (x) = y\), 于是有 \[ f^{- 1} (y) = x. \] 这就是说,反函数 \(f^{- 1}\) 的对应法则是完全由函数 \(f\) 的对应法则所确定的. 若 \(f\) 在 \(D\) 上单调增加, 则 \(f^{- 1} \) 在 \(f (D)\) 上也是单调增加的, 单调递减同理. \(f\) 与 \(f^{- 1}\) 的图形关于直线 \(y = x\) 对称. 相对于反函数 \(y = f^{- 1} (x)\) 来说, 原来的函数 \(y = f (x)\) 称为直接函数. 复合函数: 设函数 \(y = f (u)\) 的定义域为 \(D\), 函数 \(u = g (x)\) 的定义域为 \(D_g\), 且其值域 \(R_g \subset D_f\), 则由下式确定的函数 \[ y = f [g (x)], x \in D_g \] 称为由函数 \(u = g (x)\) 与函数 \(y = f (u)\) 构成的复合函数, 它的定义域为 \(D\), 变量 \(u\) 称为中间变量. 在初等数学中已经讲过下面几类函数:

  • 幂函数: \(y = x^{\mu}\) ( \(\mu \in R\) 是常数),
  • 指数函数: \(y = a^x\) ( \(a > 0\) 且 \(a \neq 1\) ),
  • 对数函数: \(y = \log_a x\) ( \(a > 0\) 且 \(a \neq 1\), 特别当 \(a = e\) 时, 记为 \(y = \ln x\) ),
  • 三角函数: 如 \(y = \sin x\), \(y = \cos x\), \(y = \tan x\) 等,
  • 反三角函数: 如 \(y = \arcsin x\), \(y = \arccos x\), \(y = \arctan x\) 等. 以上这五类函数统称为基本初等函数. 由常数和基本初等函数经过有限次的四则运算和有限次的函数复合步骤所构成并可用一个式子表示的函数,称为初等函数. 双曲函数: 双曲正弦: \( sh x = \frac{e^x - e^{- x}}{2} \), 双曲余弦: \( ch x = \frac{e^x + e^{- x}}{2} \), 双曲正切: \( th x = \frac{sh x}{ch x} = \frac{e^x - e^{- x}}{e^x + e^{- x}}\). 根据双曲函数的定义, 可证下列四个公式: \[ sh (x + y) = sh x ch y + ch x sh y, \] \[ sh (x - y) = sh x ch y - ch x sh y, \] \[ ch (x + y) = ch x ch y + sh x sh y, \] \[ ch (x - y) = ch x ch y - sh x sh y. \] 由以上几个公式可以导出其他一些公式, 例如: \[ ch^2 x - sh^2 x = 1, \] \[ sh 2 x = 2 sh x ch x, \] \[ ch 2 x = ch^2 x + sh^2 x. \] 反双曲函数: 反双曲正弦: \(y = arsh x = \ln \left( x + \sqrt{x^2 + 1} \right)\), 反双曲余弦: \(y = arch x = \ln \left( x + \sqrt{x^2 - 1} \right)\), 反双曲正切: \(y = arth x = \frac{1}{2} \ln \frac{1 + x}{1 - x}\).
数列的极限

数列: 按照某一法则, 对每个 \(n \in N_+\), 对应着一个确定的实数 \(x_n\), 这些实数按照下标 \(n\) 从小到大排列得到的一个序列 \[ x_1, x_2, x_3, \ldots, x_n, \ldots \] 就叫做数列, 简记为数列 \(\{ x_n \}\). 数列中的每一个数叫做数列的, 第 \(n\) 项 \(x_n\) 叫做数列的一般项 (或通项). 数列极限: 设 \(\{ x_n \}\) 为一数列, 如果存在常数 \(a\), 对于任意给定的正数 \(\varepsilon\) (不论它多么小), 总存在正整数 \(N\), 使得当 \(n > N\) 时, 不等式 \[ | x_n - a | < \varepsilon \] 都成立, 那么就称常数 \(a\) 是数列 \(\{ x_n \}\) 的极限, 或者称数列 \(\{ x_n \}\) 收敛于 \(a\), 记为 \[ \lim_{n \rightarrow \infty} x_n = a, \] 或 \[ x_n \rightarrow a (n \rightarrow \infty) . \] 极限的唯一性: 如果数列 \(\{ x_n \}\) 收敛, 那么它的极限唯一. 收敛数列的有界性: 如果数列 \(\{ x_n \}\) 收敛, 那么数列 \(\{ x_n \}\) 一定有界. 收敛数列的保号性: 如果 \(\lim_{n \rightarrow \infty} x_n = a\), 且 \(a > 0\) (或 \(a < 0\)), 那么存在正整数 \(N\), 当 \(n > N\) 时, 都有 \(x_n > 0\) (或 \(x_n < 0\)). 推论: 如果数列 \(\{ x_n \}\) 从某项起有 \(x_n \geqslant 0\) (或 \(x_n \leqslant 0\)), 且 \(\lim_{n \rightarrow \infty} x_n = a\), 那么 \(a \geqslant 0\) (或 \(a \leqslant 0\)). 收敛数列的子数列: 如果数列 \(\{ x_n \}\) 收敛于 \(a\), 那么它的任一子数列也收敛, 且极限也是 \(a\).

函数的极限
  • 去心邻域: 以 \(x_0\) 为中心的任何开区间称为点 \(x_0\) 的邻域, 记做 \(U (x_0)\); 在 \(U (x_0)\) 中去掉中心 \(x_0\) 后, 称为点 \(x_0\) 的去心邻域, 记做 \(Ů (x_0)\). 设 \(x_0 \in R\), \(\delta > 0\), 开区间 \((x_0 - \delta, x_0 + \delta)\) 称为点 \(x_0\) 的 \(\delta\) 邻域, 记作 \(U (x_0, \delta)\). 点 \(x_0\) 的去心 \(\delta\) 邻域记作 \(Ů (x_0, \delta)\), \(\delta\) 称为邻域半径. 函数的极限: 设函数 \(f (x)\) 在点 \(x_0\) 的某一去心邻域内有定义. 如果存在常数 \(A\), 对于任意给定的正数 \(\varepsilon\) (不论它多么小), 总存在正数 \(\delta\), 使得当 \(x\) 满足不等式 \(0 < | x - x_0 | < \delta\) 时, 对应的函数值 \(f (x)\) 都满足不等式 \[ | f (x) - A | < \varepsilon, \] 那么常数 \(A\) 就叫做函数 \(f (x)\) 当 \(x \rightarrow x_0\) 时的极限, 记做 \[ \lim_{x \rightarrow x_0} f (x) = A或f (x) \rightarrow A (当x \rightarrow x_0) . \] 单侧极限: 适当更改函数的极限的定义即可, 此处略. 左极限, 记作 \(\lim_{x \rightarrow x^-_0} f (x) = A\) 或 \(f (x^-_0) = A\). 右极限, 记作 \(\lim_{x \rightarrow x^+_0} f (x) = A\) 或 \(f (x^+_0) = A\).
  • 自变量趋于无穷大时函数的极限: 设函数 \(f (x)\) 当 \(| x |\) 大于某一正数时有定义. 如果存在常数 \(A\), 对于任意给定的正数 \(\varepsilon\) (不论它多么小), 总存在着正数 \(X\), 使得当 \(x\) 满足不等式 \(| x | > X\) 时, 对应的函数值 \(f (x)\) 都满足不等式 \[ | f (x) - A | < \varepsilon, \] 那么常数 \(A\) 就叫做函数 \(f (x)\) 当 \(x \rightarrow \infty\) 时的极限, 记作 \[ \lim_{x \rightarrow \infty} f (x) = A或f (x) \rightarrow A (当x \rightarrow \infty), \] 这时, 直线 \(y = A\) 是函数 \(y = f (x)\) 的图形的水平渐近线.
  • 自变量趋于无穷大时函数的极限(简明定义): \[ \lim_{x \rightarrow \infty} f (x) \Leftrightarrow \forall \varepsilon > 0, \exists X > 0, 当 | x | > X时, 有 | f (x) - A | < \varepsilon . \]
  • 函数极限的唯一性: 如果 \(\lim_{x \rightarrow x_0} f (x)\) 存在, 那么这极限唯一.
  • 函数极限的局部有界性: 如果 \(\lim_{x \rightarrow x_0} f (x) = A\), 那么存在常数 \(M > 0\) 和 \(\delta > 0\), 使得当 \(0 < | x - x_0 | < \delta\) 时, 有 \(f (x) \leqslant M\).
  • 函数极限的局部保号性: 如果 \(\lim_{x \rightarrow x_0} f (x) = A\), 且 \(A > 0\) (或 \(A < 0\)), 那么存在常数 \(\delta > 0\), 使得当 \(0 < | x - x_0 | < \delta\) 时, 有 \(f (x) > 0\) (或 \(f (x) < 0\)). 无穷小: 如果函数 \(f (x)\) 当 \(x \rightarrow x_0\) (或 \(x \rightarrow \infty\)) 时的极限为零, 那么称函数 \(f (x)\) 为当 \(x \rightarrow x_0\) (或 \(x \rightarrow \infty\)) 时的无穷小. 数列 \(n \rightarrow \infty\) 时同理.
  • 无穷小与函数极限: 在自变量的同一变化过程 \(x \rightarrow x_0\) (或 \(x \rightarrow \infty\)) 中, 函数 \(f (x)\) 具有极限 \(A\) 的充分必要条件是 \(f (x) = A + \alpha\), 其中 \(\alpha\) 是无穷小. 无穷大: 设函数 \(f (x)\) 在 \(x_0\) 的某一去心邻域内有定义 (或 \(| x |\) 大于某一正数时有定义). 如果对于任意给定的正数 \(M\) (不论它多么大), 总存在正数 \(\delta\) (或正数 X), 只要 \(x\) 适合不等式 \(0 < | x - x_0 | < \delta\) (或 \(| x | > X\)), 对应的函数值 \(f (x)\) 总满足不等式 \[ | f (x) | > M, \] 那么称函数 \(f (x)\) 是当 \(x \rightarrow x_0\) (或 \(x \rightarrow \infty\)) 时的无穷大. 也说函数的极限是无穷大, 记作 \[ \lim_{x \rightarrow x_0} f (x) = \infty (或 \lim_{x \rightarrow \infty} f (x) = \infty), \] 适当改变定义也有 \[ \lim_{x \rightarrow x_0} f (x) = \pm \infty (或 \lim_{x \rightarrow \infty} f (x) = \pm \infty) . \]

极限的运算法则:

  • 有限个无穷小之和是无穷小;
  • 有界函数与无穷小的乘积是无穷小;
  • 有限个无穷小的乘积是无穷小;
  • \(\lim [f (x) \pm g (x)] = \lim f (x) + \lim g (x)\);
  • \(\lim [f (x) \cdot g (x)] = \lim f (x) \cdot \lim g (x)\);
  • 若 \(\lim g (x) \neq 0\), 则 \(\lim \frac{f (x)}{g (x)} = \frac{\lim f (x)}{\lim g (x)}\);
  • 若 \(f [g (x)]\) 在点 \(x_0\) 的某去心邻域内有定义, 若 \(\lim_{x \rightarrow x_0} g (x) = u_0\), \(\lim_{u \rightarrow u_0} f (u) = A\), 且存在 \(\delta_0 > 0\), 当 \(x \in Ů (x_0, \delta_0)\) 时, 有 \(g(x) \neq u_0\), 则 \[ \lim_{x \rightarrow x_0} f [g (x)] = \lim_{u \rightarrow u_0} f (u) = A. \]

极限的存在准则: * 夹逼准则: 如果 当 \(x \in Ů (x_0, r)\) (或 \(| x | > M\)) 时, \(g (x) \leqslant f (x) \leqslant h (x)\); \(\lim_{x \rightarrow x_0} g (x) = A\), \(\lim_{x \rightarrow x_0} h (x) = A\) (或 \(\lim_{x \rightarrow \infty} g (x) = A\), \(\lim_{x \rightarrow \infty} h (x) = A\)), 那么 \(\lim_{x \rightarrow x_0} f (x)\) (或 \(\lim_{x \rightarrow \infty} f (x)\)) 存在, 且等于 \(A\). 数列同理. 单调有界数列必有极限. 设函数 \(f (x)\) 在点 \(x_0\) 的某个左邻域内单调并且有界, 则 \(f (x)\) 在 \(x\) 的左极限 \(f (x_0^-)\) 必定存在. * 柯西 (Cauchy) 极限存在准则 (柯西审敛原理): 数列 \(\{ x_n \}\) 收敛的充分必要条件是: 对于任意给定的正数 \(\varepsilon\), 存在正整数 \(N\), 使得当 \(m > N\), \(n > N\) 时, 有 \[ | x_n - x_m | < \varepsilon . \]

无穷小的比较\footnote{相似地, 应该也存在无穷大的比较方式, 但是《高等数学》似乎没有提到.}: (\(\alpha\), \(\beta\) 均为无穷小) * 如果 \(\lim \frac{\beta}{\alpha} = 0\), 那么就说 \(\beta\) 是比 \(\alpha\) 高阶的无穷小, 记作 \(\beta = o (\alpha)\); * 如果 \(\lim \frac{\beta}{\alpha} = \infty\), 那么就说 \(\beta\) 是比 \(\alpha\) 低阶的无穷小; * 如果 \(\lim \frac{\beta}{\alpha} = c \neq 0\), 那么就说 \(\beta\) 与 \(\alpha\) 是同阶无穷小; * 如果 \(\lim \frac{\beta}{a^k} = c \neq 0\), 那么就说 \(\beta\) 是关于 \(\alpha\) 的 \(k\) 阶无穷小; * 如果 \(\lim \frac{\beta}{\alpha} = 1\), 那么就说 \(\beta\) 与 \(\alpha\) 是等价无穷小, 记作 \(\alpha \sim \beta\). * \(\alpha \sim \beta \Leftrightarrow \beta = \alpha + o (\alpha)\). * \(\alpha \sim \tilde{\alpha}\), \(\beta \sim \tilde{\beta}\), 且 \(\lim \frac{\tilde{\beta}}{\tilde{\alpha}}\) 存在, 则 \[ \lim \frac{\beta}{\alpha} = \lim \frac{\tilde{\beta}}{\tilde{\alpha}} . \]

函数的连续性: 设函数 \(y = f (x)\) 在点 \(x_0\) 的某一邻域内有定义, 如果 \[ \lim_{x \rightarrow x_0} f (x) = f (x_0), \] 那么就称函数 \(f (x)\) 在点 \(x_0\) 连续. 如果 \(f (x_0^-) = f (x)\), 那么就说函数 \(f (x)\) 在点 \(x_0\) 左连续. 如果 \(f (x_0^+) = f (x_0)\), 那么就说函数 \(f (x)\) 在点 \(x_0\) 右连续. 在区间上每一点都连续的函数, 叫做在该区间上的连续函数, 或者说函数在该区间上连续. 如果区间包括端点, 那么函数在右端点连续是指左连续, 在左端点连续是指右连续. 若函数 \(f (x)\) 在点 \(x_0\) 的某去心邻域内有定义. 在此前提下, 如果函数 \(f (x)\) 有下列三种情形之一: * 在 \(x = x_0\) 没有定义; * 在 \(x = x_0\) 有定义, 但 \(\lim_{x \rightarrow x_0} f (x)\) 不存在; * 在 \(x = x_0\) 有定义, 且 \(\lim_{x \rightarrow x_0} f (x)\) 存在, 但 \(\lim_{x \rightarrow x_0} f (x) \neq f (x_0)\),

那么函数 \(f (x)\) 在点 \(x_0\) 为不连续, 而点 \(x_0\) 成为函数 \(f (x)\) 的不连续点间断点. 第一类间断点: 间断处的左极限与右极限均存在; 第二类间断点: 第一类以外的所有间断点. * 第一类间断点: 可去间断点, 跳跃间断点. * 第二类间断点: 无穷间断点, 振荡间断点.

设函数 \(f (x)\) 和 \(g (x)\) 在点 \(x_0\) 连续, 则它们的和 (差) \(f \pm g\), 积 \(f \cdot g\) 及商 \(\frac{f}{g}\) (当 \(g (x_0) \neq 0\) 时) 都在点 \(x_0\) 连续. 反函数, 复合函数从略.

基本初等函数在它们的定义域内都是连续的. 一切初等函数在其定义区间 (包含在定义域内的区间) 内都是连续的. * 闭区间内连续函数的性质 * 有界性与最大值最小值定理 * 零点定理与介值定理 一致连续性 * 导数与微分 * 导数: \[ f’ (x_0) = \lim_{\vartriangle x \rightarrow 0} \frac{\vartriangle y}{\vartriangle x} = \lim_{\vartriangle x \rightarrow 0} \frac{f (x_0 + \vartriangle x) - f (x_0)}{\vartriangle x}, \] 若该极限存在, 则称函数 \(f (x)\) 在点 \(x_0\) 处可导, 并称这个极限为函数 \(y = f (x)\) 在点 \(x_0\) 处的导数, 记为 \(f’ (x)\), 也可记作 \(y’ |_{x = x_0}\), \(\frac{dy}{dx} |_{x = x_0}\) 或 \(\frac{d f (x)}{dx} |_{x = x_0}\). 如果函数 \(y = f (x)\) 在开区间 \(I\) 内的每点处都可导, 那么就称函数 \(f (x)\) 在开区间 \(I\) 内可导. 这是, 对于任一 \(x \in I\), 都对应着 \(f (x)\) 的一个确定的导数值, 这样就构成了一个新的函数, 这个函数叫做原来函数 \(y = f (x)\) 的导函数, 记作 \(y’\), \(f’ (x)\), \(\frac{dy}{dx}\) 或 \(\frac{d f (x)}{dx}\). 单侧导数: 略.

北京市垃圾分类

(一) 定义和术语
  1. 垃圾分类:

    垃圾分类指照垃圾的不同成分, 属性, 利用值以及对环境的影响, 并根据不同置方式的要求将垃圾分属性不同的若干种类. 通俗的讲, 垃圾分类就是在头将垃圾分类投放, 并通过分类收集, 分类运输和分类处理, 实现垃圾減化, 资源化, 无害化处理. 2. ##### 居住区:

    指居民小区, 公寓区, 别墅区等生活住宅地区. 3. ##### 社会单位:

    指党政机关, 学校, 企事业单位, 大厦等单位. 4. ##### 可回收物:

    指回收后经过再加工可以成为生产原料或者经过整理可以再利用的物品, 主要包括废纸类, 塑料类, 玻璃类, 金属类, 电子废弃物类, 织物类等. 处理: 再生资源回收企业. 1. 废纸类: 报纸, 纸板箱, 图书, 杂志, 洗净的牛奶盒等利乐包装, 办公用纸, 药盒, 传单广告纸, 洗净的饮料, 纸杯; 2. 织物类: 衣服, 书包, 桌布; 3. 塑料类: 塑料油桶, 塑料盆, 洗净的酸奶杯, 塑料饮料瓶, 塑料餐盒, 泡沫塑料; 4. 电子废弃物类: 电冰箱, 电脑, 洗衣机, 电风扇, 电视机, 空调机, DVD; 5. 玻璃类: 镜子, 玻璃瓶罐, 平板玻璃; 6. 金属类: 罐头盒, 易拉罐, 金属厨具, 金属餐具; 7. 其他可回收物: 旧鞋子, 旧玩偶, 旧玩具, 废弃的垃圾桶, 废锁头, 废弃的篮球, 废弃的煤气罐, 废弃的香水瓶. 5. ##### 厨余垃圾:

    居民家庭中产生的易腐性食物垃圾, 包括菜帮菜叶, 剩菜剩饭, 瓜果皮核, 废弃食物等. 处理: (仅推测)堆肥, 沼气罐. 1. 菜帮菜叶 2. 剩菜剩饭 3. 瓜果皮核 4. 蛋壳 5. 鸡骨鱼刺 6. 动物内脏 7. 茶叶渣 8. 盆景等植物的残枝落叶 6. ##### 餐厨垃圾:

    餐饮企业和机关, 部队, 学校等单位的食堂, 餐厅在食品加工, 饮食服务, 单位供餐等活动中产生的食物残渣, 残液和废弃油脂等废弃物. 7. ##### 其它垃圾:

    指除可回收物, 厨余垃圾/餐厨垃圾之外的垃圾, 包括废弃食品袋 (盒), 废弃保鲜膜 (袋), 废弃纸巾, 废弃瓶罐, 灰土, 烟头等. 处理: 焚烧处理厂, 卫生填埋场. 1. 食品袋 (盒) 2. 保鲜膜 (袋) 3. 卫生纸, 纸巾 4. 陶瓷瓦罐 5. 尿片, 妇女卫生用品 6. 破碗, 碟 7. 坚果壳 8. 灰土 9. 烟头 10. 大骨头 11. 玉米核 12. 部分电池: (特别注意)(也见有害垃圾) 现在生产的1号, 5号, 7号等干电池是低求或者无汞电池, 所以就不属于有害垃圾了, 应投入 “其它垃圾” 中. 现在市面主流的干电池, 基本都是碱性电池. 主要成分为: 锌, 二氧化锰, 氢氧化钾, 符合相关国家标准要求, 基本无汞化. 8. ##### 有害垃圾:

    指废灯管, 废药品, 废油漆及其容器等对人体健康或者自然环境造成直接或潜在危害的生活废弃物. 处理: 安全处置. 1. 废灯管 2. 废药品 3. 废油漆 4. 杀虫剂 5. 化妆品 6. 部分电池: (特别注意)(也见其它垃圾) 虽然 “干电池” 已经被 “平反” 为 “其它垃圾”, 但并不是所有的电池都无害化了. 钮扣电池, 电子产品用的锂电池, 电动车电瓶等铅蓄电池和镍充电电池仍需作为 “有害垃圾” 进行回收, 可将其集中放置在社区, 酒店宾馆, 学校, 大型商场超市等设置的电池回收箱或有害垃圾桶, 由专业回收机构收集. 7. 其他有害垃圾: 废弃的染发剂壳 废弃的水银血压计, 温度计 废弃的洗甲水, 过期指甲油 度弃消毒剂, 老鼠药的壳 废弃的感光胶片, 相片底片

(二) 分类方法

根据大类粗分的原则, 分为可回收物, 厨余 (餐厨) 垃圾, 其它垃圾三类, 按地区属性不同, 采用以下分类方法:

  1. 居民小区

    一般可分为: 可回收物, 厨余垃圾, 其它垃圾三类. 2. ##### 单位餐饮区

    一般可分为: 可回收物, 餐厨垃圾, 其它垃圾三类. 3. ##### 单位办公区及公共场所

    一般可分为: 可回收物, 其它垃圾两类.

(三) 常用的生活垃圾分类标志

生活垃圾一般分为四类: 可回收物, 厨余垃圾, 其它垃圾和有害垃圾. 分别对应四种颜色垃圾桶: 蓝色, 绿色, 灰色和红色.  常用的生活垃圾分类标志:

  • 玻璃
  • 织物
  • 家具
  • 家用电器和电子产品
  • 灯管类
  • 家用化学品类
  • 电池类
  • 家庭厨余垃圾
  • 餐饮垃圾
  • 果蔬垃圾
  • 园林垃圾
  • 纸制品
  • 塑料制品
  • 纺织物
  • 其它类
快速查找
D
  • 订书钉:可回收垃圾
F
  • 方便面
  • 开封前:方便面桶、叉子:可回收
  • 开封后(粘上油后):方便面桶、叉子:不可回收
  • 面:厨余垃圾
S
  • 塑料
  • 塑料袋:其他垃圾
Z
  • 纸类:可回收物
  • 纸屑:其他垃圾
  • 纸巾/餐巾纸:其他垃圾
参考文献
  1. http://csglw.beijing.gov.cn/hjwsbz/ztzl/shljfl/flff/shljflff/201606/t20160624_15538.html
  2. http://csglw.beijing.gov.cn/hjwsbz/ztzl/shljfl/flxchb/201606/t20160624_15525.html

搭建此 WordPress 博客的备忘录

终于下定决心买个 VPS 搭个博客了. 虽然起因是 OneNote 用不了, 想自己搭个笔记服务器就是了. 把主要过程记录下来.

选购 VPS

如果想用下文的 TCP BBR 算法加速网络的话, 基本要选 KVM, OpenVZ 没法升级内核. 本人没钱, 所以用的是相对便宜的 VirMach. 由于国内网络有时不好, 不论什么服务器, 可能最好先测试一下各个数据中心的网络状况, 英文叫做 looking glass (VirMach 的), 多线程 100M 测试一下, ping 的话看看丢包率就行了吧.

ssh 安全性

创建新的用户, 不使用默认的 root 帐号:

# # 默认遵循 Arch Wiki 的规范, # 开头的行使用 root 权限
# useradd -m -s bash -G sudo <name> # 添加正常权限的用户
# passwd <name> # 设置密码
# visudo
# # 允许 sudo 组使用 sudo, 取消注释或者添加一行 "%sudo ALL=(ALL) ALL"
# vim /etc/ssh/sshd_config # vim 换成 nano, vi 都行
# # PermitRootLogin no
# # AllowUsers <name>
# # 以下可选
# # Port <喜欢的端口> # 以后用 ssh 后面加个 "-p <端口>"

换用 SSH Key, 不用密码登陆
(其实还是有个密码的, 要记住生成 SSH Key 的密码, 但是简单点(或者留空)安全性也一样)

$ # 以下为在客户端 (自己电脑) 操作
$ ssh-keygen -t ed25519 # 个人喜新厌旧, 其实 ed25519 换成 rsa 什么的也没什么问题
$ scp -P <端口> ~/.ssh/id_ed25519.pub <name>@<服务器地址>:
$ # 以下在服务器
$ mkdir ~/.ssh
$ chmod 700 ~/.ssh/
$ cat id_ed25519.pub >> .ssh/authorized_keys
$ rm id_ed25519.pub
$ chmod 600 .ssh/authorized_keys
$ sudo vim /etc/ssh/sshd_config
$ # 加上 "PubkeyAuthentication yes"
$ # 最后加上一行 "PasswordAuthentication no" <- 在这之前确认好可以用 Pubkey 登陆先

顺便一提看到 Arch Wiki 上还有启用两步验证的方法, 这里就懒的弄了. 有兴趣的看这里, 虽然里面提到了 Google, 但是理论上应该是不用访问 Google 的, 随便的两步验证软件都可以.

BBR 算法开启 (需要KVM)

不同网络加速效果不同啦. 自己上网查介绍.
首先, 内核版本要 4.9 以上 (uname -a 查看版本). 基本上可以 GitHub 上找个自动安装脚本. 以下是手工开启:

# 升级内核不详细说, 自己查相应发行版的方法. 如果是直接安装软件包的话, 旧的发行版可能会不兼容最新的内核包(如我的 Ubuntu 16 装 5.2 内核会报缺少 libssl1.1, 换成旧一点的如 4.20 就行); 麻烦一点可以自己编译, 可惜太懒.
# 升级内核记得更新 grub.cfg, 重启
# # 临时开启, 重启失效
# modprobe tcp_bbr
# sysctl net.ipv4.tcp_congestion_control=bbr
# sysctl net.core.default_qdisc=fq
# # 开机自动开启
# echo "tcp_bbr" >> /etc/modules-load.d/modules.conf
# echo "net.core.default_qdisc = fq" >> /etc/sysctl.conf
# echo "net.ipv4.tcp_congestion_control = bbr" >> /etc/sysctl.conf
WordPress 安装

我的选择是 Nginx + PHP 7.3 + MariaDB + WordPress. 方法各个发行版不同, 要自己上网查, 提供一个 Ubuntu 的.

# add-apt-repository ppa:ondrej/nginx
# add-apt-repository ppa:ondrej/php
# apt update
# apt install nginx php7.3-fpm php7.3-mysql php7.3-curl php7.3-gd php7.3-mbstring php7.3-xml php7.3-xmlrpc php7.3-zip php7.3-opcache php7.3-bcmath php7.3-imagick mariadb-server

MariaDB

# 跟着提示走行了
# mysql_install_db # 这个可能没用啦
# mysql_secure_installation
# mysql --user=root --password="密码这里"
MariaDB> CREATE DATABASE wordpress;
MariaDB> GRANT ALL PRIVILEGES ON wordpress.* TO "wp-user"@"localhost" IDENTIFIED BY "choose_db_password";
MariaDB> FLUSH PRIVILEGES;
MariaDB> EXIT

Nginx(比较新版的 Nginx 默认配置都挺好的了, 略)

PHP 7.3

# # *** /etc/php/7.3/fpm/php.ini ***
# # 没有什么好说的吧, 基本默认配置就挺好了, 可以上网再查一查
# # 唯一 php.ini  "opcache.enable=1" 前的分号去掉取消注释可以提升性能.

# # *** /etc/nginx/sites-enabled/default ***
# # 这里的 php7.3 不同 PHP 版本不同
location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/run/php/php7.3-fpm.sock;
}

WordPress

# # *** /etc/nginx/sites-enabled/default ***
# # 先在这里认准 root 后面的网站目录, 一般是 "/var/www/html" 之类的.
# # 下面这里因为我不想把 WordPress 放网站根目录, 也没想好根目录还能放啥, 就直接跳转了.
location = / {
    rewrite / /wordpress/;
}

# cd /var/www/html # 按照相应的 root 目录
# # 中文英文选个, 其实仪表盘里设置也可以更改语言
# wget https://cn.wordpress.org/latest-zh_CN.tar.gz # 中文版
# wget https://wordpress.org/latest.tar.gz # 英文版
# tar -zxf latest.tar.gz

# # 其实要注意的还有权限问题
# useradd -M nginx
# # 更改 nginx.conf, 改为 "user nginx;"
# # 更改 php-fpm.conf, 改为 "listen.owner = nginx" 和 "listen.group = nginx"
# chown -R nginx:nginx /var/www

开启各个服务

# systemctl start nginx
# systemctl start php7.3-fpm
# systemctl start mysql
# systemctl enable nginx
# systemctl enable php7.3-fpm
# systemctl enable mysql

然后到网站上去初始化 WordPress 就行了.

绑定域名

一般我会直接把没有 www 前缀的跳转到 www 的域名. 如果想禁止其他方法访问的话, 注意要先把 WordPress 设置里的地址更改成相应的域名.

# cp /etc/nginx/sites-enabled/default /etc/nginx/sites-enabled/domain
# vim /etc/nginx/sites-enabled/default
# # 改成只剩这些, 禁止 ip 访问, 或者假 DNS
server {
    listen 80 default_server;
    listen [::]:80 default_server;

    server_name _;
    location / {
        deny all;
    }
}
# vim /etc/nginx/sites-enabled/domain
# # 加入
server {
        listen 80;
        server_name 没有www的域名(如liberty.gensokyoradio.moe);
        location / {
                rewrite ^/(.*)$ http://www.liberty.gensokyoradio.moe/$1 permanent;
        }
}
# # server_name _; 改成
server_name www.liberty.gensokyoradio.moe;
参考链接
  1. https://wiki.archlinux.org/index.php/OpenSSH
  2. https://wiki.archlinux.org/index.php/Nginx
  3. https://wiki.archlinux.org/index.php/Wordpress

话说孤陋寡闻 WordPress 编辑器怎么变成这个样子了?