apt-get으로 마지막으로 업데이트 한 시간 찾기


30

마지막 시간을 찾아야합니다

apt-get update

내 서버에서 명령이 실행되었습니다. 이 정보를 어떻게 확인할 수 있습니까?

답변:


23

적어도 우분투 시스템에는 다음을 포함하는 /etc/apt/apt.conf.d/15update-stamp 파일이 있습니다.

APT::Update::Post-Invoke-Success {"touch /var/lib/apt/periodic/update-success-stamp 2>/dev/null || true";};

따라서 / var / lib / apt / periodic / update-success-stamp가 있는지 확인하고 있으면 사용할 수 있습니다.

stat -c %y /var/lib/apt/periodic/update-success-stamp

마지막 "apt-get update"호출 시간을 가져 오는 명령입니다.

시스템에 적절한 구성 파일이 없으면 언제든지 추가 할 수 있습니다.


apt.conf 행을 포함하면 +1입니다. 우분투 14.04에서는 파일이 다음과 같은 것 같습니다/var/lib/apt/periodic/update-stamp
GnP

11

apt-get update를 실행할 때 업데이트되는 / var / lib / apt / lists의 파일에서 액세스 시간을 확인할 수 있습니다. sudo를 사용하여 apt-get 업데이트를 실행 한 경우 /var/log/auth.log에 행이 기록되어 있어야합니다.


2
다른 곳에서 지적한 것처럼 일부 파일이 업데이트되지 않아 다시 다운로드되지 않은 것을 발견 할 수 있습니다. 패키지 목록의 최신 상태를 알고 싶지만 apt-get 업데이트가 마지막으로 실행 된시기를 알고 싶지 않은 경우에는 문제가 없습니다. 전자가 더 가능성이 높습니다.
David Pashley 2016

10

apt-get update업데이트 파일을 만들거나하지 않을 수 있습니다, 그것은 마지막 때 우리는 타임 스탬프를 얻기 위해 그것을 사용할 수 있도록 캐시 디렉토리를 업데이트하지 apt-get update실행되었습니다 :

stat -c %Y /var/cache/apt/

패키지 설치는 캐시 디렉토리를 업데이트 할 수도 있습니다. 이것은 신뢰할만한 점검이 아닙니다apt-get update
GnP

3

잠금 파일에서 벗어나지 마십시오. 잠금 파일은 신뢰할 수 없으며 새로운 Linux 릴리스로 시간이 지남에 따라 이동하는 경향이 있으며 많은 프로그램이 파일을 완료하면 잠금 파일을 정리 (제거)합니다.

다음 명령으로 원하는 것을 얻을 수 있습니다.

ls -lt --time-style="long-iso" /var/log/apt | grep -o '\([0-9]\{2,4\}[- ]\)\{3\}[0-9]\{2\}:[0-9]\{2\}' -m 1

이것은 하나의 두 가지 명령입니다. 첫 번째 명령의 결과는 파이프 (|) 기호를 통해 두 번째 명령으로 필터링됩니다.

첫 번째 명령에서는 "ls"를 사용하여 apt-get에 대한 액세스 기록 로그를 저장하는 디렉토리 인 / var / log / apt 디렉토리의 파일 내용을 나열합니다. "-lt"부분은 실제로 두 개의 스위치입니다. 첫 번째 "l"스위치는 "ls"에게 한 줄에 하나의 파일을 자세하게 나열하도록 지시합니다. 두 번째 "t"스위치는 "ls"에게 날짜 및 시간을 기준으로 정렬하도록 지시합니다. "--time-style"은 날짜 시간이 "YYYY-MM-DD HH : MM"형식으로 표시되도록합니다.

명령의 "grep"부분에서 "-o"스위치는 grep에게 각 행에서 정규식과 정확히 일치하는 부분 만 표시하도록 지시합니다. 여기서 사용한 정규식은 "ls"명령에 지정된 형식의 날짜 시간을 감지합니다. 또한 "grep"명령의 마지막 부분에 숫자 "1"이있는 "-m"스위치가 바로 뒤에 있다는 사실에 주목할 것입니다. 이것은 "grep"에게 첫 번째를 찾은 후 일치하는 것을 찾지 말라고 지시합니다.

요약하자면, 우리는 마지막으로 수정 된 날짜를 볼 수 있도록 apt 로그 파일 세부 정보를 나열한 다음 날짜별로 정렬하고 grep에게 첫 번째 날짜를 맨 위로 가져 오도록 지시합니다. 그것이 apt-get이 마지막으로 실행 된 날짜입니다.

