These are a list of tools which are likely to be useful when reverse engineering.
These tools should be already installed on a Unix system used for development. As a check list, you should be familiar with the following tools.
file. Determines file types. Useful for a quick overview of an unknown file. Often the first command executed when reverse engineering.
binutils. This package contains tools for manipulating / examining object files and executables. Particularly useful tools include objdump, strings, objcopy and readelf.
grep. Pattern matcher.
textutils. Text processing utilities. Particularly useful tools include od, uniq and wc.
sed. Stream based text processing.
gdb. Runtime debugger. Being intimately familiar with this tool is a must for dynamically examining executables.
ruby / python / perl... Scripting language for complex data processing. Use which ever you are most comfortable with.
These tools will be used for specific purposes during an reverse engineering session.
rsymtab. Regenerates the symbol table for a statically linked and stripped executable.
xocopy. Copies an executable with execute but no read permission.
strace. System call tracer.
ltrace. Library call tracer.
fenris. Debugging / program analysis suite.
subterfugue. System call subverter.