Linux ifdata Command: See Network Interface Info Without Parsing ifconfig Output

Reading an IP address in a shell script requires many time and various Linux distributions stores IP address in different text files. So most of us end up writing shell pipes/scripts to get the information using ifconfig | grep 'inet addr:'| grep -v '127.0.0.1' | cut -d: -f2 | awk '{ print $1}' syntax. There is an alternative to ifconfig+shell pipe hack – ifdata command. It is a little know tool that can be used to check for the existence of a network interface and find out info about your interface such as IP, netmask, MTU and much more. No need to write shell pipes and fetch information via ifconfig or ip command. This command is designed to be easily used by a shell script.

Linux / Unix ifdata Command - Find Info About Network Interface

Fig.01: Linux / Unix ifdata Command – Find Info About Network Interface

ADVERTISEMENTS

How do I install ifdata command?

Simply type the following command at shell prompt:
$ sudo apt-get install moreutils
OR
$ sudo yum install moreutils

Examples

Find out if the interface ppp0 exists or not, enter:

ifdata -e ppp0 && echo "Found" || echo "Not found"

OR

ifdata -e ppp0 && echo "Found" || { echo "Not found, starting pppd..."; pppd call barISP; }

Show eth0 configuration:
$ ifdata -p eth0
Sample outputs:

192.168.1.5 255.255.255.0 192.168.1.255 1500

Get the IPv4 address of the interface, enter:

#!/bin/bash
# my firewall script
# Get ip for eth0
_ip=$(ifdata -pa eth0)
_ipt=/sbin/iptables
 
## do something on $_ip ##
echo "Setting firewall for eth0 and ${_ip}..."

The complete summary of all options supported by ifdata command:

Usage: ifdata [options] iface
     -e   Reports interface existence via return code
     -p   Print out the whole config of iface
    -pe   Print out yes or no according to existence
    -pa   Print out the address
    -pn   Print netmask
    -pN   Print network address
    -pb   Print broadcast
    -pm   Print mtu
    -ph   Print out the hardware address
    -pf   Print flags
    -si   Print all statistics on input
   -sip   Print # of in packets
   -sib   Print # of in bytes
   -sie   Print # of in errors
   -sid   Print # of in drops
   -sif   Print # of in fifo overruns
   -sic   Print # of in compress
   -sim   Print # of in multicast
    -so   Print all statistics on output
   -sop   Print # of out packets
   -sob   Print # of out bytes
   -soe   Print # of out errors
   -sod   Print # of out drops
   -sof   Print # of out fifo overruns
   -sox   Print # of out collisions
   -soc   Print # of out carrier loss
   -som   Print # of out multicast
  -bips   Print # of incoming bytes per second
  -bops   Print # of outgoing bytes per second

I hope you will use this tiny too for the good.

Related Internet links
🐧 Get the latest tutorials on SysAdmin, Linux/Unix, Open Source & DevOps topics via:
CategoryList of Unix and Linux commands
File Managementcat
FirewallAlpine Awall CentOS 8 OpenSUSE RHEL 8 Ubuntu 16.04 Ubuntu 18.04 Ubuntu 20.04
Network Utilitiesdig host ip nmap
OpenVPNCentOS 7 CentOS 8 Debian 10 Debian 8/9 Ubuntu 18.04 Ubuntu 20.04
Package Managerapk apt
Processes Managementbg chroot cron disown fg jobs killall kill pidof pstree pwdx time
Searchinggrep whereis which
User Informationgroups id lastcomm last lid/libuser-lid logname members users whoami who w
WireGuard VPNAlpine CentOS 8 Debian 10 Firewall Ubuntu 20.04

ADVERTISEMENTS
12 comments… add one
  • Jon Nov 6, 2012 @ 2:41

    Alternatively, you can use the ‘ip’ command. Its output isn’t quite as clean as ifdata, but it will always be on any modern system:

    root@host:~# ip -o -4 addr show eth0
    2: eth0 inet 10.154.26.36/23 brd 10.154.27.255 scope global eth0
    root@host:~#

    Depending on the scripting you are doing, parsing the above with awk or cut is probably preferable to an additional dependency.

  • Trey Blancher Nov 6, 2012 @ 2:43

    I had to install moreutils on Debian sid, because ifdata does not appear to exist as a separate package in apt.

  • Chris F.A. Johnson Nov 6, 2012 @ 5:39

    ifdata is not available in all distributions

  • George Nov 6, 2012 @ 7:06

    So where does one find this command?

    • 🐧 nixCraft Nov 6, 2012 @ 12:23

      Check the related links posted at the bottom of this post.

  • Mac Nov 6, 2012 @ 13:27

    Is ifdata available for RHEL 6 or do you need to enable another repo?

  • Frank Shafer Nov 7, 2012 @ 4:46

    Nice tutorial buddy! ifconfig can be a bit clumsy sometimes and it’s nice to know there’s an alternative :)

  • Brian Hines Nov 8, 2012 @ 21:35

    Wow, this is very helpful! Yes ifconfig can be a mess sometimes- I am always appreciative of smarter people who help dumb people like me do things quicker and better! Thanks,

  • Jalal Hajigholamali Nov 27, 2012 @ 6:57

    Hi,

    Thanks a lot

    we can download ifdata and other useful utilities from

    http://kitenet.net/~joey/code/moreutils/

  • MoChaMan69 Jan 29, 2013 @ 16:38

    Here is an alternative function using /sbin/ip that gives you useful information . I call it ‘ship’ for SHow IP :

    ship ()
    {
    [ $1 ] && DEVLIST=$1 || DEVLIST=$(ip addr show | grep ^[0-9] | cut -d: -f 2);
    for DEV in $DEVLIST;
    do
    IP_ADDR=$(/sbin/ip addr show dev ${DEV} | grep ${DEV}$ | awk ‘{ print $2 }’ | cut -d/ -f 1);
    RC=$?;
    [ -z $IP_ADDR ] || echo “${DEV}: ${IP_ADDR}”;
    done
    }

    [server:~] # ship
    lo: 127.0.0.1
    bond0: 10.196.76.17
    [server:~] #

Leave a Reply

Your email address will not be published. Required fields are marked *

Use HTML <pre>...</pre>, <code>...</code> and <kbd>...</kbd> for code samples.