মূল সুযোগ ছাড়াই কীভাবে dmidecode তথ্য পাবেন?


16

আমি একটি প্রোগ্রাম লিখছি যা বিভিন্ন সিস্টেমের তথ্য প্রদর্শন করে (একটি CentOS সিস্টেমে)। উদাহরণস্বরূপ, প্রসেসরের ধরণ এবং গতি (থেকে /proc/cpuinfo), শেষ বুট সময় (থেকে গণনা করা /proc/uptime), আইপি ঠিকানা ( ifconfigআউটপুট থেকে ), এবং ইনস্টলড প্রিন্টারের একটি তালিকা ( lpstatআউটপুট থেকে )।

বর্তমানে, dmidecodeপ্রোগ্রাম থেকে বেশ কয়েকটি তথ্য প্রাপ্ত হয় :

  • প্ল্যাটফর্মের ধরণ ( dmidecode -s system-product-name)
  • BIOS সংস্করণ ( dmidecode -s bios-version)
  • শারীরিক স্মৃতি পরিমাণ ( dmidecode -t17 | grep Size)

এগুলি কেবলমাত্র তখনই উপলব্ধ হয় যদি আমার প্রোগ্রামটি রুট হিসাবে চালিত হয় (কারণ অন্যথায় dmidecodeসাবপ্রসেসটি /dev/mem: Permission deniedত্রুটির সাথে ব্যর্থ হয় )। কোনও সাধারণ ব্যবহারকারী অ্যাক্সেস করতে পারে এমন তথ্য পাওয়ার কোনও বিকল্প উপায় আছে কি?

উত্তর:


4

আমি সবেমাত্র আমার সেন্টস 5 সিস্টেমে পরীক্ষা করেছি - এর পরে:

chgrp kmem /usr/sbin/dmidecode
chmod g+s /usr/sbin/dmidecode

ডিমিডেকোড কাজ করা এখনও সম্ভব নয় - গ্রুপ কেমেমে কেবলমাত্র / ডিভ / মেমের জন্য পঠন অধিকার রয়েছে - মনে হয় বিআইওএসের তথ্য পাওয়ার জন্য একটি লিখন জড়িত রয়েছে।

সুতরাং কিছু অন্যান্য বিকল্প:

  1. Sudo ব্যবহার করুন
  2. অন্যান্য তথ্য উত্স ব্যবহার করুন (উদাঃ / প্রোক / মেমিনফো)
  3. একটি init-স্ক্রিপ্ট ব্যবহার করুন যা বিশ্ব-পঠনযোগ্য ফাইলে dmidecode এর স্থির আউটপুট লিখে writes

6

উপস্থাপিত কিছু তথ্য dmidecodeএখানে উপলব্ধ /sys/devices/virtual/dmi/id

অন্যান্য তথ্য বিশ্লেষণ করে /proc/cpuinfo, /proc/meminfoবা /sys/system/node/node0/meminfo


1
+1 এর জন্য /sys/devices/virtual/dmi/id। প্ল্যাটফর্ম-নির্দিষ্ট প্রচুর তথ্য সেখানে উপলব্ধ। একটি সহজ স্ক্রিপ্টের জন্য, unix.stackexchange.com/questions/75750/… দেখুন । সিস্টেমের তথ্যের জন্য আপনার অন্য বাক্যটিও ভাল। এখানে প্রচুর ইউটিলিটি রয়েছে freeবা এমনকি htopএটি আপনি যা চান তা পেতে পারে।
মাইক এস

6
  1. আমি ডিএমআই তথ্যটি ব্যবহারকারী হিসাবে অন্তর্গত হিসাবে পড়তে পারি /sys/class/dmi/id/। ক্রমিক সংখ্যা (যা পড়ার জন্য রুট সুবিধার প্রয়োজন) সহ নয়।

    আমার ধারণা এটি গোপনীয়তা সচেতন কার্নেল বিকাশকারীদের দ্বারা আচরণ করা।

  2. সম্পর্কিত dmesg: dmesgকার্নেল রিং বাফার অ্যাক্সেসের জন্য একটি আদেশ command রিং বাফার বোঝায় যে বাফার "উপচে পড়া" যখন পুরানো তথ্য নতুন দ্বারা ওভাররাইট করা হয়। এছাড়াও এটি কার্নেল মডিউল ডিবাগ আউটপুট পড়ছে যা কখনই পার্সেবল হতে পারে না।

  3. systemdরান দিয়ে কার্নেল আউটপুট অ্যাক্সেস করতে :

    journalctl --quiet --system --boot SYSLOG_IDENTIFIER=kernel
    
  4. সংক্রান্ত David-হোমারের এবং Nils ' উত্তর: ফাইল /dev/memকেবল মেমরির তথ্য দিতে না, কিন্তু ইউজার-স্পেস মধ্যে পুরো প্রকৃত মেমরি মানচিত্র তৈরী করে। অতএব কেউ এর মাধ্যমে ডিএমআই মেমরির ঠিকানাগুলি অ্যাক্সেস করতে পারে (এবং আরও অনেক খারাপ কাজ করে)।

  5. নীলদের জবাব সম্পর্কিত chgrpএবং chmod g+sএর dmidecodeমধ্যে : আমি অনুমান করি এটি উদ্দেশ্য হিসাবে কাজ করবে না, কারণ গিড সংরক্ষণ করা এটি নতুন সুযোগগুলি ব্যবহার chmod g+sকরে না dmidecode। অ্যাক্সেস করার আগে এটি কার্যকর গ্রুপ আইডি সেট dmidecodeকরতে কল setegidকরতে হবে /dev/mem। এর উত্স কোড থেকে বিচার করা, এটি dmidecodeকরবেন না।


