質問

from dmesg we can know that particular device has been mounted or unmounted.

But I want to know on which time the device has been mounted or unmounted.

役に立ちましたか?

解決

Solution 1:

dmesg output isn't having human readable date-time information

Instead using dmesg you can use kernel log available, and filter it according to your need.

for e.g. Ubuntu, Debian stores kernel log at /var/log/kern.log

cat /var/log/kern.log | grep "usb"

It will give output like,

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

Solution 2:

I've found one perl script to convert dmesg date-time to human readable.

Try it,

#!/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";

Save and apply execute permission.

$chmod a+x script.pl
$./script.pl

[Sample output:]

[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

Solution 3: If your distro supports -T option for dmesg

Try dmesg -T. For me it worked on Debian, It should work for you too on Ubuntu. It enables time-stamp for output.

[From man page]

   -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.

他のヒント

In linux /var/log directory contains various log details. We can also get history of previous logs from this directory. Kernel zips the previous log details. In case of yours you have to open kern.log. But If you are looking for details which is not in kern.log, you can see kern.log.1 or in case you are interested in very old details, you have to unzip kern.log.2.gz

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top