一、问题描述
打开Ubuntu 系统,发现不能正常启动,提示 “started user manager for UID xxx”。
二、解决办法
开机,按 shift
进入 系统。
选择第二个,高级选项。
选择 recovery mode
。
选择 root
,按照提示输入密码即可。
查看磁盘情况
:
df -h
三、查找和清理磁盘空间的指令
1. sudo find / -type f -size +50M
这是一个查找命令,本身不会删除任何文件。它是清理工作的“侦察兵”。
find
: 强大的文件查找命令。/
: 从根目录开始搜索。-type f
: 只查找类型为“文件”(file)的项目,排除目录。-size +50M
: 查找大小大于50MB(MegaBytes)的文件。+
表示“大于”,也可以用-size +1G
来查找大于1GB的文件。
作用:在整个文件系统中搜索并列出所有大于50MB的文件。
风险:无(只读操作)。它只显示结果,不会对文件做任何修改。
适用场景:当不知道是哪些大文件占满了磁盘时,用这个命令来定位“元凶”。它的输出会显示文件的完整路径和大小,决定下一步要清理、压缩或移动哪个文件。
2. du -sh /* | sort -nr | head -n 10
用于快速找出根目录下占用空间最大的前10个一级目录。
2.1. du -sh /*
du
: Disk Usage,用于估算文件和目录磁盘使用空间的命令。-s
: Summarize(汇总)。只显示每个指定参数的总计大小,而不显示其子目录的详细信息。这是关键选项,没有它,du
会递归列出所有子目录的大小,输出会非常冗长。-h
: Human-readable(人类可读)。以易读的格式(如K、M、G)显示大小,而不是默认的字节数。/*
: 通配符,表示根目录(/
)下的所有直接子项(文件和目录)。它包括了/home
,/var
,/usr
,/tmp
等。- 注意:这里的
*
是shell展开的,意味着du
命令实际接收到的参数是/bin
、/boot
、/dev
、/etc
… 等等所有在根目录下可见的条目。
- 注意:这里的
这部分的作用:计算并汇总显示根目录下每一个直接子文件或子目录所占用的总磁盘空间。
输出:
12G /home
6.5G /usr
3.2G /var
800M /lib
200M /boot
...
2.2. |
(管道符)
- 这是Linux中最强大的概念之一。它将前一个命令(
du
)的标准输出(stdout)作为标准输入(stdin)传递给后一个命令(sort
)。
2.3. sort -nr
sort
: 对文本行进行排序的命令。-n
: Numeric-sort(数值排序)。按照字符串的数值大小进行排序,而不是按字母顺序。例如,这样10
会排在2
后面,而不是按字符‘1’和‘2’来排。-r
: Reverse(反向)。将结果倒序排列,即从大到小。
这部分的作用:接收 du
命令的输出,并依据第一列的尺寸数值进行从大到小(降序)的排序。
2.4. head -n 10
head
: 输出文件或输入流的前几行。-n 10
: 指定显示前10行。
这部分的作用:从已经排好序(从大到小)的列表中,仅取出最前面的10行,也就是占用空间最大的10个项目。
整体作用与输出示例
将所有这些部分组合起来,这个命令管道的工作流程是:
- 测量:计算根目录下每个一级子目录的大小(
du -sh /*
)。 - 排序:将这些结果按占用空间从大到小排序(
sort -nr
)。 - 筛选:只显示最大的10个(
head -n 10
)。
最终输出看起来会像这样:
24G /home
15G /var
11G /usr
3.5G /snap
1.2G /opt
980M /lib
550M /boot
120M /etc
25M /root
6.5M /run
从这个结果中,可以一目了然地看出是 /home
(用户数据)和 /var
(系统日志、缓存等)占用了绝大部分空间,这为下一步的清理工作指明了方向。
重要提示和变体
需要 sudo
权限:
* 有些系统目录(如 /root
, /proc
, /sys
)普通用户没有读取权限。如果直接运行上述命令,这些目录后会显示“权限被拒绝”,并且其大小会显示为0,这会导致结果不准确。
* 正确做法:在命令前加上 sudo
,以root权限运行,以确保能准确统计所有目录。
bash sudo du -sh /* | sort -nr | head -n 10
查看隐藏目录:
* 根目录下有些以点(.
)开头的隐藏目录(如 /.cache
, /.snapshots
),上面的命令不会统计它们,因为 /*
默认不匹配隐藏文件。
* 如果需要查看,可以显式指定:
bash sudo du -sh /.* | sort -nr | head -n 10
注意:这会同时匹配 .
(当前目录,即根目录本身)和 ..
(上级目录),通常可以忽略它们。
深入挖掘:
假设发现 /var
非常大,可以用同样的命令进一步深入调查 /var
的子目录:
bash sudo du -sh /var/* | sort -nr | head -n 10
这可能会显示是 /var/log
(日志)还是 /var/lib
(数据库文件)占用了大量空间。
3. sudo rm -rf /tmp/*
这是一个强力删除命令,用于清空临时文件目录。
sudo
: 获取超级用户权限,因为/tmp/
目录下的某些文件可能属于root用户。rm
: 删除文件或目录的命令(remove)。-r
: 递归(recursive)删除。如果遇到目录,会删除该目录及其内部所有内容。-f
: 强制(force)删除。忽略不存在的文件,不显示任何确认提示。这是一个危险标志,因为删除后就没了。/tmp/*
: 目标路径。/tmp/
是系统的临时文件夹,许多程序和系统进程都会在这里存放临时文件。*
通配符表示“该目录下的所有文件和文件夹”。
作用:强制递归删除 /tmp
目录下的所有内容。
风险:高。虽然 /tmp
设计就是可以清理的,但如果错误地执行了 sudo rm -rf / tmp/*
(在 /
后面多了一个空格),它会删除根目录下的所有文件,导致系统彻底毁灭。输入此命令时务必再三检查空格!
适用场景:系统临时目录过大,需要立即释放空间时。重启后,系统通常也会自动清理 /tmp
。
4. sudo apt-get clean
用于清理软件包管理工具(APT)下载的缓存文件。
apt-get
: Debian/Ubuntu系列的包管理工具。clean
: 清理命令。
作用:删除 /var/cache/apt/archives/
和 /var/cache/apt/archives/partial/
目录下所有已下载的 .deb
软件包文件。这些文件在使用 sudo apt-get install
或 sudo apt install
安装软件后就已经没用了。
风险:低。非常安全。唯一的影响是,如果以后要重新安装某个软件,需要重新下载这些包,但这通常不是问题。
适用场景:这是最安全、最有效的清理手段之一。/var/cache/apt/archives/
目录很容易积累几个GB的缓存,定期清理可以释放大量空间。
5. sudo apt-get autoclean
clean
命令的一个更保守的版本。
autoclean
: 自动清理。
作用:删除那些无法再从软件源下载到的或者已经有新版本替代的旧版 .deb
软件包缓存。它会保留当前已安装软件版本的缓存。
风险:极低。比 clean
更保守、更智能。
适用场景:如果想保留一些当前软件的安装包以备快速重装,但又想清理掉一些肯定用不到的旧包,可以使用这个命令。它释放的空间通常比 clean
少。
clean
vs autoclean
:
clean
: 大扫除,把所有安装包缓存都扔了。autoclean
: 智能清理,只扔掉的废品和垃圾。
6. sudo journalctl --vacuum-time=1d
用于清理系统日志(由 systemd-journald
服务管理)。
journalctl
: 查询和显示系统日志的工具。--vacuum-time
: “抽真空”选项,按时间清理。1d
: 时间单位,这里是“1天”。
作用:删除所有超过指定时间的系统日志文件。--vacuum-time=1d
会保留最近1天的日志,删除1天前的所有日志。
变体:
sudo journalctl --vacuum-size=500M
: 限制日志目录的总大小不超过500MB,会删除最旧的日志直到满足条件。
风险:中低。清理日志是正常的系统维护,但如果需要根据旧日志来排查历史问题,清理后这些信息就丢失了。
适用场景:系统日志文件(通常在/var/log/journal/
)体积庞大,占用了过多磁盘空间。这是解决“/var/log 磁盘空间不足”问题的关键命令。
如何使用其结果进行清理:
找到大文件后,需要手动决定如何处理它们。
# 1. 先查找
sudo find / -type f -size +100M
# 2. 查看列表,判断哪个文件可以删除
# 例如,发现一个巨大的错误日志: /var/log/some_app.log
# 3. 然后使用 rm 命令谨慎删除(或者用 `> /var/log/some_app.log` 清空它)
sudo rm /var/log/some_app.log
# 或者清空而不删除文件(对于正在被程序使用的日志文件很安全)
sudo sh -c '> /var/log/some_app.log'
警告:永远不要盲目删除 find
命令找到的文件,尤其是系统文件。一定要先确认文件的性质。
安全提示
命令 | 作用 | 风险 | 建议 |
---|---|---|---|
sudo rm -rf /path/to/dir | 强制删除目录 | 极高 | 极端谨慎! 绝对不要对系统核心目录使用。 |
sudo apt-get clean | 清理所有软件包缓存 | 低 | 定期执行,非常安全。 |
sudo apt-get autoclean | 清理过时的软件包缓存 | 极低 | 可以更频繁地执行。 |
sudo journalctl --vacuum-* | 清理系统日志 | 中低 | 按需执行,建议保留至少1-2周的日志。 |
sudo find / -size +50M | 查找大文件 | 无(只读) | 清理前的必备诊断步骤。 |
黄金法则:在执行任何 rm -rf
命令之前,尤其是带有 sudo
的,请double-check(双重检查)输入的路径。一个多余的空格就可能造成灾难性后果。
输入reboot,重启,可正常进入系统