apt-get 설치 기록을 보는 방법은 무엇입니까?


18

apt-get install수동으로 실행 한 명령 기록을 어떻게 볼 수 있습니까?

사용 가능한 모든 방법은 우분투 설치 시작부터 설치된 모든 것을 보여줍니다.

apt-get install시스템 설치 프로세스가 완료된 이후 의 이력을 어떻게 확인할 수 있습니까?


그래 다른 무엇을 기대하십니까? GUI에서 실행 된 것이 아니라 터미널에서 실행 한 것만 보여주고 싶습니까? 제발 편집 질문을하고 명확하게.
terdon

@terdon 좋아 새로 편집
TellMeWhy

1
에 로그가 dpkg있습니다 /var/log/dpkg.log*.
Velkan

1
@ParanoidPanda 다양한 방법으로 실패합니다. 히스토리 잘림, 다른 쉘에서 실행되는 것, 히스토리에서 제거 된 것 또는 처음부터 넣지 않은 것, 스크립트에서 설치된 것, 다른 사용자가 실행 한 것 등
Squidly

1
@ MrBones : 나는 알고 있으며, 나는 내 대답 (그리고 아래 주석에서)을 언급했다. 그러나 OP apt-get install는 패키지를 설치하는 명령을 수동으로 실행할 때 모든 인스턴스를 볼 수있는 방법을 요청 했으며 기록 파일이 특정 방식으로 변경되지 않은 경우이 정보를 제공하는 솔루션을 제공했습니다 (예 : 항목이 제거되었습니다).

답변:


20

나는 kos여기 에 주어진 대답 이 지금까지 내가 본 가장 좋은 방법 이라고 생각합니다 . Software Center가을 사용하지만 설치된 모든 항목도 나열됩니다.apt

명령은 다음과 같습니다.

zcat /var/log/apt/history.log.*.gz | cat - /var/log/apt/history.log | grep -Po '^Commandline: apt-get install (?!.*--reinstall)\K.*'

내가 집에 도착과 이용 약관을 읽고 동의를 때 작동하는지 나는 이것을 테스트 것입니다 :)
TellMeWhy

아니에요! 업데이트 확인 : askubuntu.com/a/680405/320386
kos

이것을 사용하면이 작업에 더 안전합니다 : zcat /var/log/apt/history.log.*.gz | cat - /var/log/apt/history.log | grep -Po '^Commandline:(?=.* install ) \K.*' | sed '1,4d': 선행 및 후행 공백이 포함 grep -Po '^Commandline:(?=.* install ) \K.*'apt-get명령 만 필터링 하며 특정 설치에 따라 달라질 있습니다. 내 에서 유비 쿼티에서 나오는 항목 수를 정확히 삭제합니다. 설치에서 번호가 동일한 지 알려주십시오. 그러면 최소한 기준이 있습니다. | installsed '1,4d' 1,4
kos

@kos apt-get -o APT::Status-Fd=4 -o APT::Keep-Fds::=5 -o APT::Keep-Fds::=6 -q -y --no-remove install linux-generic새로운 명령과 같은 추가 줄을 얻습니다 . 그들은 유비 쿼티 라인입니까?
Arronical

아니요, 소프트웨어 업데이터에서 온 것 같습니다. apt-get한 번만 실행되는 유비 쿼티를 제외 하고 사용자로부터 실행되는 명령과 일부 프론트 엔드에서 실행되는 명령을 구별 할 방법이 없습니다 (예 : aptdaemon항목이 해당 명령으로 표시됨). 그러나 가장 좋은 방법은 여전히 ​​유비 쿼티 항목을 제외시키는 해당 명령을 사용하는 것입니다.
kos


3

@Arronical 답변을 단순화하기 위해 최근에 배운 깔끔한 트릭은 zcat -qftxt 및 txt gzipped 파일을 모두 cat 하는 데 사용할 수 있다는 것 입니다.

zcat /var/log/apt/history.log.*.gz | cat - /var/log/apt/history.log | grep -Po '^Commandline: apt-get install (?!.*--reinstall)\K.*'

된다

zcat -qf /var/log/apt/history.log* | grep -Po '^Commandline: apt-get install (?!.*--reinstall)\K.*'

