1FILE(1)                   BSD General Commands Manual                  FILE(1)
2

NAME

4     file — determine file type
5

SYNOPSIS

7     file [-bcdEhiklLNnprsSvzZ0] [--apple] [--extension] [--mime-encoding]
8          [--mime-type] [-e testname] [-F separator] [-f namefile]
9          [-m magicfiles] [-P name=value] file ...
10     file -C [-m magicfiles]
11     file [--help]
12

DESCRIPTION

14     This manual page documents version 5.36 of the file command.
15
16     file tests each argument in an attempt to classify it.  There are three
17     sets of tests, performed in this order: filesystem tests, magic tests,
18     and language tests.  The first test that succeeds causes the file type to
19     be printed.
20
21     The type printed will usually contain one of the words text (the file
22     contains only printing characters and a few common control characters and
23     is probably safe to read on an ASCII terminal), executable (the file con‐
24     tains the result of compiling a program in a form understandable to some
25     UNIX kernel or another), or data meaning anything else (data is usually
26     “binary” or non-printable).  Exceptions are well-known file formats (core
27     files, tar archives) that are known to contain binary data.  When modify‐
28     ing magic files or the program itself, make sure to preserve these
29     keywords.  Users depend on knowing that all the readable files in a
30     directory have the word “text” printed.  Don't do as Berkeley did and
31     change “shell commands text” to “shell script”.
32
33     The filesystem tests are based on examining the return from a stat(2)
34     system call.  The program checks to see if the file is empty, or if it's
35     some sort of special file.  Any known file types appropriate to the sys‐
36     tem you are running on (sockets, symbolic links, or named pipes (FIFOs)
37     on those systems that implement them) are intuited if they are defined in
38     the system header file <sys/stat.h>.
39
40     The magic tests are used to check for files with data in particular fixed
41     formats.  The canonical example of this is a binary executable (compiled
42     program) a.out file, whose format is defined in <elf.h>, <a.out.h> and
43     possibly <exec.h> in the standard include directory.  These files have a
44     “magic number” stored in a particular place near the beginning of the
45     file that tells the UNIX operating system that the file is a binary exe‐
46     cutable, and which of several types thereof.  The concept of a “magic”
47     has been applied by extension to data files.  Any file with some invari‐
48     ant identifier at a small fixed offset into the file can usually be
49     described in this way.  The information identifying these files is read
50     from the compiled magic file /usr/share/misc/magic.mgc, or the files in
51     the directory /usr/share/misc/magic if the compiled file does not exist.
52     In addition, if $HOME/.magic.mgc or $HOME/.magic exists, it will be used
53     in preference to the system magic files.
54
55     If a file does not match any of the entries in the magic file, it is
56     examined to see if it seems to be a text file.  ASCII, ISO-8859-x, non-
57     ISO 8-bit extended-ASCII character sets (such as those used on Macintosh
58     and IBM PC systems), UTF-8-encoded Unicode, UTF-16-encoded Unicode, and
59     EBCDIC character sets can be distinguished by the different ranges and
60     sequences of bytes that constitute printable text in each set.  If a file
61     passes any of these tests, its character set is reported.  ASCII,
62     ISO-8859-x, UTF-8, and extended-ASCII files are identified as “text”
63     because they will be mostly readable on nearly any terminal; UTF-16 and
64     EBCDIC are only “character data” because, while they contain text, it is
65     text that will require translation before it can be read.  In addition,
66     file will attempt to determine other characteristics of text-type files.
67     If the lines of a file are terminated by CR, CRLF, or NEL, instead of the
68     Unix-standard LF, this will be reported.  Files that contain embedded
69     escape sequences or overstriking will also be identified.
70
71     Once file has determined the character set used in a text-type file, it
72     will attempt to determine in what language the file is written.  The lan‐
73     guage tests look for particular strings (cf.  <names.h>) that can appear
74     anywhere in the first few blocks of a file.  For example, the keyword .br
75     indicates that the file is most likely a troff(1) input file, just as the
76     keyword struct indicates a C program.  These tests are less reliable than
77     the previous two groups, so they are performed last.  The language test
78     routines also test for some miscellany (such as tar(1) archives, JSON
79     files).
80
81     Any file that cannot be identified as having been written in any of the
82     character sets listed above is simply said to be “data”.
83

