删除文档以节省硬盘空间

我喜欢在Virtual Box虚拟机中创建一个相对较小的Ubuntu安装。基本上,它只需要提供TeX Live和相关工具。我发现现在我在/usr/share/doc下有将近1GB的数据。在这种情况下,我不需要这些文档,只需要与LaTeX相关的man页面,而它们并不位于那里。
有没有办法使用apt-get卸载所有这些文档文件? 或者,直接删除/usr/share/doc的内容是否合理安全? 我希望与他人共享Virtual Box虚拟机,他们不应该遇到任何问题。

3相关链接:http://askubuntu.com/questions/177566/what-is-the-use-of-doc-packages - Mechanical snail
Debian相同的问题 https://unix.stackexchange.com/questions/180400/is-it-safe-to-empty-usr-share-doc - user7610
Denilson的回答解决了这个问题,而不需要使用锤子。只需卸载文档包即可。 - Zaz
6个回答

根据Ubuntu Wiki的说明,你可以指示dpkg不安装任何文档。这样应该能防止apt安装除版权信息以外的任何文档。

Create a file /etc/dpkg/dpkg.cfg.d/01_nodoc which specifies the desired filters. Example:

path-exclude /usr/share/doc/*
# we need to keep copyright files for legal reasons
path-include /usr/share/doc/*/copyright
# if you also want to remove the man pages uncomment the next line
#path-exclude /usr/share/man/*
path-exclude /usr/share/groff/*
path-exclude /usr/share/info/*
# lintian stuff is small, but really unnecessary
path-exclude /usr/share/lintian/*
path-exclude /usr/share/linda/*

然后您可以手动删除已安装的任何文档。
find /usr/share/doc -depth -type f ! -name copyright|xargs rm || true
find /usr/share/doc -empty|xargs rmdir || true
rm -rf /usr/share/groff/* /usr/share/info/*
rm -rf /usr/share/lintian/* /usr/share/linda/* /var/cache/man/*

如果你也想删除 man 页面,请执行以下操作:
rm -rf /usr/share/man/*

这个例子是为原始设备制造商编写的,但对我来说同样有效。将我的/usr/share/doc/目录从大约150MB减少到大约20MB。

我不得不重新创建其中一个文件夹才能使@denilson-sá的清除建议起作用。具体来说:mkdir /usr/share/info - A T
3在本地机器上,您还可以删除版权文件,这将节省大约50MB的空间。可以像这样注释此行:#path-include /usr/share/doc/*/copyright - rubo77
1第一行(删除版权后)在13.04留下了37MB。有许多由find跳过的符号链接文件。这可以通过以下命令减少5MB:find /usr/share/doc | egrep "\.gz" | xargs rm。这将把大小降至26 MB:find /usr/share/doc | egrep "\.pdf$" | xargs rm。到21 MB:find /usr/share/doc | egrep "\.tex$" | xargs rm。但是还有很多文件被留下。 - ahcox
@AT,我回答中的命令并不会删除/usr/share/info目录本身,只会删除其内容。运行这些命令后,该目录应该仍然存在。 - Andrew Ensley
1我不建议为了几个MB而采取这个步骤。我曾经这样做过,结果我的系统崩溃了。比如说,Virtualbox通过检查目录/usr/share/doc/virtualbox是否存在来检查安装情况。我创建了这个目录,一切都正常工作了。但是花了我大约2天的时间才找到解决方法。可以说这是一个时空权衡的问题! - Jus12
@Jus12 说得好。我肯定不会把这个作为一个准则推荐,但是如果你对空间非常拮据(就像我用16GB的Chromebook时发现的那样),这也是个折衷的办法。反正我根本没有足够的空间来装虚拟机(或其他很多软件)。 - Andrew Ensley
讽刺的是,我想要释放空间来为一些虚拟磁盘腾出位置。 - Jus12
当运行建议的命令时,我遇到了一些错误,因为一些文档文件包含空格。所以我在两个"find"命令中添加了"-print0",并在xargs中添加了"-0"。在此之后,一切都按预期工作了。 - Lissanro Rayen
如果你想让人继续工作,就必须保持好管理和员工的关系。现在的指示会导致人无法之后使用。 - Hielke Walinga

这将删除与latex相关的软件包的文档。
sudo apt-get --purge remove tex.\*-doc$

它确实节省了几百兆字节。

