*nix Documentation Project
·  Home
 +   man pages
·  Linux HOWTOs
·  FreeBSD Tips
·  *niX Forums

  man pages->OpenBSD man pages -> file (1)              



NAME    [Toc]    [Back]

     file - determine file type

SYNOPSIS    [Toc]    [Back]

     file [-vbczL] [-f namefile] [-m magicfiles] file [...]

DESCRIPTION    [Toc]    [Back]

     This manual page documents version 3.22 of the file command.
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

     The type printed will  usually  contain  one  of  the  words
``text'' (the file
     contains  only ASCII 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

     Exceptions  are  well-known  file  formats  (core files, tar
archives) that
     are known to contain binary data.  When modifying  the  file
/etc/magic or
     the program itself, preserve these keywords.

     People  depend  on  knowing that all the readable files in a
directory have
     the word ``text'' printed.  Don't do as Berkeley did; change
     commands text'' to ``shell script''.

     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  some  invariant identifier at a small fixed
offset into the
     file can usually be described in this way.  The  information
in these
     files is read from the magic file /etc/magic.

     If an argument appears to be an ASCII file, file attempts to
guess its
     language.  The language tests look  for  particular  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) and determine whether an unknown  file  should  be
labelled as
     ``ASCII text'' or ``data''.

     The options are as follows:

     -v      Print the version of the program and exit.

     -m list
             Specify  an alternate list of files containing magic
             This can be a single file, or a colon-separated list
of files.

     -z      Try to look inside compressed files.

     -b       Do  not  prepend  filenames  to output lines (brief

     -c      Cause a checking printout of the parsed form of  the
magic file.
             This is usually used in conjunction with -m to debug
a new magic
             file before installing it.

     -f 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.

     -L      Cause symlinks to be followed, as the like-named option in ls(1).
             (on systems that support symbolic links).

ENVIRONMENT    [Toc]    [Back]

     MAGIC   Default magic number files.

FILES    [Toc]    [Back]

     /etc/magic  default list of magic numbers

SEE ALSO    [Toc]    [Back]

     hexdump(1), od(1), strings(1), magic(5)


     This program is believed to exceed the  System  V  Interface
Definition of
     FILE(CMD),  as near as one can determine from the vague language contained
     therein.  Its behaviour is mostly compatible with the System
V program of
     the  same  name.  This version knows more magic, however, so
it will produce
 different (albeit more accurate) output in many  cases.

     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 veriion, if a pattern string contains a
backslash,                   n
     it must be escaped.  Fordexample
     0       string          tw 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 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 `&'
     operator, used as, for example,

     >16     long&0x7fffffff >0              not stripped

MAGIC DIRECTORY    [Toc]    [Back]

     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 consolidation
 of magic file entries will be distributed periodically.  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 /etc/magic.orig).

HISTORY    [Toc]    [Back]

     There  has  been a file command in every UNIX since at least
Research Version
 4 (man page dated November, 1973).  The System  V  version introduced
     one  significant  major  change:  the external list of magic
number types.
     This slowed the program down slightly but made it a lot more

     This  program, based on the System V version, was written by
Ian F. Darwin
     <ian@darwinisys.com>  without  looking  at  anybody   else's
source code.

     John  Gilmore revised the code extensively, making it better
than the
     first version.  Geoff Collyer found several inadequacies and
     some magic file entries.

     Altered  by  Rob McMahon <cudcv@warwick.ac.uk>, 1989, to extend the `&' operator
 from simple ``x&y != 0'' to ``x&y op z''.

     Altered by Guy Harris <guy@auspex.com>, 1993, to:

           put the ``old-style'' `&' operator  back  the  way  it
was, because

                 1.    Rob  McMahon's  change  broke the previous
style of usage,

                 2.   The SunOS ``new-style'' `&' operator, which
this version
                      of  file  supports,  also  handles ``x&y op

                 3.   Rob's change wasn't documented in any case;

           put in multiple levels of `>';

           put in ``beshort'', ``leshort'', etc. keywords to look
at numbers
           in the file in a specific byte order, rather  than  in
the native
           byte order of the process running file.

     Currently    maintained    by    Christos   Zoulas   <christos@zoulas.com>.

LEGAL NOTICE    [Toc]    [Back]

     Copyright (c) Ian F.  Darwin,  Toronto,  Canada,  1986-1999.
Covered by the
     standard  Berkeley  Software Distribution copyright; see the
 in the distribution.

     The files tar.h and is_tar.c were written  by  John  Gilmore
from his public-domain
 tar program.

BUGS    [Toc]    [Back]

     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,
     ASCII strings for use in heterogenous network  environments)
for faster
     startup.   Then the program would run as fast as the Version
7 program of
     the same name, with the flexibility of the System V version.

     file uses several algorithms that favor speed over accuracy;
thus it can
     be misled about the contents of ASCII files.

     The support for ASCII files (primarily for programming  languages) is simplistic,
 inefficient and requires recompilation to update.

     There  should  be  an  ``else'' clause to follow a series of

     The magic file and keywords should have  regular  expression
     Their  use  of  ASCII  TAB  as a field delimiter is ugly and
makes it hard to
     edit the files, but is entrenched.

     It might be advisable to allow upper-case  letters  in  keywords 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 optimization 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 offset
     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
     ``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.

     This manual page, and  particularly  this  section,  is  too

AVAILABILITY    [Toc]    [Back]

     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.

OpenBSD      3.6                           July      30,     1997
[ Back ]
 Similar pages
Name OS Title
fstyp HP-UX determine file system type
isdialuptty FreeBSD determine tty type from ttys file entry
isfdtype OpenBSD determine whether a file descriptor is of a specific type
isnettty FreeBSD determine tty type from ttys file entry
DtDtsDataTypeIsAction HP-UX determine if the data type is an action
isnan IRIX determine type of floating-point number
rqsread IRIX reads the information out of an ELF file that is needed to determine if the file needs to be requickstarted
isastream Tru64 Determine if a file descriptor refers to a STREAMS file
access HP-UX determine accessibility of a file
access IRIX determine accessibility of a file
Copyright © 2004-2005 DeniX Solutions SRL
newsletter delivery service