Linux 优化


[[Linux 换源]]

[[SSH 优化]]

[[SSH 密钥登录]]

[[Linux 的 DNS 配置]]

国内访问不上8.8.8.8,而有些时候路由器的 DNS 又容易抽风,因此推荐设置一个国内的 DNS。

安装工具优化

安装 Brew

Ubuntu

[[Ubuntu or Debian 换源]]

安装 apt-fast

sudo add-apt-repository ppa:apt-fast/stable
sudo apt-get update
sudo apt-get -y install apt-fast

Shell 设置

Vim 优化

# 安装 vim
sudo apt install vim

# 新建一个 vim 的配置文件:
vim ~/.vimrc

内容如下

set nu                " 显示行号
colorscheme desert    " 颜色显示方案
syntax on             " 打开语法高亮

zsh shell 方案

# 安装依赖
sudo apt install git -y

# 安装zsh
sudo apt install zsh -y

# 更改默认shell为zsh
chsh -s /bin/zsh

# 安装oh-my-zsh
sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)" -y

命令补全插件:zsh-autosuggestions

git clone https://github.com/zsh-users/zsh-autosuggestions $ZSH_CUSTOM/plugins/zsh-autosuggestions
sed -i 's/plugins=(\(.*\))/plugins=(\1 zsh-autosuggestions)/' ~/.zshrc 

快捷目录跳转插件:autojump

sudo apt install autojump -y
sed -i 's/plugins=(\(.*\))/plugins=(\1 autojump)/' ~/.zshrc 

命令语法检测插件:zsh-syntax-highlighting

git clone https://github.com/zsh-users/zsh-syntax-highlighting.git $ZSH_CUSTOM/plugins/zsh-syntax-highlighting
sed -i 's/plugins=(\(.*\))/plugins=(\1 zsh-syntax-highlighting)/' ~/.zshrc

其他 zsh 的优化操作

关掉 URL 反斜杠转义以及禁用 zsh 自动更新:
echo "DISABLE_MAGIC_FUNCTIONS=true" >> ~/.zshrc
echo "zstyle ':omz:update' mode disabled" >> ~/.zshrc

命令行工具

此处的安装命令均以 brew 为主,如果想要使用其他安装工具,请自行去官网查找

工具名称作用安装命令
batbrew install bat
tldr快速查看常用命令的使用实例
exals 的替代品
fzf
lrzsz

GitHub CLI

安装:https://github.com/cli/cli/blob/trunk/docs/install_linux.md

GitHub CLI 命令补全:gh completion

mkdir -p "${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/completions"
gh completion -s zsh > "${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/completions/_gh"
exec zsh

Tmux 优化

Tmux 安装

# Ubuntu 或 Debian
sudo apt-get install tmux

# CentOS 或 Fedora
sudo yum install tmux

# Mac
brew install tmux

安装 Oh-My-Tmux

curl -fsSL "https://github.com/gpakosz/.tmux/raw/refs/heads/master/install.sh#$(date +%s)" | bash

配置

sed 's/#set -g mouse on/set -g mouse on/' ~/.config/tmux/tmux.conf.local

配置 ZRAM 和 Swap

内存不太够用,但又暂时不想升级配置,可以设置 ZRAM 和磁盘 Swap,缓解内存不足导致进程被系统杀掉的问题。

  • ZRAM:将内存中的数据压缩后存放在内存里,拿一部分 CPU 开销换取更多可用空间,通常比磁盘 Swap 快。
  • 磁盘 Swap:使用磁盘空间存放换出的内存数据,速度较慢,主要作为内存不足时的兜底。

比较适合 2~8GB 内存的小型 VPS、办公电脑和开发测试机,磁盘最好是 SSD。内存更大的机器也可以使用,主要看实际内存压力。数据库、实时服务等对延迟敏感的场景,需要谨慎评估。

Swap 不能代替物理内存。如果机器长期内存不足、频繁换页,还是建议升级内存或减少服务数量。以下命令适用于使用 systemd,且软件源提供 systemd-zram-generator 的 Ubuntu 或 Debian 系统。

检查现有配置

先检查机器内存和已经启用的 Swap,避免重复配置:

free -h
sudo zramctl
sudo swapon --show
df -h /

如果系统已经配置了 ZRAM,建议调整现有配置,不要同时使用多个 ZRAM 管理工具。

配置 ZRAM

安装 ZRAM 管理工具:

sudo apt update
sudo apt install -y systemd-zram-generator

写入配置:

cat << 'EOF' | sudo tee /etc/systemd/zram-generator.conf > /dev/null
[zram0]
# 物理内存的一半,最大 4GiB,数值单位为 MiB
zram-size = min(ram / 2, 4096)
swap-priority = 100
EOF

zram-size 设置的是 ZRAM 可存放的未压缩数据容量,并不会立即占用这么多物理内存,实际占用取决于使用量和压缩效果。

