当我在 Lubuntu 12.10 上运行以下命令时
[11:09 PM] ~ $ find /usr/share/icons/ -iname icon-theme.cache -type f
我得到以下内容(添加最后修改日期和大小后):
/usr/share/icons/lubuntu/icon-theme.cache 20121125 61.2 KiB
/usr/share/icons/Humanity-Dark/icon-theme.cache 20120810 40.6 KiB
/usr/share/icons/Humanity/icon-theme.cache 20120810 931.9 KiB
/usr/share/icons/gnome/icon-theme.cache 20121017 65.8 MiB
/usr/share/icons/ubuntu-mono-light/icon-theme.cache 20130408 140.0 KiB
/usr/share/icons/LoginIcons/icon-theme.cache 20130408 628 bytes
/usr/share/icons/ubuntu-mono-dark/icon-theme.cache 20130408 139.9 KiB
/usr/share/icons/hicolor/icon-theme.cache 20130406 12.4 MiB
/usr/share/icons/elementary-mono-dark/icon-theme.cache 20120926 12.4 KiB
如下例所示,所有这些文件都属于以下类型TrueType font data
:
[11:09 PM] ~ $ file /usr/share/icons/hicolor/icon-theme.cache
/usr/share/icons/hicolor/icon-theme.cache: TrueType font data
我的所有问题都密切相关,包括:
- 它是什么?它的功能是什么?这些文件名中
icon-theme.cache
的含义是什么?cache
缓存标签定义是这样的:“缓存将临时数据存储在附近,以便可以比从实际后备存储(磁盘、网络)获取数据或重新计算某些结果更快地检索数据“。 - 为什么文件大小如此不同?
gnome
和是hicolor
最大的,是因为它们提供了后备图标(正如我在某处读到的)吗? - 那日期呢?我之所以确定这些日期,
ubuntu-mono
是因为它们是我在 20130408 安装时出现的light-themes
。那么这些文件是在切换主题的过程中被修改的吗?还是这些日期只是安装日期的反映?
答案1
要理解为什么我们需要这些文件,首先需要理解将文件映射到内存。
内存映射文件: 内存映射文件是虚拟内存的片段,它们直接逐字节映射到磁盘上的物理文件。与传统的基于流的 I/O 相比,它具有许多优势,例如在随机访问大型文件时的性能,或者能够在不同的线程和进程之间共享映射的内存。
访问内存映射文件比使用直接读写操作更快,原因有二。首先,系统调用比对程序本地内存的简单更改要慢几个数量级。其次,在大多数操作系统中,映射的内存区域实际上是内核的页面缓存(文件缓存),这意味着不需要在用户空间中创建任何副本。
现在,逐一回答您的问题:
- icon-theme.cache是什么,有什么作用?这些文件名中的cache是什么意思?
文件图标主题.缓存包含有关某个目录(恰好是包含index.theme
特定主题的目录)下目录树中的图标的缓存信息。
GTK+ 可以使用缓存文件来避免应用程序启动时产生大量的系统调用和磁盘寻道开销。由于缓存文件的格式允许它们在多个应用程序之间进行内存映射共享,因此总体内存消耗也会减少。
- 为什么文件大小如此多样化?
文件大小取决于图标主题中的图标数量。
- 那么日期呢?
如果我们使用内存缓存,则仅当某个进程访问特定内存位置时,某些内容才会出现在缓存中,并且除非缓存已满并且需要删除该元素,否则该内容才会保留在那里。
因此,修改日期很可能取决于某个进程的更新时间。在这种情况下,可能是主题中的图标被使用的时间。
确实有一个名为的命令来更新图标缓存gtk-update-icon-cache
。
来源和更多信息:
man gtk-update-icon-cache
在当前(13.04)手册页中