'apt-get update'가 마지막으로 실행 된 시간을 아는 방법은 무엇입니까?


24

리포지토리 목록을 업데이트하는 명령은 apt-get update입니다.

오늘 또는 지난 24 시간 동안 실행되었는지 확인하는 방법은 무엇입니까?

파일 타임 스탬프를 확인해야하는지 모르겠습니다. 또는 다른 apt 명령을 발행하십시오. 또는 dpkg 유틸리티를 사용하십시오.

매뉴얼 페이지에서 유용한 것을 찾을 수 없습니다.

답변:


15

터미널에서 명령 내역을 확인할 수 있습니다.

history | grep 'apt update'

시간별로 확인하려면 다음을 수행하십시오.

HISTTIMEFORMAT="%d/%m/%y %T " history | grep '[a]pt update'

( [a]정규 표현식 의 일부는 문자와 만 일치 a하지만 기록을 잡을 때 자체와 일치하지 않는 효과가 있습니다.)

여기에 이미지 설명을 입력하십시오

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


2
그것은 history | grep 'apt-get update':)
Lucio

7
@souravc이 맞습니다. 이것은 저절로 작동하지 않습니다. 이 HISTTIMEFORMAT설정되어 있지 않으면 .bashrc이 명령은 현재 셸 세션 에서 실제로 실행 된 명령에 대한 정확한 타임 스탬프 만 갖습니다 . 현재 세션이 아닌 다른 모든 명령의 경우 타임 스탬프는 ~/.bash_history파일 의 수정 타임 스탬프 만 표시 합니다. 타임 스탬프가 ~/.bash_history파일에 저장되지 않으므로 다른 세션의 명령에 대한 타임 스탬프를 표시 할 수 없습니다 . 스탬프가 여전히 메모리에 있기 때문에 현재 세션의 타임 스탬프를 표시 할 수 있습니다.
falconer

7
항상 작동하지는 않습니다. 예를 들어 다른 사용자가 달렸 apt거나 .bash_history손질 되었을 때 .
OrangeTux

4
이것은 끔찍한 대답입니다. 무인 업그레이드는 설명하지 않으며, 항상 4-5 개의 터미널이 열려있는 나와 같은 사람인 경우 기록은 기본적으로 종료 될 때만 저장되므로 모든 항목을 확인해야합니다.
hackel

3
모든 사람이 이미 말한 것을 반향하면 스크립트로 apt가 업데이트되었거나 올바른 기록을 보지 않거나 기록이 잘린 경우 또는 다른 사용자가 업데이트를 수행 한 경우 작동하지 않습니다. 그것은 일반적인 경우를 해결하기에 충분히 신뢰할 수 없습니다.
zneak

54

의 타임 스탬프를 확인하십시오 /var/lib/apt/periodic/update-success-stamp.

$ ls -l /var/lib/apt/periodic/update-success-stamp
-rw-r--r-- 1 root root 0 Jan 25 01:41 /var/lib/apt/periodic/update-success-stamp

다음 시간입니다 Jan 25 01:41apt-get마지막으로 실행. 시간 만 얻으려면 터미널에서 다음 명령을 사용하십시오.

$ ls -l /var/lib/apt/periodic/update-success-stamp | awk '{print $6" "$7" "$8}'
Jan 25 01:41

마지막 업데이트 시간을 확인하는 것이 가장 좋습니다. /var/lib/apt/periodic/비어있는 것으로 밝혀지면

ls -l /var/log/apt/history.log

최신 정보

일부 이유로 인해 위의 파일 update-success-stamp또는 history.log일부 시스템에서 사용할 수없는 상태로 남아 있습니다. 새로운이 제안 에서 derobert 파일에 보는가 /var/cache/apt/pkgcache.bin.

pkgcache.binApt의 메모리 매핑 패키지 캐시 위치입니다. 각 업데이트 후에 갱신됩니다. 따라서 마지막 apt으로 업데이트 된 시간을 아는 것이 가장 좋습니다.

다음 명령을 사용하여 정확한 시간을 알 수 있습니다.

ls -l /var/cache/apt/pkgcache.bin | cut -d' ' -f6,7,8

또는

stat /var/cache/apt/pkgcache.bin

/var/lib/apt/periodic/디렉토리가 비어 있습니다
virtualxtc

내 디렉토리도 비어 있습니다. 데비안 7.3.
cavila

6
더 나은 백업 위치는입니다 /var/cache/apt/pkgcache.bin. 또한 ls; 의 출력을 구문 분석하지 마십시오 . 사용하는 stat대신. 마음에 계속 ls출력이 로케일에 따라, 파일의 연령 등 (또한, 나는 당신이 갱신 통지 - 일반이 설치되어있는 경우에만 당신이 제안하는 첫 번째 파일을 얻을 생각)에 따라 달라집니다
derobert

