1418 lines
25 KiB
HTML
1418 lines
25 KiB
HTML
|
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
|
<HTML><HEAD><TITLE>Man page of FILE</TITLE>
|
|
</HEAD><BODY>
|
|
<H1>FILE</H1>
|
|
Section: User Commands (1)<BR><A HREF="#index">Index</A>
|
|
<A HREF="/cgi-bin/man/man2html">Return to Main Contents</A><HR>
|
|
<BR>BSD mandoc<BR>
|
|
<A NAME="lbAB"> </A>
|
|
<H2>NAME</H2>
|
|
|
|
|
|
|
|
<B>file</B>
|
|
|
|
- determine file type
|
|
|
|
<A NAME="lbAC"> </A>
|
|
<H2>SYNOPSIS</H2>
|
|
|
|
<B></B>
|
|
|
|
|
|
-words
|
|
|
|
[-<B>bcdEhiklLNnprsSvzZ0</B>
|
|
|
|
]
|
|
|
|
[-<B>-apple</B>
|
|
|
|
|
|
|
|
]
|
|
|
|
[-<B>-extension</B>
|
|
|
|
|
|
|
|
]
|
|
|
|
[-<B>-mime-encoding</B>
|
|
|
|
|
|
|
|
]
|
|
|
|
[-<B>-mime-type</B>
|
|
|
|
|
|
|
|
]
|
|
|
|
[-<B>e </B><I>testname</I>
|
|
|
|
|
|
|
|
]
|
|
|
|
[-<B>F </B><I>separator</I>
|
|
|
|
|
|
|
|
]
|
|
|
|
[-<B>f </B><I>namefile</I>
|
|
|
|
|
|
|
|
]
|
|
|
|
[-<B>m </B><I>magicfiles</I>
|
|
|
|
|
|
|
|
]
|
|
|
|
[-<B>P </B><I>name=value</I>
|
|
|
|
|
|
|
|
]
|
|
|
|
<I>file ...</I>
|
|
|
|
|
|
<BR><B></B>
|
|
|
|
|
|
|
|
-<B>C</B>
|
|
|
|
[-<B>m </B><I>magicfiles</I>
|
|
|
|
|
|
|
|
]
|
|
|
|
<BR><B></B>
|
|
|
|
|
|
[-<B>-help</B>
|
|
|
|
|
|
|
|
]
|
|
|
|
<A NAME="lbAD"> </A>
|
|
<H2>DESCRIPTION</H2>
|
|
|
|
This manual page documents version 5.38 of the
|
|
<B></B>
|
|
|
|
|
|
command.
|
|
<P>
|
|
|
|
<B></B>
|
|
|
|
|
|
tests each argument in an attempt to classify it.
|
|
There are three sets of tests, performed in this order:
|
|
filesystem tests, magic tests, and language tests.
|
|
The
|
|
<I>first</I>
|
|
|
|
test that succeeds causes the file type to be printed.
|
|
<P>
|
|
|
|
The type printed will usually contain one of the words
|
|
<I>text</I>
|
|
|
|
(the file contains only
|
|
printing characters and a few common control
|
|
characters and is probably safe to read on an
|
|
<B>ASCII</B>
|
|
|
|
terminal),
|
|
<I>executable</I>
|
|
|
|
(the file contains the result of compiling a program
|
|
in a form understandable to some
|
|
<B>UNIX</B>
|
|
|
|
kernel or another),
|
|
or
|
|
<I>data</I>
|
|
|
|
meaning anything else (data is usually
|
|
``binary''
|
|
|
|
or non-printable).
|
|
Exceptions are well-known file formats (core files, tar archives)
|
|
that are known to contain binary data.
|
|
When adding local definitions to /etc/magic, make sure to
|
|
<I>preserve these keywords</I>
|
|
|
|
|
|
Users depend on knowing 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''
|
|
|
|
|
|
<P>
|
|
|
|
The filesystem tests are based on examining the return from a
|
|
<A HREF="/cgi-bin/man/man2html?2+stat">stat</A>(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
|
|
In sys/stat.h .
|
|
|
|
<P>
|
|
|
|
The magic tests are used to check for files with data in
|
|
particular fixed formats.
|
|
The canonical example of this is a binary executable (compiled program)
|
|
<B>a.out</B>
|
|
|
|
file, whose format is defined in
|
|
In elf.h ,
|
|
|
|
In a.out.h
|
|
|
|
and possibly
|
|
In 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
|
|
<B>UNIX</B>
|
|
|
|
operating system
|
|
that the file is a binary executable, and which of several types thereof.
|
|
The concept of a
|
|
``magic''
|
|
|
|
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 identifying these files is read from /etc/magic
|
|
and the compiled
|
|
magic file
|
|
/usr/share/misc/magic.mgc
|
|
|
|
|
|
or the files in the directory
|
|
/usr/share/misc/magic
|
|
|
|
if the compiled file does not exist.
|
|
In addition, if
|
|
$HOME/.magic.mgc
|
|
|
|
or
|
|
$HOME/.magic
|
|
|
|
exists, it will be used in preference to the system magic files.
|
|
<P>
|
|
|
|
If a file does not match any of the entries in the magic file,
|
|
it is examined to see if it seems to be a text file.
|
|
ASCII, ISO-8859-x, non-ISO 8-bit extended-ASCII character sets
|
|
(such as those used on Macintosh and IBM PC systems),
|
|
UTF-8-encoded Unicode, UTF-16-encoded Unicode, and EBCDIC
|
|
character sets can be distinguished by the different
|
|
ranges and sequences of bytes that constitute printable text
|
|
in each set.
|
|
If a file passes any of these tests, 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 terminal;
|
|
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,
|
|
<B></B>
|
|
|
|
|
|
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.
|
|
<P>
|
|
|
|
Once
|
|
<B></B>
|
|
|
|
|
|
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 particular strings (cf.
|
|
In names.h )
|
|
|
|
that can appear anywhere in the first few blocks of a file.
|
|
For example, the keyword
|
|
<I>.br</I>
|
|
|
|
indicates that the file is most likely a
|
|
<A HREF="/cgi-bin/man/man2html?1+troff">troff</A>(1)
|
|
|
|
|
|
input file, just as the keyword
|
|
<I>struct</I>
|
|
|
|
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
|
|
<A HREF="/cgi-bin/man/man2html?1+tar">tar</A>(1)
|
|
|
|
|
|
archives, JSON files).
|
|
<P>
|
|
|
|
Any file that cannot be identified as having been written
|
|
in any of the character sets listed above is simply said to be
|
|
``data''
|
|
|
|
|
|
<A NAME="lbAE"> </A>
|
|
<H2>OPTIONS</H2>
|
|
|
|
<DL COMPACT>
|
|
<P>
|
|
|
|
<DT id="1"><B>--apple</B>
|
|
|
|
|
|
|
|
|
|
<DD>
|
|
Causes the file command to output the file type and creator code as
|
|
used by older MacOS versions.
|
|
The code consists of eight letters,
|
|
the first describing the file type, the latter the creator.
|
|
This option works properly only for file formats that have the
|
|
apple-style output defined.
|
|
<DT id="2"><B>-b , --brief</B>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<DD>
|
|
Do not prepend filenames to output lines (brief mode).
|
|
<DT id="3"><B>-C , --compile</B>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<DD>
|
|
Write a
|
|
magic.mgc
|
|
|
|
output file that contains a pre-parsed version of the magic file or directory.
|
|
<DT id="4"><B>-c , --checking-printout</B>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<DD>
|
|
Cause a checking printout of the parsed form of the magic file.
|
|
This is usually used in conjunction with the
|
|
-<B>m</B>
|
|
|
|
flag to debug a new magic file before installing it.
|
|
<DT id="5"><B>-d</B>
|
|
|
|
|
|
<DD>
|
|
Prints internal debugging information to stderr.
|
|
<DT id="6"><B>-E</B>
|
|
|
|
|
|
<DD>
|
|
On filesystem errors (file not found etc), instead of handling the error
|
|
as regular output as POSIX mandates and keep going, issue an error message
|
|
and exit.
|
|
<DT id="7"><B>-e , --exclude </B><I>testname</I>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<DD>
|
|
Exclude the test named in
|
|
<I>testname</I>
|
|
|
|
from the list of tests made to determine the file type.
|
|
Valid test names are:
|
|
<DL COMPACT>
|
|
<P>
|
|
|
|
<DT id="8"><B>apptype</B>
|
|
<DD>
|
|
<B>EMX</B>
|
|
|
|
application type (only on EMX).
|
|
<DT id="9"><B>ascii</B>
|
|
<DD>
|
|
Various types of text files (this test will try to guess the text
|
|
encoding, irrespective of the setting of the
|
|
`encoding'
|
|
|
|
option).
|
|
<DT id="10"><B>encoding</B>
|
|
<DD>
|
|
Different text encodings for soft magic tests.
|
|
<DT id="11"><B>tokens</B>
|
|
<DD>
|
|
Ignored for backwards compatibility.
|
|
<DT id="12"><B>cdf</B>
|
|
<DD>
|
|
Prints details of Compound Document Files.
|
|
<DT id="13"><B>compress</B>
|
|
<DD>
|
|
Checks for, and looks inside, compressed files.
|
|
<DT id="14"><B>csv</B>
|
|
<DD>
|
|
Checks Comma Separated Value files.
|
|
<DT id="15"><B>elf</B>
|
|
<DD>
|
|
Prints ELF file details, provided soft magic tests are enabled and the
|
|
elf magic is found.
|
|
<DT id="16"><B>json</B>
|
|
<DD>
|
|
Examines JSON (RFC-7159) files by parsing them for compliance.
|
|
<DT id="17"><B>soft</B>
|
|
<DD>
|
|
Consults magic files.
|
|
<DT id="18"><B>tar</B>
|
|
<DD>
|
|
Examines tar files by verifying the checksum of the 512 byte tar header.
|
|
Excluding this test can provide more detailed content description by using
|
|
the soft magic method.
|
|
<DT id="19"><B>text</B>
|
|
<DD>
|
|
A synonym for
|
|
`ascii'
|
|
|
|
|
|
</DL>
|
|
<P>
|
|
|
|
<DT id="20"><B>--extension</B>
|
|
|
|
|
|
|
|
|
|
<DD>
|
|
Print a slash-separated list of valid extensions for the file type found.
|
|
<DT id="21"><B>-F , --separator </B><I>separator</I>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<DD>
|
|
Use the specified string as the separator between the filename and the
|
|
file result returned.
|
|
Defaults to
|
|
`:'
|
|
|
|
|
|
<DT id="22"><B>-f , --files-from </B><I>namefile</I>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<DD>
|
|
Read the names of the files to be examined from
|
|
<I>namefile</I>
|
|
|
|
(one per line)
|
|
before the argument list.
|
|
Either
|
|
<I>namefile</I>
|
|
|
|
or at least one filename argument must be present;
|
|
to test the standard input, use
|
|
`-'
|
|
|
|
as a filename argument.
|
|
Please note that
|
|
<I>namefile</I>
|
|
|
|
is unwrapped and the enclosed filenames are processed when this option is
|
|
encountered and before any further options processing is done.
|
|
This allows one to process multiple lists of files with different command line
|
|
arguments on the same
|
|
<B></B>
|
|
|
|
|
|
invocation.
|
|
Thus if you want to set the delimiter, you need to do it before you specify
|
|
the list of files, like:
|
|
``-<B>F </B><I>@ -</I><B>f </B><I>namefile</I>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
''
|
|
|
|
|
|
instead of:
|
|
``-<B>f </B><I>namefile -</I><B>F </B><I>file ...</I>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
''
|
|
|
|
|
|
<DT id="23"><B>-h , --no-dereference</B>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<DD>
|
|
option causes symlinks not to be followed
|
|
(on systems that support symbolic links).
|
|
This is the default if the environment variable
|
|
<B>POSIXLY_CORRECT</B>
|
|
|
|
is not defined.
|
|
<DT id="24"><B>-i , --mime</B>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<DD>
|
|
Causes the file command to output mime type strings rather than the more
|
|
traditional human readable ones.
|
|
Thus it may say
|
|
`text/plain; charset=us-ascii'
|
|
|
|
rather than
|
|
``ASCII text''
|
|
|
|
|
|
<DT id="25"><B>--mime-type , --mime-encoding</B>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<DD>
|
|
Like
|
|
-<B>i</B>
|
|
|
|
|
|
but print only the specified element(s).
|
|
<DT id="26"><B>-k , --keep-going</B>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<DD>
|
|
Don't stop at the first match, keep going.
|
|
Subsequent matches will be
|
|
have the string
|
|
`\012- '
|
|
|
|
prepended.
|
|
(If you want a newline, see the
|
|
-<B>r</B>
|
|
|
|
option.)
|
|
The magic pattern with the highest strength (see the
|
|
-<B>l</B>
|
|
|
|
option) comes first.
|
|
<DT id="27"><B>-l , --list</B>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<DD>
|
|
Shows a list of patterns and their strength sorted descending by
|
|
<A HREF="/cgi-bin/man/man2html?5+magic">magic</A>(5)
|
|
|
|
|
|
strength
|
|
which is used for the matching (see also the
|
|
-<B>k</B>
|
|
|
|
option).
|
|
<DT id="28"><B>-L , --dereference</B>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<DD>
|
|
option causes symlinks to be followed, as the like-named option in
|
|
<A HREF="/cgi-bin/man/man2html?1+ls">ls</A>(1)
|
|
|
|
|
|
(on systems that support symbolic links).
|
|
This is the default if the environment variable
|
|
<B>POSIXLY_CORRECT</B>
|
|
|
|
is defined.
|
|
<DT id="29"><B>-m , --magic-file </B><I>magicfiles</I>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<DD>
|
|
Specify an alternate list of files and directories containing magic.
|
|
This can be a single item, or a colon-separated list.
|
|
If a compiled magic file is found alongside a file or directory,
|
|
it will be used instead.
|
|
<DT id="30"><B>-N , --no-pad</B>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<DD>
|
|
Don't pad filenames so that they align in the output.
|
|
<DT id="31"><B>-n , --no-buffer</B>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<DD>
|
|
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.
|
|
<DT id="32"><B>-p , --preserve-date</B>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<DD>
|
|
On systems that support
|
|
<A HREF="/cgi-bin/man/man2html?3+utime">utime</A>(3)
|
|
|
|
|
|
or
|
|
<A HREF="/cgi-bin/man/man2html?2+utimes">utimes</A>(2),
|
|
|
|
|
|
attempt to preserve the access time of files analyzed, to pretend that
|
|
<B></B>
|
|
|
|
|
|
never read them.
|
|
<DT id="33"><B>-P , --parameter </B><I>name=value</I>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<DD>
|
|
Set various parameter limits.
|
|
<DL COMPACT>
|
|
<P>
|
|
|
|
<DT id="34"><B>Name Ta </B><B>Default Ta </B><B>Explanation</B>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<DD>
|
|
<DT id="35"><B>indir Ta </B>15 Ta recursion limit for indirect magic
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<DD>
|
|
<DT id="36"><B>name Ta </B>30 Ta use count limit for name/use magic
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<DD>
|
|
<DT id="37"><B>elf_notes Ta </B>256 Ta max ELF notes processed
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<DD>
|
|
<DT id="38"><B>elf_phnum Ta </B>128 Ta max ELF program sections processed
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<DD>
|
|
<DT id="39"><B>elf_shnum Ta </B>32768 Ta max ELF sections processed
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<DD>
|
|
<DT id="40"><B>regex Ta </B>8192 Ta length limit for regex searches
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<DD>
|
|
<DT id="41"><B>bytes Ta </B>1048576 Ta max number of bytes to read from file
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<DD>
|
|
</DL>
|
|
<P>
|
|
|
|
<DT id="42"><B>-r , --raw</B>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<DD>
|
|
Don't translate unprintable characters to \ooo.
|
|
Normally
|
|
<B></B>
|
|
|
|
|
|
translates unprintable characters to their octal representation.
|
|
<DT id="43"><B>-s , --special-files</B>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<DD>
|
|
Normally,
|
|
<B></B>
|
|
|
|
|
|
only attempts to read and determine the type of argument files which
|
|
<A HREF="/cgi-bin/man/man2html?2+stat">stat</A>(2)
|
|
|
|
|
|
reports are ordinary files.
|
|
This prevents problems, because reading special files may have peculiar
|
|
consequences.
|
|
Specifying the
|
|
-<B>s</B>
|
|
|
|
option causes
|
|
<B></B>
|
|
|
|
|
|
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
|
|
<B></B>
|
|
|
|
|
|
to disregard the file size as reported by
|
|
<A HREF="/cgi-bin/man/man2html?2+stat">stat</A>(2)
|
|
|
|
|
|
since on some systems it reports a zero size for raw disk partitions.
|
|
<DT id="44"><B>-S , --no-sandbox</B>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<DD>
|
|
On systems where libseccomp
|
|
( <A HREF="https://github.com/seccomp/libseccomp">https://github.com/seccomp/libseccomp</A>
|
|
|
|
|
|
is available, the
|
|
-<B>S</B>
|
|
|
|
flag disables sandboxing which is enabled by default.
|
|
This option is needed for file to execute external decompressing programs,
|
|
i.e. when the
|
|
-<B>z</B>
|
|
|
|
flag is specified and the built-in decompressors are not available.
|
|
On systems where sandboxing is not available, this option has no effect.
|
|
<P>
|
|
|
|
<I>Note:</I>
|
|
|
|
This Debian version of file was built without seccomp support, so this option
|
|
has no effect.
|
|
<DT id="45"><B>-v , --version</B>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<DD>
|
|
Print the version of the program and exit.
|
|
<DT id="46"><B>-z , --uncompress</B>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<DD>
|
|
Try to look inside compressed files.
|
|
<DT id="47"><B>-Z , --uncompress-noreport</B>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<DD>
|
|
Try to look inside compressed files, but report information about the contents
|
|
only not the compression.
|
|
<DT id="48"><B>-0 , --print0</B>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<DD>
|
|
Output a null character
|
|
`\0'
|
|
|
|
after the end of the filename.
|
|
Nice to
|
|
<A HREF="/cgi-bin/man/man2html?1+cut">cut</A>(1)
|
|
|
|
|
|
the output.
|
|
This does not affect the separator, which is still printed.
|
|
<P>
|
|
|
|
If this option is repeated more than once, then
|
|
<B></B>
|
|
|
|
|
|
prints just the filename followed by a NUL followed by the description
|
|
(or ERROR: text) followed by a second NUL for each entry.
|
|
<DT id="49"><B>--help</B>
|
|
|
|
|
|
<DD>
|
|
Print a help message and exit.
|
|
</DL>
|
|
<P>
|
|
|
|
<A NAME="lbAF"> </A>
|
|
<H2>ENVIRONMENT</H2>
|
|
|
|
The environment variable
|
|
<B>MAGIC</B>
|
|
|
|
can be used to set the default magic file name.
|
|
If that variable is set, then
|
|
<B></B>
|
|
|
|
|
|
will not attempt to open
|
|
$HOME/.magic
|
|
|
|
|
|
<B></B>
|
|
|
|
|
|
adds
|
|
``.mgc
|
|
|
|
''
|
|
|
|
to the value of this variable as appropriate.
|
|
The environment variable
|
|
<B>POSIXLY_CORRECT</B>
|
|
|
|
controls (on systems that support symbolic links), whether
|
|
<B></B>
|
|
|
|
|
|
will attempt to follow symlinks or not.
|
|
If set, then
|
|
<B></B>
|
|
|
|
|
|
follows symlink, otherwise it does not.
|
|
This is also controlled by the
|
|
-<B>L</B>
|
|
|
|
and
|
|
-<B>h</B>
|
|
|
|
options.
|
|
<A NAME="lbAG"> </A>
|
|
<H2>FILES</H2>
|
|
|
|
<DL COMPACT>
|
|
<P>
|
|
|
|
<DT id="50"><B>/usr/share/misc/magic.mgc
|
|
|
|
</B>
|
|
<DD>
|
|
Default compiled list of magic.
|
|
<DT id="51"><B>/usr/share/misc/magic
|
|
|
|
</B>
|
|
<DD>
|
|
Directory containing default magic files.
|
|
</DL>
|
|
<P>
|
|
|
|
<A NAME="lbAH"> </A>
|
|
<H2>EXIT STATUS</H2>
|
|
|
|
<B></B>
|
|
|
|
|
|
will exit with
|
|
<B>0</B>
|
|
|
|
if the operation was successful or
|
|
<B>>0</B>
|
|
|
|
if an error was encountered.
|
|
The following errors cause diagnostic messages, but don't affect the program
|
|
exit code (as POSIX requires), unless
|
|
-<B>E</B>
|
|
|
|
is specified:
|
|
<UL><P>
|
|
|
|
<LI>
|
|
|
|
A file cannot be found
|
|
<LI>
|
|
|
|
There is no permission to read a file
|
|
<LI>
|
|
|
|
The file type cannot be determined
|
|
</UL><P>
|
|
|
|
<A NAME="lbAI"> </A>
|
|
<H2>EXAMPLES</H2>
|
|
|
|
|
|
<BLOCKQUOTE>
|
|
<PRE>
|
|
$ file file.c file /dev/{wd0a,hda}
|
|
file.c: C program text
|
|
file: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV),
|
|
dynamically linked (uses shared libs), stripped
|
|
/dev/wd0a: block special (0/0)
|
|
/dev/hda: block special (3/0)
|
|
|
|
$ file -s /dev/wd0{b,d}
|
|
/dev/wd0b: data
|
|
/dev/wd0d: x86 boot sector
|
|
|
|
$ 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
|
|
/dev/hda8: Linux/i386 swap file
|
|
/dev/hda9: empty
|
|
/dev/hda10: empty
|
|
|
|
$ file -i file.c file /dev/{wd0a,hda}
|
|
file.c: text/x-c
|
|
file: application/x-executable
|
|
/dev/hda: application/x-not-regular-file
|
|
/dev/wd0a: application/x-not-regular-file
|
|
|
|
</PRE>
|
|
</BLOCKQUOTE>
|
|
|
|
<A NAME="lbAJ"> </A>
|
|
<H2>SEE ALSO</H2>
|
|
|
|
<A HREF="/cgi-bin/man/man2html?1+hexdump">hexdump</A>(1),
|
|
|
|
|
|
<A HREF="/cgi-bin/man/man2html?1+od">od</A>(1),
|
|
|
|
|
|
<A HREF="/cgi-bin/man/man2html?1+strings">strings</A>(1),
|
|
|
|
|
|
<A HREF="/cgi-bin/man/man2html?5+magic">magic</A>(5)
|
|
|
|
|
|
<A NAME="lbAK"> </A>
|
|
<H2>STANDARDS CONFORMANCE</H2>
|
|
|
|
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 behavior 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.
|
|
|
|
<P>
|
|
|
|
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,
|
|
|
|
<BLOCKQUOTE>
|
|
<PRE>
|
|
>10 string language impress (imPRESS data)
|
|
</PRE>
|
|
</BLOCKQUOTE>
|
|
|
|
<P>
|
|
|
|
in an existing magic file would have to be changed to
|
|
|
|
<BLOCKQUOTE>
|
|
<PRE>
|
|
>10 string language\ impress (imPRESS data)
|
|
</PRE>
|
|
</BLOCKQUOTE>
|
|
|
|
<P>
|
|
|
|
In addition, in this version, if a pattern string contains a backslash,
|
|
it must be escaped.
|
|
For example
|
|
|
|
<BLOCKQUOTE>
|
|
<PRE>
|
|
0 string \begindata Andrew Toolkit document
|
|
</PRE>
|
|
</BLOCKQUOTE>
|
|
|
|
<P>
|
|
|
|
in an existing magic file would have to be changed to
|
|
|
|
<BLOCKQUOTE>
|
|
<PRE>
|
|
0 string \\begindata Andrew Toolkit document
|
|
</PRE>
|
|
</BLOCKQUOTE>
|
|
|
|
<P>
|
|
|
|
SunOS releases 3.2 and later from Sun Microsystems include a
|
|
<B></B>
|
|
|
|
|
|
command derived from the System V one, but with some extensions.
|
|
This version differs from Sun's only in minor ways.
|
|
It includes the extension of the
|
|
`&'
|
|
|
|
operator, used as,
|
|
for example,
|
|
|
|
<BLOCKQUOTE>
|
|
<PRE>
|
|
>16 long&0x7fffffff >0 not stripped
|
|
</PRE>
|
|
</BLOCKQUOTE>
|
|
|
|
<A NAME="lbAL"> </A>
|
|
<H2>SECURITY</H2>
|
|
|
|
On systems where libseccomp
|
|
( <A HREF="https://github.com/seccomp/libseccomp">https://github.com/seccomp/libseccomp</A>
|
|
|
|
|
|
is available,
|
|
<B></B>
|
|
|
|
|
|
is enforces limiting system calls to only the ones necessary for the
|
|
operation of the program.
|
|
This enforcement does not provide any security benefit when
|
|
<B></B>
|
|
|
|
|
|
is asked to decompress input files running external programs with
|
|
the
|
|
-<B>z</B>
|
|
|
|
option.
|
|
To enable execution of external decompressors, one needs to disable
|
|
sandboxing using the
|
|
-<B>S</B>
|
|
|
|
flag.
|
|
<A NAME="lbAM"> </A>
|
|
<H2>MAGIC DIRECTORY</H2>
|
|
|
|
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.
|
|
<P>
|
|
|
|
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.
|
|
<A NAME="lbAN"> </A>
|
|
<H2>HISTORY</H2>
|
|
|
|
There has been a
|
|
<B></B>
|
|
|
|
|
|
command in every
|
|
<B>UNIX since at least Research Version 4</B>
|
|
|
|
(man page dated November, 1973).
|
|
The System V version introduced one significant major change:
|
|
the external list of magic types.
|
|
This slowed the program down slightly but made it a lot more flexible.
|
|
<P>
|
|
|
|
This program, based on the System V version,
|
|
was written by Ian Darwin
|
|
Aq <A HREF="mailto:ian@darwinsys.com">ian@darwinsys.com</A>
|
|
|
|
without looking at anybody else's source code.
|
|
<P>
|
|
|
|
John Gilmore revised the code extensively, making it better than
|
|
the first version.
|
|
Geoff Collyer found several inadequacies
|
|
and provided some magic file entries.
|
|
Contributions of the
|
|
`&'
|
|
|
|
operator by Rob McMahon,
|
|
Aq <A HREF="mailto:cudcv@warwick.ac.uk">cudcv@warwick.ac.uk</A> ,
|
|
|
|
1989.
|
|
<P>
|
|
|
|
Guy Harris,
|
|
Aq <A HREF="mailto:guy@netapp.com">guy@netapp.com</A> ,
|
|
|
|
made many changes from 1993 to the present.
|
|
<P>
|
|
|
|
Primary development and maintenance from 1990 to the present by
|
|
Christos Zoulas
|
|
Aq <A HREF="mailto:christos@astron.com">christos@astron.com</A> .
|
|
|
|
<P>
|
|
|
|
Altered by Chris Lowth
|
|
Aq <A HREF="mailto:chris@lowth.com">chris@lowth.com</A> ,
|
|
|
|
2000: handle the
|
|
-<B>i</B>
|
|
|
|
option to output mime type strings, using an alternative
|
|
magic file and internal logic.
|
|
<P>
|
|
|
|
Altered by Eric Fischer
|
|
Aq <A HREF="mailto:enf@pobox.com">enf@pobox.com</A> ,
|
|
|
|
July, 2000,
|
|
to identify character codes and attempt to identify the languages
|
|
of non-ASCII files.
|
|
<P>
|
|
|
|
Altered by Reuben Thomas
|
|
Aq <A HREF="mailto:rrt@sc3d.org">rrt@sc3d.org</A> ,
|
|
|
|
2007-2011, to improve MIME support, merge MIME and non-MIME magic,
|
|
support directories as well as files of magic, apply many bug fixes,
|
|
update and fix a lot of magic, improve the build system, improve the
|
|
documentation, and rewrite the Python bindings in pure Python.
|
|
<P>
|
|
|
|
The list of contributors to the
|
|
`magic'
|
|
|
|
directory (magic files)
|
|
is too long to include here.
|
|
You know who you are; thank you.
|
|
Many contributors are listed in the source files.
|
|
<A NAME="lbAO"> </A>
|
|
<H2>LEGAL NOTICE</H2>
|
|
|
|
Copyright (c) Ian F. Darwin, Toronto, Canada, 1986-1999.
|
|
Covered by the standard Berkeley Software Distribution copyright; see the file
|
|
COPYING in the source distribution.
|
|
<P>
|
|
|
|
The files
|
|
tar.h
|
|
|
|
and
|
|
is_tar.c
|
|
|
|
were written by John Gilmore from his public-domain
|
|
<A HREF="/cgi-bin/man/man2html?1+tar">tar</A>(1)
|
|
|
|
|
|
program, and are not covered by the above license.
|
|
<A NAME="lbAP"> </A>
|
|
<H2>BUGS</H2>
|
|
|
|
Please report bugs and send patches to the bug tracker at
|
|
<A HREF="https://bugs.astron.com/">https://bugs.astron.com/</A>
|
|
|
|
or the mailing list at
|
|
Aq <A HREF="mailto:file@astron.com">file@astron.com</A>
|
|
|
|
(visit
|
|
<A HREF="https://mailman.astron.com/mailman/listinfo/file">https://mailman.astron.com/mailman/listinfo/file</A>
|
|
|
|
first to subscribe).
|
|
<A NAME="lbAQ"> </A>
|
|
<H2>TODO</H2>
|
|
|
|
Fix output so that tests for MIME and APPLE flags are not needed all
|
|
over the place, and actual output is only done in one place.
|
|
This needs a design.
|
|
Suggestion: push possible outputs on to a list, then pick the
|
|
last-pushed (most specific, one hopes) value at the end, or
|
|
use a default if the list is empty.
|
|
This should not slow down evaluation.
|
|
<P>
|
|
|
|
The handling of
|
|
<B>MAGIC_CONTINUE</B>
|
|
|
|
and printing \012- between entries is clumsy and complicated; refactor
|
|
and centralize.
|
|
<P>
|
|
|
|
Some of the encoding logic is hard-coded in encoding.c and can be moved
|
|
to the magic files if we had a !:charset annotation
|
|
<P>
|
|
|
|
Continue to squash all magic bugs.
|
|
See Debian BTS for a good source.
|
|
<P>
|
|
|
|
Store arbitrarily long strings, for example for %s patterns, so that
|
|
they can be printed out.
|
|
Fixes Debian bug #271672.
|
|
This can be done by allocating strings in a string pool, storing the
|
|
string pool at the end of the magic file and converting all the string
|
|
pointers to relative offsets from the string pool.
|
|
<P>
|
|
|
|
Add syntax for relative offsets after current level (Debian bug #466037).
|
|
<P>
|
|
|
|
Make file -ki work, i.e. give multiple MIME types.
|
|
<P>
|
|
|
|
Add a zip library so we can peek inside Office2007 documents to
|
|
print more details about their contents.
|
|
<P>
|
|
|
|
Add an option to print URLs for the sources of the file descriptions.
|
|
<P>
|
|
|
|
Combine script searches and add a way to map executable names to MIME
|
|
types (e.g. have a magic value for !:mime which causes the resulting
|
|
string to be looked up in a table).
|
|
This would avoid adding the same magic repeatedly for each new
|
|
hash-bang interpreter.
|
|
<P>
|
|
|
|
When a file descriptor is available, we can skip and adjust the buffer
|
|
instead of the hacky buffer management we do now.
|
|
<P>
|
|
|
|
Fix
|
|
``name''
|
|
|
|
and
|
|
``use''
|
|
|
|
to check for consistency at compile time (duplicate
|
|
``name''
|
|
|
|
|
|
``use''
|
|
|
|
pointing to undefined
|
|
``name''
|
|
|
|
).
|
|
Make
|
|
``name''
|
|
|
|
/
|
|
``use''
|
|
|
|
more efficient by keeping a sorted list of names.
|
|
Special-case ^ to flip endianness in the parser so that it does not
|
|
have to be escaped, and document it.
|
|
<P>
|
|
|
|
If the offsets specified internally in the file exceed the buffer size
|
|
(
|
|
<B>HOWMANY</B>
|
|
|
|
variable in file.h), then we don't seek to that offset, but we give up.
|
|
It would be better if buffer managements was done when the file descriptor
|
|
is available so move around the file.
|
|
One must be careful though because this has performance (and thus security
|
|
considerations).
|
|
<A NAME="lbAR"> </A>
|
|
<H2>AVAILABILITY</H2>
|
|
|
|
You can obtain the original author's latest version by anonymous FTP
|
|
on
|
|
<A HREF="ftp://ftp.astron.com">ftp.astron.com</A>
|
|
|
|
in the directory
|
|
/pub/file/file-X.YZ.tar.gz
|
|
|
|
|
|
<P>
|
|
|
|
<HR>
|
|
<A NAME="index"> </A><H2>Index</H2>
|
|
<DL>
|
|
<DT id="52"><A HREF="#lbAB">NAME</A><DD>
|
|
<DT id="53"><A HREF="#lbAC">SYNOPSIS</A><DD>
|
|
<DT id="54"><A HREF="#lbAD">DESCRIPTION</A><DD>
|
|
<DT id="55"><A HREF="#lbAE">OPTIONS</A><DD>
|
|
<DT id="56"><A HREF="#lbAF">ENVIRONMENT</A><DD>
|
|
<DT id="57"><A HREF="#lbAG">FILES</A><DD>
|
|
<DT id="58"><A HREF="#lbAH">EXIT STATUS</A><DD>
|
|
<DT id="59"><A HREF="#lbAI">EXAMPLES</A><DD>
|
|
<DT id="60"><A HREF="#lbAJ">SEE ALSO</A><DD>
|
|
<DT id="61"><A HREF="#lbAK">STANDARDS CONFORMANCE</A><DD>
|
|
<DT id="62"><A HREF="#lbAL">SECURITY</A><DD>
|
|
<DT id="63"><A HREF="#lbAM">MAGIC DIRECTORY</A><DD>
|
|
<DT id="64"><A HREF="#lbAN">HISTORY</A><DD>
|
|
<DT id="65"><A HREF="#lbAO">LEGAL NOTICE</A><DD>
|
|
<DT id="66"><A HREF="#lbAP">BUGS</A><DD>
|
|
<DT id="67"><A HREF="#lbAQ">TODO</A><DD>
|
|
<DT id="68"><A HREF="#lbAR">AVAILABILITY</A><DD>
|
|
</DL>
|
|
<HR>
|
|
This document was created by
|
|
<A HREF="/cgi-bin/man/man2html">man2html</A>,
|
|
using the manual pages.<BR>
|
|
Time: 00:05:12 GMT, March 31, 2021
|
|
</BODY>
|
|
</HTML>
|