How To Flush Linux / UNIX DNS Cache

last updated in Categories , , , , , , , , ,

I‘m on a Dial UP Internet connection under Linux and frequent dial up disconnection causing dns problems. How do I flush DNS cache under UNIX / Linux distribution using a shell prompt?

Under MS-Windows you can use the ipconfig command to flush dns cache. However, Linux and UNIX provides various ways to flush cache. Linux can run nscd or BIND or dnsmasq as the name service caching daemon. Large and work-group servers may use BIND or dnsmasq as a dedicated caching server to speed up queries.


HowTo: Flush nscd dns cache

Nscd caches libc-issued requests to the Name Service. If retrieving NSS data is fairly expensive, nscd is able to speed up consecutive access to the same data dramatically and increase overall system performance. Just restart nscd:
$ sudo /etc/init.d/nscd restart
# service nscd restart
# service nscd reload
This daemon provides a cache for the most common name service requests. The default configuration file, /etc/nscd.conf, determines the behavior of the cache daemon.

Flush dnsmasq dns cache

dnsmasq is a lightweight DNS, TFTP and DHCP server. It is intended to provide coupled DNS and DHCP service to a LAN. Dnsmasq accepts DNS queries and either answers them from a small, local, cache or forwards them to a real, recursive, DNS server. This software is also installed many cheap routers to cache dns queries. Just restart the dnsmasq service to flush out dns cache:
$ sudo /etc/init.d/dnsmasq restart
# service dnsmasq restart

Flush caching BIND server dns cache

A caching BIND server obtains information from another server (a Zone Master) in response to a host query and then saves (caches) the data locally. All you have to do is restart bind to clear its cache:
# /etc/init.d/named restart
You can also use rndc command as follows flush out all cache:
# rndc restart
# rndc exec
BIND v9.3.0 and above will support flushing all of the records attached to a particular domain name with rndc flushname command. In this example flush all records releated to domain:
# rndc flushname
It is also possible to flush out BIND views. For example, lan and wan views can be flushed using the following command:
# rndc flush lan
# rndc flush wan

A note about Mac OS X Unix users

Type the following command as root user:
# dscacheutil -flushcache
$ sudo dscacheutil -flushcache
If you are using OS X 10.5 or earlier try the following command:
lookupd -flushcache

A note about /etc/hosts file

/etc/hosts act as the static table lookup for hostnames. You need to remove and/or update records as per your requirements under Unix like operating systems:
# vi /etc/hosts
Sample outputs:	localhost	wks01.WAG160N	wks01

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters     build	nas01	nas02	nas03

# nfs2 
# nfs1 nfs1 nfs2	vm01

See also:

Related: Windows Vista / XP Flush DNS Cache with ipconfig Command

Posted by: Vivek Gite

The author is the creator of nixCraft and a seasoned sysadmin, DevOps engineer, and a trainer for the Linux operating system/Unix shell scripting. Get the latest tutorials on SysAdmin, Linux/Unix and open source topics via RSS/XML feed or weekly email newsletter.


