POSTS
如何规整你的 Arch Linux 系统
4 min read
前言:请了解根目录的结构,并达成共识。约定好我们不应该处理哪些文件夹。
一般结构
- boot:此目录不做处理。因为这里存放的是引导文件和内核。
- efi:此目录不做处理。因为这里是 ESP 的挂载点。
- etc:此目录需要做处理。因为这里可能含有用户修改过的配置文件。
- home:此目录暂时不做处理。限于篇幅原因,清理家目录我打算放到下一篇文章,本篇文章仅介绍清理系统目录。
- root:此目录暂时不做处理。限于篇幅原因,清理家目录我打算放到下一篇文章,本篇文章仅介绍清理系统目录。
- srv:此目录需要做处理。因为这里可能含有用户修改过的关于服务器的数据存储路径。
- tmp:此目录不做处理,因为它是一个
tmpfs文件系统。
运行时数据
- run:此目录不做处理,因为它是一个
tmpfs文件系统。
供应商提供的操作系统资源
- /usr:此目录需要做处理。因为这里含有操作系统文件,此目录不应被用户修改,如必要需检查一遍并还原修改。
持久变量系统数据
- /var:此目录需要做处理。关于此目录的介绍请参阅:持久变量系统数据
虚拟内核和 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
历史评论
学到了