Bir Ubuntu makinesinin internete en son ne zaman bağlandığını nasıl güvenilir bir şekilde kontrol edebilirim?


24

Bir Ubuntu makinesinin internete en son ne zaman bağlandığını nasıl güvenilir bir şekilde kontrol edebilirim?

Bunun mümkün olmaması durumunda, bir Ubuntu makinesinin bir ağa son bağlanışını kontrol etmenin bir yolu yeterli olacaktır.

Yanıtlar:


28

Yöntem 1

NetworkManager.conf günlüğe kaydetmeye izin verse de, bu görünüşte hala syslog'a giriyor. Ancak, kern.log da vardır.

grep 'associated' /var/log/kern.log | tail -n1                               
Jun 21 17:08:25 anaconda kernel: [ 4910.819781] wlan1: associated

Yöntem 2

NetworkManager'ın son bağlantı zamanını /var/lib/NetworkManager/timestampskaydettiğini ve unix çağ zaman biçiminde (1970'den beri saniye) dosyada sıralandığını buldum . Mesela mayın buna benziyor:

$ cat /var/lib/NetworkManager/timestamps                                       
[timestamps]
c562ac2d-8911-4273-b165-ed1495b28c9a=1432777079
46cfcdd9-d095-418f-acd6-0a7ca282bb9a=0
d81fb3d0-1717-42c0-903d-4622c2381597=1434895707
b0bdefe6-df88-49bb-83d8-154dd21d77d9=1433093286

En son girişi göstermek için

date --date=@"$( awk -F'=' 'BEGIN {var=0}{if(var<$2) var=$2;} END{print var}' /var/lib/NetworkManager/timestamps )"

Awk, en büyük çağ zamanını arayacaktır (en son başka deyişle) ve tarih onu insan tarafından okunabilir forma dönüştürecektir.

Ayrıca, bu dosyanın ( /var/lib/NetworkManager/timestamps) Bağlantıları Düzenle grafik menüsü tarafından son bağlantı süresini görüntülemek için kullanıldığından da şüpheleniyorum .

görüntü tanımını buraya girin

Sorun şu ki, hala bir erişim noktasına bağlıysanız, GUI yolunun nowbağlantının en son kurulduğu zamanı göstermediğini gösterir.


Dosyayı nerede bulabilirim? :) Ayrıca, makinenin internete en son ne zaman bağlandığını veya makinenin en son bir ağa bağlandığını da kontrol ediyor mu? Son olarak, bu daha sonra çalışır mı?
kos

Görünüşe göre bu kos hala syslog gider. Biraz daha araştırma yapacağım ve bir şey bulursam cevabımı güncellerim.
Sergiy Kolodyazhnyy

Tamam kontrol ettim man NetworkManager.conf, dosya /etc/NetworkManager/NetworkManager.conf; bu, sadece arka planda oturum açmayı etkinleştirdikten sonra çalışacak, ancak ne yazık ki, makinenin bunun için yapılandırılmadığını varsayarak bunu kontrol etmem gerekiyor. Yine de kern.logçözüm için ve diğer durumlarda yardımcı olabilecek ilk çözüm için +1
kos

2
@kos Bu dosya hex-string = epoch-timestamp içeriyor. onaltılı dizeler erişim noktalarıdır. epoch-timestamps en son bağlantı zamanıdır. Awk versiyonumu orada deneyin, cevabımı
düzelttim

2
@DeadChex Ben bir yıl izin verdim :) Zaten düzeltildi
Sergiy Kolodyazhnyy

6

/var/log/syslogBir ağa en son bağlandığınızda dosyayı gösterip göstermediğini kontrol edebilirsiniz .


Örnek

Jun 21 08:00:00 Ubuntu dhclient: DHCPREQUEST of 192.0.0.0 on wlan0 to 192.0.0.0 port 67 (xid=0xec7c6e7)

Günlükten yalnızca ihtiyacınız olanı almak için bir grep komutu çalıştırabilirsiniz.

< /var/log/syslog grep DHCPREQUEST 

1
+1, yine de internete en son ne zaman bağlı olduğunu kontrol etmenin bir yolunu umuyor. Bugün içinde hiçbir şey çıkmazsa bu cevabı kabul edeceğim. Ancak size biraz daha kullanıcı dostu bir çözüm önermek istiyorum < /var/apt/syslog grep DHCPREQUEST.
kos,

1
DHCPREQUESTgüvenilir değil. Öğleden sonra çevrimiçi olduğum ve bir çok DHCP isteğim olduğu için çevrimiçi olduğumdan.
AB

@Kos sizin yorumunuzda yanlışlıkla log yerine yerleştirilmiş görünüyorsunuz.
Sri

@Sri Gerçekten, bu bir kayma oldu. Neyse ki OP bunun için düşmedi!
kos

5

Kontrol CONNECTED_GLOBALbulduk sonra link connectediçinde/var/log/syslog

/link connected/,/CONNECTED_GLOBAL/

% awk '/link connected/,/CONNECTED_GLOBAL/ {line=$0} END{print line}' /var/log/syslog
Jun 21 11:12:54 sturm NetworkManager[736]: <info> NetworkManager state is now CONNECTED_GLOBAL Jun 21 11:12:54