남자 zcat에서 :

   -q --quiet
          Suppress all warnings.
   -f --force
          Force  compression  or  decompression  even if the file has multiple links or the corre‐
          sponding file already exists, or if the compressed data is read from  or  written  to  a
          terminal.  If  the  input  data is not in a format recognized by gzip, and if the option
          --stdout is also given, copy the input data without change to the standard  output:  let
          zcat  behave  as  cat.  If -f is not given, and when not running in the background, gzip
          prompts to verify whether an existing file should be overwritten.

2

다음은 현재 설치된 최상위 패키지 만 인쇄하는 스크립트입니다 . 여기서 "최상위 패키지"는 다른 atp 패키지가 의존하지 않는 atp 패키지로 정의됩니다. 이러한 최상위 프로그램이 atp 또는 시냅틱과 같은 패키지 관리자에 의해 설치된 경우 사용자가 수동으로 선택했습니다.

#!/bin/sh
NumDaysAgo=18
find /var/lib/dpkg/info -name "*.list" -mtime -$NumDaysAgo \
    -exec stat -c $'%y\t%n' {} \; | \
sed -e 's,/var/lib/dpkg/info/,,' -e 's,\.list,,' | \
sort -r | \
while read Date Time Xxx Pkg
do 
    lncnt=$(apt-cache --installed rdepends $Pkg | wc -l)
    if [ $lncnt -eq "2" ]
        then echo "$Date $Time $Pkg"
    fi
done
echo "JOB COMPLETED: $BASH_SOURCE"

패키지는 사용자가 최신 정보를 더 빨리 원할 가능성이 높고 프로그램이 느리다는 가정하에 역순으로 인쇄됩니다.

프로그램 흐름 :

  • 프로그램은 먼저 아래의 파일 이름을 읽어 설치된 모든 패키지를 목록으로 수집합니다 /var/lib/dpkg/info/. 파일 모드 시간은 설치 시간입니다.
  • 이 목록은 역순으로 정렬됩니다.
  • 설치된 각 패키지 $Pkg에 대해의 호출은 apt-cache rdepends $Pkg 의 역 종속성 을 요청합니다 $Pkg. 종속성이없는 경우 최상위 패키지이고 패키지 정보가 인쇄됩니다. date time packagename

노트:

  • 이 스크립트는 apt-cache rdepends $Pkg인간의 눈을위한 출력 형식에 따라 달라지며 이후 버전의 apt에서 변경 될 수 있습니다.
  • / var / lib / dpkg / info / 아래에서 파일 이름을 수집하는 부분에 대한 코드는 이 unix.stackexchange post 에서 가져 왔습니다 . 그 포스터 'mikel'이 지적했듯이, dpgk이력 로그 파일은 특정 볼륨에 도달 한 후에 회전하기 때문에 신뢰할 수 없습니다.
  • 에 대한 맨 페이지 apt-chache
  • 이 호출은 apt-cache rdepends ...호출 할 때마다 모든 종속성을 통해 반복하는 의해 계산되기 때문에 매우 느린 것으로 추정됩니다. 따라서 위의 스크립트는 최신 설치에서 시작하여 사용자에게 최대한의 즉각적인 만족감을 제공합니다.
  • --installed후 플래그 apt-cachedpkg를 설치 패키지는 쉽다 - 설치되어 있는지 확인합니다. 사용자 또는 다른 설치 소프트웨어가 apt를 우회하고 dpkg를 직접 사용한 경우 가능합니다. 이 사례는 테스트되지 않았지만 눈에 띄는 것이 표준 또는 오류 출력으로 인쇄 될 것이라고 생각합니다
  • 출력에는 수동으로 선택한 패키지가 포함되지 않으며 나중에 더 높은 패키지에 의존하게됩니다. 출력에는 다른 타사 설치 소프트웨어에서 apt를 통해 설치 한 패키지도 포함될 수 있으므로 실제로 수동으로 설치되지는 않습니다. 그러나 출력의 목적이 /home타사 소프트웨어가 포함 된 백업 디렉토리 에서 복원 된 Linux를 설정하기위한 기초로 사용 되는 경우이 출력이 적합합니다.
  • 일부 패키지 이름에는 버전 번호가 포함되고 일부는 포함되지 않습니다. 사실을 인식하기 위해 언급했습니다.