OPTIONS

85     --apple
86             Causes the file command to output the file type and creator code
87             as used by older MacOS versions.  The code consists of eight let‐
88             ters, the first describing the file type, the latter the creator.
89             the first describing the file type, the latter the creator.  This
90             option works properly only for file formats that have the apple-
91             style output defined.
92
93     -b, --brief
94             Do not prepend filenames to output lines (brief mode).
95
96     -C, --compile
97             Write a magic.mgc output file that contains a pre-parsed version
98             of the magic file or directory.
99
100     -c, --checking-printout
101             Cause a checking printout of the parsed form of the magic file.
102             This is usually used in conjunction with the -m flag to debug a
103             new magic file before installing it.
104
105     -d      Prints internal debugging information to stderr.
106
107     -E      On filesystem errors (file not found etc), instead of handling
108             the error as regular output as POSIX mandates and keep going,
109             issue an error message and exit.
110
111     -e, --exclude testname
112             Exclude the test named in testname from the list of tests made to
113             determine the file type.  Valid test names are:
114
115             apptype   EMX application type (only on EMX).
116
117             ascii     Various types of text files (this test will try to
118                       guess the text encoding, irrespective of the setting of
119                       the ‘encoding’ option).
120
121             encoding  Different text encodings for soft magic tests.
122
123             tokens    Ignored for backwards compatibility.
124
125             cdf       Prints details of Compound Document Files.
126
127             compress  Checks for, and looks inside, compressed files.
128
129             elf       Prints ELF file details, provided soft magic tests are
130                       enabled and the elf magic is found.
131
132             json      Examines JSON (RFC-7159) files by parsing them for com‐
133                       pliance.
134
135             soft      Consults magic files.
136
137             tar       Examines tar files by verifying the checksum of the 512
138                       byte tar header.  Excluding this test can provide more
139                       detailed content description by using the soft magic
140                       method.
141
142             text      A synonym for ‘ascii’.
143
144     --extension
145             Print a slash-separated list of valid extensions for the file
146             type found.
147
148     -F, --separator separator
149             Use the specified string as the separator between the filename
150             and the file result returned.  Defaults to ‘:’.
151
152     -f, --files-from namefile
153             Read the names of the files to be examined from namefile (one per
154             line) before the argument list.  Either namefile or at least one
155             filename argument must be present; to test the standard input,
156             use ‘-’ as a filename argument.  Please note that namefile is
157             unwrapped and the enclosed filenames are processed when this
158             option is encountered and before any further options processing
159             is done.  This allows one to process multiple lists of files with
160             different command line arguments on the same file invocation.
161             Thus if you want to set the delimiter, you need to do it before
162             you specify the list of files, like: “-F @ -f namefile”, instead
163             of: “-f namefile -F @”.
164
165     -h, --no-dereference
166             option causes symlinks not to be followed (on systems that sup‐
167             port symbolic links).  This is the default if the environment
168             variable POSIXLY_CORRECT is not defined.
169
170     -i, --mime
171             Causes the file command to output mime type strings rather than
172             the more traditional human readable ones.  Thus it may say
173             ‘text/plain; charset=us-ascii’ rather than “ASCII text”.
174
175     --mime-type, --mime-encoding
176             Like -i, but print only the specified element(s).
177
178     -k, --keep-going
179             Don't stop at the first match, keep going.  Subsequent matches
180             will be have the string ‘\012- ’ prepended.  (If you want a new‐
181             line, see the -r option.)  The magic pattern with the highest
182             strength (see the -l option) comes first.
183
184     -l, --list
185             Shows a list of patterns and their strength sorted descending by
186             magic(4) strength which is used for the matching (see also the -k
187             option).
188
189     -L, --dereference
190             option causes symlinks to be followed, as the like-named option
191             in ls(1) (on systems that support symbolic links).  This is the
192             default if the environment variable POSIXLY_CORRECT is defined.
193
194     -m, --magic-file magicfiles
195             Specify an alternate list of files and directories containing
196             magic.  This can be a single item, or a colon-separated list.  If
197             a compiled magic file is found alongside a file or directory, it
198             will be used instead.
199
200     -N, --no-pad
201             Don't pad filenames so that they align in the output.
202
203     -n, --no-buffer
204             Force stdout to be flushed after checking each file.  This is
205             only useful if checking a list of files.  It is intended to be
206             used by programs that want filetype output from a pipe.
207
208     -p, --preserve-date
209             On systems that support utime(3) or utimes(2), attempt to pre‐
210             serve the access time of files analyzed, to pretend that file
211             never read them.
212
213     -P, --parameter name=value
214             Set various parameter limits.
215
216                   Name         Default    Explanation
217                   indir        15         recursion limit for indirect magic
218                   name         30         use count limit for name/use magic
219                   elf_notes    256        max ELF notes processed
220                   elf_phnum    128        max ELF program sections processed
221                   elf_shnum    32768      max ELF sections processed
222                   regex        8192       length limit for regex searches
223                   bytes        1048576    max number of bytes to read from
224                                                                          file
225
226     -r, --raw
227             Don't translate unprintable characters to \ooo.  Normally file
228             translates unprintable characters to their octal representation.
229
230     -s, --special-files
231             Normally, file only attempts to read and determine the type of
232             argument files which stat(2) reports are ordinary files.  This
233             prevents problems, because reading special files may have pecu‐
234             liar consequences.  Specifying the -s option causes file to also
235             read argument files which are block or character special files.
236             This is useful for determining the filesystem types of the data
237             in raw disk partitions, which are block special files.  This
238             option also causes file to disregard the file size as reported by
239             stat(2) since on some systems it reports a zero size for raw disk
240             partitions.
241
242     -S, --no-sandbox
243             On systems where libseccomp
244             (https://github.com/seccomp/libseccomp) is available, the -S flag
245             disables sandboxing which is enabled by default.  This option is
246             needed for file to execute external descompressing programs, i.e.
247             when the -z flag is specified and the built-in decompressors are
248             not available.
249
250     -v, --version
251             Print the version of the program and exit.
252
253     -z, --uncompress
254             Try to look inside compressed files.
255
256     -Z, --uncompress-noreport
257             Try to look inside compressed files, but report information about
258             the contents only not the compression.
259
260     -0, --print0
261             Output a null character ‘\0’ after the end of the filename.  Nice
262             to cut(1) the output.  This does not affect the separator, which
263             is still printed.
264
265             If this option is repeated more than once, then file prints just
266             the filename followed by a NUL followed by the description (or
267             ERROR: text) followed by a second NUL for each entry.
268
269     --help  Print a help message and exit.
270

ENVIRONMENT

272     The environment variable MAGIC can be used to set the default magic file
273     name.  If that variable is set, then file will not attempt to open
274     $HOME/.magic.  file adds “.mgc” to the value of this variable as appro‐
275     priate.  The environment variable POSIXLY_CORRECT controls (on systems
276     that support symbolic links), whether file will attempt to follow sym‐
277     links or not.  If set, then file follows symlink, otherwise it does not.
278     This is also controlled by the -L and -h options.
279

FILES

281     /usr/share/misc/magic.mgc  Default compiled list of magic.
282     /usr/share/misc/magic      Directory containing default magic files.
283

EXIT STATUS

285     file will exit with 0 if the operation was successful or >0 if an error
286     was encountered.  The following errors cause diagnostic messages, but
287     don't affect the program exit code (as POSIX requires), unless -E is
288     specified:
289           ·   A file cannot be found
290           ·   There is no permission to read a file
291           ·   The file type cannot be determined
292

EXAMPLES

294           $ file file.c file /dev/{wd0a,hda}
295           file.c:   C program text
296           file:     ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV),
297                     dynamically linked (uses shared libs), stripped
298           /dev/wd0a: block special (0/0)
299           /dev/hda: block special (3/0)
300
301           $ file -s /dev/wd0{b,d}
302           /dev/wd0b: data
303           /dev/wd0d: x86 boot sector
304
305           $ file -s /dev/hda{,1,2,3,4,5,6,7,8,9,10}
306           /dev/hda:   x86 boot sector
307           /dev/hda1:  Linux/i386 ext2 filesystem
308           /dev/hda2:  x86 boot sector
309           /dev/hda3:  x86 boot sector, extended partition table
310           /dev/hda4:  Linux/i386 ext2 filesystem
311           /dev/hda5:  Linux/i386 swap file
312           /dev/hda6:  Linux/i386 swap file
313           /dev/hda7:  Linux/i386 swap file
314           /dev/hda8:  Linux/i386 swap file
315           /dev/hda9:  empty
316           /dev/hda10: empty
317
318           $ file -i file.c file /dev/{wd0a,hda}
319           file.c:      text/x-c
320           file:        application/x-executable
321           /dev/hda:    application/x-not-regular-file
322           /dev/wd0a:   application/x-not-regular-file
323
324

