Можно ли узнать время монтирования и демонтажа устройства в Ubuntu?
От dmesg
мы можем знать, что конкретное устройство было установлено или демонтировано.
Но я хочу знать, в какое время устройство было установлено или демонтировано.
2 ответа
Решение 1:
dmesg
вывод не имеет удобочитаемой информации о дате и времени
Вместо того, чтобы использовать dmesg
Вы можете использовать доступный журнал ядра и фильтровать его в соответствии с вашими потребностями.
например, Ubuntu, Debian хранит журнал ядра в /var/log/kern.log
cat /var/log/kern.log | grep "usb"
Это даст вывод, как,
Apr 30 11:42:23 debian kernel: [ 1537.984584] usb 1-1.1: USB disconnect, device number 3
Apr 30 11:42:23 debian kernel: [ 1538.207012] usb 1-1.1: new low-speed USB device number 5 using ehci_hcd
Apr 30 11:42:29 debian kernel: [ 1543.409629] usb 1-1.1: new low-speed USB device number 6 using ehci_hcd
Apr 30 11:42:29 debian kernel: [ 1543.504880] usb 1-1.1: New USB device found, idVendor=04f3, idProduct=0235
Apr 30 11:42:29 debian kernel: [ 1543.504885] usb 1-1.1: New USB device strings: Mfr=0, Product=2, SerialNumber=0
Apr 30 11:42:29 debian kernel: [ 1543.504888] usb 1-1.1: Product: OM
Решение 2:
Я нашел один Perl-скрипт для преобразования dmesg
дата-время для человека читабельно.
Попытайся,
#!/usr/bin/perl
use strict;
use warnings;
my @dmesg_new = ();
my $dmesg = "/bin/dmesg";
my @dmesg_old = `$dmesg`;
my $now = time();
my $uptime = `cat /proc/uptime | cut -d"." -f1`;
my $t_now = $now - $uptime;
sub format_time {
my @time = localtime $_[0];
$time[4]+=1; # Adjust Month
$time[5]+=1900; # Adjust Year
return sprintf '%4i-%02i-%02i %02i:%02i:%02i', @time[reverse 0..5];
}
foreach my $line ( @dmesg_old )
{
chomp( $line );
if( $line =~ m/\[\s*(\d+)\.(\d+)\](.*)/i )
{
# now - uptime + sekunden
my $t_time = format_time( $t_now + $1 );
push( @dmesg_new , "[$t_time] $3" );
}
}
print join( "\n", @dmesg_new );
print "\n";
Сохраните и примените разрешение на выполнение.
$chmod a+x script.pl
$./script.pl
[Пример вывода:]
[2014-04-30 11:17:27] eth0: no IPv6 routers present
[2014-04-30 11:42:18] hub 1-1:1.0: port 1 disabled by hub (EMI?), re-enabling...
[2014-04-30 11:42:18] usb 1-1.1: USB disconnect, device number 3
[2014-04-30 11:42:19] usb 1-1.1: new low-speed USB device number 5 using ehci_hcd
[2014-04-30 11:42:24] hub 1-1:1.0: unable to enumerate USB device on port 1
[2014-04-30 11:42:24] usb 1-1.1: new low-speed USB device number 6 using ehci_hcd
[2014-04-30 11:42:24] usb 1-1.1: New USB device found, idVendor=04f3, idProduct=0235
[2014-04-30 11:42:24] usb 1-1.1: New USB device strings: Mfr=0, Product=2, SerialNumber=0
[2014-04-30 11:42:24] usb 1-1.1: Product: OM
[2014-04-30 11:42:24] input: OM as /devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.1/1-1.1:1.0/input/input11
[2014-04-30 11:42:24] generic-usb 0003:04F3:0235.0004: input,hidraw0: USB HID v1.11 Mouse [OM] on usb-0000:00:1a.0-1.1/input0
Решение 3: если ваш дистрибутив поддерживает -T
вариант для dmesg
Пытаться dmesg -T
, Для меня это работает на Debian, он должен работать на вас тоже на Ubuntu. Это позволяет метку времени для вывода.
[Со страницы руководства]
-T, --ctime
Print human readable timestamps. The timestamp could be inaccurate!
The time source used for the logs is not updated after system SUSPEND/RESUME.
В линуксе /var/log
Каталог содержит различные данные журнала. Мы также можем получить историю предыдущих журналов из этого каталога. Ядро архивирует предыдущие данные журнала. В случае твоего ты должен открыть kern.log
, Но если вы ищете детали, которых нет в kern.log
, ты можешь видеть kern.log.1
или, если вы заинтересованы в очень старых деталях, вы должны распаковать kern.log.2.gz