1
3-এ যোগ করুন: systemdকেবল পঠন ছাড়াই সিস্টেমে কার্নেল আউটপুট অ্যাক্সেস করতে /var/log/kern.log। সিস্টেমটি এখনও ব্যবহার করার সময় যদি এরকম কোনও ফাইল না থাকে তবে প্রবেশের syslogdজন্য সন্ধান করার চেষ্টা করুনkern.*/etc/syslog.conf এর অবস্থানটি অনুসন্ধান করার করার ।
রুসলান

5

Dmesg চেষ্টা করুন। আমি নিয়মিত ব্যবহারকারীর অ্যাকাউন্ট দিয়ে এই তথ্যটি চেয়েছিলাম তা পেতে সক্ষম হয়েছি।


আপনি কেন ভোট পেয়েছিলেন তা নিশ্চিত নয়। প্রত্যেকের দেখার জন্য আপনার সমাধানের উপর ভিত্তি করে আমি আরও ভার্বোজ প্রতিক্রিয়া রেখেছি। আমি মনে করি আপনার সমাধান ঠিক আছে।
wally

4

আমরা রিমোট লিনাক্স সিস্টেমগুলি থেকে তথ্য পড়তে ডিএমআইডিকোড ব্যবহার করছি এবং এখনও এটির মতো কাজ খুঁজে পাইনি। আমি dmidecode হোম পৃষ্ঠায় একটি কল লগ করেছি এই সম্পর্কে জিজ্ঞাসা ...

Dmidecode -t সিস্টেম কমান্ডটি ব্যবহার করে ত্রুটিটি "/ dev / میم: অনুমতি অস্বীকার" দেয় যা আমরা মেমরির তথ্য চাই না (কেবল প্রস্তুতকারক, মডেল এবং ক্রমিক নম্বর) ত্রুটি দেয়।

আমি লক্ষ্য করেছি যে সুনোস-এ চলমান এসএমবিওস কমান্ড রুট সুবিধার প্রয়োজন ছাড়াই এই তথ্যের জন্য ভাল কাজ করে।

আপাতত আমি "ন্যূনতম প্রয়োজনীয় বিশেষাধিকারের সাথে একটি নির্দিষ্ট অ্যাকাউন্ট ব্যবহার করে" "ব্যবহারকারীর রুট শংসাপত্রগুলি" দিয়ে উল্লেখ করে আমাদের নথিপত্র প্রতিস্থাপন করতে যাচ্ছি।


4

lshal একই তথ্য প্রচুর পরিমাণে রয়েছে এবং এর মূল অনুমোদনের প্রয়োজন নেই।


আমি নিশ্চিত নই যে কেন এটিকে ভোট দেওয়া হয়েছিল, গ্রেপ করে এটি আমাকে lshal | grep system.productসিস্টেমের নামের জন্য আমার প্রয়োজনীয় তথ্য এবং এমনকি ডেল পরিষেবা ট্যাগ দিয়েছিলlshal | grep smbios.system.serial
মার্ক বুথ

2
@ মারকবুথ সম্ভবত এইচএএলকে অবমূল্যায়ন করা হয়েছে এবং আধুনিক বিতরণে না পাঠানো হতে পারে।
রুসলান

lshalশেষ পর্যন্ত আরএইচইএল 7 এ সম্পূর্ণ দূরে চলে গেল এবং আমি এখন sudo cat /sys/devices/virtual/dmi/id/chassis_serialডেল সার্ভিস ট্যাগটি পাওয়ার জন্য ব্যবহার করছি , তবে এটি কেবলমাত্র কাজ করে যেমন আমার catsudoers এর মাধ্যমে অ্যাক্সেস পায়।
মার্ক বুথ

4

আমি নিশ্চিত নই যে @ এম্টনিয়েল কেন ভোট পেয়েছে।

ওপি তিনটি আইটেম চেয়েছিল:

প্ল্যাটফর্মের ধরণ ( dmidecode -s system-product-name)
বিআইওএস সংস্করণ ( dmidecode -s bios-version)
শারীরিক মেমরির পরিমাণ (dmidecode -t17 | grep Size )

