종속성 없이 설치된 패키지 목록을 얻는 방법은 무엇입니까?

종속성 없이 설치된 패키지 목록을 얻는 방법은 무엇입니까?

소프트웨어 센터에는 설치된 패키지의 매우 짧은 목록이 표시됩니다. 텍스트 파일로 가져오는 방법은 무엇입니까?

나는 시도했다:

> dpkg --get-selections|wc -l
3265

> aptitude search '~i!~M'|wc -l
1181

> dpkg -l | grep ^ii | sed 's_  _\t_g' | cut -f 2|wc -l
3076

> dpkg --get-selections | grep -v deinstall|wc -l
3076

> apt-mark showmanual|wc -l
1181

나는 수천 개가 아닌 수십 개의 패키지를 설치했다는 것을 알고 있습니다. 검토하려면 종속성 없이 선택한 패키지가 목록에 정확히 필요합니다.

업데이트

@kos 덕분에 마침내 해당 명령으로 목록을 얻었습니다.

> zcat /var/log/apt/history.log.*.gz | cat - /var/log/apt/history.log | grep -Po '^Commandline: apt-get install \K.*' | tr ' ' '\n' | grep -v '\-\-reinstall'|grep -v '\-\-force-yes'|grep -v '\-y'|grep -v '\-f'|sort|uniq wc -l
103

답변1

이것은 질문에 정확하게 대답하지 않습니다. 오히려 Ubiquity에서 실행한 명령을 제외하고 apt-get install실행한 모든 명령 목록을 얻기 위해 목록을 추가로 구문 분석하는 방법에 대한 몇 가지 조언과 함께 apt-get install실행한 모든 명령을 나열하는 명령을 제공합니다. 이 작업에 대한 완벽한 솔루션이 존재하지 않는 것 같기 때문입니다.

zcat /var/log/apt/history.log.*.gz | cat - /var/log/apt/history.log | grep -Po '^Commandline:(?= apt-get)(?=.* install ) \K.*'
  • zcat /var/log/apt/history.log.*.gzapt: 에 있는 모든 압축된 로그의 압축을 풀고 /var/log/apt이를 연결한 후 에 인쇄합니다 stdout.
  • cat - /var/log/apt/history.log: /var/log/apt/history.log에 추가하고 인쇄합니다 stdout.
  • grep -Po '^Commandline:(?= apt-get)(?=.* install ) \K.*': 선행 및 후행 공백이 Commandline: apt-get있는 포함 으로 시작하는 줄만 선택 하고 선택한 각 줄의 나머지 부분을 에 인쇄합니다 .installstdout

그러면 실행한 모든 명령의 목록이 출력됩니다 apt-get install. 원하지 않는 유일한 출력은 패키지 를 언급하는 apt-get-non- 명령일 수 있지만 해당 패키지는 (아직?) 적어도 기본 저장소에는 존재하지 않습니다.installinstall

메모:내 설치(Ubuntu 15.04 64비트)에서 나열된 처음 4개의 명령은 설치 중에 Ubiquity에서 실행되는 명령입니다. 이를 제외하려면 출력을 다음으로 파이프할 수 있습니다 sed.

sed '1,4d'

그래서 결승전을근사치를 내다Ubuntu 15.04 64비트에 대한 명령은 다음과 같습니다.

zcat /var/log/apt/history.log.*.gz | cat - /var/log/apt/history.log | grep -Po '^Commandline:(?= apt-get)(?=.* install ) \K.*' | sed '1,4d'

답변2

apt-mark 쇼 매뉴얼

종속성 없이 수동으로 설치된 모든 패키지 목록을 제공합니다. 주목해야 할 중요한 점은 Ubuntu 설정 중에 설치된 패키지도 표시된다는 것입니다.

출력을 파일에 쓰려면 다음을 수행하십시오.

apt-mark 쇼 매뉴얼> 일부 파일

실제로 이 명령을 사용하는 등 다른 방법도 많이 있습니다.

comm -23 <(apt-mark showmanual | sort -u) <(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort -u) 

위의 작업이 어떻게 작동하는지 전혀 모르지만;)

설치된 패키지를 날짜별로 보려면:

날짜 사용으로 설치된 패키지 사용 cat /var/log/dpkg.log | grep "\ install\ > somefile"
을 사용하여 설치된 패키지 - 아마도 이것이 당신이 찾고 있는 것일 것입니다.dpkgls -l /var/log/dpkg* > somefile

dpkg를 사용하여 설치된 패키지를 보려면:

이 파일에는 위의 정보가 포함되어 있습니다./var/log/dpkg.log

답변3

이것은 실제로 보이는 것보다 더 복잡하며 Ask Ubuntu에는 비슷한 질문이 꽤 많이 있습니다.

/var/log/apt/history.log해당 로그의 이전 gzip 버전을 살펴보면 apt-get install명령으로 설치된 모든 항목이 해당 명령으로 설치된 것으로 나열되어 있음 을 발견했습니다 .

그래서:

grep "apt-get install" /var/log/apt/history.log

현재 적절한 기록 로그가 포함되는 기간 동안 모든 항목을 표시합니다. gunzip모든 정보를 통합하려면 이전 로그를 수집하고 이를 수집해야 합니다 . grep 명령은 모두 텍스트 파일로 리디렉션되어 멋진 목록을 제공할 수 있습니다.

apt-get install이는 설치 시 소프트웨어 센터를 사용하는 경우에만 유용할 수 있습니다 . 소프트웨어 센터가 프런트 엔드라는 것은 알고 있지만 apt해당 명령을 명시적으로 사용하는지 확실하지 않습니다.

답변4

이 명령은 수동으로 설치된 패키지 목록과 "자동으로 설치된" 역방향 종속성이 제거된 패키지 목록을 제공합니다(예를 들어 ubuntu-server 메타패키지를 제거하면 해당 종속성은 더 이상 자동으로 표시되지 않으며 이제 이 목록에 포함됩니다):

apt list --installed | grep -v automatic

즉, 위 목록은 역방향 종속성이 없거나 수동으로 설치된 것으로 표시된 모든 패키지를 반환합니다.

관련 정보