1

다음을 실행하여 설치 한 모든 것을 보려면 :

sudo apt-get install [package]

그리고 당신은 bash 기록을 엉망으로 만들지 않았으며 다른 사용자 (또는 모든 사용자)에 대한 이러한 종류의 설치 유형 기록을 보길 원치 않으면 다음을 실행할 수 있습니다.

history | grep "apt-get install"

그리고 그것은 당신에게 주로 관련있는 결과를 얻을 것입니다.


1
이것으로 모든 역사를 얻을 수 있습니까?
TellMeWhy

@DevRobot : 파일 apt-get install에서 항목이있는 항목을 수동으로 변경하거나이 .bash_history파일을 삭제 하지 않는 한 , 명령은 apt-get install사용자 계정 에서 문자열이 포함 된 명령을 실행할 때 모든 인스턴스를 표시 합니다 ( 를 사용하여 명령을 실행하는 사용자 계정이 아닌 루트로 명령을 실행하십시오 sudo.

2
200 개가 넘는 명령을 입력 한 경우 문제가있을 수 있습니다.
Arronical

2
@Arronical 증거는 주장을 할 때 예상됩니다 ;-)
Rinzwind

1
본인은 500을 기본값 ( gnu.org/software/bash/manual/html_node/… ) 으로 가정 합니다.
Rinzwind

1

apt-get install명령 기록을 원하면 다음 명령을 사용하십시오.

grep "apt-get install" .bash_history

산출:

ravan@ravan:~$ grep "apt-get install" .bash_history

sudo apt-get install --no-install-recommends ubuntu-mate-core ubuntu-mate-desktop
sudo apt-get install xfce4
sudo apt-get install xfce4.12
sudo apt-get install pgadmin
sudo apt-get install touchegg
sudo apt-get install aptitude
sudo apt-get install aptitude
sudo gedit .bash_history | grep "apt-get install" 
sudo apt-get installvim
grep "apt-get install" .bash_history
cat .bash_history | grep "apt-get install" 

다른 정보는 추가 정보를 참조하십시오 .

더 자세한 설치 정보도있다 /var/log/apt/에서 history.loghistory.log.X.gz파일 term.logterm.log.X.gz파일

apt-get포함 된 명령의 히스토리 만 원하는 경우

history | grep apt-get


apt-mark showmanual실제로 수동으로 설치된 패키지가 아니라 OS를 설치할 때 설치된 모든 패키지를 표시합니다. 그것이 행동하는 이상한 방법입니다!
Arronical

1
이것은 반드시 역사에 대한 특정 세부 사항을 제공하지는 않습니다. 사람들 필요 가있는 것은 /var/log/apt/history.log유사한 파일입니다. 수동으로 선택한 패키지와 자동 선택된 패키지 만 가져옵니다. 당신은 제공하지 않습니다 어떤 이 답변에서 등 업그레이드 된 것을 제거 어떤 설치된 무엇을 연대 기적 역사를,,,.
토마스 워드

@Arronical-매뉴얼 페이지는 어디에 있습니까 apt -mark showmanual? apt< manpages.ubuntu.com/manpages/xenial/en/man8/apt.8.html > 에 대한 Ubuntu 16.04 LTS 매뉴얼 페이지에서 볼 수 없습니다 .
크레이그 cks 스


0

설치 및 제거, 재설치 등을 확인하려면 apt-get 설치 과정 에 대한 추가 정보를 참조하십시오 .

답변은 별칭으로 수정할 수 있습니다.

alias apted='zcat /var/log/apt/history.log.*.gz | cat - /var/log/apt/history.log | fgrep Commandline: | cut -d " " -f 2- | grep -P "^|install"'

0

설치 중에 virtualmin 스크립트가 수행하는 것처럼 apt-get -y install packagename과 같은 일부 인수를 설치 전에 설정할 수 있습니다.

따라서 모든 설치 명령을 캡처하려면 정규식 쿼리를 변경해야합니다.

zcat -qf /var/log/apt/history.log* | grep -Po '^Commandline: apt-get.*install (?!.*--reinstall)\K.*'
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.