Merge branch 'vendor/FILE'
[dragonfly.git] / contrib / file / doc / file.man
1 .\" $File: file.man,v 1.82 2009/11/04 22:30:34 christos Exp $
2 .Dd October 9, 2008
3 .Dt FILE __CSECTION__
4 .Os
5 .Sh NAME
6 .Nm file
7 .Nd determine file type
8 .Sh SYNOPSIS
9 .Nm
10 .Bk -words
11 .Op Fl bchikLNnprsvz0
12 .Op Fl -apple
13 .Op Fl -mime-encoding
14 .Op Fl -mime-type
15 .Op Fl e Ar testname
16 .Op Fl F Ar separator
17 .Op Fl f Ar namefile
18 .Op Fl m Ar magicfiles
19 .Ar
20 .Ek -words
21 .Nm
22 .Fl C
23 .Op Fl m Ar magicfiles
24 .Nm
25 .Op Fl -help
26 .Sh DESCRIPTION
27 This manual page documents version __VERSION__ of the
28 .Nm
29 command.
30 .Pp
31 .Nm
32 tests each argument in an attempt to classify it.
33 There are three sets of tests, performed in this order:
34 filesystem tests, magic tests, and language tests.
35 The
36 .Em first
37 test that succeeds causes the file type to be printed.
38 .Pp
39 The type printed will usually contain one of the words
40 .Em text
41 (the file contains only
42 printing characters and a few common control
43 characters and is probably safe to read on an
44 .Dv ASCII
45 terminal),
46 .Em executable
47 (the file contains the result of compiling a program
48 in a form understandable to some
49 .Dv UNIX
50 kernel or another),
51 or
52 .Em data
53 meaning anything else (data is usually
54 .Sq binary
55 or non-printable).
56 Exceptions are well-known file formats (core files, tar archives)
57 that are known to contain binary data.
58 When modifying magic files or the program itself, make sure to
59 .Em "preserve these keywords" .
60 Users depend on knowing that all the readable files in a directory
61 have the word
62 .Sq text
63 printed.
64 Don't do as Berkeley did and change
65 .Sq shell commands text
66 to
67 .Sq shell script .
68 .Pp
69 The filesystem tests are based on examining the return from a
70 .Xr stat 2
71 system call.
72 The program checks to see if the file is empty,
73 or if it's some sort of special file.
74 Any known file types appropriate to the system you are running on
75 (sockets, symbolic links, or named pipes (FIFOs) on those systems that
76 implement them)
77 are intuited if they are defined in
78 the system header file
79 .In sys/stat.h .
80 .Pp
81 The magic tests are used to check for files with data in
82 particular fixed formats.
83 The canonical example of this is a binary executable (compiled program)
84 .Dv a.out
85 file, whose format is defined in
86 .In elf.h ,
87 .In a.out.h
88 and possibly
89 .In exec.h
90 in the standard include directory.
91 These files have a
92 .Sq "magic number"
93 stored in a particular place
94 near the beginning of the file that tells the
95 .Dv UNIX operating system
96 that the file is a binary executable, and which of several types thereof.
97 The concept of a
98 .Sq "magic"
99 has been applied by extension to data files.
100 Any file with some invariant identifier at a small fixed
101 offset into the file can usually be described in this way.
102 The information identifying these files is read from the compiled
103 magic file
104 .Pa __MAGIC__.mgc ,
105 or the files in the directory
106 .Pa __MAGIC__
107 if the compiled file does not exist. In addition, if
108 .Pa $HOME/.magic.mgc
109 or
110 .Pa $HOME/.magic
111 exists, it will be used in preference to the system magic files.
112 .Pp
113 If a file does not match any of the entries in the magic file,
114 it is examined to see if it seems to be a text file.
115 ASCII, ISO-8859-x, non-ISO 8-bit extended-ASCII character sets
116 (such as those used on Macintosh and IBM PC systems),
117 UTF-8-encoded Unicode, UTF-16-encoded Unicode, and EBCDIC
118 character sets can be distinguished by the different
119 ranges and sequences of bytes that constitute printable text
120 in each set.
121 If a file passes any of these tests, its character set is reported.
122 ASCII, ISO-8859-x, UTF-8, and extended-ASCII files are identified
123 as
124 .Sq text
125 because they will be mostly readable on nearly any terminal;
126 UTF-16 and EBCDIC are only
127 .Sq character data
128 because, while
129 they contain text, it is text that will require translation
130 before it can be read.
131 In addition,
132 .Nm
133 will attempt to determine other characteristics of text-type files.
134 If the lines of a file are terminated by CR, CRLF, or NEL, instead
135 of the Unix-standard LF, this will be reported.
136 Files that contain embedded escape sequences or overstriking
137 will also be identified.
138 .Pp
139 Once
140 .Nm
141 has determined the character set used in a text-type file,
142 it will
143 attempt to determine in what language the file is written.
144 The language tests look for particular strings (cf.
145 .In names.h
146 ) that can appear anywhere in the first few blocks of a file.
147 For example, the keyword
148 .Em .br
149 indicates that the file is most likely a
150 .Xr troff 1
151 input file, just as the keyword
152 .Em struct
153 indicates a C program.
154 These tests are less reliable than the previous
155 two groups, so they are performed last.
156 The language test routines also test for some miscellany
157 (such as
158 .Xr tar 1
159 archives).
160 .Pp
161 Any file that cannot be identified as having been written
162 in any of the character sets listed above is simply said to be
163 .Sq data .
164 .Sh OPTIONS
165 .Bl -tag -width indent
166 .It Fl b , -brief
167 Do not prepend filenames to output lines (brief mode).
168 .It Fl C , -compile
169 Write a
170 .Pa magic.mgc
171 output file that contains a pre-parsed version of the magic file or directory.
172 .It Fl c , -checking-printout
173 Cause a checking printout of the parsed form of the magic file.
174 This is usually used in conjunction with the
175 .Fl m
176 flag to debug a new magic file before installing it.
177 .It Fl e , -exclude Ar testname
178 Exclude the test named in
179 .Ar testname
180 from the list of tests made to determine the file type. Valid test names
181 are:
182 .Bl -tag -width compress
183 .It apptype
184 .Dv EMX
185 application type (only on EMX).
186 .It text
187 Various types of text files (this test will try to guess the text encoding, irrespective of the setting of the
188 .Sq encoding
189 option).
190 .It encoding
191 Different text encodings for soft magic tests.
192 .It tokens
193 Looks for known tokens inside text files.
194 .It cdf
195 Prints details of Compound Document Files.
196 .It compress
197 Checks for, and looks inside, compressed files.
198 .It elf
199 Prints ELF file details.
200 .It soft
201 Consults magic files.
202 .It tar
203 Examines tar files.
204 .El
205 .It Fl F , -separator Ar separator
206 Use the specified string as the separator between the filename and the
207 file result returned. Defaults to
208 .Sq \&: .
209 .It Fl f , -files-from Ar namefile
210 Read the names of the files to be examined from
211 .Ar namefile
212 (one per line)
213 before the argument list.
214 Either
215 .Ar namefile
216 or at least one filename argument must be present;
217 to test the standard input, use
218 .Sq -
219 as a filename argument.
220 .It Fl h , -no-dereference
221 option causes symlinks not to be followed
222 (on systems that support symbolic links). This is the default if the
223 environment variable
224 .Dv POSIXLY_CORRECT
225 is not defined.
226 .It Fl i , -mime
227 Causes the file command to output mime type strings rather than the more
228 traditional human readable ones. Thus it may say
229 .Sq text/plain; charset=us-ascii
230 rather than
231 .Sq ASCII text .
232 In order for this option to work, file changes the way
233 it handles files recognized by the command itself (such as many of the
234 text file types, directories etc), and makes use of an alternative
235 .Sq magic
236 file.
237 (See the FILES section, below).
238 .It Fl -mime-type , -mime-encoding
239 Like
240 .Fl i ,
241 but print only the specified element(s).
242 .It Fl k , -keep-going
243 Don't stop at the first match, keep going. Subsequent matches will be
244 have the string
245 .Sq "\[rs]012\- "
246 prepended.
247 (If you want a newline, see the
248 .Sq "\-r"
249 option.)
250 .It Fl L , -dereference
251 option causes symlinks to be followed, as the like-named option in
252 .Xr ls 1
253 (on systems that support symbolic links).
254 This is the default if the environment variable
255 .Dv POSIXLY_CORRECT
256 is defined.
257 .It Fl m , -magic-file Ar magicfiles
258 Specify an alternate list of files and directories containing magic.
259 This can be a single item, or a colon-separated list.
260 If a compiled magic file is found alongside a file or directory, it will be used instead.
261 .It Fl N , -no-pad
262 Don't pad filenames so that they align in the output.
263 .It Fl n , -no-buffer
264 Force stdout to be flushed after checking each file.
265 This is only useful if checking a list of files.
266 It is intended to be used by programs that want filetype output from a pipe.
267 .It Fl p , -preserve-date
268 On systems that support
269 .Xr utime 2
270 or
271 .Xr utimes 2 ,
272 attempt to preserve the access time of files analyzed, to pretend that
273 .Nm
274 never read them.
275 .It Fl r , -raw
276 Don't translate unprintable characters to \eooo.
277 Normally
278 .Nm
279 translates unprintable characters to their octal representation.
280 .It Fl s , -special-files
281 Normally,
282 .Nm
283 only attempts to read and determine the type of argument files which
284 .Xr stat 2
285 reports are ordinary files.
286 This prevents problems, because reading special files may have peculiar
287 consequences.
288 Specifying the
289 .Fl s
290 option causes
291 .Nm
292 to also read argument files which are block or character special files.
293 This is useful for determining the filesystem types of the data in raw
294 disk partitions, which are block special files.
295 This option also causes
296 .Nm
297 to disregard the file size as reported by
298 .Xr stat 2
299 since on some systems it reports a zero size for raw disk partitions.
300 .It Fl v , -version
301 Print the version of the program and exit.
302 .It Fl z , -uncompress
303 Try to look inside compressed files.
304 .It Fl 0 , -print0
305 Output a null character
306 .Sq \e0
307 after the end of the filename. Nice to
308 .Xr cut 1
309 the output. This does not affect the separator which is still printed.
310 .It Fl -help
311 Print a help message and exit.
312 .El
313 .Sh FILES
314 .Bl -tag -width __MAGIC__.mgc -compact
315 .It Pa __MAGIC__.mgc
316 Default compiled list of magic.
317 .It Pa __MAGIC__
318 Directory containing default magic files.
319 .El
320 .Sh ENVIRONMENT
321 The environment variable
322 .Dv MAGIC
323 can be used to set the default magic file name.
324 If that variable is set, then
325 .Nm
326 will not attempt to open
327 .Pa $HOME/.magic .
328 .Nm
329 adds
330 .Sq .mgc
331 to the value of this variable as appropriate.
332 The environment variable
333 .Dv POSIXLY_CORRECT
334 controls (on systems that support symbolic links), whether
335 .Nm
336 will attempt to follow symlinks or not. If set, then
337 .Nm
338 follows symlink, otherwise it does not. This is also controlled
339 by the
340 .Fl L
341 and
342 .Fl h
343 options.
344 .Sh SEE ALSO
345 .Xr magic __FSECTION__ ,
346 .Xr strings 1 ,
347 .Xr od 1 ,
348 .Xr hexdump 1,
349 .Xr file 1posix
350 .Sh STANDARDS CONFORMANCE
351 This program is believed to exceed the System V Interface Definition
352 of FILE(CMD), as near as one can determine from the vague language
353 contained therein.
354 Its behavior is mostly compatible with the System V program of the same name.
355 This version knows more magic, however, so it will produce
356 different (albeit more accurate) output in many cases.
357 .\" URL: http://www.opengroup.org/onlinepubs/009695399/utilities/file.html
358 .Pp
359 The one significant difference
360 between this version and System V
361 is that this version treats any white space
362 as a delimiter, so that spaces in pattern strings must be escaped.
363 For example,
364 .Bd -literal -offset indent
365 >10     string  language impress\       (imPRESS data)
366 .Ed
367 .Pp
368 in an existing magic file would have to be changed to
369 .Bd -literal -offset indent
370 >10     string  language\e impress      (imPRESS data)
371 .Ed
372 .Pp
373 In addition, in this version, if a pattern string contains a backslash,
374 it must be escaped.
375 For example
376 .Bd -literal -offset indent
377 0       string          \ebegindata     Andrew Toolkit document
378 .Ed
379 .Pp
380 in an existing magic file would have to be changed to
381 .Bd -literal -offset indent
382 0       string          \e\ebegindata   Andrew Toolkit document
383 .Ed
384 .Pp
385 SunOS releases 3.2 and later from Sun Microsystems include a
386 .Nm
387 command derived from the System V one, but with some extensions.
388 My version differs from Sun's only in minor ways.
389 It includes the extension of the
390 .Sq &
391 operator, used as,
392 for example,
393 .Bd -literal -offset indent
394 >16     long&0x7fffffff >0              not stripped
395 .Ed
396 .Sh MAGIC DIRECTORY
397 The magic file entries have been collected from various sources,
398 mainly USENET, and contributed by various authors.
399 Christos Zoulas (address below) will collect additional
400 or corrected magic file entries.
401 A consolidation of magic file entries
402 will be distributed periodically.
403 .Pp
404 The order of entries in the magic file is significant.
405 Depending on what system you are using, the order that
406 they are put together may be incorrect.
407 If your old
408 .Nm
409 command uses a magic file,
410 keep the old magic file around for comparison purposes
411 (rename it to
412 .Pa __MAGIC__.orig ).
413 .Sh EXAMPLES
414 .Bd -literal -offset indent
415 $ file file.c file /dev/{wd0a,hda}
416 file.c:   C program text
417 file:     ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV),
418           dynamically linked (uses shared libs), stripped
419 /dev/wd0a: block special (0/0)
420 /dev/hda: block special (3/0)
421
422 $ file -s /dev/wd0{b,d}
423 /dev/wd0b: data
424 /dev/wd0d: x86 boot sector
425
426 $ file -s /dev/hda{,1,2,3,4,5,6,7,8,9,10}
427 /dev/hda:   x86 boot sector
428 /dev/hda1:  Linux/i386 ext2 filesystem
429 /dev/hda2:  x86 boot sector
430 /dev/hda3:  x86 boot sector, extended partition table
431 /dev/hda4:  Linux/i386 ext2 filesystem
432 /dev/hda5:  Linux/i386 swap file
433 /dev/hda6:  Linux/i386 swap file
434 /dev/hda7:  Linux/i386 swap file
435 /dev/hda8:  Linux/i386 swap file
436 /dev/hda9:  empty
437 /dev/hda10: empty
438
439 $ file -i file.c file /dev/{wd0a,hda}
440 file.c:      text/x-c
441 file:        application/x-executable
442 /dev/hda:    application/x-not-regular-file
443 /dev/wd0a:   application/x-not-regular-file
444
445 .Ed
446 .Sh HISTORY
447 There has been a
448 .Nm
449 command in every
450 .Dv UNIX since at least Research Version 4
451 (man page dated November, 1973).
452 The System V version introduced one significant major change:
453 the external list of magic types.
454 This slowed the program down slightly but made it a lot more flexible.
455 .Pp
456 This program, based on the System V version,
457 was written by Ian Darwin <ian@darwinsys.com>
458 without looking at anybody else's source code.
459 .Pp
460 John Gilmore revised the code extensively, making it better than
461 the first version.
462 Geoff Collyer found several inadequacies
463 and provided some magic file entries.
464 Contributions by the `&' operator by Rob McMahon, cudcv@warwick.ac.uk, 1989.
465 .Pp
466 Guy Harris, guy@netapp.com, made many changes from 1993 to the present.
467 .Pp
468 Primary development and maintenance from 1990 to the present by
469 Christos Zoulas (christos@astron.com).
470 .Pp
471 Altered by Chris Lowth, chris@lowth.com, 2000:
472 Handle the
473 .Fl i
474 option to output mime type strings, using an alternative
475 magic file and internal logic.
476 .Pp
477 Altered by Eric Fischer (enf@pobox.com), July, 2000,
478 to identify character codes and attempt to identify the languages
479 of non-ASCII files.
480 .Pp
481 Altered by Reuben Thomas (rrt@sc3d.org), 2007 to 2008, to improve MIME
482 support and merge MIME and non-MIME magic, support directories as well
483 as files of magic, apply many bug fixes and improve the build system.
484 .Pp
485 The list of contributors to the
486 .Sq magic
487 directory (magic files)
488 is too long to include here.
489 You know who you are; thank you.
490 Many contributors are listed in the source files.
491 .Sh LEGAL NOTICE
492 Copyright (c) Ian F. Darwin, Toronto, Canada, 1986-1999.
493 Covered by the standard Berkeley Software Distribution copyright; see the file
494 LEGAL.NOTICE in the source distribution.
495 .Pp
496 The files
497 .Dv tar.h
498 and
499 .Dv is_tar.c
500 were written by John Gilmore from his public-domain
501 .Xr tar 1
502 program, and are not covered by the above license.
503 .Sh BUGS
504 .Pp
505 There must be a better way to automate the construction of the Magic
506 file from all the glop in Magdir.
507 What is it?
508 .Pp
509 .Nm
510 uses several algorithms that favor speed over accuracy,
511 thus it can be misled about the contents of
512 text
513 files.
514 .Pp
515 The support for text files (primarily for programming languages)
516 is simplistic, inefficient and requires recompilation to update.
517 .Pp
518 The list of keywords in
519 .Dv ascmagic
520 probably belongs in the Magic file.
521 This could be done by using some keyword like
522 .Sq *
523 for the offset value.
524 .Pp
525 Complain about conflicts in the magic file entries.
526 Make a rule that the magic entries sort based on file offset rather
527 than position within the magic file?
528 .Pp
529 The program should provide a way to give an estimate
530 of
531 .Sq how good
532 a guess is.
533 We end up removing guesses (e.g.
534 .Sq From\
535 as first 5 chars of file) because
536 they are not as good as other guesses (e.g.
537 .Sq Newsgroups:
538 versus
539 .Sq Return-Path:
540 ).
541 Still, if the others don't pan out, it should be possible to use the
542 first guess.
543 .Pp
544 This manual page, and particularly this section, is too long.
545 .Sh RETURN CODE
546 .Nm
547 returns 0 on success, and non-zero on error.
548 .Sh AVAILABILITY
549 You can obtain the original author's latest version by anonymous FTP
550 on
551 .Dv ftp.astron.com
552 in the directory
553 .Dv /pub/file/file-X.YZ.tar.gz