Tìm cập nhật lần cuối được thực hiện với apt-get


30

Tôi cần tìm lần cuối cùng

apt-get update

lệnh đã được chạy trên máy chủ của tôi. Làm thế nào tôi có thể xác định thông tin này?

Câu trả lời:


23

Ít nhất trong các hệ thống Ubuntu có tệp /etc/apt/apt.conf.d/15update-stamp chứa:

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

Vì vậy, hãy xem nếu bạn có / var / lib / apt / periodic / update-thành công-tem và nếu bạn có nó, bạn có thể sử dụng

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

lệnh để có được thời gian của lệnh gọi "apt-get update" cuối cùng.

Và nếu hệ thống của bạn không có tệp cấu hình apt đó, bạn luôn có thể thêm nó.


+1 để bao gồm dòng apt.conf. Trên Ubuntu 14.04, có vẻ như tệp đang ở/var/lib/apt/periodic/update-stamp
GnP

11

Bạn có thể kiểm tra thời gian truy cập trên các tệp trong / var / lib / apt / list được cập nhật khi bạn chạy cập nhật apt-get. Nếu bản cập nhật apt-get được chạy với sudo, bạn nên có một dòng đăng nhập /var/log/auth.log khi nó được thực hiện ..


2
Như đã chỉ ra ở một nơi khác, bạn có thể thấy một số tệp không được cập nhật và do đó không được tải xuống lại. Điều này tốt nếu bạn muốn biết danh sách gói của mình cập nhật như thế nào, nhưng không phải nếu bạn muốn biết khi nào bản cập nhật apt-get được chạy lần cuối. Các cựu có nhiều khả năng.
David Pashley

10

An apt-get updatecó thể không tạo hoặc cập nhật tệp, nó cập nhật thư mục bộ đệm để chúng tôi có thể sử dụng tệp đó để lấy dấu thời gian khi lần cuối apt-get updatechạy:

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

Lưu ý rằng cài đặt gói cũng có thể cập nhật thư mục bộ đệm. Đây không phải là kiểm tra đáng tin cậy choapt-get update
GnP

3

Đừng đi từ các tập tin khóa. Các tệp khóa không đáng tin cậy, chúng có xu hướng di chuyển theo thời gian với các bản phát hành Linux mới và nhiều chương trình dọn dẹp (xóa) các tệp khóa khi chúng được thực hiện với chúng.

Lệnh sau sẽ giúp bạn có được thứ bạn đang tìm kiếm.

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

Đây là hai lệnh trong một. Kết quả của bộ lọc lệnh đầu tiên vào thứ hai thông qua biểu tượng pipe (|).

Trong lệnh đầu tiên, tôi đang sử dụng "ls" để liệt kê nội dung tệp của thư mục / var / log / apt, đây là thư mục lưu trữ nhật ký lịch sử truy cập cho apt-get. Phần "-lt" thực sự là hai công tắc. Công tắc "l" đầu tiên báo cho "ls" liệt kê một tệp trên mỗi dòng một cách chi tiết. Công tắc "t" thứ hai cho "ls" sắp xếp theo ngày và giờ. "- phong cách thời gian" buộc thời gian ngày hiển thị ở định dạng "YYYY-MM-DD HH: MM".

Trong phần "grep" của lệnh, công tắc "-o" báo cho grep chỉ hiển thị các phần của mỗi dòng khớp chính xác với biểu thức chính quy. Biểu thức chính quy tôi đã sử dụng ở đây phát hiện thời gian ngày ở định dạng được chỉ định trong lệnh "ls". Bạn cũng sẽ nhận thấy mảnh ma thuật nhỏ thực sự ở cuối lệnh "grep" có công tắc "-m" với số "1" ngay sau đó. Điều này nói với "grep" ngừng tìm kiếm các trận đấu sau khi nó tìm thấy kết quả đầu tiên.

Vì vậy, tóm lại, chúng tôi liệt kê chi tiết tệp nhật ký apt để chúng tôi có thể xem ngày sửa đổi cuối cùng, sau đó chúng tôi sắp xếp theo ngày và báo cho grep để kéo ngày đầu tiên ra khỏi đầu, sau đó trả về. Đó là ngày cuối cùng mà apt-get chạy.