আমরা এগুলির প্রতিটি এইভাবে পেতে পারি:

dmesg | grep "DMI:" | cut -c "6-" | cut -d "," -f "1"
dmesg | grep "DMI:" | cut -c "6-" | cut -d "," -f "2"
dmesg | grep "Memory:" | cut -d '/' -f '2-' | cut -d ' ' -f '1'

(বা কমপক্ষে যারা আমার 4 টি আলাদা আলাদা হার্ডওয়্যার সার্ভারে কাজ করে এবং পরিষ্কারভাবে কোনও জিন অতিথিতে BIOS বা সার্ভার টাইপের জন্য কিছুই দেয়নি returned)

আমি কি স্পষ্ট কিছু মিস করেছি?


আপডেট: আমি যে মিস করেছি তা প্রকাশ করার জন্য @ রাস্লানকে ধন্যবাদ lan

বরাত দিয়ে:

হ্যা তোমার আছে. কার্নেল বার্তাগুলি একটি রিং বাফারে সংরক্ষণ করা হয়। যখন অনেকগুলি লাইন মুদ্রণ করা হয়, তখন প্রথমগুলি মুছুন।

সুতরাং যদি আপনার মেশিনটি একাধিক সপ্তাহ ধরে কাজ করে, এবং আপনি কমপক্ষে প্রতিদিন এটি স্থগিত / পুনরায় চালু করেন, তবে উচ্চ সম্ভাবনা হ'ল আপনি যে তথ্যের জন্য গ্রেপ করছেন সেগুলি আর বাফারে থাকবে না।

(আমার এখানে 18 দিনের আপটাইম সহ এমন পরিস্থিতি রয়েছে)) এটি সন্ধান করা আরও ভাল /var/log/kern.log

কিছুটা এইরকম grep DMI: /var/log/kern.log | tail -n1


3
হ্যা তোমার আছে. কার্নেল বার্তাগুলি একটি রিং বাফারে সংরক্ষণ করা হয়। যখন অনেকগুলি লাইন মুদ্রণ করা হয়, তখন প্রথমগুলি মুছে ফেলা হয়। সুতরাং যদি আপনার মেশিনটি একাধিক সপ্তাহ ধরে কাজ করে, এবং আপনি কমপক্ষে প্রতিদিন এটি স্থগিত / পুনরায় চালু করেন, তবে উচ্চ সম্ভাবনা হ'ল যে আপনি grepএখানে যে তথ্যটি বাফারে থাকবেন না। (আমার এখানে 18 দিনের আপটাইম সহ এমন পরিস্থিতি রয়েছে)) এটি সন্ধান করা আরও ভাল /var/log/kern.log। কিছু একটা grep DMI: /var/log/kern.log | tail -n1
রুসলান

ধন্যবাদ - আমি আশা করি আপনার আপত্তি নেই, আমি আমার মন্তব্যে আপনার মন্তব্য অন্তর্ভুক্ত করেছি (creditণ দিয়ে)।
ওয়ালি

2

প্রকৃত মেমরি মোট পরিমাণ পেতে, আপনি পার্স করতে /proc/meminfo, free, vmstat, ইত্যাদি এছাড়াও আপনি কার্নেল বার্তা বাফার, পার্স পারে যেহেতু এটি 0 সময়ে এটা নিয়ে কথা বলেছেন।

বিআইওএস সংস্করণটি আরও কঠিন, আমি বিশ্বাস করি না যে এটি অ-রুট ব্যবহারকারী হিসাবে সম্ভব, তবে আমি ভুল হতে পারি। এটি (এবং সিস্টেম প্রোডাক্টের নাম) কোথাও প্রকাশিত হতে পারে, সম্ভবত /sys/বা এর মধ্যে রয়েছে /proc/তবে আমি কিছুই খুঁজে পাচ্ছি না।


2
বিআইওএসও উল্লেখ করা হয়েছে, তাই কার্নেল লগের পরামর্শ নিন বা dmesgএটি যদি খুব বেশি পূরণ করা হয় নি। উদাহরণ লাইন:[ 0.000000] DMI: CLEVO CO. B7130 /B7130 , BIOS 6.00 08/27/2010
Lekensteyn

cat /sys/devices/virtual/dmi/id/bios_version... Voila! তবে ওয়াইএমএমভি। সমস্ত স্থাপত্যের এই পথ নেই। x86_64 ইন্টেল করা উচিত।
মাইকে এস

2

আমাদের লিনাক্স পরিষেবাগুলি রুট হিসাবে চালায় না। আরপিএম পোস্ট ইনস্টল স্ক্রিপ্টে (যা মূল হিসাবে চালিত হয়) আমরা একটি /etc/sudo.d ফাইল ইনস্টল করি এবং আমাদের কয়েকটি এক্সিকিউটেবল (যেমন নেটওয়ার্ক ব্রডকাস্ট প্রাইভেলিজগুলির জন্য) সেটআপ করি।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.