그러나 악마의 옹호자를 잠시 연기하기 위해 우분투와 같은 데비안 플랫폼은 apt-get을 정기적으로 실행되는 작업으로 예약하는 것이 일반적입니다. apt-get 실행의 다른 쪽 끝에서 사람을 찾고 있다면 실제로 기계를 찾을 수 있습니다. 액세스 스탬프를 apt 로그와 일치시켜 타임 스탬프가 일치하는지 확인할 수 있습니다. 또한 사용자의 명령 기록을 어느 정도 볼 수 있습니다.

이것이 도움이되기를 바랍니다!


1
불행히도 작동하지 않습니다. 에서 /var/log/apt내가 예에 대한 작업을 수행 할 때 또한 기록됩니다 apt-get install some-package. 실제로 우분투에서는 내가 할 때 무언가를 기록 하지 않습니다apt-get update
Alex

2

마지막 업데이트가 패키지 목록에 적용된시기를 파악하기 위해 / var / cache / apt 파일에서 마지막 수정 시간을 확인할 수 있다고 생각합니다.

방금 이것을 테스트하고 "sudo apt-get update"를 연속으로 두 번 실행했는데 날짜가 현재 값에서 변경되지 않았지만 적용 할 새로운 업데이트가 없었고 캐시가 작동했기 때문이라고 생각합니다. 지금까지.



1

시냅틱은 히스토리 파일 (> 파일> 히스토리)을 기록하고, aptitude는 히스토리를 / var / log / aptitude에 기록하고 자동 설치된 패키지는 / var / lib / aptitude / pkgstates에 기록하므로 최신 활동을 확인할 수 있습니다.


1

내가 /var/cache/apt실행할 필요가 있는지 확인 하는 데 사용 합니다 apt-get update. 기본적으로 현재 시간과 캐시 시간의 /var/cache/apt차이가 24 시간 미만이면 실행할 필요가 없습니다 apt-get update. 함수에 숫자를 전달하여 기본 업데이트 간격을 재정의 할 수 있습니다.runAptGetUpdate()

function getLastAptGetUpdate()
{
    local aptDate="$(stat -c %Y '/var/cache/apt')"
    local nowDate="$(date +'%s')"

    echo $((nowDate - aptDate))
}

function runAptGetUpdate()
{
    local updateInterval="${1}"

    local lastAptGetUpdate="$(getLastAptGetUpdate)"

    if [[ "$(isEmptyString "${updateInterval}")" = 'true' ]]
    then
        # Default To 24 hours
        updateInterval="$((24 * 60 * 60))"
    fi

    if [[ "${lastAptGetUpdate}" -gt "${updateInterval}" ]]
    then
        info "apt-get update"
        apt-get update -m
    else
        local lastUpdate="$(date -u -d @"${lastAptGetUpdate}" +'%-Hh %-Mm %-Ss')"

        info "\nSkip apt-get update because its last run was '${lastUpdate}' ago"
    fi
}

샘플 출력 :

<root@ubuntu><~/ubuntu-cookbooks/libraries>
# runAptGetUpdate 

Skip apt-get update because its last run was '0h 37m 43s' ago

내 개인 github에서 이러한 기능을 추출했습니다 : https://github.com/gdbtek/ubuntu-cookbooks/blob/master/libraries/util.bash


답변이 불완전합니다. 무엇 infoisEmptyString? 또한 info명령이기 때문에 함수 이름을 잘못 선택했습니다. 그 이외의 좋은 해결책!
Ronny Andersson

@RonnyAndersson,이 라이브러리의 모든 것 : github.com/gdbtek/ubuntu-cookbooks/blob/master/libraries/…
Nam Nguyen

0

/var/log/dpkg.log는 수행 된 기록을 유지하지만 반드시 dpkg (시냅틱, apt-get 등)라는 앱은 아닙니다.


0

먼저 타임 스탬프를 파일에 쓴 다음 일반적인 작업을 수행하는 스크립트로 apt-get을 래핑합니다. 그렇게하면 타임 스탬프 형식과 위치를 정의 할 수 있습니다.)


Sujoy, 수백 대의 서버가있는 경우 스크립트로 랩핑하는 것은 실용적이지 않으며 다음에 apt-get 패키지를 업데이트 할 때 문제를 일으킬 수있는 다른 스크립트를 유지 관리하지 않으려 고합니다. 요청자가 자신의 컴퓨터에 이미 존재하는 정보를 사용하는 답변을 찾고 있다고 생각합니다.
pdwalker

0

마지막 날에 업데이트를 실행하지 않은 경우 업데이트를 실행하는 간단한 단일 라이너가 있습니다.

(find /var/lib/apt/periodic/update-success-stamp -mtime +1 | grep update-success-stamp) && (/usr/bin/apt-get update)

하루 이상 전에 수정 된 update-success-stamp 파일을 찾습니다. 적절한 나이의 파일을 찾으면 업데이트를 실행합니다. 참고 :이 작업을 수행하려면 update-success-stamp 파일이 있어야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.