우분투에서 "apt-get install"의 히스토리를 어떻게 얻습니까?


85

한 우분투 상자에서 다른 우분투 상자로 서버를 옮기려고합니다. 나는 오래된 박스를 새로운 박스로 복제하지 않습니다. 새 시스템을 만들고 필요에 따라 데이터를 옮길 것입니다. 기존 상자에있는 모든 소프트웨어를 새 상자에 설치하고 싶습니다.

시간이 지남에 따라 모든 "sudo apt-get install"명령의 히스토리를 찾는 간단한 방법이 있습니까? 즉, dpkg -l은 설치된 모든 패키지를 보여 주지만 어떤 최상위 패키지가 설치되지 않았는지를 보여줍니다. dpkg가 설치 패키지를 제공하는 방법이 있다면 고유 한 패키지를 찾을 수 있습니다. 그렇지 않으면 "이 24 개 패키지를 설치했습니다"라고 말하는 것이 좋습니다.



아래 답변을 받아 들일 수 있습니까? 답변 한 사람들에게 감사합니다.
m-ric


이 솔루션은 마지막 로그 회전 후에 발생한 일만 확인합니다. 그들은 모든 역사를 확인하지는 않습니다.
Kraang Prime

이 질문에 대한 간단하고 빠른 방법은 askubuntu.com/a/250530/197730 에서이 질문에 대한 답변 입니다. 설치된 모든 패키지를 나열하는 방법 .
TooTone

답변:


68

apt역사는 /var/log/apt/history.log위와 같이 코멘트했다. 즉, dpkg또는 같은 GUI를 사용하여 수동으로 설치된 패키지는 표시되지 않습니다 gdebi. 겪은 모든 패키지를 확인하려면 dpkg, 당신은 볼 수 있습니다 /var/log/dpkg.log.


8

5
첫 번째 링크의 절차는 자동 설치 패키지와 수동 설치 패키지를 구분하지 않습니다. /var/log/apt/history.log(당신은 위치가 잘못되었습니다 btw) 몇 개월 후에 회전했을 것입니다.
Gilles

Gilles는 두 가지 측면에서 모두 옳습니다. 나는 약 한 달 분량의 로그를 가지고 있으며 로그 삭제 속도가 어떻게 설정되어 있는지조차 알 수 없습니다 (FreeBSD의 'newsyslog'로 완료되었습니다). 그래서 여전히 해결책이 없지만 몇 가지 지침이 있습니다. 최소한 복제 기사의 명령 출력을 grep하고 "고수준"이름을 찾아서 새 이름에 설치하고 새 상자에 동일한 작업을 수행하고 두 결과를 비교하여 만족할 때까지 반복 할 수 있습니다. 나는 여전히 더 많은 아이디어를 듣고 자합니다.
Paul Hoffman

7

설치가 명시 적으로 요청 된 패키지를 나열 할 수 있습니다 apt-mark.

apt-mark showmanual

데비안의 고대 릴리스를 실행하는 경우 수동 방법이 있습니다.

다음 명령은 설치가 요청 된 패키지 목록을 수동 또는 자동으로 제공합니다. 패키지를 설치 (중지)하는 중이 아니면 설치된 패키지 목록입니다.

dpkg --get-selections | sed -n 's/\t\+install$//p'

다음 명령은 자동으로 설치된 패키지의 상위 집합을 제공합니다.

</var/lib/apt/extended_states awk -v RS= '/\nAuto-Installed: *1/{print$2}'

다음 명령을 모두 정리하면 수동으로 설치된 패키지가 나열됩니다.

comm -23 <(dpkg --get-selections | sed -n 's/\t\+install$//p') \
         <(</var/lib/apt/extended_states \
           awk -v RS= '/\nAuto-Installed: *1/{print$2}' |sort)

1
--- 매우 다른 결과comm -23 <(apt-mark showmanual | sort -u) <(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort -u)
Cbhihe

데비안에서는 apt-mark showmanual마지막 명령과 같은 것이 있습니다.
maxschlepzig

3
grep -i "Commandline" /var/log/apt/history.log

다음을 사용하여 설치 한 모든 패키지를 표시합니다. sudo apt-get install xxxxx


이것은 @ ℝaphink의 답변과 충분히 다르지 않으며 이에 대한 주석이어야합니다.
Karl Richter

2

tac / head 조합 대신 tail (마지막 25 줄)을 사용하는 것이 좋습니다.

tail -n 25 /var/log/apt/history.log

이것은 @ ℝaphink의 답변과 충분히 다르지 않으며 이에 대한 주석이어야합니다.
Karl Richter

또한 동일하지 않습니다. tail은 파일의 마지막 행을 파일에있는 순서대로 나열합니다. tac은 마지막 줄이 먼저, 두 번째에서 마지막이 두 번째 등이되도록 순서를 반대로 바꿉니다. 또한 다시 말하지만, 이유를 설명하지 않고 무언가가 "더 나은"상태라고 말하면 어떤 종류의 위험이있는 것 같습니다. "누군가에 따라"더 나은가요? 어떤 요구 사항에 대해? 다소 자신감이있는 것 같습니다.
Todd Walton

0

다른 답변은 도움이되었지만 너무 많은 결과를 얻었습니다. 출력을 줄이려면 이 답변apt-mark showmanual 에서 시작하여 원래 설치된 패키지를 걸러 냈습니다 ( 원래 설치된 패키지 목록을 얻는 방법 은 이 답변 을 참조하십시오 . 나는 우분투 18.04.2를 사용하고 있으므로 아래 링크를 참조하십시오) .

BASE_PACKAGES_MANIFEST=http://releases.ubuntu.com/18.04.2/ubuntu-18.04.2-desktop-amd64.manifest
REMOVE_VERSIONS_REGEX='[0-9][.-][0-9][.-][0-9]|[0-9][.-][0-9]|[0-9]'
paste  <( apt-mark showmanual ) <( apt-mark showmanual | sed -r "s/$REMOVE_VERSIONS_REGEX//g" ) |
    grep -vf <( curl $BASE_PACKAGES_MANIFEST | cut -f1 | sed -r "s/$REMOVE_VERSIONS_REGEX|:amd//g" ) |
    cut -f1 |
    sort |
    uniq

이 스크립트는 버전 독립적 인 비교를 수행하여 원래 매니페스트에 있던 패키지를 필터링하여 업그레이드 된 패키지가 목록에 나타나지 않도록합니다. 나는 약 60 개의 패키지 목록으로 끝났습니다.

내가 좋아하는 다른 방법은 모든 apt 로그를 검색하는이 답변입니다 .


-1

가장 최근에 설치된 패키지 목록을 내림차순으로 얻으려면 (예 : 25 줄)을 사용하는 것이 좋습니다.

tac /var/log/apt/history.log |head --lines=25

1
보다 효율적인 (그리고 tail -25 /var/log/apt/history.log | tac
대안적인

이것은 @ ℝaphink의 답변과 충분히 다르지 않으며 이에 대한 주석이어야합니다.
Karl Richter
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.