ค้นหาการปรับปรุงครั้งล่าสุดด้วย apt-get


คำตอบ:


23

อย่างน้อยในระบบ Ubuntu มีไฟล์ /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" ครั้งล่าสุด

และหากระบบของคุณไม่มีไฟล์กำหนดค่าที่เหมาะสมคุณสามารถเพิ่มได้ตลอดเวลา


+1 สำหรับการรวมบรรทัด apt.conf บน Ubuntu 14.04 ดูเหมือนว่าไฟล์อยู่ที่/var/lib/apt/periodic/update-stamp
GnP

11

คุณสามารถตรวจสอบเวลาในการเข้าถึงไฟล์ใน / var / lib / apt / list ซึ่งได้รับการอัพเดตเมื่อคุณรันการอัพเดต apt-get หาก apt-get update ถูกรันด้วย sudo คุณควรมีบรรทัดที่ล็อกอินใน /var/log/auth.log เมื่อดำเนินการเสร็จแล้ว ..


2
คุณอาจพบว่าไฟล์บางไฟล์ไม่ได้รับการอัปเดตดังนั้นจึงไม่ได้รับการดาวน์โหลดอีกครั้ง นี่เป็นเรื่องปกติถ้าคุณต้องการทราบว่ารายการแพคเกจของคุณเป็นรุ่นล่าสุด แต่ไม่ใช่ถ้าคุณต้องการรู้ว่าเมื่อใดที่การอัพเดต apt-get ถูกเรียกใช้ครั้งล่าสุด อดีตมีแนวโน้มมากขึ้น
David Pashley

10

apt-get updateอาจไม่ได้สร้างหรือไฟล์ update จะไม่อัปเดตไดเรกทอรีแคชดังนั้นเราจึงสามารถใช้ที่จะได้รับการประทับเวลาเมื่อที่ผ่านมาapt-get updateได้รับการเรียกใช้:

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

โปรดทราบว่าการติดตั้งแพ็คเกจอาจอัพเดตไดเรกทอรีแคชด้วย นี่ไม่ใช่การตรวจสอบที่เชื่อถือได้สำหรับapt-get update
GnP

3

อย่าไปจากไฟล์ล็อค ไฟล์ล็อคไม่น่าเชื่อถือพวกเขามักจะเคลื่อนที่ไปตามช่วงเวลาด้วยลีนุกซ์รุ่นใหม่และการล้างข้อมูล (ลบ) โปรแกรมล็อคไฟล์เมื่อทำเสร็จแล้ว

คำสั่งต่อไปนี้จะให้สิ่งที่คุณต้องการ

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" เพื่อแสดงเนื้อหาไฟล์ของไดเรกทอรี / var / log / apt ซึ่งเป็นไดเรกทอรีที่เก็บบันทึกประวัติการเข้าถึงสำหรับ apt-get ส่วน "-lt" เป็นจริงสองสวิตช์ สวิตช์ "l" ตัวแรกจะบอก "ls" เพื่อแสดงรายการหนึ่งไฟล์ต่อบรรทัดโดยมีรายละเอียด สวิตช์ "t" ตัวที่สองจะบอก "ls" เพื่อเรียงลำดับตามวันที่และเวลา "- สไตล์เวลา" บังคับให้เวลาวันที่แสดงในรูปแบบ "YYYY-MM-DD HH: MM"

ในส่วน "grep" ของคำสั่งสวิตช์ "-o" จะบอก grep ให้แสดงเฉพาะบางส่วนของแต่ละบรรทัดที่ตรงกับนิพจน์ทั่วไปเท่านั้น นิพจน์ทั่วไปที่ฉันใช้ที่นี่ตรวจจับเวลาวันที่ที่อยู่ในรูปแบบที่ระบุในคำสั่ง "ls" นอกจากนี้คุณยังจะสังเกตเห็นชิ้นส่วนเล็ก ๆ ของเวทมนตร์ที่ปลายสุดของคำสั่ง "grep" ซึ่งมีสวิตช์ "-m" ที่มีหมายเลข "1" ตามมาทันที สิ่งนี้บอกให้ "grep" หยุดค้นหาไม้ขีดไฟหลังจากพบไม้แรกแล้ว

โดยสรุปแล้วเรากำลังแสดงรายการรายละเอียดไฟล์บันทึก apt เพื่อให้เราสามารถดูวันที่แก้ไขล่าสุดได้จากนั้นเราเรียงลำดับตามวันที่และบอก grep เพื่อดึงวันแรกออกจากด้านบนซึ่งจะส่งคืน นั่นคือวันสุดท้ายที่ฉลาด - วิ่ง

ในการเล่นผู้สนับสนุนของปีศาจชั่วครู่หนึ่งมันเป็นเรื่องปกติสำหรับแพลตฟอร์ม Debian เช่น Ubuntu เพื่อกำหนดตารางเวลารับงานเป็นงานที่ทำงานเป็นประจำ หากคุณกำลังมองหาบุคคลที่ปลายอีกด้านของการดำเนินการ apt-get คุณอาจพบเครื่องจักร คุณสามารถจับคู่บันทึกการเข้าถึงกับบันทึก apt เสมอเพื่อดูว่ามีการประทับเวลาใด ๆ เกิดขึ้นหรือไม่ นอกจากนี้ยังเป็นไปได้ที่จะดูประวัติคำสั่งของผู้ใช้ในระดับหนึ่ง

หวังว่านี่จะช่วยได้!


1
น่าเสียดายที่ไม่ทำงาน ในก็ยังถูกบันทึกไว้เมื่อผมยกตัวอย่างเช่นทำ/var/log/apt apt-get install some-packageจริงๆแล้วบน Ubuntu มันไม่ได้บันทึกอะไรเมื่อฉันทำapt-get update
Alex

2

ฉันสงสัยว่าคุณสามารถตรวจสอบเวลาที่แก้ไขล่าสุดในไฟล์ / var / cache / apt เพื่อหาว่าการอัปเดตครั้งล่าสุดถูกนำไปใช้กับรายการแพ็กเกจหรือไม่

ฉันเพิ่งทดสอบสิ่งนี้และรัน "sudo apt-get update" สองครั้งติดต่อกันและวันที่ไม่เปลี่ยนแปลงจากค่าปัจจุบันของพวกเขา แต่ฉันสงสัยว่านี่เป็นเพราะไม่มีการอัพเดทใหม่ที่จะนำไปใช้และแคชนั้นหมดแล้ว ถึงวันที่



1

Synaptic บันทึกไฟล์ประวัติ (> ไฟล์> ประวัติ) ความถนัดบันทึกทั้งประวัติใน / 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/lไลบรารี/util.bash


คำตอบไม่สมบูรณ์ คืออะไรinfoและisEmptyString? นอกจากนี้ยังinfoเป็นตัวเลือกที่ดีของชื่อฟังก์ชั่นตั้งแต่ยังเป็นคำสั่ง นอกเหนือจากนั้นทางออกที่ดี!
Ronny Andersson

@ RonnyAndersson ทั้งหมดใน lib นี้: github.com/gdbtek/ubuntu-cookbooks/blob/master/l
Nam Nguyen

0

/var/log/dpkg.log จะเก็บประวัติของสิ่งที่ทำ แต่ไม่จำเป็นว่าแอพใดที่เรียกว่า dpkg (synaptic, apt-get, etc)


0

ตัด apt-get ในสคริปต์ที่เขียน timestamp ลงในไฟล์ก่อนจากนั้นจึงทำงานตามปกติ ด้วยวิธีนี้คุณสามารถกำหนดรูปแบบและเวลาที่บันทึกได้;)


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.