উত্তর:
dmesg
টাইমস্ট্যাম্প বোঝা বেশ সহজ: কার্নেল শুরু হওয়ার পরে এটি কয়েক সেকেন্ডের মধ্যে। সুতরাং, শুরুর সময় থাকার সময় ( uptime
), আপনি সেকেন্ড যোগ করতে পারেন এবং আপনার পছন্দমতো বিন্যাসে সেগুলি প্রদর্শন করতে পারেন।
বা আরও ভাল, আপনি -T
কমান্ড লাইন বিকল্পটি ব্যবহার করতে dmesg
এবং মানব পাঠযোগ্য বিন্যাসকে বিশ্লেষণ করতে পারেন ।
থেকে man পৃষ্ঠা :
-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.
rpm -qf /bin/dmesg => util-linux-2.13-0.56.0.2.el5
util-linux 2.20
প্রকাশের নোট অনুসারে এই বিকল্পটি উপস্থিত হয়েছিল : ftp.kernel.org/pub/linux/utils/util-linux/v2.20/…
সাহায্যে ড উত্তর, আমি একটি কার্যসংক্রান্ত আপনার .bashrc করা রূপান্তর তোলে লিখেছিলেন। আপনার কাছে টাইমস্ট্যাম্প না থাকলে বা ইতিমধ্যে সঠিক টাইমস্ট্যাম্প না থাকলে এটি কিছুতেই ভাঙ্গবে না।
dmesg_with_human_timestamps () {
$(type -P dmesg) "$@" | perl -w -e 'use strict;
my ($uptime) = do { local @ARGV="/proc/uptime";<>}; ($uptime) = ($uptime =~ /^(\d+)\./);
foreach my $line (<>) {
printf( ($line=~/^\[\s*(\d+)\.\d+\](.+)/) ? ( "[%s]%s\n", scalar localtime(time - $uptime + $1), $2 ) : $line )
}'
}
alias dmesg=dmesg_with_human_timestamps
এছাড়াও, dmesg টাইমস্ট্যাম্প রূপান্তর যুক্তি এবং যখন কিছুই নেই তখন কীভাবে টাইমস্ট্যাম্পগুলি সক্ষম করবেন সে সম্পর্কে একটি ভাল পঠন: https://supportcenter.checkPoint.com/supportcenter/portal?eventSubmit_doGoviewsolutiondetails=&solutionid=sk92677
local dmesg_bin=$(type -a dmesg | awk 'END { print $NF }')
type
ওভার কেন ব্যবহার করছেন তার একটি ব্যাখ্যার জন্য which
, এই প্রশ্নটি দেখুন । অপ্রয়োজনীয় ট্রিপল পাইপটি এড়াতে আমি আমার উত্তর সম্পাদনা করেছি।
RHEL / CentOS 6 এর মতো "dmesg -T" ব্যতীত সিস্টেমগুলির জন্য, আমি লুকাশ -চিমন দ্বারা সরবরাহিত "dmesg_with_human_timestamps" ফাংশনটি পছন্দ করেছি । যদিও বড় আপটাইম সহ আমাদের কিছু বাক্সে এটি কিছুটা সমস্যা হয়েছে। দেখা যাচ্ছে যে ডেমসগে থাকা কার্নেল টাইমস্ট্যাম্পগুলি পৃথক সিপিইউ দ্বারা রাখা একটি আপটাইম মান থেকে প্রাপ্ত। সময়ের সাথে সাথে এটি বাস্তব সময়ের ঘড়ির সাথে সিঙ্কের বাইরে চলে যায়। ফলস্বরূপ, সাম্প্রতিক ডেমস্যাগ এন্ট্রিগুলির জন্য সর্বাধিক নির্ভুল রূপান্তরটি সিপিইউ ঘড়ির উপর ভিত্তি করে / প্রোক / আপটাইম হবে। উদাহরণস্বরূপ, এখানে একটি নির্দিষ্ট CentOS 6.6 বাক্সে:
# grep "\.clock" /proc/sched_debug | head -1
.clock : 32103895072.444568
# uptime
15:54:05 up 371 days, 19:09, 4 users, load average: 3.41, 3.62, 3.57
# cat /proc/uptime
32123362.57 638648955.00
মিলি সেকেন্ডে থাকা সিপিইউ আপটাইমের জন্য অ্যাকাউন্টিং, এখানে প্রায় 5/2 ঘন্টা অফসেট রয়েছে। সুতরাং আমি স্ক্রিপ্টটি সংশোধন করেছি এবং এটিকে প্রক্রিয়াতে দেশীয় ব্যাশে রূপান্তর করেছি:
dmesg_with_human_timestamps () {
FORMAT="%a %b %d %H:%M:%S %Y"
now=$(date +%s)
cputime_line=$(grep -m1 "\.clock" /proc/sched_debug)
if [[ $cputime_line =~ [^0-9]*([0-9]*).* ]]; then
cputime=$((BASH_REMATCH[1] / 1000))
fi
dmesg | while IFS= read -r line; do
if [[ $line =~ ^\[\ *([0-9]+)\.[0-9]+\]\ (.*) ]]; then
stamp=$((now-cputime+BASH_REMATCH[1]))
echo "[$(date +"${FORMAT}" --date=@${stamp})] ${BASH_REMATCH[2]}"
else
echo "$line"
fi
done
}
alias dmesgt=dmesg_with_human_timestamps
সুতরাং কেভজিরো একটি কম কলডজি সমাধানের জন্য অনুরোধ করেছে, তাই আমি নিম্নলিখিতগুলি নিয়ে এসেছি:
sed -r 's#^\[([0-9]+\.[0-9]+)\](.*)#echo -n "[";echo -n $(date --date="@$(echo "$(grep btime /proc/stat|cut -d " " -f 2)+\1" | bc)" +"%c");echo -n "]";echo -n "\2"#e'
এখানে একটি উদাহরণ:
$ dmesg|tail | sed -r 's#^\[([0-9]+\.[0-9]+)\](.*)#echo -n "[";echo -n $(date --date="@$(echo "$(grep btime /proc/stat|cut -d " " -f 2)+\1" | bc)" +"%c");echo -n "]";echo -n "\2"#e'
[2015-12-09T04:29:20 COT] cfg80211: (57240000 KHz - 63720000 KHz @ 2160000 KHz), (N/A, 0 mBm), (N/A)
[2015-12-09T04:29:23 COT] wlp3s0: authenticate with dc:9f:db:92:d3:07
[2015-12-09T04:29:23 COT] wlp3s0: send auth to dc:9f:db:92:d3:07 (try 1/3)
[2015-12-09T04:29:23 COT] wlp3s0: authenticated
[2015-12-09T04:29:23 COT] wlp3s0: associate with dc:9f:db:92:d3:07 (try 1/3)
[2015-12-09T04:29:23 COT] wlp3s0: RX AssocResp from dc:9f:db:92:d3:07 (capab=0x431 status=0 aid=6)
[2015-12-09T04:29:23 COT] wlp3s0: associated
[2015-12-09T04:29:56 COT] thinkpad_acpi: EC reports that Thermal Table has changed
[2015-12-09T04:29:59 COT] i915 0000:00:02.0: BAR 6: [??? 0x00000000 flags 0x2] has bogus alignment
[2015-12-09T05:00:52 COT] thinkpad_acpi: EC reports that Thermal Table has changed
আপনি যদি এটি আরও কিছুটা ভাল সঞ্চালন করতে চান তবে প্র্যাক থেকে টাইমস্ট্যাম্প পরিবর্তে একটি ভেরিয়েবলের মধ্যে রেখে দিন :)
ডেমসগের সাম্প্রতিক সংস্করণগুলিতে, আপনি কেবল কল করতে পারেন dmesg -T
।
আপনার যদি অ্যান্ডয়েডের উদাহরণ হিসাবে -T
বিকল্প না থাকে তবে dmesg
আপনি busybox
সংস্করণটি ব্যবহার করতে পারেন । নিম্নলিখিত আরও কিছু সমস্যা সমাধান করে:
[0.0000]
বিন্যাস কিছু জিনিষের পাল্টাপাল্টি রঙ তথ্য মনে হচ্ছে, উপসর্গ চাই যে পূর্বে হয় <6>
।এটি এই ব্লগ পোস্ট দ্বারা অনুপ্রাণিত ।
#!/bin/sh
# Translate dmesg timestamps to human readable format
# uptime in seconds
uptime=$(cut -d " " -f 1 /proc/uptime)
# remove fraction
uptime=$(echo $uptime | cut -d "." -f1)
# run only if timestamps are enabled
if [ "Y" = "$(cat /sys/module/printk/parameters/time)" ]; then
dmesg | sed "s/[^\[]*\[/\[/" | sed "s/^\[[ ]*\?\([0-9.]*\)\] \(.*\)/\\1 \\2/" | while read timestamp message; do
timestamp=$(echo $timestamp | cut -d "." -f1)
ts1=$(( $(busybox date +%s) - $uptime + $timestamp ))
ts2=$(busybox date -d "@${ts1}")
printf "[%s] %s\n" "$ts2" "$message"
done
else
echo "Timestamps are disabled (/sys/module/printk/parameters/time)"
fi
তবে দ্রষ্টব্য যে এই প্রয়োগটি বেশ ধীর।
পুরানো লিনাক্স ডিস্ট্রোসের সাথে আরও একটি বিকল্প মোড়ক স্ক্রিপ্ট ব্যবহার করা, যেমন পার্ল বা পাইথনে।
সমাধান এখানে দেখুন:
http://linuxaria.com/article/how-to-make-dmesg-timestamp-human-readable?lang=en http://jmorano.moretrix.com/2012/03/dmesg-human-readable-timestamps/