如何清理我的硬盘?

不久之前,我只使用了我的硬盘的35%。最近它突然增加到54%,而我的磁盘空间只有16GB,所以被占用了超过3GB。
据我记得,我没有成功构建mysql,我安装了gitolite,这要求我从源代码构建git,而这个过程中有很多依赖项(我想这是为了构建文档,我记得看到了latex和其他软件包,但当时我有点昏昏欲睡)。我怀疑这就是占用磁盘空间的原因。
总之,到目前为止,我已经删除了我知道的源文件夹,并运行了这些命令。还能做些什么呢?(3GB真的很大)
sudo apt-get autoclean
sudo deborphan | xargs sudo apt-get -y remove --purge

在执行上述操作后,我使用了ncdu,并发现以下情况:
1. Git本身实际上在'/usr/local/libexec/git-core'目录下的152个文件中使用了502MB的空间。谁知道呢。我发现这些文件中大部分都是4.6MB大小,感觉很奇怪...
2. MySql占用了我/tmp文件夹中的1GB+空间。
3. 我不小心复制了我的mono源代码文件夹,其中包含两个构建版本的mono,总共占用了1.7GB的空间。
在删除了源代码的副本、额外的mono构建(总共2.6GB)以及临时文件夹中的mysql后,df命令现在报告的空间利用率为28%,而不是之前的54%,这让我感觉好多了。
我还是很惊讶git占用了502mb的空间。在Windows上,它只占用了57mb(大约少了10倍)。而等效的文件夹(C:\Program Files (x86)\Git\libexec\git-core)将所有这些应用程序作为git的快捷方式。而git本身只有1.2mb(不是4.6mb)。我还检查了Linux的git-core文件夹是否都是链接,我知道它们不是软链接(我使用了命令find . -maxdepth 1 -type l -print0 | xargs -0 ls -ld)。我尝试了stat git和stat git-add,并发现它们具有相同的inode。所以这些文件中的大部分应该是git的硬链接(我猜测)。所以git实际上并没有占用那么多的空间。

@Jasper Loy:我想帮忙,但是我只能通过sh访问这台机器。 - user4482
5个回答

我最喜欢的两个寻找和可视化文件系统浮肿的工具是gdmap和fslint。从apt-cache总结:

apt-cache show gdmap
apt-cache show fslint

gdmap: "GdMap是一款可以可视化磁盘空间的工具。你是否曾经想知道为什么你的硬盘已满,或者哪个目录和文件占用了大部分空间?通过GdMap,这些问题可以迅速得到答案。它使用垫子树图来显示目录结构,可以用一张图片来可视化一个完整的文件夹甚至整个硬盘。"
fslint: "拥有卸载软件包的界面,并且可以找到诸如:."
- Duplicate files
- Problematic filenames
- Temporary files
- Bad symlinks
- Empty directories
- Nonstripped binaries"

好的,这里有一个基于ncurses的版本,如果你想要的话,它会打印出井号来显示相对大小。
ncdu
Description: ncurses disk usage viewer
    Ncdu is a ncurses-based du viewer. It provides a fast and easy-to-use interface through famous du utility. It allows to browse through the directories and show
    percentages of disk usage with ncurses library.

还有两个来自我的系统仓库的基于文本的应用程序,它们更加复杂:
gt5
durep

apt-get install fslint给我安装了fslint-gui而不是fslint。这两者都需要图形界面,而我只能通过shell访问该系统。你有其他的建议吗? - user4482
fslint实际上是fslint命令行工具的图形界面前端。在我的系统中,这些工具位于/usr/share/fslint/fslint/目录下。听起来gdmap需要一个curses或者ascii艺术化的前端界面。:) 有一些脚本可以简单地使用"du -sh *"。我使用像"du -sh | grep [0-9][MG]"这样的快捷方式。 - belacqua
我在我的原始回答中补充了ncdu的描述。 - belacqua

...无法构建mysql,[...]构建git和依赖项...
你在哪里运行的?在你的主目录中使用源代码和make命令吗?删除相关目录。
如果你使用apt-get(或使用apt的synaptic)安装软件包,则历史记录可在/var/log/apt中找到。你可以在终端中使用less命令查看它:
less /var/log/apt/history.log

如果你看到像 history.log.1.gz 这样的条目,你必须使用 zless,因为这些文件是压缩的。
zless /var/log/apt/history.log.1.gz

另一个占用大量空间的是缓存,特别是apt。您可以通过运行du -msh /var/cache/apt/archives来检查apt使用的磁盘空间。这些文件在重新安装程序时使用,并且可以安全地删除。
sudo apt-get clean

Ubuntu文档中有一个(更完整的)关于磁盘空间的页面,可以在https://help.ubuntu.com/community/RecoverLostDiskSpace找到。

没有历史记录,只有term.log。我看到很多texlive。我看到libboost-regex1.34.1,很多-perl,而且这个文件大约有400行。日志是从昨天开始的,当时我开始安装gitolite。那么多的软件包...也许我现在应该卸载不再需要的库?不管怎样,我应该用日志文件做什么呢?我看不到我安装的目录。 - user4482
/var/log/apt/ 目录中的日志文件仅包含使用 apt-get 安装软件包时的更改。对于 dpkg,请参阅 /var/log/dpkg.log(该文件较难阅读)。可以使用 sudo apt-get autoremove 命令删除未被应用程序使用的库文件。哦,我忘记了另一件节省磁盘空间的重要事情。 - Lekensteyn
添加了sudo apt-get clean这个东西。 - Lekensteyn


kdirstat 也非常适合找出硬盘空间消耗的位置,并进行清理。

$ apt-cache search kdirstat
kdirstat - graphical disk usage display with cleanup facilities

请注意,kdirstat是一个KDE应用程序,将安装KDE库,而gdmap(在另一个答案中)则不会。
您还可以查看Baobab。Baobab旨在与kdirstat或gdmap类似,但并不像它们那样好。Baobab似乎是标准gnome-utils的一部分...
$ apt-cache search baobab
gnome-utils - GNOME desktop utilities

Baobab并不会删除任何东西。它只是以图形方式显示哪些文件夹占用了大部分磁盘空间。 - papukaija

从我尝试的所有解决方案中,只有一个能真正提供空间清洁。
apt-get remove --auto-remove  --purge  packagename

我刚刚安装了一个依赖包大小为32MB的软件,当我运行apt-get remove --purge package时,apt-get只显示会释放3.5MB的空间。但是当我加上--auto-remove参数后,所有的依赖都被移除,并且获得了更多的空间。 此外,如果仍然存在KDE的痕迹没有被删除,可以使用以下命令进行删除。
 apt-get remove kdelibs-bin kdelibs5-data 

上一个日志文件如果不需要的话,可能会变得非常烦人,请将其删除。
cat /dev/null >  /var/log/auth.log  

rm /var/cache/apt/archives/*