Linfo – Shows Linux Server Health Status in Real-Time

Linfo is a free and open source, cross-platform server statistics UI/library which displays a great deal of system information. It is extensible, easy-to-use (via composer) PHP5 library to get extensive system statistics programmatically from your PHP application. It’s a Ncurses CLI view of Web UI, which works in Linux, Windows, *BSD, Darwin/Mac OSX, Solaris, and Minix.

It displays system info including CPU type/speed; architecture, mount point usage, hard/optical/flash drives, hardware devices, network devices and stats, uptime/date booted, hostname, memory usage (RAM and swap, if possible), temperatures/voltages/fan speeds and RAID arrays.

Requirements:

  • PHP 5.3
  • pcre extension
  • Linux – /proc and /sys mounted and readable by PHP and Tested with the 2.6.x/3.x kernels

How to Install Linfo Server Stats UI/library in Linux

First, create a Linfo directory in your Apache or Nginx web root directory, then clone and move repository files into /var/www/html/linfo using the rsync command as shown below:

$ sudo mkdir -p /var/www/html/linfo 
$ git clone git://github.com/jrgp/linfo.git 
$ sudo rsync -av linfo/ /var/www/html/linfo/

Then rename sample.config.inc.php to config.inc.php. This is the Linfo config file, you can define your own values in it:

$ sudo mv sample.config.inc.php config.inc.php 

Now open the URL http://SERVER_IP/linfo in web browser to see the Web UI as shown in the screenshots below.

This screenshot shows the Linfo Web UI displaying core system info, hardware components, RAM stats, network devices, drives and file system mount points.

Linux Server Health Information
Linux Server Health Information

You can add the line below in the config file config.inc.php to yield useful error messages for troubleshooting purposes:

$settings['show_errors'] = true;

Running Linfo in Ncurses Mode

Linfo has a simple ncurses-based interface, which rely on php’s ncurses extension.

# yum install php-pecl-ncurses                    [On CentOS/RHEL]
# dnf install php-pecl-ncurses                    [On Fedora]
$ sudo apt-get install php5-dev libncurses5-dev   [On Debian/Ubuntu] 

Now compile the php extension as follows

$ wget http://pecl.php.net/get/ncurses-1.0.2.tgz
$ tar xzvf ncurses-1.0.2.tgz
$ cd ncurses-1.0.2
$ phpize # generate configure script
$ ./configure
$ make
$ sudo make install

Next, if you successfully compiled and installed the php extension, run the commands below.

$ sudo echo extension=ncurses.so > /etc/php5/cli/conf.d/ncurses.ini

Verify the ncurses.

$ php -m | grep ncurses

Now run the Linfo.

$ cd /var/www/html/linfo/
$ ./linfo-curses
Linux Server Information
Linux Server Information

The following features yet to be added in Linfo:

  1. Support for more Unix operating systems (such as Hurd, IRIX, AIX, HP UX, etc)
  2. Support for less known operating systems: Haiku/BeOS
  3. Extra superfluous features/extensions
  4. Support for htop-like features in ncurses mode

For more information, visit Linfo Github repository: https://github.com/jrgp/linfo

That’s all! From now on, you can view a Linux system’s information from within a web browser using Linfo. Try it out and share with us your thoughts in the comments. Additionally, have you come across any similar useful tools/libraries? If yes, then give us some info about them as well.

Hey TecMint readers,

Exciting news! Every month, our top blog commenters will have the chance to win fantastic rewards, like free Linux eBooks such as RHCE, RHCSA, LFCS, Learn Linux, and Awk, each worth $20!

Learn more about the contest and stand a chance to win by sharing your thoughts below!

Aaron Kili
Aaron Kili is a Linux and F.O.S.S enthusiast, an upcoming Linux SysAdmin, web developer, and currently a content creator for TecMint who loves working with computers and strongly believes in sharing knowledge.

Each tutorial at TecMint is created by a team of experienced Linux system administrators so that it meets our high-quality standards.

Join the TecMint Weekly Newsletter (More Than 156,129 Linux Enthusiasts Have Subscribed)
Was this article helpful? Please add a comment or buy me a coffee to show your appreciation.

17 Comments

