apt-cache 종속 및 apt-cache showpkg의 출력 이해

apt-cache 종속 및 apt-cache showpkg의 출력 이해

기본적으로 Lubuntu 13.10포함되지 않은 것을 사용하고 있습니다 gedit. 하지만 나는 그것을 사용하여 설치했습니다.

sudo apt-get install --no-install-recommends gedit

이제 내가 달릴 때 apt-cache depends gedit나는 그 한가운데에 zenity있습니다 .yelprecommends

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아니요 . C 라이브러리가 문자열을 인쇄하는 방식 이므로 value이러한 출력이 표시됩니다 . 글쎄요, 번역이 전혀 없습니다!(0 (null))NULL

어떤 종속성이 필수인지, 권장되는지, 충돌하는지 등을 확인할 수 있는 방법을 찾지 못했습니다. 모든 정보를 얻으려면 먼저 실행하십시오.

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++에 대한 나의 제한된 지식으로 인해 이 함수는 어떤 패키지가 종속성인지 정의하는 역할을 담당하지만 아직 이 함수가 어디에 있는지 찾지 못했습니다.

관련 정보