% awk '/link connected/,/CONNECTED_GLOBAL/ {month=$1;day=$2;time=$3} END{print month,day,time}' /var/log/syslog
Jun 21 11:12:54

sudoİlki için gerek yok, ama bunların hiçbiri çalışmıyor, POSIXly yüzünden olduğunu düşünüyorum [[:space:]]. Hangi sürümünü kullanıyorsunuz awk?
kos

@kos Ups, sudokaldırıldı. GNU Awk 4.1.1, API: 1.1 (GNU MPFR 3.1.2-p11, GNU MP 6.0.0)
AB

Tamam şimdi çalışıyor :). +1
kos

@kos benim ihtiyacım var %;) Aşağıdaki satırda bir çıktı varsa
AB

1
Ben sevmiyorum %. Hepsi ama bu mükemmel!
Helio

2

Bunu yapmanın "doğru" yolunu bulamazsanız, daima kendinizinkini üretebilirsiniz!

Aşağıdaki bash işlevi, çevrimiçi olup olmadığınızı (Internet'te) olup olmadığını size söyleyecektir.

Sadece onu (döngü içinde ve sonra uyuyan) çağıran bir komut dosyası yazmanız ve bir dosyaya son tarih ve saati kaydetmeniz gerekir (üzerine yazma, sadece en yeni değere sahip olacaktır).

Döngüye kod eklemeniz gerekir, böylece başlangıçta çağrılır başlatılmaz denetler ve kaydeder (ilk durumunuz doğru ayarlanır).

Bundan sonra, yalnızca durum ilk önce çevrimdışı olduğunda ve ilk kez çevrimdışı olduktan sonra çevrimiçi olduğunda tekrar giriş yaparsınız. Kodlamak açıklamaktan daha kolay. ;)

Bu, döngüde ne kadar gecikme (uyku) kullandığınızla (çok fazla sistem kaynağı tüketebilecek çok sıkı bir döngü olmasını engellemek için) kesin olarak sınırlı olacaktır.) Başlamadan önce ne olduğunun farkında bile olmaz. veya çalışmadığı zaman.

Komut dosyasının kendisi (arka plan işi olarak ( &çağrının sonunda), muhtemelen a nohupişlemi sona erdiğinde çalışır durumda tutmak için) bir kullanıcıyla $ HOME / .profile dosyanızdan çalıştırarak oturum açtığında başlatılabilir. Masaüstü otomatik başlatma yardımcı programınızla (KDE veya Gnome), zaten çalışıp çalışmadığını, hatta sahip olduğunuz başlangıç ​​sisteminden (init / systemd / etc. söyledi.)

Tam olarak istediğinizi yapan böyle bir şey bulamıyorsanız, bunu yapmak için kendi senaryonuzu yazmak ve arka planda bir cini gibi çalıştırmak pek de zor değildir.

Mümkünse normal bir kullanıcı hesabından çalıştırmak en iyisidir - C veya Python gibi sağlam bir dilde kodlamadığınız sürece - çünkü kök ayrıcalıklarıyla çalışan kabuk komut dosyaları genellikle güvenlik riski oluşturur.

Bu yaklaşımın başka bir sorunu var. Bazen bir ping, zaman zaman yanlış bir çevrimdışı durum göstermesini sağlar.

Tam bir betiğim var, offline_alert , istediğinin tam tersini yapan şey - çevrimdışı olduğumda beni uyarıyor - ancak kod yararlı olabilir. Yanlış pozitifleri ping zaman aşımından azaltmaya çalışan daha iyi bir çevrimdışı işlevi vardır.

function offline {
  ## Test if offline
  ## Returns 0 if online, 2 if offline
  local RC
  ping -c 1 google.com > /dev/null 2>&1
  RC=$?
  ##echo "offline returning [${RC}]"
  return $RC
}

2

İnternette çalışmasını sağlayan herhangi bir servis / arka plan günlüğünü kontrol etmenin bir yolu Örneğin NTP (Ağ Saati Protokolü) güncellemeleri.

dpkg -L ntpdateAğ durumu kancaları için bkz .

Günlüğünü Ubuntu masaüstü için kontrol ettiğimde, güncelleme ne zaman ağ kurarsa çalışır ve son güncelleme başarısız olursa kısa bir gecikmeden sonra denemeye devam eder. Bağlanır ntp.ubuntu.com.

(Not, yorumlarımın çıktısına ilk sütunu ekledim)

$ grep -r ntpdate /var/log/syslog*

1st_trial   Jul 14 00:35:56 user-VirtualBox ntpdate[774]: Can't find host ntp.ubuntu.com: Name or service not known (-2)
            Jul 14 00:35:56 user-VirtualBox ntpdate[774]: no servers can be used, exiting
2nd_trial   Jul 14 03:38:57 user-VirtualBox ntpdate[2571]: Can't find host ntp.ubuntu.com: Name or service not known (-2)
            Jul 14 03:38:57 user-VirtualBox ntpdate[2571]: no servers can be used, exiting
