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?
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:
Í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ó.
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 ..
An apt-get update
có 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 update
chạy:
stat -c %Y /var/cache/apt/
apt-get update
Đừ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!
/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
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.
$ ls -l /var/lib/dpkg/lock
-rw-r----- 1 root root 0 2011-11-16 09:40 /var/lib/dpkg/lock
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.
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/apt
là 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
info
và isEmptyString
? Ngoài ra, info
là 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!
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;)
Đâ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.
/var/lib/apt/periodic/update-stamp