Leave a Reply
  1. Hi, I did not want “anything” to download files from linfo so I added a .htaccess file in the linfo directory:

    $ cat .htaccess 
    
    RewriteCond %{REQUEST_URI} ^(/|/index\.php)$
    RewriteRule . - [F,L]
    RewriteRule . index.php [QSA,L]
    
    Reply
  2. Hi Aaron Kili,

    UI linfo is working great but when i tired “Running Linfo in Ncurses Mode” but not able to run even through successful compilation on Ubuntu 14.04 32bit this command give me permission error.

    “sudo echo extension=ncurses.so > /etc/php5/cli/conf.d/ncurses.ini” ——> bash: /etc/php5/cli/conf.d/ncurses.ini: Permission denied

    also ncurses.ini file is not present after compilation.

    Can you please help !!!

    Reply
  3. Hi Thanks Aaron Kili,

    Can we run the configure from single system and get the report of multiple Linux server in the environment. And get the email report at specific time interval.

    Reply
  4. Thank you for your article.

    Unfortunately, after running http://SERVER_IP/linfo command I can see only the list of files in Linfo catalog:

    [root@testvm linfo]# pwd
    /var/www/html/linfo
    
    [root@testvm linfo]# ls -al
    total 128
    drwxr-xr-x 7 root root  4096 May 26 15:50 .
    drwxr-xr-x 3 root root    19 May 23 04:24 ..
    -rw-r--r-- 1 root root   505 May 26 15:49 AUTHORS
    drwxr-xr-x 2 root root    23 May 26 15:49 cache
    -rw-r--r-- 1 root root  4158 May 26 15:49 CHANGELOG.md
    -rw-r--r-- 1 root root   700 May 26 15:49 composer.json
    -rw-r--r-- 1 root root  6982 May 26 15:49 config.inc.php
    -rw-r--r-- 1 root root  1062 May 26 15:49 DEVELOPERS.md
    -rw-r--r-- 1 root root   479 May 26 15:49 Dockerfile
    drwxr-xr-x 8 root root   163 May 26 15:49 .git
    -rw-r--r-- 1 root root    33 May 26 15:49 .gitattributes
    -rw-r--r-- 1 root root   101 May 26 15:49 .gitignore
    -rw-r--r-- 1 root root  2681 May 26 15:49 gruntfile.js
    -rw-r--r-- 1 root root  1658 May 26 15:49 index.php
    drwxr-xr-x 4 root root   281 May 26 15:49 layout
    -rw-r--r-- 1 root root 52217 May 26 15:49 LICENSE
    -rwxr-xr-x 1 root root    67 May 26 15:49 linfo-curses
    -rw-r--r-- 1 root root   825 May 26 15:49 NCURSES.md
    -rw-r--r-- 1 root root  1390 May 26 15:49 package.json
    -rw-r--r-- 1 root root  3312 May 26 15:49 README.md
    drwxr-xr-x 3 root root    19 May 26 15:49 src
    -rw-r--r-- 1 root root   408 May 26 15:49 standalone_autoload.php
    drwxr-xr-x 5 root root   171 May 26 15:49 tests
    -rw-r--r-- 1 root root   104 May 26 15:49 .travis.yml
    

    Wha should I do else to have this site running correctly? I can’t see here an index.html file. Is it normally?

    Centos 7.3 Minimal on VmWare Workstation 12

    Thank you!

    Reply
    • @Alexey

      Welcome, there is an index.php file, this is the default index file. Make sure that your web server serves .php index files. For Apache, open the httpd.conf set it using the DirectoryIndex directive(list them in order of preference) as follows:

      DirectoryIndex index.php index.phtml index.html index.htm

      Reply
      • There was just one option in DirectoryIndex – index.html

        I added index.php index.phtml index.html index.htm and after that restartng httpd service.
        After trying to open the site the other error occured:

        scan();

        if (isset($_SERVER[‘LINFO_NCURSES’]) && php_sapi_name() == ‘cli’) {
        $output = new \Linfo\Output\Ncurses($linfo);
        }
        else {
        switch (array_key_exists(‘out’, $_GET) ? strtolower($_GET[‘out’]) : ‘html’) {
        default:
        case ‘html’:
        $output = new \Linfo\Output\Html($linfo);
        break;

        case ‘json’:
        case ‘jsonp’: // To use JSON-P, pass the GET arg – callback=function_name
        $output = new \Linfo\Output\Json($linfo, array_key_exists(‘callback’, $_GET) ? $_GET[‘callback’] : null);
        break;

        case ‘php_array’:
        $output = new \Linfo\Output\Serialized($linfo);
        break;

        case ‘xml’:
        $output = new \Linfo\Output\Xml($linfo);
        break;
        }
        }

        $output->output();

        } catch (FatalException $e) {
        echo $e->getMessage().”\n”;
        exit(1);
        }

        What’s wrong here?

        Thank you!

        Reply
        • Might be since I have installed Centos Minimal version no PHP was included during installation.

          So, I have just installed PHP 7.1.5, restart httpd service and it works now!

          Thank you for your help!

          Reply
          • @Alexey

            This is great, good to know that you fixed the error. This will definitely help us in future when offering solutions to other readers’ issues/errors.

            Many thanks for the feedback.

Got Something to Say? Join the Discussion...

Thank you for taking the time to share your thoughts with us. We appreciate your decision to leave a comment and value your contribution to the discussion. It's important to note that we moderate all comments in accordance with our comment policy to ensure a respectful and constructive conversation.

Rest assured that your email address will remain private and will not be published or shared with anyone. We prioritize the privacy and security of our users.