The file command identifies the type or format of a file. It is a very handy command that can show you how to approach a file when the format is unknown. There are a variety of tests that it uses to determine its type, these tests include a filesystem test, magic number test, and language tests. The first successful test is the one that is printed to the user.
The magic number tests are used to check for files with data in particular fixed formats. To determine the format of a file in this manner, either a magic number identifier exists at the beginning of the file, or a specific identifier can be determined at a specific offset within the file. The file /usr/share/file/magic specifies what magic numbers are to be tested for, what message to print if a particular magic number is found, and additional information to extract from the file.
Here is an example with a directory which contains a variety of file types. The output lists the filename along with its type.
$ file *
data: data directory: directory emptyfile: empty program: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), for GNU/Linux 2.6.9, dynamically linked (uses shared libs), stripped script.sh: Bourne-Again shell script text executable source.c: ASCII C program text symlink: symbolic link to `program' tarball.tar: POSIX tar archive (GNU) tarball.tbz: bzip2 compressed data, block size = 900k tarball.tgz: gzip compressed data, from Unix text.txt: ASCII text
This works equally well when the file names do not have have an extension, which is a very common case with Linux.