আমি /proc/uptime
ভাল ফর্ম্যাটে প্রদর্শিত করতে চাই :
DD:HH:MM:SS
/proc/uptime
আমাকে সেকেন্ডে সিস্টেমের সময় দিন, এমন কোনও মান আছে যা সেকেন্ডগুলিকে এই বিন্যাসে রূপান্তর করে?
আমি /proc/uptime
ভাল ফর্ম্যাটে প্রদর্শিত করতে চাই :
DD:HH:MM:SS
/proc/uptime
আমাকে সেকেন্ডে সিস্টেমের সময় দিন, এমন কোনও মান আছে যা সেকেন্ডগুলিকে এই বিন্যাসে রূপান্তর করে?
উত্তর:
আপনি পার্ল এবং কিছু সাধারণ গণিতের সাথে উদাহরণস্বরূপ এটি করতে পারেন:
cat /proc/uptime | perl -ne '/(\d*)/ ; printf "%02d:%02d:%02d:%02d\n",int($1/86400),int(($1%86400)/3600),int(($1%3600)/60),$1%60'
আপনার যদি সেকেন্ডের প্রয়োজন না হয়, আপনি কেবল uptime
কমান্ডটি চালাতে পারেন । এর আউটপুটটি তখন কেবল ডিডি: এইচএইচ: এমএম তে রূপান্তরিত হতে পারে।
উদাহরণস্বরূপ ব্যবহার (আপটাইম> 1 ঘন্টা কেবল এইভাবে কাজ করে)
uptime | perl -ne '/(\d*) day[^\d]*(\d*):(\d*)/ ; printf "%02d:%02d:%02d\n", $1, $2, $3'
না, কারণ এটি আসলে কোনও কঠিন সমস্যা নয়। দিনের সংখ্যা পাওয়ার জন্য পূর্ণসংখ্যা বিভাগ ব্যবহার করে সেকেন্ডের সংখ্যা 86400 দ্বারা ভাগ করুন। বাকী অংশটি নিন এবং ঘন্টাটি পেতে 3600 দ্বারা ভাগ করুন। মিনিটের সংখ্যা পেতে 60 এর মধ্যে বাকি অংশগুলি ভাগ করুন এবং আপনি সেকেন্ডের সংখ্যাটি রেখে গেছেন। expr
কমান্ডটি ব্যবহার করে শেল থেকে এই সমস্ত করা সম্ভব যদি আপনার শেলটি প্রাচীনভাবে গাণিতিক সমর্থন না করার জন্য যথেষ্ট প্রাচীন হয়
কাল থেকে সেকেন্ডের সংখ্যা গ্রহণ এবং একটি মানবিক পাঠযোগ্য তারিখ পরিণত যে হয় কঠিন সমস্যা, এবং তাই সেখানে যে কাজ করতে, যেমন মান উপায় আছে date -r SECONDS
শেল থেকে। তবে এটি একটি ভিন্ন সমস্যা।
এই উত্তরের প্রাসঙ্গিক অংশটি মানিয়ে নেওয়া ।
যতক্ষণ না আপনার আপটাইম এক বছরেরও কম হয়, আপনি নিম্নলিখিত আদেশটি ব্যবহার করতে পারেন:
TZ=UTC date -d@$(cut -d\ -f1 /proc/uptime) +'%j %T' | awk '{print $1-1"d",$2}'
আমি আপটাইম ফাইলের প্রথম ক্ষেত্রটি বের করি, যেহেতু কমপক্ষে আমার লিনাক্সে, একটি দ্বিতীয় ক্ষেত্র রয়েছে যেখানে মোট অলস সময় রয়েছে। আমি এটিকে যুগের পর থেকে সেকেন্ডের সংখ্যার হিসাবে বিবেচনা করি এবং সময়টিকে ঘন্টা, মিনিট এবং সেকেন্ডের পরে সময়টি রূপান্তর করে। বছরের যেহেতু একদিন থেকে শুরু হয়, তাই আমি আমার চূড়ান্ত awk
অনুরোধে সেই থেকে একটিকে বিয়োগ করি ।
$ s=12345678
$ printf '%d:%02d:%02d:%02d\n' $((s/86400)) $((s/3600%24)) $((s/60%60)) $((s%60))
142:21:21:18
যুগের পর থেকে একটি সেকেন্ডকে তারিখ এবং সময় রূপান্তর করা:
$ gdate -d @1234567890 '+%F %T' # GNU date
2009-02-14 01:31:30
$ date -r 1234567890 '+%F %T' # BSD date
2009-02-14 01:31:30
\n
নতুন লাইনের জন্য ভাল হবে!