我正在运行 Debian (jessie) 并关注这问题,我按照第一个答案建议安装正在运行的软件包
sudo apt-get install gtk2-engines-* gtk3-engines*
顺便说一句,这并没有解决我的 Eclipse 问题,但后来我注意到一些奇怪的事情:当我运行时
sudo apt-get purge gtk2-engines-* gtk3-engines*
它说
Reading package lists... Done
Building dependency tree
Reading state information... Done
Note, selecting 'gtk2-engines-gartoon' for regex 'gtk2-engines-*'
Note, selecting 'gtk2-engines-moblin' for regex 'gtk2-engines-*'
Note, selecting 'gtk2-engines-murrine' for regex 'gtk2-engines-*'
Note, selecting 'gtk2-engines-nodoka' for regex 'gtk2-engines-*'
Note, selecting 'gtk2-engines-qtcurve' for regex 'gtk2-engines-*'
Note, selecting 'gtk2-engines-ubuntulooks' for regex 'gtk2-engines-*'
Note, selecting 'gtk2-engines-pixbuf' for regex 'gtk2-engines-*'
Note, selecting 'gtk2-engines' for regex 'gtk2-engines-*'
Note, selecting 'gtk2-engines-wonderland' for regex 'gtk2-engines-*'
Note, selecting 'gtk2-engines-oxygen' for regex 'gtk2-engines-*'
Note, selecting 'gtk2-engines-cleanice' for regex 'gtk2-engines-*'
Note, selecting 'gtk2-engines-magicchicken' for regex 'gtk2-engines-*'
Note, selecting 'gtk2-engines-xfce' for regex 'gtk2-engines-*'
Note, selecting 'gtk2-engines-aurora' for regex 'gtk2-engines-*'
Note, selecting 'gnome-icon-theme-gartoon' instead of 'gtk2-engines-gartoon'
Note, selecting 'gtk3-engines-oxygen' for regex 'gtk3-engines*'
Note, selecting 'gtk3-engines-xfce' for regex 'gtk3-engines*'
The following packages were automatically installed and are no longer required:
kde-style-qtcurve kwin-style-qtcurve libgoocanvas-common libgoocanvas3
libkdecorations4abi2 libmlt++3 libmlt-data libmlt6 libsox-fmt-alsa
libsox-fmt-base libsox2 melt python-httplib2 python-mlt python-pygoocanvas
python-xdg
Use 'apt-get autoremove' to remove them.
没关系,但后来它说
The following packages will be REMOVED:
gtk2-engines* gtk2-engines-aurora* gtk2-engines-cleanice*
gtk2-engines-magicchicken* gtk2-engines-moblin* gtk2-engines-murrine*
gtk2-engines-nodoka* gtk2-engines-oxygen* gtk2-engines-pixbuf*
gtk2-engines-qtcurve* gtk2-engines-ubuntulooks* gtk2-engines-wonderland*
gtk2-engines-xfce* gtk3-engines-oxygen* gtk3-engines-xfce* murrine-themes*
openshot* xfce4*
为什么他也选择了
murrine-themes* openshot* xfce4*
?
难道不应该删除 regEx 的所有匹配情况吗
gtk2-engines-* gtk3-engines*
或者我在这里错过了一些基本的东西?
答案1
$ apt-cache show xfce4 | grep ^Depends
Depends: xfwm4 (>= 4.12.0), xfconf (>= 4.12.0), xfce4-settings (>= 4.12.0), xfce4-panel (>= 4.12.0), xfdesktop4 (>= 4.12.0), thunar (>= 1.6.6), gtk2-engines-xfce (>= 3.2.0), xfce4-session (>= 4.12.0), xfce4-appfinder (>= 4.12.0), xfce4-mixer (>= 4.10.0), orage (>= 4.10.0), libxfce4ui-utils (>= 4.12)
如您所见,包 xfce4 依赖于 gtk2-engines-xfce,因此如果删除 gtk2-engines-xfce,apt 也会删除 xfce4。它与您提到的其他软件包类似,因此 openshot 依赖于 gtk2-engines-pixbuf ,而 gtk2-engines-pixbuf 依赖于 gtk2-engines-murrine
我还想指出 Henrik 的评论;
apt-get 可以使用正则表达式作为参数来代替包名称,但是您必须注意在 shell 实际调用命令之前发生的文件匹配。看例子:
$ touch gtk2-engine-test
$ sudo apt-get remove gtk2-engine*
[sudo] password for boban:
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package gtk2-engine-test
当你想将正则表达式传递给 apt 时,你应该转义文件通配符,如 *、?、[、] 等,所以正确的命令是:
sudo apt-get remove gtk2-engine\*
答案2
正如已经博班·P 解释说。,如果您请求删除或清除某个包,那么也会删除依赖于它的包。
您可以使用它aptitude why
来查看手动安装的软件包依赖于某个软件包的哪些内容,即安装该软件包的原因。参数是单个包名称,而不是 glob 模式或正则表达式。您可以将其与 [能力搜索]((http://aptitude.alioth.debian.org/doc/en/ch02s04s05.html)一次查询多个包。
aptitude -v why $(aptitude -F %p search '~i ~ngtk2-engines.*')
请注意,输出可能会很长。如果没有-v
, aptitude 只会列出安装每个软件包的一个原因。
apt-get
另外,请注意and命令的参数apt-cache
是正则表达式,而不是 shell 通配符模式。如果参数不包含任何特殊字符,则按字面意思使用,但如果参数确实包含特殊字符,()[].?*+
则正则表达式只需要匹配包名称的一部分。因此匹配具有子字符串²gtk2-engines-*
的包;gtk2-engines
这就是为什么gtk2-engines
被列为匹配的原因。您可能打算改为编写gtk2-engines-.*
,但这也会捕获名称不以gtk2-engines
³ 开头的包。要列出以 开头的包gtk2-engines-
,请使用^gtk2-engines-
。
gtk2-engines-*
另外,养成在 shell 命令行中引用特殊字符的习惯 — 如果当前目录中存在与 glob 模式匹配的文件(例如.deb
您刚刚下载的文件),则该模式将被替换为匹配文件。
1或一个能力倾向搜索模式在某些版本中,但在 Debian jessie 上没有。
²因为gtk2-engines
以零次或多次出现-
(即零)结尾。
³目前 Debian 中还没有这些。