Saya sedang menulis sebuah program yang menampilkan berbagai informasi sistem (pada sistem CentOS). Misalnya, jenis dan kecepatan prosesor (dari /proc/cpuinfo
), waktu boot terakhir (dihitung dari /proc/uptime
), alamat IP (dari ifconfig
output), dan daftar printer yang diinstal (dari lpstat
output).
Saat ini, beberapa bagian data diperoleh dari dmidecode
program:
- Jenis platform (
dmidecode -s system-product-name
) - Versi BIOS (
dmidecode -s bios-version
) - Jumlah memori fisik (
dmidecode -t17 | grep Size
)
Ini hanya tersedia jika program saya dijalankan sebagai root (karena kalau tidak, dmidecode
subproses gagal dengan /dev/mem: Permission denied
kesalahan). Apakah ada cara alternatif untuk mendapatkan informasi ini, yang dapat diakses oleh pengguna normal?
sumber
/sys/devices/virtual/dmi/id
. Banyak informasi spesifik platform tersedia di sana. Untuk skrip praktis, lihat unix.stackexchange.com/questions/75750/… . Untuk informasi sistem, kalimat Anda yang lain juga baik. Ada banyak utilitas sepertifree
atau bahkanhtop
yang dapat memberi Anda apa yang Anda inginkan.Saya dapat membaca informasi DMI sebagai Pengguna di bawah
/sys/class/dmi/id/
. Tidak termasuk nomor seri (yang membutuhkan hak akses root untuk membaca).Saya kira ini adalah perilaku yang dimaksudkan oleh pengembang kernel yang sadar privasi.
Mengenai
dmesg
:dmesg
adalah perintah untuk mengakses buffer cincin kernel. Ring buffer menyiratkan informasi yang lebih lama ditimpa oleh yang lebih baru ketika buffer "meluap". Juga ini membaca output debug modul kernel yang tidak pernah dimaksudkan untuk dapat diuraikan.Untuk mengakses output kernel dengan
systemd
run:Mengenai jawaban david-homer dan nils ' : File
/dev/mem
tidak hanya memberikan informasi memori, tetapi memetakan seluruh memori fisik ke dalam ruang pengguna. Oleh karena itu orang dapat mengakses alamat memori DMI melalui itu (dan melakukan banyak hal yang lebih buruk).Mengenai
chgrp
danchmod g+s
daridmidecode
dalam nils' jawaban: Saya kira ini tidak akan bekerja sebagaimana dimaksud, karena menghemat gid denganchmod g+s
tidak membuatdmidecode
menggunakan itu hak baru.dmidecode
harus meneleponsetegid
untuk mengatur id grup yang efektif sebelum dapat mengakses/dev/mem
. Menilai dari kode sumbernya,dmidecode
jangan lakukan itu.sumber
systemd
hanya membaca/var/log/kern.log
. Jika tidak ada file seperti itu saat sistem masih menggunakansyslogd
, coba carikern.*
entri/etc/syslog.conf
untuk mengetahui lokasinya.Coba dmesg. Saya bisa mendapatkan info yang saya inginkan dengan akun pengguna biasa.
sumber
Kami menggunakan DMIDecode untuk membaca informasi dari sistem Linux jarak jauh dan belum menemukan solusi untuk ini. Saya telah mencatat panggilan di beranda dmidecode yang menanyakan tentang ini ...
Menggunakan perintah dmidecode -t sistem memberikan kesalahan "/ dev / mem: Izin ditolak" yang merupakan masalah karena kita tidak ingin informasi memori (hanya pabrikan, model dan nomor seri).
Saya perhatikan bahwa perintah smbios yang dijalankan pada SunOS berfungsi dengan baik untuk informasi ini tanpa memerlukan hak akses root.
Untuk saat ini saya akan mengganti dokumentasi kami yang menyatakan untuk "menggunakan akun tertentu dengan hak istimewa yang paling tidak dibutuhkan" dengan "kredensial root pengguna".
sumber
lshal
berisi banyak informasi yang sama dan tidak memerlukan hak akses root.sumber
lshal | grep system.product
untuk nama sistem, dan bahkan tag layanan dell denganlshal | grep smbios.system.serial
lshal
akhirnya pergi sepenuhnya di RHEL7 dan saya sekarang menggunakansudo cat /sys/devices/virtual/dmi/id/chassis_serial
untuk mendapatkan tag layanan Dell, tetapi ini hanya berfungsi karena saya memiliki akses kecat
melalui sudoers.Saya tidak yakin mengapa @mtneagle terpilih.
Tiga item yang diinginkan OP adalah:
Jenis platform (
dmidecode -s system-product-name
)Versi BIOS (
dmidecode -s bios-version
)Jumlah memori fisik (
dmidecode -t17 | grep Size
)Kita bisa mendapatkan masing-masing ini sebagai berikut:
(Atau setidaknya mereka bekerja pada 4 server perangkat keras berbeda yang saya miliki, dan tidak mengembalikan apa pun untuk jenis BIOS atau server pada tamu Xen.)
Apakah saya melewatkan sesuatu yang jelas?
Pembaruan: Terima kasih kepada @Ruslan karena menunjukkan yang sudah saya lewatkan.
Mengutip:
sumber
grep
sini tidak lagi ada di buffer. (Saya memiliki situasi seperti ini dengan waktu kerja 18 hari di sini.) Mungkin lebih baik untuk melihat ke dalam/var/log/kern.log
. Sesuatu sepertigrep DMI: /var/log/kern.log | tail -n1
.Untuk mendapatkan jumlah total memori fisik, Anda dapat mengurai
/proc/meminfo
,free
,vmstat
, dll Anda bisa juga mengurai buffer pesan kernel, karena itu berbicara tentang hal itu pada 0 kali.Versi BIOS lebih sulit, saya tidak percaya ini mungkin sebagai pengguna non-root, tapi saya mungkin salah. Mungkin saja (dan nama produk sistem) terpapar di suatu tempat, mungkin di
/sys/
atau/proc/
, tapi saya tidak dapat menemukan apa pun.sumber
dmesg
jika tidak diisi terlalu banyak. Contoh baris:[ 0.000000] DMI: CLEVO CO. B7130 /B7130 , BIOS 6.00 08/27/2010
cat /sys/devices/virtual/dmi/id/bios_version
... Voila '! Tapi YMMV. Tidak semua arsitektur memiliki jalur ini. x86_64 Intel seharusnya.Layanan Linux kami tidak berjalan sebagai root. Dalam skrip instalasi pos RPM (yang TIDAK dijalankan sebagai root) kami memasang file /etc/sudo.d dan mengatur beberapa executable kami (mis. Untuk hak istimewa siaran jaringan).
sumber