To find out the IP address of Linux/UNIX/*BSD/macOS and Unixish system, you need to use the command called ifconfig on Unix and the ip command or hostname command on Linux. These commands used to configure the kernel-resident network interfaces and display IP address such as 10.8.0.1 or 192.168.2.254. It is used at boot time to set up interfaces as necessary. After that, it is usually only needed when debugging or when system tuning is needed.
Bash Shell Command to Find or Get IP address
If no arguments are given to ifconfig command, it displays the status of the currently active interfaces. It shows an Ethernet IP address, Mac address, subnet mask, and other information. Type the following /sbin/ipconfig command to display IP address and releated networking information:
$ /sbin/ifconfig
OR type the following command:
$ /sbin/ifconfig | less
Under Solaris and other Unixish oses you may need to type ifconfig command with -a option as follows:
$ /sbin/ifconfig -a
Sample outputs:
eth0 Link encap:Ethernet HWaddr 00:0F:EA:91:04:07 inet addr:192.168.1.2 Bcast:192.168.1.255 Mask:255.255.255.0 inet6 addr: fe80::20f:eaff:fe91:407/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:31167 errors:0 dropped:0 overruns:0 frame:0 TX packets:26404 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:38338591 (36.5 MiB) TX bytes:3538152 (3.3 MiB) Interrupt:18 Base address:0xc000 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:1994 errors:0 dropped:0 overruns:0 frame:0 TX packets:1994 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:188041 (183.6 KiB) TX bytes:188041 (183.6 KiB)
In the above example, 192.168.1.2 is the IP address of the eth0 Ethernet interface. Of course, NIC (network interface card) name will be different as per your version of Unix system and network card driver. Here is an output from my macOS Unix based desktop:
/sbin/ifconfig
/sbin/ifconfig en0
Displaying private IP addresses of FreeBSD Unix server using the ifconfig
Simply run:
ifconfig
ifconfig -a
ifconfig em0
Finding default routing information on Unix
We need to type the following command:
# netstat -rn
FreeBSD Unix Default Route
Find the IP address of the local machine on Linux using hostname
We can determine the IP address or addresses of the Linux server by using the hostname command too. Open the Terminal application and execute the hostname command as follows:
# hostname -I
Sample outputs:
192.168.2.25
Linux ip Command
It is recommend that you use the ip command under Linux based systems. The ip command display information about ip address, manipulate routing, network devices, interfaces, tunnels and much more. The following ip command will show all ip address assigned to your system:# ip addr show
To see information about NIC named eth0 ip address, enter:
# ip addr show eth0
Sample outputs:
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000 link/ether b8:ac:6f:65:31:e5 brd ff:ff:ff:ff:ff:ff inet 192.168.2.100/24 brd 192.168.2.255 scope global eth0 inet6 fe80::baac:6fff:fe65:31e5/64 scope link valid_lft forever preferred_lft forever
Enter the following command to list all network interfaces from bash shell:
# ip link show
Linux command to display default routes
The syntax is as follows:
ip route show
ip r s
route -n
default via 10.8.0.1 dev tun0 proto static metric 50 default via 192.168.2.254 dev enp0s31f6 proto static metric 100 10.8.0.0/24 dev tun0 proto kernel scope link src 10.8.0.2 metric 50 10.83.200.0/24 dev lxdbr0 proto kernel scope link src 10.83.200.1 139.xxx.yyy.zzz via 192.168.2.254 dev enp0s31f6 proto static metric 100 192.168.2.0/24 dev enp0s31f6 proto kernel scope link src 192.168.2.25 metric 100 192.168.2.254 dev enp0s31f6 proto static scope link metric 100
Bash command for showing the public IP address of Linux and Unix systems
We can use the host command or dig command as follows to display the public IP address of your Linux or Unix system:
host myip.opendns.com resolver1.opendns.com
OR
dig +short myip.opendns.com @resolver1.opendns.com
Conclusion
You learned various bash commands to find both private and public IP addresses, netmask, default route, and other information. For more information please see howto read UNIX/Linux system IP address in a shell script.
🐧 Get the latest tutorials on Linux, Open Source & DevOps via:
- RSS feed or Weekly email newsletter
- Share on Twitter • Facebook • 53 comments... add one ↓
Category | List of Unix and Linux commands |
---|---|
File Management | cat |
Firewall | Alpine Awall • CentOS 8 • OpenSUSE • RHEL 8 • Ubuntu 16.04 • Ubuntu 18.04 • Ubuntu 20.04 |
Network Utilities | dig • host • ip • nmap |
OpenVPN | CentOS 7 • CentOS 8 • Debian 10 • Debian 8/9 • Ubuntu 18.04 • Ubuntu 20.04 |
Package Manager | apk • apt |
Processes Management | bg • chroot • cron • disown • fg • jobs • killall • kill • pidof • pstree • pwdx • time |
Searching | grep • whereis • which |
User Information | groups • id • lastcomm • last • lid/libuser-lid • logname • members • users • whoami • who • w |
WireGuard VPN | Alpine • CentOS 8 • Debian 10 • Firewall • Ubuntu 20.04 |
ipconfig usually doesn’t work outside of windows
Opps! Just corrected typo since I work on both UNIX and Windows Server and sometime I get confused :(.
Thanks, I appreciate your post :)
i worked in a company and the I.T man close the face book site what can i do
Work saeed and don`t be a facebook adict
Use
hostname -i
hostname -I
also find other parameters using man hostname.
hostname -i doen’t get the internet ip address:
?????:~ # hostname -i
127.0.0.2
it gives me the lo ip address.
I want to get the internet ip address from a command.
Regards
Oscar
I have found this way to get my ip public address (I have two IPs in my eth0 card for NAT):
xxxx:~ # ifconfig|sed -n “/inet addr:.*255.255.255.255/{s/.*inet addr://; s/ .*//; p}”
Regards,
Oscar
I’m trying OpenSuSE LiveCD 64Bits (Linux linux 2.6.25.5-1.1-default #1 SMP 2008-06-07 01:55:22 +0200 x86_64 x86_64 x86_64 GNU/Linux)
and the previous command doesn’t work. I have different broadcast address, so I get it with the mask (that is the same):
linux:/home/linux # ifconfig eth0 | sed -n “/inet addr:.*255.255.248.0/{s/.*inet addr://; s/.*//; p}”
xxx.xxx.xxx.xxx
linux:/home/linux #
Oscar, try this.
root@azrael:~# ifconfig eth0 | grep inet | awk '{print $2}' | sed 's/addr://'
Where eth0 is the interface you want to know the ip address. In my case was eth0. This will retrieve the Ip Address from the specified interface. If you have ipv6 active and you only use ipv4 Address, then add a grep . to the end of the sentence.
it would be like this:
root@azrael:~# ifconfig eth0 | grep inet | awk '{print $2}' | sed 's/addr://' | grep .
I use the above to retrieve the Ip address (dynamic one) from my ISP in order to forward the HTTP petitions to the web server (behind a firewall). Hope it works for you.
Is great!
Thanks a lot, Alejandro
almost good:
ifconfig eth0 | grep 'inet ' | awk '{print $2}' | sed 's/addr://'
will work ->inet otherwise you will get an empty line from the inet6 line you grepped
inet[space]
is there any other option available to get ip address on linux
I simply issue a bash command:root@debian:~ echo $IP
that’s why i typed two lines, the first one if you don’t have inet6 active on your server, and the second one if you do have it on.
root@azrael:~# ifconfig eth0 | grep inet | awk ‘{print $2}’ | sed ’s/addr://’ | grep . <– is not the best way to do it, but the “grep .” stuff works for that matter (at least it does for me) as i said it depends on the flavor of Linux you have and some other stuff.
Thanks for the tip on the “space after inet” i’ll try it out..
Hi,
in case someone still interested, i think easiest way to get local ip address is:
hostname -I (capital i)
this will return just the ip address with nothing else.
To get my external ip address (without use dyndns, noip & c) i use in a script:
This will write to /tmp/ip.txt my external ip and then i upload the text file with curl
to a directory on my web page
Bye
Award
——————
C u in /dev/null
HOW TO CHANGE IP,SUBNETMASK,GATEWAY,PLS SEND INFORMATION IM TRYING /etc/inet/hosts
/etc/inet/ipnodes THIS COMMAND BUT IS NOT WORK PLS HELP ME
Hi, I’m using RedHat Workstation 4 and would like to write a script to set the IP address, subnet mask and hostname of my machine. The same as Rahul.
How can i do this?
Thanks in advance.
A lot of the above example scripts/commands dont work corectly due to missformatting of the various Quote characters. Single quotes, double quotes and backticks are messed up.
` is a backtick – top left of the keyboard. Its used to go around a command thats ran.
export FOO=`ls`
puts the output of the ls command in the variable FOO
single Quote ‘ and double quotes ” are used in different places to go around arguments to commands. and to keep special chaacters from gettting parsed by the shell.
oops.. Watch out for the way this thread/forum alters the matching Quote to the single and double qupte if you cut and paste the examples. ie:
single Quotes ‘hello’
double quotes “hello”
back ticks `hello`
I had to manually alter the lines after i pasted them to use proper quoteing.
how to find the ip address of an website in linux
Hi
we have server configured on Linux.
Is there any way to get the IP Address of the client which is conncetd to that server.
IP=`who -m --ips | awk '{print $6}'`
Another syntax
IP=$(who -m --ips | awk '{print $6}')
Kishore , go to Terminal, and say ‘ping yahoo.com’
ifconfig eth0 | grep inet | sed -n "s/^\s*inet addr://p" | awk '{ print $1 }'
Works on my Linux system
This one I have used on my Ubunut 9.04 system
# ifconfig eth0|grep "inet addr:"|awk '{print $2}'|awk -F : '{print $2}'
I like to use the simple and concise:
host $(hostname) | sed 's/.*has address //g'
It simply returns the IP address that the rest of the world sees for your machine.
@wuhaa @Alejandro\ Smith
Personally I prefer this version:
$ /sbin/ifconfig eth0 | sed '/inet\ /!d;s/.*r://g;s/\ .*//g'
Why, you may ask. Because of this:
$ time { /sbin/ifconfig eth0|grep "inet addr:"|awk '{print $2}'|awk -F : '{print $2}' ; }
192.168.1.8
real 0m0.027s
user 0m0.013s
sys 0m0.003s
$ time { /sbin/ifconfig eth0 | grep inet | awk '{print $2}' | sed 's/addr://' | grep . ; }
192.168.1.8
real 0m0.009s
user 0m0.011s
sys 0m0.010s
$ time { /sbin/ifconfig eth0 | sed '/inet\ /!d;s/.*r://g;s/\ .*//g' ; }
192.168.1.8
real 0m0.005s
user 0m0.005s
sys 0m0.004s
The fewer processes, the faster the execution.
brill score! well done.
Excellent info on that.. thanks for updating this. That’s true, fewer processes translates into a faster execution.
Two years ago when i first posted on this faq with a “solution”, i was a new linux user, and i did not had any experience on this. I read some good information on bash scripting and came out with this solution for a problem i was having at that time.
I didn’t care back then if it was faster than other solutions, i just needed to solve the issue.. ;-) but of course, YOU are completely right with your point of view.
Thank you all for sharing your knowledge on this.
God bless you all.
Similar approach, but with Awk instead of sed:
time { ifconfig vmnet8 | awk ‘/inet addr:/ {print substr($2,6)}’ ; }
Do some *nix implementations put a space after ‘addr:’ ? If so, this will break in those cases.
Hi Award
Excellent command to find the originating IP addresss
hostname -i
Thanks!!
On my Ubuntu box, “hostname -i” does not give the same result as “host $(hostname)”.
Simples…
Work For me (Debian Lenny 5.0)
# ifconfig eth0 | grep inet | grep -v "inet6" | awk {'print $3'}
2964464256000b7a8adeee_000000
Run it as
source ~/.bashrc
myip
Now this works for Solaris 10
ifconfig -a
To find the ip address of Unix box from Unix prompt:
nslookup
Here’s one that works (quickly) for me using cut:
time { ifconfig eth0|grep 192|cut -d: -f2|cut -d' ' -f1 ; }
Look for summarize system resource usage
A computer may have multiple network interfaces and therefore more than one ip-address you should try:
/sbin/ifconfig [dev] | \
sed -n '/inet [Aa]d\{1,2\}resse\{0,1\}:/ { s# *inet [Aa]d\{1,2\}resse\{0,1\}:##; s# .*##p }'
If you omit [dev] this command will give you a list of all IP-address and should work with English and German localization.
hostname -i is unpredictable in its result and nslookup $(hostname) will give you only what DNS knows about your machine.
its realy grtt i found my way thankss..
i have always the same result : inet iddr : 127.0.0.1
what could be the problem ) thank you
Just running the following
The result will be (on one line)
Then you can apply a simple filter on it to extract the IP
Sorry for the typos. Unable to re-edit my post.
I’m using cygwin on windows and a VPN. None of the above worked for me. I had to use the following command and some grep and sed commands
route print | egrep " 255.255.255.255.*123.123.123.123" | sed 's/\s*\(.*\)255.255.255.255.*/\1/g'
### I’ve used 123.123.123.123 as a fictional router address.##
Explanation:
The vertical line, the pipe symbol, | , takes the output of everything on the left and feeds it to the command on the right. So the solution that works for me (the rest do not) involves essentially three commands – each of which that does something and parse things to the next step.
Excelent post
i’m learning i’m learning !!!
:3
how about this: curl http://icanhazip.com
Fantastic, as usual.
I want to show ip address using the command line.
How to find IP Address in Linux Operating System
i’m using this command
ifconfig ,/sbin/ifconfig and /sbin/ifconfig eth0 and
ifconfig eth0 | grep inet | sed -n “s/^\s*inet addr://p” | awk ‘{ print $1 }’ and
more command i’m using but i’m not geting a ip address pls help any one
As a sample: I’m using IPSec/StrongSWAN and ifconfig doesn’t show the ip’s used by strongswan, ip does.
hey
Any idea about the how to other ip address to find the server and cpu usage & pid find.