如何轻松识别应用程序中的所有默认字体?

如何轻松识别应用程序中的所有默认字体?

Debian Kwheezy(Debian Wheezy 的 KDE 版本)捆绑了所有可以想象到的字体和数百种字体,这些字体用于支持其扩展字符集中的各种外语。大多数字体本质上是英文字符中一些基本字体的重复。还有一些重复字体本质上是来自不同出版商的相同字体。我需要剔除这些字体,因为 Debian 运行在一个小型外部磁盘上,可用空间不足。

系统字体可以从系统设置面板中识别。但是,许多应用程序都定义了自己的默认字体。我不想删除字体,然后发现应用程序无法运行,因为我删除了它的默认字体。浏览每个应用程序,找到它指定字体的位置,并构建“不删除”列表,这将是一项工作。有没有一种简单的方法,比如一个生成字体依赖项列表的命令,来识别现有应用程序期望找到的所有字体?

答案1

你可以做类似的事情:

find /usr/share/fonts -type f -atime +30

这将显示过去 30 天内未访问过的所有字体。然后您可以执行

dpkg -S /usr/share/fonts/truetype/ttf-bitstream-vera/VeraMoIt.ttf

找出该字体在哪个 Debian 包中(这样您就可以将其删除)。

警告:它假设你的文件系统已完全挂载时间(访问时间)支持。您可以通过检查文件访问时间是否在访问时被修改来验证它是否正常工作:

% ls -l --time=atime /usr/share/fonts/truetype/ttf-bitstream-vera/VeraMoIt.ttf
-rw-r--r-- 1 root root 54508 Oct 24 18:44 /usr/share/fonts/truetype/ttf-bitstream-vera/VeraMoIt.ttf
% sleep 2m
% file /usr/share/fonts/truetype/ttf-bitstream-vera/VeraMoIt.ttf
/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMoIt.ttf: TrueType font data
% ls -l --time=atime /usr/share/fonts/truetype/ttf-bitstream-vera/VeraMoIt.ttf
-rw-r--r-- 1 root root 54508 Oct 24 18:46 /usr/share/fonts/truetype/ttf-bitstream-vera/VeraMoIt.ttf

(在上面的例子中,我们显示了当前的 atime,睡眠 2 分钟,读取文件(使用 file(1),但任何只读命令都可以),然后再次检查当前 atime。如果它已经改变(就像我们做的那样:从18:4418:46)则 atime 支持正在工作。我们也可以使用stat而不是ls -l --time=atime

如果它不工作(例如 atime 没有更新),那么你应该检查你的/etc/fstab“/usr”或“/”分区(或者你的/usr/share/字体目录是)并确保它有strictatime并且名称中没有任何其他选项atime,然后重新启动以使更改生效,并使用所有应用程序,以便在尝试再次查找未使用的字体之前访问所有字体。

请注意,禁用 atime 支持是有原因的(取决于您的 Debian/内核版本),因为它会稍微降低性能(每次读取文件时都必须进行少量写入);因此,如果性能提升对您来说比查找文件访问时间的能力更重要,那么您可能需要在完成字体清理后再次输入relatime或。noatime/etc/fstab

相关内容