SEE ALSO

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

STANDARDS CONFORMANCE

329     This program is believed to exceed the System V Interface Definition of
330     FILE(CMD), as near as one can determine from the vague language contained
331     therein.  Its behavior is mostly compatible with the System V program of
332     the same name.  This version knows more magic, however, so it will pro‐
333     duce different (albeit more accurate) output in many cases.
334
335     The one significant difference between this version and System V is that
336     this version treats any white space as a delimiter, so that spaces in
337     pattern strings must be escaped.  For example,
338
339           >10     string  language impress        (imPRESS data)
340
341     in an existing magic file would have to be changed to
342
343           >10     string  language\ impress       (imPRESS data)
344
345     In addition, in this version, if a pattern string contains a backslash,
346     it must be escaped.  For example
347
348           0       string          \begindata      Andrew Toolkit document
349
350     in an existing magic file would have to be changed to
351
352           0       string          \\begindata     Andrew Toolkit document
353
354     SunOS releases 3.2 and later from Sun Microsystems include a file command
355     derived from the System V one, but with some extensions.  This version
356     differs from Sun's only in minor ways.  It includes the extension of the
357     ‘&’ operator, used as, for example,
358
359           >16     long&0x7fffffff >0              not stripped
360

SECURITY

362     On systems where libseccomp (https://github.com/seccomp/libseccomp) is
363     available, file is enforces limiting system calls to only the ones neces‐
364     sary for the operation of the program.  This enforcement does not provide
365     any security benefit when file is asked to decompress input files running
366     external programs with the -z option.  To enable execution of external
367     decompressors, one needs to disable sandboxing using the -S flag.
368

MAGIC DIRECTORY

370     The magic file entries have been collected from various sources, mainly
371     USENET, and contributed by various authors.  Christos Zoulas (address
372     below) will collect additional or corrected magic file entries.  A con‐
373     solidation of magic file entries will be distributed periodically.
374
375     The order of entries in the magic file is significant.  Depending on what
376     system you are using, the order that they are put together may be incor‐
377     rect.  If your old file command uses a magic file, keep the old magic
378     file around for comparison purposes (rename it to
379     /usr/share/misc/magic.orig).
380

HISTORY

382     There has been a file command in every UNIX since at least Research
383     Version 4 (man page dated November, 1973).  The System V version intro‐
384     duced one significant major change: the external list of magic types.
385     This slowed the program down slightly but made it a lot more flexible.
386
387     This program, based on the System V version, was written by Ian Darwin
388     ⟨ian@darwinsys.com⟩ without looking at anybody else's source code.
389
390     John Gilmore revised the code extensively, making it better than the
391     first version.  Geoff Collyer found several inadequacies and provided
392     some magic file entries.  Contributions of the ‘&’ operator by Rob McMa‐
393     hon, ⟨cudcv@warwick.ac.uk⟩, 1989.
394
395     Guy Harris, ⟨guy@netapp.com⟩, made many changes from 1993 to the present.
396
397     Primary development and maintenance from 1990 to the present by Christos
398     Zoulas ⟨christos@astron.com⟩.
399
400     Altered by Chris Lowth ⟨chris@lowth.com⟩, 2000: handle the -i option to
401     output mime type strings, using an alternative magic file and internal
402     logic.
403
404     Altered by Eric Fischer ⟨enf@pobox.com⟩, July, 2000, to identify charac‐
405     ter codes and attempt to identify the languages of non-ASCII files.
406
407     Altered by Reuben Thomas ⟨rrt@sc3d.org⟩, 2007-2011, to improve MIME sup‐
408     port, merge MIME and non-MIME magic, support directories as well as files
409     of magic, apply many bug fixes, update and fix a lot of magic, improve
410     the build system, improve the documentation, and rewrite the Python bind‐
411     ings in pure Python.
412
413     The list of contributors to the ‘magic’ directory (magic files) is too
414     long to include here.  You know who you are; thank you.  Many contribu‐
415     tors are listed in the source files.
416
418     Copyright (c) Ian F. Darwin, Toronto, Canada, 1986-1999.  Covered by the
419     standard Berkeley Software Distribution copyright; see the file COPYING
420     in the source distribution.
421
422     The files tar.h and is_tar.c were written by John Gilmore from his pub‐
423     lic-domain tar(1) program, and are not covered by the above license.
424

BUGS

426     Please report bugs and send patches to the bug tracker at
427     https://bugs.astron.com/ or the mailing list at ⟨file@astron.com⟩ (visit
428     https://mailman.astron.com/mailman/listinfo/file first to subscribe).
429

TODO

431     Fix output so that tests for MIME and APPLE flags are not needed all over
432     the place, and actual output is only done in one place.  This needs a
433     design.  Suggestion: push possible outputs on to a list, then pick the
434     last-pushed (most specific, one hopes) value at the end, or use a default
435     if the list is empty.  This should not slow down evaluation.
436
437     The handling of MAGIC_CONTINUE and printing \012- between entries is
438     clumsy and complicated; refactor and centralize.
439
440     Some of the encoding logic is hard-coded in encoding.c and can be moved
441     to the magic files if we had a !:charset annotation
442
443     Continue to squash all magic bugs.  See Debian BTS for a good source.
444
445     Store arbitrarily long strings, for example for %s patterns, so that they
446     can be printed out.  Fixes Debian bug #271672.  This can be done by allo‐
447     cating strings in a string pool, storing the string pool at the end of
448     the magic file and converting all the string pointers to relative offsets
449     from the string pool.
450
451     Add syntax for relative offsets after current level (Debian bug #466037).
452
453     Make file -ki work, i.e. give multiple MIME types.
454
455     Add a zip library so we can peek inside Office2007 documents to print
456     more details about their contents.
457
458     Add an option to print URLs for the sources of the file descriptions.
459
460     Combine script searches and add a way to map executable names to MIME
461     types (e.g. have a magic value for !:mime which causes the resulting
462     string to be looked up in a table).  This would avoid adding the same
463     magic repeatedly for each new hash-bang interpreter.
464
465     When a file descriptor is available, we can skip and adjust the buffer
466     instead of the hacky buffer management we do now.
467
468     Fix “name” and “use” to check for consistency at compile time (duplicate
469     “name”, “use” pointing to undefined “name” ).  Make “name” / “use” more
470     efficient by keeping a sorted list of names.  Special-case ^ to flip
471     endianness in the parser so that it does not have to be escaped, and doc‐
472     ument it.
473
474     If the offsets specified internally in the file exceed the buffer size (
475     HOWMANY variable in file.h), then we don't seek to that offset, but we
476     give up.  It would be better if buffer managements was done when the file
477     descriptor is available so move around the file.  One must be careful
478     though because this has performance (and thus security considerations).
479

AVAILABILITY

481     You can obtain the original author's latest version by anonymous FTP on
482     ftp.astron.com in the directory /pub/file/file-X.YZ.tar.gz.
483
484BSD                            February 18, 2019                           BSD
Impressum