Tuy nhiên, để chơi người ủng hộ ma quỷ trong một thời gian, các nền tảng Debian như Ubuntu thường lên lịch apt-get như một công việc chạy thường xuyên. Nếu bạn đang tìm kiếm người ở đầu kia của thực thi apt-get, bạn thực sự có thể tìm thấy một máy. Bạn luôn có thể kết hợp các nhật ký truy cập với nhật ký apt để xem có bất kỳ dấu thời gian nào trùng khớp hay không. Cũng có thể nhìn vào lịch sử lệnh của người dùng ở một mức độ nào đó.

Hi vọng điêu nay co ich!


1
Đáng tiếc là không làm việc. Trong /var/log/aptđó cũng được ghi lại khi tôi làm ví dụ apt-get install some-package. Trên thực tế, trên Ubuntu nó không đăng nhập một cái gì đó khi tôi làmapt-get update
Alex

2

Tôi nghi ngờ bạn có thể kiểm tra lần sửa đổi cuối cùng trên các tệp / var / cache / apt để tìm ra khi nào các bản cập nhật cuối cùng được áp dụng cho danh sách gói.

Tôi mới thử nghiệm điều này và chạy "sudo apt-get update" hai lần liên tiếp và ngày không thay đổi so với giá trị hiện tại của chúng, nhưng tôi nghi ngờ điều này là do không có bản cập nhật mới nào để áp dụng và bộ đệm đã hết đến nay.



1

Synaptic ghi nhật ký một tệp lịch sử (> Tệp> Lịch sử), aptitude ghi cả lịch sử trong các gói / var / log / aptitude và tự động cài đặt trong / var / lib / aptitude / pkgstates, vì vậy bạn có thể kiểm tra các hoạt động này để biết hoạt động mới nhất.


1

Tôi sử dụng /var/cache/aptđể xác định nếu tôi cần phải chạy apt-get update. Theo mặc định, nếu chênh lệch giữa thời gian hiện tại và thời gian bộ đệm /var/cache/aptlà dưới 24 giờ, tôi không cần phải chạy apt-get update. Khoảng thời gian cập nhật mặc định có thể được ghi đè bằng cách chuyển một số cho hàmrunAptGetUpdate()

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
}

Đầu ra mẫu:

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

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

Tôi đã trích xuất các chức năng này từ github cá nhân của mình: https://github.com/gdbtek/ubfox-cookbooks/blob/master/lologists/util.bash


Trả lời không đầy đủ. Là gì infoisEmptyString? Ngoài ra, infolà một lựa chọn kém về tên hàm vì đó cũng là một lệnh. Khác hơn thế, giải pháp tốt đẹp!
Ronny Andersson


0

/var/log/dpkg.log sẽ lưu lại lịch sử những gì đã được thực hiện, nhưng không nhất thiết là ứng dụng nào được gọi là dpkg (synaptic, apt-get, v.v.).


0

gói apt-get trong một tập lệnh đầu tiên viết dấu thời gian vào một tệp và sau đó thực hiện công việc thông thường. bằng cách đó, bạn có thể xác định định dạng và vị trí dấu thời gian;)


Sujoy, Gói nó trong một tập lệnh là không thực tế nếu bạn có hàng trăm máy chủ và bạn không muốn duy trì một tập lệnh khác có thể gây ra sự cố vào lần tới khi bạn cập nhật gói apt-get. Tôi nghĩ rằng người yêu cầu đang tìm kiếm một câu trả lời sử dụng thông tin đã có trong máy tính của anh ta.
pdwalker

0

Đây là một lớp lót đơn giản để chạy bản cập nhật nếu nó không được chạy vào ngày cuối cùng.

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

Nó tìm kiếm tệp tem cập nhật-thành công, đã được sửa đổi hơn một ngày trước. Nếu nó tìm thấy tập tin đúng tuổi, thì nó sẽ chạy bản cập nhật. Lưu ý: tệp tem-update-thành công phải tồn tại để nó hoạt động.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.