我正在使用默认情况下Lubuntu 13.10
不包含的内容gedit
。但我已经使用它安装了
sudo apt-get install --no-install-recommends gedit
现在,当我奔跑apt-cache depends gedit
,zenity
并且yelp
身处之中recommends
。
但是当我运行apt-cache showpkg gedit
,zenity
和yelp
时Dependencies
(下面代码中从底部数第三行)。
Dependencies:
3.8.3-0ubuntu3 - libatk1.0-0 (2 1.12.4) libc6 (2 2.14)
libcairo2 (2 1.2.4) libenchant1c2a (2 1.6.0)
libgdk-pixbuf2.0-0 (2 2.22.0) libgirepository-1.0-1 (2 0.9.3)
libglib2.0-0 (2 2.37.3) libgtk-3-0 (2 3.7.10)
libgtksourceview-3.0-1 (2 3.2.0) libpango-1.0-0 (2 1.14.0)
libpeas-1.0-0 (2 1.1.0) libx11-6 (0 (null)) libxml2 (2 2.7.4)
libzeitgeist-2.0-0 (2 0.9.9) gedit-common (2 3.8)
gedit-common (3 3.9) gsettings-desktop-schemas (0 (null))
python3-gi (2 3.0) python-gi-cairo (2 3.0)
gir1.2-peas-1.0 (0 (null)) iso-codes (0 (null))
gedit-plugins (0 (null)) zenity (0 (null)) yelp (0 (null))
gedit-plugins (3 2.91) gedit-plugins:i386 (3 2.91)
gedit:i386 (0 (null))
这是为什么?我的系统上是否已存在软件以及我是否使用该软件的输出apt-cache depends
并apt-cache showpkg
受其影响吗--no-install recommends
?是什么(0 (null))
意思?
我所看到的是一个完全更新的系统。换句话说,我已经运行sudo apt-get update && sudo apt-get dist-upgrade
并尝试了这些apt-cache
命令。
答案1
遗憾的是,依赖项列表没有转换成人类可读的形式。依赖关系的形式为:
packagename (compareOp value)
compareOp
是以下数字之一:
0 NoOp
1 LessEq
2 GreaterEq
3 Less
4 Greater
5 Equals
6 NotEquals
可能添加
16 OR
OR
意味着该依赖关系也可以通过以下依赖关系来满足,因此只需存在“或”依赖关系之一。
NoOp
没有value
,因此您会看到这些(0 (null))
输出,因为这就是NULL
C 库如何打印字符串。嗯,是的,绝对没有翻译!
我没有找到任何方法来找出哪些依赖项是强制的、建议的、冲突的等等。要获取所有信息,首先运行
apt-cache depends PACKAGE
以人类形式列出依赖关系。遗憾的是,这缺乏细节。然后找到有关依赖关系的详细信息
apt-cache showpkg PACKAGE
也许其他人找到了一种更好的方法(或创建一个工具)来以人类可读的形式列出包的依赖项以及所有需要的详细细节。
我尝试将其组合到一个名为 的脚本中showdeps
,这似乎可以完成这项工作。它的名字是这样的:showdeps package..
输出与 非常相似apt-cache depends package..
,但包含更多细节。
作为参考,我将其复制在这里,原件位于https://github.com/hilbix/bashy/blob/debian/showdeps
#!/bin/bash
export LC_ALL=C.UTF-8
showdep()
{
export PKG="$1"
gawk '
NR==1,/^Dependencies:/ { next }
/^Provides:/,0 { next }
END { if (NR==0) { print "No input, package " ENVIRON["PKG"] " not found?"; exit(1); } }
BEGIN {
OP[0] = "";
OP[1] = "<=";
OP[2] = ">=";
OP[3] = "<<";
OP[4] = ">>";
OP[5] = "==";
OP[6] = "!=";
for (a in OP) OP[a+16]=OP[a];
}
{
delete pkg;
delete cmp;
j = 0;
for (i=3; i<=NF; i+=3)
{
pkg[j] = $i;
x = $(i+1); sub(/^[(]/,"",x);
y = $(i+2); sub(/[)]$/,"",y);
x = (x in OP) ? OP[x] : "### OOPS, unknown >>>" x "<<<";
if (x=="")
if (y=="(null)")
y = "";
else
x = "???OOPS???";
cmp[j] = x y;
j++;
}
ver=$1;
gsub(/'\''/,"",ver);
exec="apt-cache depends \"$PKG\"='\''"ver"'\''";
j = 0;
while (exec | getline)
{
printf "%s\t%s\t%s%s\n", ENVIRON["PKG"], ver, $0, ($1~/:$/) ? "\t(" cmp[j++] ")" : "";
}
close(exec)
print ""
}
' <(apt-cache showpkg "$1")
}
for p
do
showdep "$p"
done
这是免费软件,免费,如言论自由、免费啤酒和免费婴儿。不提供任何保证,使用风险由您自行承担,并且您不能让我对其中的任何错误承担责任。
输出示例:
$ showdeps gedit
gedit 3.10.4-0ubuntu4 gedit
gedit 3.10.4-0ubuntu4 Depends: libatk1.0-0 (>=1.12.4)
gedit 3.10.4-0ubuntu4 Depends: libc6 (>=2.4)
gedit 3.10.4-0ubuntu4 Depends: libcairo2 (>=1.2.4)
gedit 3.10.4-0ubuntu4 Depends: libenchant1c2a (>=1.6.0)
gedit 3.10.4-0ubuntu4 Depends: libgdk-pixbuf2.0-0 (>=2.22.0)
gedit 3.10.4-0ubuntu4 Depends: libgirepository-1.0-1 (>=0.9.3)
gedit 3.10.4-0ubuntu4 Depends: libglib2.0-0 (>=2.38)
gedit 3.10.4-0ubuntu4 Depends: libgtk-3-0 (>=3.10)
gedit 3.10.4-0ubuntu4 Depends: libgtksourceview-3.0-1 (>=3.10.0)
gedit 3.10.4-0ubuntu4 Depends: libpango-1.0-0 (>=1.14.0)
gedit 3.10.4-0ubuntu4 Depends: libpeas-1.0-0 (>=1.1.0)
gedit 3.10.4-0ubuntu4 Depends: libx11-6 ()
gedit 3.10.4-0ubuntu4 Depends: libxml2 (>=2.7.4)
gedit 3.10.4-0ubuntu4 Depends: libzeitgeist-2.0-0 (>=0.9.9)
gedit 3.10.4-0ubuntu4 Depends: gedit-common (>=3.10)
gedit 3.10.4-0ubuntu4 Depends: gedit-common (<<3.11)
gedit 3.10.4-0ubuntu4 Depends: gsettings-desktop-schemas ()
gedit 3.10.4-0ubuntu4 Depends: python3-gi (>=3.0)
gedit 3.10.4-0ubuntu4 Depends: python-gi-cairo (>=3.0)
gedit 3.10.4-0ubuntu4 Depends: gir1.2-peas-1.0 ()
gedit 3.10.4-0ubuntu4 Depends: iso-codes ()
gedit 3.10.4-0ubuntu4 Suggests: gedit-plugins ()
gedit 3.10.4-0ubuntu4 Recommends: gir1.2-gtksource-3.0 ()
gedit 3.10.4-0ubuntu4 Recommends: zenity ()
gedit 3.10.4-0ubuntu4 zenity:amd64
gedit 3.10.4-0ubuntu4 Recommends: yelp ()
gedit 3.10.4-0ubuntu4 Breaks: gedit-plugins (<<2.91)
gedit 3.10.4-0ubuntu4 Breaks: gedit-plugins:amd64 (<<2.91)
gedit 3.10.4-0ubuntu4 Conflicts: gedit:amd64 ()
答案2
因为apt-cache showpkg
它列出了每个依赖项、建议或建议作为依赖项,所以它还包括安装这些包后有多少个依赖项(0/null)。推荐和建议之间没有区别。来自男人:
前向(正常)依赖项是相关包所依赖的那些包依靠
检查源代码cmdline/apt-cache.cc
:
cout << "Dependencies: " << endl;
for (pkgCache::VerIterator Cur = Pkg.VersionList(); Cur.end() != true; ++Cur)
{
cout << Cur.VerStr() << " - ";
for (pkgCache::DepIterator Dep = Cur.DependsList(); Dep.end() != true; ++Dep)
cout << Dep.TargetPkg().FullName(true) << " (" << (int)Dep->CompareOp << " " << DeNull(Dep.TargetVer()) << ") ";
cout << endl;
}
有趣的部分是DependsLists()
函数。由于我对 C++ 的了解有限,这个函数负责定义哪些包是依赖项,但还没有找到这个函数所在的位置。