10这似乎也会移除我的texlive-full软件包。 - joar
6@joar 这是有意的。texlive-full 是一个元包,它会拉取所有的依赖项,包括文档。 - nealmcb
4@nealmcb,但是autoremove会删除你的所有tex软件包。更详细地说:如果你通过texlive-full安装了tex,然后删除了文档包,那么texlive-full也会被删除。然后下次运行apt-get autoremove时,你的所有tex软件包也会被删除,因为它们存在的唯一原因是依赖于texlive-full,而现在它已经不存在了。 - isarandi
如果您在安装时使用了texlive-full,那听起来是个不错的选择。这里还有一些参考资料:2017年关于拆分文档的提案:https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=877862 以及更多关于大小的数据:https://www.reddit.com/r/LaTeX/comments/2naxke/why_is_texlive_so_large/ - nealmcb

快速而简单的方法来查找已安装的texlive软件包(我百分之百确定还有其他方法):
dpkg -l | grep '^ii.*texlive.*doc'

删除它们:
apt-get remove --purge \
  texlive-fonts-recommended-doc texlive-latex-base-doc texlive-latex-extra-doc \
  texlive-latex-recommended-doc texlive-pictures-doc texlive-pstricks-doc

7这也会在Ubuntu 16.04上移除texlive-full - Jus12
8texlive-full 是一个元包,它会拉取所有依赖项,包括文档。 - Denilson Sá Maia
这是最好的、最简单明了的答案。 - shivams

你知道占用那么多空间的是什么吗?我的/usr/share/doc只有大约50MB。如果不知道,可以使用磁盘分析应用程序或者打开终端运行cd /usr/share/doc,然后运行du -h -d 1来查找占用空间的内容。一旦确定了是哪个程序或者文件夹造成的问题,你就可以决定是否删除/usr/share/doc目录下的内容了。

我之前并不知道/usr/share/doc目录下的文件夹名称就是软件包的名称。至少对于一些软件包来说,这似乎是正确的。我在/usr/share/doc目录下使用了du -sc * | sort -n命令。大部分空间被TeX Live 2009文档文件占用,但我并不需要它们,因为我已经手动安装了TL 2011版本的文档。谢谢,虽然我还想看看是否有办法告诉apt-get删除大部分文档,但这个解决方案对于这个情况来说已经很好了。 - Martin Scharrer
1对于那些不熟悉du命令的人,你可以使用Baobab来分析磁盘使用情况。不过,需要以root身份运行它(sudo baobab)以索引/目录下的内容。 - user520257

mopagemo's answer进行了一小修改。如果LaTeX最初是通过texlive-full安装的,那么删除该元包将导致其所有依赖项被添加到自动删除队列中。为了解决这个问题,我们需要将这些软件包标记为手动安装。
以下是我采取的步骤列表,用于删除文档并从自动删除队列中移除所需的软件包:
  1. sudo apt-get --purge remove tex.\*-doc$
  2. 将出现在“以下软件包是自动安装的,不再需要”和“使用'sudo apt autoremove'来删除它们。”之间的软件包复制到文本编辑器中,并删除所有换行符。
  3. 尝试sudo apt-get install所有这些软件包。
  4. 您可能会收到一系列“无法定位软件包”的消息。从文本编辑器中的列表中删除这些虚拟软件包。
  5. 再次尝试sudo apt-get install较小的列表。这将把所有软件包标记为手动安装。
  6. 您可能会收到另一个“不再需要”的消息。如果是这样,请重复步骤2-5。
这个过程不会花费很长时间,好处是你不会破坏任何现有的软件包或依赖关系。你甚至可以在之上重新安装texlive-full。如果你打算完全卸载,可能需要保留一个标记软件包的列表。
这样做在我的系统上释放了1000多兆字节的空间。

这个命令找出所有texlive-full的依赖项,但不包括-doc。因此,你可以将这些软件包列表提供给apt install来将它们全部标记为手动安装。LANG=C apt show texlive-full | grep Depends | sed 's/^Depends: //' | tr ',' "\n" | sed 's/ (.*$//' | grep -v -- '-doc$' | tr -d "\n" - Martin Pecka

只删除/usr/share/doc的内容是否合理安全?
如果这样做,当任何软件包升级时,文件将会重新安装。相反,您应该删除相关的文档软件包,通常(但并不总是)以-doc结尾。