POSTS

如何规整你的 Arch Linux 系统

4 min read

前言:请了解根目录的结构,并达成共识。约定好我们不应该处理哪些文件夹。

一般结构

  • boot:此目录不做处理。因为这里存放的是引导文件和内核。
  • efi:此目录不做处理。因为这里是 ESP 的挂载点。
  • etc:此目录需要做处理。因为这里可能含有用户修改过的配置文件。
  • home:此目录暂时不做处理。限于篇幅原因,清理家目录我打算放到下一篇文章,本篇文章仅介绍清理系统目录。
  • root:此目录暂时不做处理。限于篇幅原因,清理家目录我打算放到下一篇文章,本篇文章仅介绍清理系统目录。
  • srv:此目录需要做处理。因为这里可能含有用户修改过的关于服务器的数据存储路径。
  • tmp:此目录不做处理,因为它是一个 tmpfs 文件系统。

运行时数据

  • run:此目录不做处理,因为它是一个 tmpfs 文件系统。

供应商提供的操作系统资源

  • /usr:此目录需要做处理。因为这里含有操作系统文件,此目录不应被用户修改,如必要需检查一遍并还原修改。

持久变量系统数据

虚拟内核和 API 文件系统

此目录不做处理。因为这是一个虚拟内核和 API 文件系统。详细信息请参阅:虚拟内核和 API 文件系统

  • dev
  • proc
  • sys

兼容性符号链接

  • bin -> usr/bin:此目录不做处理。因为我们将会处理 /usr/bin 目录。
  • sbin -> usr/bin:此目录不做处理。因为我们将会处理 /usr/bin 目录。
  • lib -> usr/lib:此目录不做处理。因为我们将会处理 /usr/lib 目录。
  • lib64 -> usr/lib:此目录不做处理。因为我们将会处理 /usr/lib 目录。

其他目录

  • opt:此目录需要做处理。因为此目录包含一些大型软件包,你可能需要处理卸载残留。
  • mnt:此目录需要做处理。是供用户自行挂载分区所使用的,你可能曾经把这里搞得乱七八糟的。

总结

我们需要对以下目录做处理:

手动处理:srv mnt

etc:如果你想要整理一下此文件夹,请跟随以下步骤。

# 查找在此目录下,不被 pacman 管理的文件
find /etc | LC_ALL=C pacman -Qqo - 2>&1 >&- >/dev/null | cut -d ' ' -f 5-

# 查找被 pacman 管理的,但被修改过的文件
sudo pacman -Qkk 2>&1 | grep /etc

var:请谨慎清理此文件夹。此文件夹可能含有部分软件的家目录。

# 查找在此目录下,不被 pacman 管理的文件
find /var | LC_ALL=C pacman -Qqo - 2>&1 >&- >/dev/null | cut -d ' ' -f 5-

# 查找被 pacman 管理的,但被修改过的文件
sudo pacman -Qkk 2>&1 | grep /var

usr:此目录不应该被修改过,请确保始终使用 pacman 管理软件包。让专业的软件干专业的事。但如果被修改过,请尝试跟随以下步骤。

# 查找在此目录下,不被 pacman 管理的文件
find /usr | LC_ALL=C pacman -Qqo - 2>&1 >&- >/dev/null | cut -d ' ' -f 5-

# 查找被 pacman 管理的,但被修改过的文件
sudo pacman -Qkk 2>&1 | grep /usr

opt:此目录不应该被修改过,请确保始终使用 pacman 管理软件包。让专业的软件干专业的事。但如果被修改过,请尝试跟随以下步骤。

# 查找在此目录下,不被 pacman 管理的文件
find /opt | LC_ALL=C pacman -Qqo - 2>&1 >&- >/dev/null | cut -d ' ' -f 5-

# 查找被 pacman 管理的,但被修改过的文件
sudo pacman -Qkk 2>&1 | grep /opt

卸载不需要的软件

# 下面几条命令用到了 expac,需要先安装它。

# 查找主动安装的软件包
pacman -Qe

# 查找主动安装的,不在 base 包组里的软件包。
comm -23 <(pacman -Qqe | sort) <(expac -l '\n' '%E' base | sort)

# 查找主动安装的,不在 base base-devel 包组的软件包。
comm -23 <(pacman -Qqe | sort) <({ pacman -Qqg base-devel; expac -l '\n' '%E' base; } | sort -u)

# 列出没有被其他软件包依赖、也不属于 base 和 base-devel 的已安装软件包:
comm -23 <(pacman -Qqt | sort) <({ pacman -Qqg base-devel; echo base; } | sort -u)

# 同上,并附上描述:
expac -H M '%-20n\t%10d' $(comm -23 <(pacman -Qqt | sort) <({ pacman -Qqg base-devel; echo base; } | sort -u))

清理不被包管理器所跟踪的文件

使用 pacman 安装 lostfiles。lostfiles 包含一些过滤规则,会过滤掉常见的误报。

sudo lostfiles

清理不需要的用户和组

编辑以下文件:

  • /etc/passwd
  • /etc/group
  • /etc/shadow
  • /etc/gshadow

请保留 root 用户,root 组。以及其他你所需要的用户,组。系统用户和组请勿保留。然后运行以下命令重新生成系统用户,组。

注意:这样重建出来的系统用户,UID 可能和原来不一样,原先属于它们的文件需要重新确认属主。拿不准的用户就不要删。

# 列出能登录的用户(这些用户请一定要保留,除非你想删除这个用户。)
cat /etc/passwd | grep -v nologin

# 列出不能登录的用户(大多是系统用户,但不是全部)
cat /etc/passwd | grep nologin

# 重新生成系统用户
sudo systemd-sysusers

参考资料

历史评论

用户 puzzle9 说:

学到了