views:

766

answers:

5

How I can get hardware information from a Linux / Unix machine. Is there a set of APIs?

I am trying to get information like:

  • OS name.
  • OS version.
  • available network adapters.
  • information on network adapters.
  • all the installed software.

I am looking for an application which collects this information and show it in a nice format. I have used something similar with the "system_profile" command line tool for Mac OS X. I was wondering if something similar is available for Linux as well.

+5  A: 

There is a bash command lshw - list hardware

Mojo Risin
is there any tool like system_profiler of OS X.
Unicorn
In some circumstances, lshw might not be available, but dmidecode, which provides similar information, often is (I'm thinking on VMware ESX hypervisors).
Suppressingfire
@Unicorn, can you be more specific about the hardware information you want to extract?
Suppressingfire
+1  A: 

I would use hal, the hardware abstraction layer. It includes both some GUI commands, some tty commands (which can be used from shell programs), and library bindings for c and multiple other languages.

HAL is not really a standard part of "linux", but I think it is used by most modern distros.

Rasmus Kaj
+5  A: 

If you need a simple answer, use:

  • cat /proc/cpuinfo
  • cat /proc/meminfo
  • lspci
  • lsusb

and harvest any info you need from the output of these commands. (Note: the cut command may be your friend here if you are writing a shell script.)

Should you need more detail, add a -v switch to get verbose output from the lspci and lsusb commands.

If what you are looking for is a more feature-complete API, then use HAL, though that may be an overkill for what you are trying to build.

AttishOculus
Or write some script in a nice scripting language to fetch and format the data the way you want. Don't forget to add ifconfig for network adapter infos.
fritzone
+5  A: 

If you are looking for a tool that show System Information, the GUI tool like HardInfo would useful for you.

In Ubuntu, you can install HardInfo like this...

sudo apt-get install hardinfo

Cheers

Ei Maung
wish I could up vote twice, this is amazing.
caspin
A: 

Since you mentioned API, try the exec family of commands for C. You can use them to execute these binaries that other people have mentioned. To create a robust/flexible solution you will probably also have to leverage the Unix fork() commands. You will also have to develop a mechanism for capturing the output spewed by these utilities. Look into Unix pipes for that.

Gaurav Mathur