2
/var/cache/apt/pkgcache.bin또한 패키지 설치에 터치, 그래서 마지막으로 확인하는 신뢰할 수있는 방법이 아니다 apt-get update실행됩니다.
GnP

3
... 방금 apt-get clean최근에 실행 된 데비안 8 시스템 에는 없습니다 /var/cache/apt/pkgcache.bin. /var/lib/apt/lists대신 apt-get update실제로 mtime을 사용하는 캐시되지 않은 원시 데이터 인 것처럼 보이기 때문에 대신 mtime을 사용하려고합니다 .
ssokolow

6

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

function trimString()
{
    local -r string="${1}"

    sed -e 's/^ *//g' -e 's/ *$//g' <<< "${string}"
}

function isEmptyString()
{
    local -r string="${1}"

    if [[ "$(trimString "${string}")" = '' ]]
    then
        echo 'true'
    else
        echo 'false'
    fi
}

function info()
{
    local -r message="${1}"

    echo -e "\033[1;36m${message}\033[0m" 2>&1
}

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


2

파일에 관심이있을 수도 있습니다.

/var/log/apt/term.log

rootless 또는 cat 으로여십시오 .


이것은 패키지 데이터베이스에서 apt가 수행 한 작업 로그를 확인하기에 적합한 곳이지만 포스터가 알고 싶어하는 apt-get update것입니다.
Faheem Mitha

1

이 명령을 사용합니다

stat /var/cache/apt/ | grep -i -e access -e modify

마지막으로 액세스 한 시간을 표시합니다. 마지막으로 'apt-get update'를 실행하면 실제로 업데이트되었습니다.

시간이 다르면 사용 가능한 업데이트가 없을 수 있습니다. 특정 시간에 crontab에서 업데이트 및 업그레이드를 실행하고 있으므로 업데이트가 실행되었는지 여부를 알 수 있습니다.


1

@ssokolow의 마지막 주석을 here 의 답변과 결합하면 이 명령은 apt-get update지난 7 일 동안 실행되지 않은 경우 실행됩니다.

[ -z "$(find -H /var/lib/apt/lists -maxdepth 0 -mtime -7)" ] && sudo apt-get update

설명:

  • -mtime -7지난 7 일 동안 변경 시간이있는 파일을 찾습니다. -mmin짧은 시간에 신경 쓰면 사용할 수 있습니다 .
  • -maxdepth 0 찾기가 디렉토리의 내용으로 들어 가지 않도록합니다.
  • -H/var/lib/apt/lists소프트 링크 인 경우 역 참조
  • 어떤 이유로 find실패하면 명령이 실행됩니다. 이것은 안전한 기본값처럼 보입니다. 기본값을 뒤집으려면 -n테스트 및 -mtime +7find 명령에서 사용하십시오.

0

방금 다음 주제에 대한이 질문에 대한 답변을 게시했습니다.

업데이트 내역은 어디에서 찾을 수 있습니까?

대답은 "apt-get upgrade"를 찾기 때문에이 주제에는 적합하지 않을 수 있습니다. 다음은 샘플 출력입니다.

xenial% 9: ./linuxpatchdate 
2016-07-19 54
2017-02-24 363
2017-03-08 7
2017-03-09 2

소스 코드 및 자세한 설명은 다른 주제를 참조하십시오.


코드가 업데이트가 아닌 업그레이드를 찾는 것처럼 보였습니다. 예를 들어, 우분투 16.04에서 "apt-get update"(이 질문의 주제)를 실행했는데 / var / log / apt에 변경된 iota가 나타나지 않으므로 해당 디렉토리의 모든 항목을 스캔하는 것은 아무 소용이 없습니다. 이 특정 질문에 답하십시오.
Ron Burk 17

1
당신 말이 맞아요 지적 해 주셔서 감사합니다. 나는 그것을 반영하기 위해 대답을 변경했습니다. 우리는 업데이트가 방금 다운로드되는 것이 아니라 컴퓨터에 적용된 마지막 날짜를 찾고있었습니다.
JsinJ

0
LAST_UPDATED=$( stat --format="%X" /var/cache/apt/pkgcache.bin )
UNIX_TIME=$( date +%s )
TIME_DIFF=$(( UNIX_TIME - LAST_UPDATED ))

if [[ "${TIME_DIFF}" -gt 43200 ]]
then
  # It's been 12 hours since apt-get update was ran.
fi
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.