swap-priority 是交换空间的优先级,数值越大越优先使用。这里让 ZRAM 优先于后面配置的磁盘 Swap。

首次配置后,立即启用:

sudo systemctl daemon-reload
sudo systemctl start /dev/zram0

生成器会在开机时自动配置 ZRAM,不需要额外执行 systemctl enable。这里启动设备对应的单元,会连同生成的 Swap 单元一起启用。

检查状态:

sudo zramctl
sudo swapon --show
free -h

创建 Swap 文件

以创建 2GiB 的 Swapfile 为例。执行前确认根分区空间足够,并且 /swapfile 不存在。

以下方式适用于常见的 ext4 等文件系统。如果使用 Btrfs,需要按其专用方式创建 Swapfile,不能直接照搬。已有 Swapfile 不要重复执行 mkswap。

# 创建文件
sudo fallocate -l 2G /swapfile

# 限制为仅 root 可读写
sudo chmod 600 /swapfile

# 初始化为交换空间
sudo mkswap /swapfile

设置开机自动启用,优先级低于 ZRAM:

grep -qE '^[[:space:]]*/swapfile[[:space:]]' /etc/fstab \
  || echo '/swapfile none swap defaults,pri=10 0 0' \
     | sudo tee -a /etc/fstab > /dev/null

如果 /etc/fstab 中已经有 /swapfile 配置,上面的命令不会修改原有内容,需要自行检查。

立即启用:

sudo swapon --priority 10 /swapfile

检查配置

sudo zramctl
sudo swapon --show
free -h

swapon --show 中应该能看到两个交换空间,其中大小随实际配置变化:

NAME       TYPE      SIZE USED PRIO
/dev/zram0 partition   4G   0B  100
/swapfile  file        2G   0B   10

系统分配交换空间时会优先使用 ZRAM,再使用优先级更低的磁盘 Swap。ZRAM 中的数据不会因为配置了 Swapfile 就自动转存到磁盘。

如果需要休眠,ZRAM 不能作为休眠镜像的存储位置,还需要单独配置容量足够的磁盘 Swap 和恢复参数。

启用定期 TRIM(可选)

删除文件后,文件系统会将对应空间标记为可用,但底层存储不一定知道这些数据已经不需要了。TRIM 可以将这些空闲范围通知给 SSD 或云盘后端,帮助存储回收空间,并有利于维持 SSD 的长期写入性能。

适合支持 discard 的 SSD、NVMe 和虚拟磁盘。云服务器能否使用取决于服务商是否开放支持,不支持的话直接跳过即可。

TRIM 不会扩大磁盘容量,也不会让 df -h 显示的可用空间凭空增加。它不是安全擦除工具,但可能使已删除的数据更难恢复,准备恢复误删文件时不要执行。

检查是否支持

lsblk -D

查看系统磁盘及对应分区、逻辑卷的 DISC-MAX:

  • 非零:设备向系统声明支持 discard,可以继续测试。
  • 0B:设备没有提供 discard 能力。

例如:

NAME                      DISC-ALN DISC-GRAN DISC-MAX DISC-ZERO
sda                              0        4K       1G         0
└─sda3                           0        4K       1G         0
  └─ubuntu--vg-ubuntu--lv        0        4K       1G         0

这里磁盘、分区和 LVM 逻辑卷的 DISC-MAX 都非零,符合继续测试的条件。DISC-ZERO 为 0 不代表不支持 TRIM。

手动测试

对根文件系统执行一次 TRIM:

sudo fstrim -v /

成功后会看到类似输出:

/: 6.7 GiB (7169220608 bytes) trimmed

表示向下层存储提交了约 6.7GiB 空闲范围的 discard 请求,不代表新增了同等大小的可用空间,也不保证后端实际回收了同等大小的物理存储。

如果提示 the discard operation is not supported,说明当前文件系统或下层存储链路不支持,不必强行启用。

启用定时任务

以下命令适用于使用 systemd,且已提供 fstrim.timer 的系统:

# 开机自动启用,并立即启动定时器
sudo systemctl enable --now fstrim.timer

# 查看下次执行时间
systemctl list-timers fstrim.timer

通常默认每周执行一次,具体以系统配置为准。--now 启动的是定时器,不等于立即执行一次 TRIM。

输出中,NEXT 是下次执行时间,LAST 是上次触发时间,ACTIVATES 通常为 fstrim.service。

查看自动执行的结果:

sudo journalctl -u fstrim.service -n 30 --no-pager

启用后交给系统定期执行即可,不需要重复添加 cron 任务,也不必为了 TRIM 再给 /etc/fstab 添加持续 discard 挂载选项。


如果本文帮助到了你,帮我点个广告可以咩(o′┏▽┓`o)


评论
  目录