Linux: Read / dump contents of DMB file created with httxt2dbm

Berkley DB (DBM) files seem easy to create, but hard to read/manage. The most common task I can think of wanting to do on a database file is to dump or display it’s contents. And there’s no easy or straight forward way to do this (at least not that I found).

We were creating DBM files (from text files) for use by Apache/mod_rewrite using the httxt2dbm utility. If you create “file.dbm” it actually creates “file.dbm.pag” and “file.dbm.dir”.

To output the contents of the DBM file(s), Perl comes to the rescue. A colleague of mine wrote this after we searched the net for a working script and failed to find one. I’m sharing it in hopes someone will find it useful.

#!/usr/bin/perl
#- dumpdbm.pl
# /path/to/dumpdbm.pl /path/to/file.dbm
#
use SDBM_File;
use strict;

my ($name) = @ARGV;
die "Missing DBM name.\n" unless $name;
my %map;
tie( %map, 'SDBM_File', $name, 'O_RDONLY', 0644 ) || die "Can't open DBM file\n"; for my $k (sort(keys %map)) {
  # value is terminated by a null character, but the hash value contains cruft after that
  # so cut off the value at the first \0
  my @v = split("\0",$map{$k});
  print $k, "\t", $v[0], "\n";
}
untie %map;
exit;

3 Comments on Linux: Read / dump contents of DMB file created with httxt2dbm

  1. Shea says:

    I wanted to use the RSS-FEED but it showing me some Xml errors…

  2. Ionel Roiban says:

    Using this for re-directing old to new pages on a high traffic Website:

    # rewrite map for old to new
    RewriteEngine On
    RewriteMap rewmap txt:/var/www/rewrite.map
    RewriteCond ${rewmap:$1} ^(.+)$
    RewriteRule ^(.*) %1 [R,L]

    If I create httxt2dbm -i rewrite.map -o rewrite.dbm

    How much performance do I get, the map is cached in memory, anyways.

Leave a Reply

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