35 comment

  1. Whoops!

    It seems that not the perfect view for precise approach. It seems that if I use bind and there is a resolv.conf too not always the bind is in use. (Ubuntu) Other important machine (with debian), there is just resolv.conf. Anyhow I have tried to restart (hope works) the /etc/init.d/dns-clean and it seems it worked. But there were reports that this did not do the job. Anyhow, I want to make sure that – especially my debian system – without restarting, even the networking, how can I just restart the name resolution to the newly set values and how to get sure that it is done well?


  2. If nscd is in use, try “nscd -i hosts” as root.
    As per James Mills, “rndc flush” if using bind.

    If none of these work you might not have a DNS cache to flush anyway and the problem DNS entry may be stored elsewhere, such as your firefox DNS cache, your router’s cache, or another upstream DNS caching server.

  3. “/etc/init.d/dnsmasq restart” do not work, even stop and start does not. There is a clear cache option entioned, but it does not help anyway – dnsmasq remembers…

  4. I guess this is for DNS server. What shall I do if I wish to clear DNS cache on a linux client/desktop machine? [Like ipconfig /flushdns in windows]

  5. @Yogesh: The same commands apply to a desktop

    @dejf: Bear in mind per my comment above, perhaps your desktop has a separate DNS cache or the DNS is being cached elsewhere. You have to flush the DNS on all your “upstream” DNS servers as well or change the DNS servers that you’re using.
    See the following for info on how to change your DNS settings to these 2 popular public DNS servers:

  6. @Yogesh. Chances are the DNS is cached outside of your desktop or the DNS is being cached by an application directly.

    I wrote an (admittedly regex-cryptic) article on this same issue (sorry for the “competing” link, Vivek) – – skip to the sections after the label “Flush Mozilla Firefox’s internal DNS cache”.

  7. Hi

    I have a local name resolution issues on CentOS 5.5. I have edited the /etc/hosts file and still the hostname doesn’t resolves to right IP.

    Here is what I have priority configuration
    # more /etc/host.conf
    order hosts,bind
    Also /etc/nsswitch.conf file has

    hosts: files dns
    more /etc/hosts admin

    # host admin
    Host admin not found: 3(NXDOMAIN)

    Any suggestions would be appreciated.

  8. Im sorry for my bad english…. but im have Debian.
    apt-get install nscd Ok
    -d, –debug Do not fork and display messages on the current tty
    -f, –config-file=NAME Read configuration data from NAME
    -g, –statistic Print current configuration statistic
    -i, –invalidate=TABLE Invalidate the specified cache
    -K, –shutdown Shut the server down
    -t, –nthreads=NUMBER Start NUMBER threads
    –usage Give a short usage message

    commands restart and reload not work ! haven`t ))) and -shutdown not work

  9. @takprosto
    Do the commands give an error or are they just not refreshing the DNS? If there’s no error then the DNS entry could be cached elsewhere, for example on your router or your ISP’s DNS server.

  10. The articles recomendations are distribution specific and depend on how the init scripts are set up and what they do. The proper way to flush the cache on nscd is “nscd -i hosts” and for named, “rndc flush”

    Anything else, like “/etc/init.d/nscd reload” depends on how your distro wrote the init script. Just because that works for you on Fedora does not mean Debian or someone else set it up that way as well.

  11. If a user wants to flush DNS cache and if the user uses Internet via LAN connection ,the best way to do so is changing the DNS address manually . He just needs to alter the DNS entry .Setting alternative DNS address as primary address will solve the issue instantly. This trick worked for me . I faced the same problem . I am aLinux user .so , I installed NSCD client and tried to flush the cache . But , it could not solve my issue .i solved it myself just changing the DNS entry . It worked for me instantly .I kept the new entry for two days without any problem and later reinstated the older entry

  12. This post is a little misleading. Linux by default does not have a caching system (at least not most of the destributions). So unless you installed a caching system (or your system came with one pre-installed), there is no need to flush DNS because your system doesn’t store any.

    This post isn’t clear about that and will cause people (who have no caching in place) to install a caching package (like nscd) just so that they could flush it. That’s a little counterproductive I think.

    1. No wonder it didn’t work, Ubuntu 14.04 :)

      I guess it must be router? Though I’d think etc/host would be checked before that?

      1. Routers can host a DNS cache – all upstream DNS servers (your ISP’s DNS servers for example) will usually also do caching – so even if you flush your router’s cache that may not resolve whatever issue you’re having.

        In general, /etc/hosts overrides everything. There’s probably some general exception somewhere. :)

        The one scenario I know of where a hosts entry gets “overriden” is with a Squid cache server. For example, if you set up a hosts entry on your computer but the HTTP traffic is intercepted by a Squid server, the Squid server may do its own DNS lookup and completely ignore the fact that your request was directed at a different IP address.

  13. *NOTE* – The mistake I have often made is my /etc/hosts (on my CentOS6 workstation) I always FORGET to update it.

    So after a DNS update, I cannot reach the site by name and think something is amiss, well I forgot to edit my /etc/hosts file for all of the servers.

  14. The correct way to flush NSCD cache is using the command line:

    sudo /usr/sbin/nscd –invalidate=hosts

    from the man page:

    $ /usr/sbin/nscd –help
    Usage: nscd [OPTION…]
    Name Service Cache Daemon.

    -d, –debug Do not fork and display messages on the current
    -f, –config-file=NAME Read configuration data from NAME
    -g, –statistic Print current configuration statistics
    -i, –invalidate=TABLE Invalidate the specified cache
    -K, –shutdown Shut the server down
    -t, –nthreads=NUMBER Start NUMBER threads
    -?, –help Give this help list
    –usage Give a short usage message
    -V, –version Print program version

    $ sudo /usr/sbin/nscd -g
    nscd configuration:
    hosts cache:

    yes cache is enabled
    yes cache is persistent
    yes cache is shared
    yes check /etc/hosts for changes

    hope this help

  15. Does restarting the networking service clear the cache ?

    I do not find all Linux distributions having the one of the three tools you’ve mentioned above.

  16. I suggest changing this post about flush dns cache since it’s not correct to reload or restart nscd.

    I read the man and found the correct way is use:

    nscd -i hosts

    This method was mentioned in several comments, but if your post were not updated, more and more users would be misguided.

Leave a Comment