3rd_trial   Jul 14 03:46:09 user-VirtualBox ntpdate[2782]: Can't find host ntp.ubuntu.com: Name or service not known (-2)
            Jul 14 03:46:09 user-VirtualBox ntpdate[2782]: no servers can be used, exiting
4th_trial   Jul 14 03:47:48 user-VirtualBox ntpdate[2917]: step time server 91.189.89.199 offset 3.458355 sec
1st_trial   Jul 14 10:23:07 user-VirtualBox ntpdate[728]: Can't find host ntp.ubuntu.com: Name or service not known (-2)
            Jul 14 10:23:07 user-VirtualBox ntpdate[728]: no servers can be used, exiting
2nd_trial   Jul 14 10:37:22 user-VirtualBox ntpdate[2099]: step time server 91.189.89.199 offset 2.021103 sec
dis-/re-con Jul 14 15:27:09 user-VirtualBox ntpdate[20174]: step time server 91.189.89.199 offset 1.677465 sec
1st_trial   Jul 14 23:55:00 user-VirtualBox ntpdate[807]: Can't find host ntp.ubuntu.com: Name or service not known (-2)
            Jul 14 23:55:00 user-VirtualBox ntpdate[807]: no servers can be used, exiting
2nd_trial   Jul 15 00:00:24 user-VirtualBox ntpdate[2041]: step time server 91.189.94.4 offset 1.619839 sec
1st_trial   Jul 15 05:39:08 user-VirtualBox ntpdate[767]: Can't find host ntp.ubuntu.com: Name or service not known (-2)
            Jul 15 05:39:08 user-VirtualBox ntpdate[767]: no servers can be used, exiting
2nd_trial   Jul 15 05:39:21 user-VirtualBox ntpdate[1088]: step time server 91.189.94.4 offset 2.897077 sec
1st_trial   Jul 15 05:49:40 user-VirtualBox ntpdate[787]: Can't find host ntp.ubuntu.com: Name or service not known (-2)
            Jul 15 05:49:40 user-VirtualBox ntpdate[787]: no servers can be used, exiting
2nd_trial   Jul 15 05:49:50 user-VirtualBox ntpdate[1101]: adjust time server 91.189.94.4 offset 0.090520 sec
reconnect   Jul 15 05:55:50 user-VirtualBox ntpdate[2251]: adjust time server 91.189.94.4 offset 0.261432 sec
reconnect   Jul 15 06:04:53 user-VirtualBox ntpdate[2702]: step time server 91.189.94.4 offset 0.525658 sec

Ubuntu 14.04 LTS 64Bit masaüstü ve sunucu sürümleri için varsayılan olarak kurulu olduğunu onaylıyorum.

VM'de bir deneme yaptım, yalnızca bağlandığı veya yeniden bağlandığı zamanları gösteriyor (İnternet kullanılabilir durumdayken). İstediğin gibi değil (geçen sefer bağlandı)

Unutmayın, syslog bir döndürme günlüğüdür, eskiden sıkıştırılmış olanları bile günlüklerin tümünü aramak istiyorsanız, zgrep

zgrep -ih ntpdate /var/log/syslog* | sort -bn -k2

Bu iyi görünüyor, ancak bunun en azından Ubuntu Masaüstünde varsayılan olarak etkin olduğunu onaylayabilir misiniz? Şu an kişisel olarak test edemiyorum, ancak yarın gerçekten yapacağım
kos

1
Silmeyin, kullanışlıdır ve kapsamım için iyidir, bunun son (veya daha az) kalıcı bir bağlantı yapıldığını son kez bildireceğini anlamış olsaydım, bu yüzden makineyi 2 gün boyunca bağlı bırakmam durumunda rapor verecek Son bağlantının yapıldığı tarih ve saat (yani 2 gün önce), doğru mu? Sadece son şey, biri ağdan ayrıldığında ve 5 dakika sonra tekrar bağlandığında ne olur? NTP kontrolü tekrar çalışıyor mu? Veya yeni bir NTP kontrolü yapılmadan önceki NTP kontrolünden sonra bir tür eşik var mı?
kos

1
@kos, kafanız karışmaz, ntpdatevarsayılan olarak kurulur ama ayrı paketlerde gelen ntpd/ openntpddaemon / service değil . Saat ve tarihinizi yanlış olana çevirip değiştirmediğinizi kontrol etmek için bağlantıyı kesin ve tekrar bağlayın.
user.dz

1
@kos, süreyi periyodik olarak güncellemek ntpdateiçin kullanılabilir, cronhizmet işletmekle (ntpd / openntpd) aynı sonuçları alır. Ancak, varsayılan konfigürasyon arıyorsunuz ve ek bir ayar yok, değil mi?
user.dz

1
Üzgünüm, yanlış okudum. Evet, yapılandırılmamış bir makinede kullanılacak bir şey arıyordum. Tamam, bu benim için çalışıyor, ben yine de soruyu açık bırakacağım, belki birileri katil bir cevapla gelir. Teşekkürler! İleriye doğru atılmış harika bir adım. Her neyse, bu kayıtların sert bir şekilde döndüğünü unutmayın, belki de cevabınıza eklemek istersiniz.
kos,
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.