SYNOPSIS
file [ -bciknsvzL ] [ -f namefile ] [ -m magicfiles ] file
...
file -C [ -m magicfile ]
DESCRIPTION
This manual page documents version 3.37 of the file com
mand.
File tests each argument in an attempt to classify it.
There are three sets of tests, performed in this order:
filesystem tests, magic number tests, and language tests.
The first test that succeeds causes the file type to be
printed.
The type printed will usually contain one of the words
text (the file contains only printing characters and a few
common control characters and is probably safe to read on
an ASCII terminal), executable (the file contains the
result of compiling a program in a form understandable to
some UNIX kernel or another), or data meaning anything
else (data is usually `binary' or non-printable). Excep
tions are well-known file formats (core files, tar
archives) that are known to contain binary data. When
modifying the file /usr/share/misc/magic or the program
itself, preserve these keywords . People depend on know
ing that all the readable files in a directory have the
word ``text'' printed. Don't do as Berkeley did and
change ``shell commands text'' to ``shell script''. Note
that the file /usr/share/misc/magic is built mechanically
from a large number of small files in the subdirectory
Magdir in the source distribution of this program.
The filesystem tests are based on examining the return
from a stat(2) system call. The program checks to see if
the file is empty, or if it's some sort of special file.
Any known file types appropriate to the system you are
running on (sockets, symbolic links, or named pipes
(FIFOs) on those systems that implement them) are intuited
if they are defined in the system header file
<sys/stat.h>.
The magic number tests are used to check for files with
data in particular fixed formats. The canonical example
of this is a binary executable (compiled program) a.out
file, whose format is defined in a.out.h and possibly
exec.h in the standard include directory. These files
have a `magic number' stored in a particular place near
the beginning of the file that tells the UNIX operating
system that the file is a binary executable, and which of
several types thereof. The concept of `magic number' has
been applied by extension to data files. Any file with
its character set is reported. ASCII, ISO-8859-x, UTF-8,
and extended-ASCII files are identified as ``text''
because they will be mostly readable on nearly any termi
nal; UTF-16 and EBCDIC are only ``character data''
because, while they contain text, it is text that will
require translation before it can be read. In addition,
file will attempt to determine other characteristics of
text-type files. If the lines of a file are terminated by
CR, CRLF, or NEL, instead of the Unix-standard LF, this
will be reported. Files that contain embedded escape
sequences or overstriking will also be identified.
Once file has determined the character set used in a text-
type file, it will attempt to determine in what language
the file is written. The language tests look for particu
lar strings (cf names.h) that can appear anywhere in the
first few blocks of a file. For example, the keyword .br
indicates that the file is most likely a troff(1) input
file, just as the keyword struct indicates a C program.
These tests are less reliable than the previous two
groups, so they are performed last. The language test
routines also test for some miscellany (such as tar(1)
archives).
Any file that cannot be identified as having been written
in any of the character sets listed above is simply said
to be ``data''.
OPTIONS
-b, --brief
Do not prepend filenames to output lines.
-c, --checking-printout
Cause a checking printout of the parsed form of
the magic file. This is usually used in conjunc
tion with -m to debug a new magic file before
installing it.
-C, --compile
Write a magic.mgc output file that contains a pre-
parsed version of file.
-f, --files-from namefile
Read the names of the files to be examined from
namefile (one per line) before the argument list.
Either namefile or at least one filename argument
must be present; to test the standard input, use
``-'' as a filename argument.
-i, --mime
Causes the file command to output mime type
strings rather than the more traditional human
colon-separated list of files.
-n, --no-buffer
Force stdout to be flushed after checking each
file. This is only useful if checking a list of
files. It is intended to be used by programs that
want filetype output from a pipe.
-v Print the version of the program and exit.
-z, --uncompress
Try to look inside compressed files.
-L, --dereference
option causes symlinks to be followed, as the
like-named option in ls(1). (on systems that sup
port symbolic links).
-s, --special-files
Normally, file only attempts to read and determine
the type of argument files which stat(2) reports
are ordinary files. This prevents problems,
because reading special files may have peculiar
consequences. Specifying the -s option causes
file to also read argument files which are block
or character special files. This is useful for
determining the filesystem types of the data in
raw disk partitions, which are block special
files. This option also causes file to disregard
the file size as reported by stat(2) since on some
systems it reports a zero size for raw disk parti
tions.
--help Print a help message and exit.
--version
Print version information and exit.
FILES
/usr/share/misc/magic.mgc - defaults compiled list of
magic numbers
/usr/share/misc/magic - default list of magic numbers
/usr/share/misc/magic.mime - default list of magic num
bers, used to output mime types when the -i option is
specified.
ENVIRONMENT
The environment variable MAGIC can be used to set the
default magic number files.
The one significant difference between this version and
System V is that this version treats any white space as a
delimiter, so that spaces in pattern strings must be
escaped. For example,
>10 string language impress (imPRESS data)
in an existing magic file would have to be changed to
>10 string language\ impress (imPRESS data)
In addition, in this version, if a pattern string contains
a backslash, it must be escaped. For example
0 string \begindata Andrew Toolkit document
in an existing magic file would have to be changed to
0 string \\begindata Andrew Toolkit document
SunOS releases 3.2 and later from Sun Microsystems include
a file(1) command derived from the System V one, but with
some extensions. My version differs from Sun's only in
minor ways. It includes the extension of the `&' opera
tor, used as, for example,
>16 long&0x7fffffff >0 not stripped
MAGIC DIRECTORY
The magic file entries have been collected from various
sources, mainly USENET, and contributed by various
authors. Christos Zoulas (address below) will collect
additional or corrected magic file entries. A consolida
tion of magic file entries will be distributed periodi
cally.
The order of entries in the magic file is significant.
Depending on what system you are using, the order that
they are put together may be incorrect. If your old file
command uses a magic file, keep the old magic file around
for comparison purposes (rename it to
/usr/share/misc/magic.orig).
EXAMPLES
$ file file.c file /dev/hda
file.c: C program text
file: ELF 32-bit LSB executable, Intel 80386, version 1,
dynamically linked, not stripped
/dev/hda: block special
$ file -s /dev/hda{,1,2,3,4,5,6,7,8,9,10}
/dev/hda: x86 boot sector
/dev/hda1: Linux/i386 ext2 filesystem
/dev/hda2: x86 boot sector
/dev/hda3: x86 boot sector, extended partition table
/dev/hda4: Linux/i386 ext2 filesystem
/dev/hda5: Linux/i386 swap file
/dev/hda6: Linux/i386 swap file
/dev/hda7: Linux/i386 swap file
the external list of magic number types. This slowed the
program down slightly but made it a lot more flexible.
This program, based on the System V version, was written
by Ian Darwin <ian@darwinsys.com> without looking at any
body else's source code.
John Gilmore revised the code extensively, making it bet
ter than the first version. Geoff Collyer found several
inadequacies and provided some magic file entries. Con
tributions by the `&' operator by Rob McMahon, cudcv@war
wick.ac.uk, 1989.
Guy Harris, guy@netapp.com, made many changes from 1993 to
the present.
Primary development and maintenance from 1990 to the pre
sent by Christos Zoulas (christos@astron.com).
Altered by Chris Lowth, chris@lowth.com, 2000: Handle the
``-i'' option to output mime type strings and using an
alternative magic file and internal logic.
Altered by Eric Fischer (enf@pobox.com), July, 2000, to
identify character codes and attempt to identify the lan
guages of non-ASCII files.
The list of contributors to the "Magdir" directory (source
for the /etc/magic file) is too long to include here. You
know who you are; thank you.
LEGAL NOTICE
Copyright (c) Ian F. Darwin, Toronto, Canada, 1986-1999.
Covered by the standard Berkeley Software Distribution
copyright; see the file LEGAL.NOTICE in the source distri
bution.
The files tar.h and is_tar.c were written by John Gilmore
from his public-domain tar program, and are not covered by
the above license.
BUGS
There must be a better way to automate the construction of
the Magic file from all the glop in Magdir. What is it?
Better yet, the magic file should be compiled into binary
(say, ndbm(3) or, better yet, fixed-length ASCII strings
for use in heterogenous network environments) for faster
startup. Then the program would run as fast as the Ver
sion 7 program of the same name, with the flexibility of
the System V version.
File uses several algorithms that favor speed over accu
It might be advisable to allow upper-case letters in key
words for e.g., troff(1) commands vs man page macros.
Regular expression support would make this easy.
The program doesn't grok FORTRAN. It should be able to
figure FORTRAN by seeing some keywords which appear
indented at the start of line. Regular expression support
would make this easy.
The list of keywords in ascmagic probably belongs in the
Magic file. This could be done by using some keyword like
`*' for the offset value.
Another optimisation would be to sort the magic file so
that we can just run down all the tests for the first
byte, first word, first long, etc, once we have fetched
it. Complain about conflicts in the magic file entries.
Make a rule that the magic entries sort based on file off
set rather than position within the magic file?
The program should provide a way to give an estimate of
``how good'' a guess is. We end up removing guesses (e.g.
``From '' as first 5 chars of file) because they are not
as good as other guesses (e.g. ``Newsgroups:'' versus
``Return-Path:''). Still, if the others don't pan out, it
should be possible to use the first guess.
This program is slower than some vendors' file commands.
The new support for multiple character codes makes it even
slower.
This manual page, and particularly this section, is too
long.
AVAILABILITY
You can obtain the original author's latest version by
anonymous FTP on ftp.astron.com in the directory
/pub/file/file-X.YY.tar.gz
Copyright but distributable FILE(1)
Man(1) output converted with
man2html