mirror of https://github.com/mkerrisk/man-pages
787 lines
24 KiB
Groff
787 lines
24 KiB
Groff
.\" Copyright (c) 2001-2003 The Open Group, All Rights Reserved
|
|
.TH "FILE" P 2003 "IEEE/The Open Group" "POSIX Programmer's Manual"
|
|
.\" file
|
|
.SH NAME
|
|
file \- determine file type
|
|
.SH SYNOPSIS
|
|
.LP
|
|
\fBfile\fP \fB[\fP\fB-dh\fP\fB][\fP\fB-M\fP \fIfile\fP\fB][\fP\fB-m\fP
|
|
\fIfile\fP\fB]\fP
|
|
\fIfile\fP \fB...
|
|
.br
|
|
.sp
|
|
file -i\fP \fB[\fP\fB-h\fP\fB]\fP \fIfile\fP \fB... \fP
|
|
\fB
|
|
.br
|
|
\fP
|
|
.SH DESCRIPTION
|
|
.LP
|
|
The \fIfile\fP utility shall perform a series of tests in sequence
|
|
on each specified \fIfile\fP in an attempt to classify
|
|
it:
|
|
.IP " 1." 4
|
|
If \fIfile\fP does not exist, cannot be read, or its file status could
|
|
not be determined, the output shall indicate that the
|
|
file was processed, but that its type could not be determined.
|
|
.LP
|
|
.IP " 2." 4
|
|
If the file is not a regular file, its file type shall be identified.
|
|
The file types directory, FIFO, socket, block special, and
|
|
character special shall be identified as such. Other implementation-defined
|
|
file types may also be identified. If \fIfile\fP is a
|
|
symbolic link, by default the link shall be resolved and \fIfile\fP
|
|
shall test the type of file referenced by the symbolic link.
|
|
(See the \fB-h\fP and \fB-i\fP options below.)
|
|
.LP
|
|
.IP " 3." 4
|
|
If the length of \fIfile\fP is zero, it shall be identified as an
|
|
empty file.
|
|
.LP
|
|
.IP " 4." 4
|
|
The \fIfile\fP utility shall examine an initial segment of \fIfile\fP
|
|
and shall make a guess at identifying its contents based
|
|
on position-sensitive tests. (The answer is not guaranteed to be correct;
|
|
see the \fB-d\fP, \fB-M\fP, and \fB-m\fP options
|
|
below.)
|
|
.LP
|
|
.IP " 5." 4
|
|
The \fIfile\fP utility shall examine \fIfile\fP and make a guess at
|
|
identifying its contents based on context-sensitive
|
|
default system tests. (The answer is not guaranteed to be correct.)
|
|
.LP
|
|
.IP " 6." 4
|
|
The file shall be identified as a data file.
|
|
.LP
|
|
.LP
|
|
If \fIfile\fP does not exist, cannot be read, or its file status could
|
|
not be determined, the output shall indicate that the
|
|
file was processed, but that its type could not be determined.
|
|
.LP
|
|
If \fIfile\fP is a symbolic link, by default the link shall be resolved
|
|
and \fIfile\fP shall test the type of file referenced
|
|
by the symbolic link.
|
|
.SH OPTIONS
|
|
.LP
|
|
The \fIfile\fP utility shall conform to the Base Definitions volume
|
|
of IEEE\ Std\ 1003.1-2001, Section 12.2, Utility Syntax Guidelines,
|
|
except that the order of the \fB-m\fP,
|
|
\fB-d\fP, and \fB-M\fP options shall be significant.
|
|
.LP
|
|
The following options shall be supported by the implementation:
|
|
.TP 7
|
|
\fB-d\fP
|
|
Apply any position-sensitive default system tests and context-sensitive
|
|
default system tests to the file. This is the default
|
|
if no \fB-M\fP or \fB-m\fP option is specified.
|
|
.TP 7
|
|
\fB-h\fP
|
|
When a symbolic link is encountered, identify the file as a symbolic
|
|
link. If \fB-h\fP is not specified and \fIfile\fP is a
|
|
symbolic link that refers to a nonexistent file, \fIfile\fP shall
|
|
identify the file as a symbolic link, as if \fB-h\fP had been
|
|
specified.
|
|
.TP 7
|
|
\fB-i\fP
|
|
If a file is a regular file, do not attempt to classify the type of
|
|
the file further, but identify the file as specified in the
|
|
STDOUT section.
|
|
.TP 7
|
|
\fB-M\ \fP \fIfile\fP
|
|
Specify the name of a file containing position-sensitive tests that
|
|
shall be applied to a file in order to classify it (see the
|
|
EXTENDED DESCRIPTION). No position-sensitive default system tests
|
|
nor context-sensitive default system tests shall be applied
|
|
unless the \fB-d\fP option is also specified.
|
|
.TP 7
|
|
\fB-m\ \fP \fIfile\fP
|
|
Specify the name of a file containing position-sensitive tests that
|
|
shall be applied to a file in order to classify it (see the
|
|
EXTENDED DESCRIPTION).
|
|
.sp
|
|
.LP
|
|
If the \fB-m\fP option is specified without specifying the \fB-d\fP
|
|
option or the \fB-M\fP option, position-sensitive default
|
|
system tests shall be applied after the position-sensitive tests specified
|
|
by the \fB-m\fP option. If the \fB-M\fP option is
|
|
specified with the \fB-d\fP option, the \fB-m\fP option, or both,
|
|
or the \fB-m\fP option is specified with the \fB-d\fP option,
|
|
the concatenation of the position-sensitive tests specified by these
|
|
options shall be applied in the order specified by the
|
|
appearance of these options. If a \fB-M\fP or \fB-m\fP \fIfile\fP
|
|
option-argument is \fB-\fP, the results are unspecified.
|
|
.SH OPERANDS
|
|
.LP
|
|
The following operand shall be supported:
|
|
.TP 7
|
|
\fIfile\fP
|
|
A pathname of a file to be tested.
|
|
.sp
|
|
.SH STDIN
|
|
.LP
|
|
Not used.
|
|
.SH INPUT FILES
|
|
.LP
|
|
The \fIfile\fP can be any file type.
|
|
.SH ENVIRONMENT VARIABLES
|
|
.LP
|
|
The following environment variables shall affect the execution of
|
|
\fIfile\fP:
|
|
.TP 7
|
|
\fILANG\fP
|
|
Provide a default value for the internationalization variables that
|
|
are unset or null. (See the Base Definitions volume of
|
|
IEEE\ Std\ 1003.1-2001, Section 8.2, Internationalization Variables
|
|
for
|
|
the precedence of internationalization variables used to determine
|
|
the values of locale categories.)
|
|
.TP 7
|
|
\fILC_ALL\fP
|
|
If set to a non-empty string value, override the values of all the
|
|
other internationalization variables.
|
|
.TP 7
|
|
\fILC_CTYPE\fP
|
|
Determine the locale for the interpretation of sequences of bytes
|
|
of text data as characters (for example, single-byte as
|
|
opposed to multi-byte characters in arguments and input files).
|
|
.TP 7
|
|
\fILC_MESSAGES\fP
|
|
Determine the locale that should be used to affect the format and
|
|
contents of diagnostic messages written to standard error and
|
|
informative messages written to standard output.
|
|
.TP 7
|
|
\fINLSPATH\fP
|
|
Determine the location of message catalogs for the processing of \fILC_MESSAGES
|
|
\&.\fP
|
|
.sp
|
|
.SH ASYNCHRONOUS EVENTS
|
|
.LP
|
|
Default.
|
|
.SH STDOUT
|
|
.LP
|
|
In the POSIX locale, the following format shall be used to identify
|
|
each operand, \fIfile\fP specified:
|
|
.sp
|
|
.RS
|
|
.nf
|
|
|
|
\fB"%s: %s\\n", <\fP\fIfile\fP\fB>, <\fP\fItype\fP\fB>
|
|
\fP
|
|
.fi
|
|
.RE
|
|
.LP
|
|
The values for <\fItype\fP> are unspecified, except that in the POSIX
|
|
locale, if \fIfile\fP is identified as one of the
|
|
types listed in the following table, <\fItype\fP> shall contain (but
|
|
is not limited to) the corresponding string, unless the
|
|
file is identified by a position-sensitive test specified by a \fB-M\fP
|
|
or \fB-m\fP option. Each space shown in the strings shall
|
|
be exactly one <space>.
|
|
.br
|
|
.sp
|
|
.ce 1
|
|
\fBTable: File Utility Output Strings\fP
|
|
.TS C
|
|
center; lw(40)1 lw(25)1 l.
|
|
T{
|
|
.na
|
|
\fBIf \fIfile\fP is:\fP
|
|
.ad
|
|
T} T{
|
|
.na
|
|
\fB<\fItype\fP> shall contain the string:\fP
|
|
.ad
|
|
T} \fBNotes\fP
|
|
T{
|
|
.na
|
|
Nonexistent
|
|
.ad
|
|
T} T{
|
|
.na
|
|
cannot open
|
|
.ad
|
|
T} \
|
|
T{
|
|
.na
|
|
Block special
|
|
.ad
|
|
T} T{
|
|
.na
|
|
block special
|
|
.ad
|
|
T} 1
|
|
T{
|
|
.na
|
|
Character special
|
|
.ad
|
|
T} T{
|
|
.na
|
|
character special
|
|
.ad
|
|
T} 1
|
|
T{
|
|
.na
|
|
Directory
|
|
.ad
|
|
T} T{
|
|
.na
|
|
directory
|
|
.ad
|
|
T} 1
|
|
T{
|
|
.na
|
|
FIFO
|
|
.ad
|
|
T} T{
|
|
.na
|
|
fifo
|
|
.ad
|
|
T} 1
|
|
T{
|
|
.na
|
|
Socket
|
|
.ad
|
|
T} T{
|
|
.na
|
|
socket
|
|
.ad
|
|
T} 1
|
|
T{
|
|
.na
|
|
Symbolic link
|
|
.ad
|
|
T} T{
|
|
.na
|
|
symbolic link to
|
|
.ad
|
|
T} 1
|
|
T{
|
|
.na
|
|
Regular file
|
|
.ad
|
|
T} T{
|
|
.na
|
|
regular file
|
|
.ad
|
|
T} 1,2
|
|
T{
|
|
.na
|
|
Empty regular file
|
|
.ad
|
|
T} T{
|
|
.na
|
|
empty
|
|
.ad
|
|
T} 3
|
|
T{
|
|
.na
|
|
Regular file that cannot be read
|
|
.ad
|
|
T} T{
|
|
.na
|
|
cannot open
|
|
.ad
|
|
T} 3
|
|
T{
|
|
.na
|
|
Executable binary
|
|
.ad
|
|
T} T{
|
|
.na
|
|
executable
|
|
.ad
|
|
T} 4,6
|
|
T{
|
|
.na
|
|
\fIar\fP archive library (see \fIar\fP)
|
|
.ad
|
|
T} T{
|
|
.na
|
|
archive
|
|
.ad
|
|
T} 4,6
|
|
T{
|
|
.na
|
|
Extended \fIcpio\fP format (see \fIpax\fP)
|
|
.ad
|
|
T} T{
|
|
.na
|
|
cpio archive
|
|
.ad
|
|
T} 4,6
|
|
T{
|
|
.na
|
|
Extended \fItar\fP format (see \fBustar\fP in \fIpax\fP)
|
|
.ad
|
|
T} T{
|
|
.na
|
|
tar archive
|
|
.ad
|
|
T} 4,6
|
|
T{
|
|
.na
|
|
Shell script
|
|
.ad
|
|
T} T{
|
|
.na
|
|
commands text
|
|
.ad
|
|
T} 5,6
|
|
T{
|
|
.na
|
|
C-language source
|
|
.ad
|
|
T} T{
|
|
.na
|
|
c program text
|
|
.ad
|
|
T} 5,6
|
|
T{
|
|
.na
|
|
FORTRAN source
|
|
.ad
|
|
T} T{
|
|
.na
|
|
fortran program text
|
|
.ad
|
|
T} 5,6
|
|
T{
|
|
.na
|
|
Regular file whose type cannot be determined
|
|
.ad
|
|
T} T{
|
|
.na
|
|
data
|
|
.ad
|
|
T} \
|
|
.TE
|
|
.TP 7
|
|
\fBNotes:\fP
|
|
.RS
|
|
.IP " 1." 4
|
|
This is a file type test.
|
|
.LP
|
|
.IP " 2." 4
|
|
This test is applied only if the \fB-i\fP option is specified.
|
|
.LP
|
|
.IP " 3." 4
|
|
This test is applied only if the \fB-i\fP option is not specified.
|
|
.LP
|
|
.IP " 4." 4
|
|
This is a position-sensitive default system test.
|
|
.LP
|
|
.IP " 5." 4
|
|
This is a context-sensitive default system test.
|
|
.LP
|
|
.IP " 6." 4
|
|
Position-sensitive default system tests and context-sensitive default
|
|
system tests are not applied if the \fB-M\fP option is
|
|
specified unless the \fB-d\fP option is also specified.
|
|
.LP
|
|
.RE
|
|
.sp
|
|
.LP
|
|
In the POSIX locale, if \fIfile\fP is identified as a symbolic link
|
|
(see the \fB-h\fP option), the following alternative
|
|
output format shall be used:
|
|
.sp
|
|
.RS
|
|
.nf
|
|
|
|
\fB"%s: %s %s\\n", <\fP\fIfile\fP\fB>, <\fP\fItype\fP\fB>, <\fP\fIcontents of link\fP\fB>"
|
|
\fP
|
|
.fi
|
|
.RE
|
|
.LP
|
|
If the file named by the \fIfile\fP operand does not exist, cannot
|
|
be read, or the type of the file named by the \fIfile\fP
|
|
operand cannot be determined, this shall not be considered an error
|
|
that affects the exit status.
|
|
.SH STDERR
|
|
.LP
|
|
The standard error shall be used only for diagnostic messages.
|
|
.SH OUTPUT FILES
|
|
.LP
|
|
None.
|
|
.SH EXTENDED DESCRIPTION
|
|
.LP
|
|
A file specified as an option-argument to the \fB-m\fP or \fB-M\fP
|
|
options shall contain one position-sensitive test per line,
|
|
which shall be applied to the file. If the test succeeds, the message
|
|
field of the line shall be printed and no further tests shall
|
|
be applied, with the exception that tests on immediately following
|
|
lines beginning with a single \fB'>'\fP character shall be
|
|
applied.
|
|
.LP
|
|
Each line shall be composed of the following four <blank>-separated
|
|
fields:
|
|
.TP 7
|
|
\fIoffset\fP
|
|
An unsigned number (optionally preceded by a single \fB'>'\fP character)
|
|
specifying the \fIoffset\fP, in bytes, of the
|
|
value in the file that is to be compared against the \fIvalue\fP field
|
|
of the line. If the file is shorter than the specified
|
|
offset, the test shall fail.
|
|
.LP
|
|
If the \fIoffset\fP begins with the character \fB'>'\fP , the test
|
|
contained in the line shall not be applied to the file
|
|
unless the test on the last line for which the \fIoffset\fP did not
|
|
begin with a \fB'>'\fP was successful. By default, the
|
|
\fIoffset\fP shall be interpreted as an unsigned decimal number. With
|
|
a leading 0x or 0X, the \fIoffset\fP shall be interpreted
|
|
as a hexadecimal number; otherwise, with a leading 0, the \fIoffset\fP
|
|
shall be interpreted as an octal number.
|
|
.TP 7
|
|
\fItype\fP
|
|
The type of the value in the file to be tested. The type shall consist
|
|
of the type specification characters \fBc\fP ,
|
|
\fBd\fP , \fBf\fP , \fBs\fP , and \fBu\fP , specifying character,
|
|
signed decimal, floating point, string, and unsigned
|
|
decimal, respectively.
|
|
.LP
|
|
The \fItype\fP string shall be interpreted as the bytes from the file
|
|
starting at the specified \fIoffset\fP and including the
|
|
same number of bytes specified by the \fIvalue\fP field. If insufficient
|
|
bytes remain in the file past the \fIoffset\fP to match
|
|
the \fIvalue\fP field, the test shall fail.
|
|
.LP
|
|
The type specification characters \fBd\fP , \fBf\fP , and \fBu\fP
|
|
can be followed by an optional unsigned decimal
|
|
integer that specifies the number of bytes represented by the type.
|
|
The type specification character \fBf\fP can be followed by
|
|
an optional \fBF\fP , \fBD\fP , or \fBL\fP , indicating that the value
|
|
is of type \fBfloat\fP, \fBdouble\fP, or \fBlong
|
|
double\fP, respectively. The type specification characters \fBd\fP
|
|
and \fBu\fP can be followed by an optional \fBC\fP ,
|
|
\fBS\fP , \fBI\fP , or \fBL\fP , indicating that the value is of type
|
|
\fBchar\fP, \fBshort\fP, \fBint\fP, or
|
|
\fBlong\fP, respectively.
|
|
.LP
|
|
The default number of bytes represented by the type specifiers \fBd\fP
|
|
, \fBf\fP , and \fBu\fP shall correspond to
|
|
their respective C-language types as follows. If the system claims
|
|
conformance to the C-Language Development Utilities option,
|
|
those specifiers shall correspond to the default sizes used in the
|
|
\fIc99\fP utility.
|
|
Otherwise, the default sizes shall be implementation-defined.
|
|
.LP
|
|
For the type specifier characters \fBd\fP and \fBu\fP , the default
|
|
number of bytes shall correspond to the size of a
|
|
basic integer type of the implementation. For these specifier characters,
|
|
the implementation shall support values of the optional
|
|
number of bytes to be converted corresponding to the number of bytes
|
|
in the C-language types \fBchar\fP, \fBshort\fP, \fBint\fP,
|
|
or \fBlong\fP. These numbers can also be specified by an application
|
|
as the characters \fBC\fP , \fBS\fP , \fBI\fP , and
|
|
\fBL\fP , respectively. The byte order used when interpreting numeric
|
|
values is implementation-defined, but shall correspond to
|
|
the order in which a constant of the corresponding type is stored
|
|
in memory on the system.
|
|
.LP
|
|
For the type specifier \fBf\fP , the default number of bytes shall
|
|
correspond to the number of bytes in the basic double
|
|
precision floating-point data type of the underlying implementation.
|
|
The implementation shall support values of the optional number
|
|
of bytes to be converted corresponding to the number of bytes in the
|
|
C-language types \fBfloat\fP, \fBdouble\fP, and \fBlong
|
|
double\fP. These numbers can also be specified by an application as
|
|
the characters \fBF\fP , \fBD\fP , and \fBL\fP ,
|
|
respectively.
|
|
.LP
|
|
All type specifiers, except for \fBs\fP , can be followed by a mask
|
|
specifier of the form &\fInumber\fP. The mask value
|
|
shall be AND'ed with the value of the input file before the comparison
|
|
with the \fIvalue\fP field of the line is made. By default,
|
|
the mask shall be interpreted as an unsigned decimal number. With
|
|
a leading 0x or 0X, the mask shall be interpreted as an unsigned
|
|
hexadecimal number; otherwise, with a leading 0, the mask shall be
|
|
interpreted as an unsigned octal number.
|
|
.LP
|
|
The strings \fBbyte\fP, \fBshort\fP, \fBlong\fP, and \fBstring\fP
|
|
shall also be supported as type fields, being interpreted
|
|
as \fBdC\fP , \fBdS\fP , \fBdL\fP , and \fBs\fP , respectively.
|
|
.TP 7
|
|
\fIvalue\fP
|
|
The \fIvalue\fP to be compared with the value from the file.
|
|
.LP
|
|
If the specifier from the type field is \fBs\fP or \fBstring\fP, then
|
|
interpret the value as a string. Otherwise, interpret
|
|
it as a number. If the value is a string, then the test shall succeed
|
|
only when a string value exactly matches the bytes from the
|
|
file.
|
|
.LP
|
|
If the \fIvalue\fP is a string, it can contain the following sequences:
|
|
.TP 7
|
|
\\\fIcharacter\fP
|
|
.RS
|
|
The backslash-escape sequences as specified in the Base Definitions
|
|
volume of IEEE\ Std\ 1003.1-2001, Table 5-1, Escape
|
|
Sequences and Associated Actions ( \fB'\\\\'\fP , \fB'\\a'\fP , \fB'\\b'\fP
|
|
, \fB'\\f'\fP , \fB'\\n'\fP , \fB'\\r'\fP ,
|
|
\fB'\\t'\fP , \fB'\\v'\fP ). The results of using any other character,
|
|
other than an octal digit, following the backslash are
|
|
unspecified.
|
|
.RE
|
|
.TP 7
|
|
\\\fIoctal\fP
|
|
.RS
|
|
Octal sequences that can be used to represent characters with specific
|
|
coded values. An octal sequence shall consist of a
|
|
backslash followed by the longest sequence of one, two, or three octal-digit
|
|
characters (01234567). If the size of a byte on the
|
|
system is greater than 9 bits, the valid escape sequence used to represent
|
|
a byte is implementation-defined.
|
|
.RE
|
|
.sp
|
|
.LP
|
|
By default, any value that is not a string shall be interpreted as
|
|
a signed decimal number. Any such value, with a leading 0x or
|
|
0X, shall be interpreted as an unsigned hexadecimal number; otherwise,
|
|
with a leading zero, the value shall be interpreted as an
|
|
unsigned octal number.
|
|
.LP
|
|
If the value is not a string, it can be preceded by a character indicating
|
|
the comparison to be performed. Permissible
|
|
characters and the comparisons they specify are as follows:
|
|
.TP 7
|
|
\fB=\fP
|
|
.RS
|
|
The test shall succeed if the value from the file equals the \fIvalue\fP
|
|
field.
|
|
.RE
|
|
.TP 7
|
|
\fB<\fP
|
|
.RS
|
|
The test shall succeed if the value from the file is less than the
|
|
\fIvalue\fP field.
|
|
.RE
|
|
.TP 7
|
|
\fB>\fP
|
|
.RS
|
|
The test shall succeed if the value from the file is greater than
|
|
the \fIvalue\fP field.
|
|
.RE
|
|
.TP 7
|
|
\fB&\fP
|
|
.RS
|
|
The test shall succeed if all of the set bits in the \fIvalue\fP field
|
|
are set in the value from the file.
|
|
.RE
|
|
.TP 7
|
|
\fB^\fP
|
|
.RS
|
|
The test shall succeed if at least one of the set bits in the \fIvalue\fP
|
|
field is not set in the value from the file.
|
|
.RE
|
|
.TP 7
|
|
\fBx\fP
|
|
.RS
|
|
The test shall succeed if the file is large enough to contain a value
|
|
of the type specified starting at the offset
|
|
specified.
|
|
.RE
|
|
.sp
|
|
.TP 7
|
|
\fImessage\fP
|
|
The \fImessage\fP to be printed if the test succeeds. The \fImessage\fP
|
|
shall be interpreted using the notation for the \fIprintf\fP formatting
|
|
specification; see \fIprintf\fP() . If the
|
|
\fIvalue\fP field was a string, then the value from the file shall
|
|
be the argument for the \fIprintf\fP formatting specification; otherwise,
|
|
the value from the file shall be the
|
|
argument.
|
|
.sp
|
|
.SH EXIT STATUS
|
|
.LP
|
|
The following exit values shall be returned:
|
|
.TP 7
|
|
\ 0
|
|
Successful completion.
|
|
.TP 7
|
|
>0
|
|
An error occurred.
|
|
.sp
|
|
.SH CONSEQUENCES OF ERRORS
|
|
.LP
|
|
Default.
|
|
.LP
|
|
\fIThe following sections are informative.\fP
|
|
.SH APPLICATION USAGE
|
|
.LP
|
|
The \fIfile\fP utility can only be required to guess at many of the
|
|
file types because only exhaustive testing can determine
|
|
some types with certainty. For example, binary data on some implementations
|
|
might match the initial segment of an executable or a
|
|
\fItar\fP archive.
|
|
.LP
|
|
Note that the table indicates that the output contains the stated
|
|
string. Systems may add text before or after the string. For
|
|
executables, as an example, the machine architecture and various facts
|
|
about how the file was link-edited may be included. Note
|
|
also that on systems that recognize shell script files starting with
|
|
\fB"#!"\fP as executable files, these may be identified as
|
|
executable binary files rather than as shell scripts.
|
|
.SH EXAMPLES
|
|
.LP
|
|
Determine whether an argument is a binary executable file:
|
|
.sp
|
|
.RS
|
|
.nf
|
|
|
|
\fBfile "$1" | grep -Fq executable &&
|
|
printf "%s is executable.\\n" "$1"
|
|
\fP
|
|
.fi
|
|
.RE
|
|
.SH RATIONALE
|
|
.LP
|
|
The \fB-f\fP option was omitted because the same effect can (and should)
|
|
be obtained using the \fIxargs\fP utility.
|
|
.LP
|
|
Historical versions of the \fIfile\fP utility attempt to identify
|
|
the following types of files: symbolic link, directory,
|
|
character special, block special, socket, \fItar\fP archive, \fIcpio\fP
|
|
archive, SCCS archive, archive library, empty, \fIcompress\fP output,
|
|
\fIpack\fP output, binary data, C source, FORTRAN source, assembler
|
|
source, \fInroff\fP/ \fItroff\fP/ \fIeqn\fP/ \fItbl\fP source \fItroff\fP
|
|
output, shell script, C shell script, English text,
|
|
ASCII text, various executables, APL workspace, compiled terminfo
|
|
entries, and CURSES screen images. Only those types that are
|
|
reasonably well specified in POSIX or are directly related to POSIX
|
|
utilities are listed in the table.
|
|
.LP
|
|
Historical systems have used a "magic file" named \fB/etc/magic\fP
|
|
to help identify file types. Because it is generally
|
|
useful for users and scripts to be able to identify special file types,
|
|
the \fB-m\fP flag and a portable format for user-created
|
|
magic files has been specified. No requirement is made that an implementation
|
|
of \fIfile\fP use this method of identifying files,
|
|
only that users be permitted to add their own classifying tests.
|
|
.LP
|
|
In addition, three options have been added to historical practice.
|
|
The \fB-d\fP flag has been added to permit users to cause
|
|
their tests to follow any default system tests. The \fB-i\fP flag
|
|
has been added to permit users to test portably for regular
|
|
files in shell scripts. The \fB-M\fP flag has been added to permit
|
|
users to ignore any default system tests.
|
|
.LP
|
|
The IEEE\ Std\ 1003.1-2001 description of default system tests and
|
|
the interaction between the \fB-d\fP, \fB-M\fP, and
|
|
\fB-m\fP options did not clearly indicate that there were two types
|
|
of "default system tests". The "position-sensitive tests''
|
|
determine file types by looking for certain string or binary values
|
|
at specific offsets in the file being examined. These
|
|
position-sensitive tests were implemented in historical systems using
|
|
the magic file described above. Some of these tests are now
|
|
built into the \fIfile\fP utility itself on some implementations so
|
|
the output can provide more detail than can be provided by
|
|
magic files. For example, a magic file can easily identify a \fBcore\fP
|
|
file on most implementations, but cannot name the program
|
|
file that dropped the core. A magic file could produce output such
|
|
as:
|
|
.sp
|
|
.RS
|
|
.nf
|
|
|
|
\fB/home/dwc/core: ELF 32-bit MSB core file SPARC Version 1
|
|
\fP
|
|
.fi
|
|
.RE
|
|
.LP
|
|
but by building the test into the \fIfile\fP utility, you could get
|
|
output such as:
|
|
.sp
|
|
.RS
|
|
.nf
|
|
|
|
\fB/home/dwc/core: ELF 32-bit MSB core file SPARC Version 1, from 'testprog'
|
|
\fP
|
|
.fi
|
|
.RE
|
|
.LP
|
|
These extended built-in tests are still to be treated as position-sensitive
|
|
default system tests even if they are not listed in
|
|
\fB/etc/magic\fP or any other magic file.
|
|
.LP
|
|
The context-sensitive default system tests were always built into
|
|
the \fIfile\fP utility. These tests looked for language
|
|
constructs in text files trying to identify shell scripts, C, FORTRAN,
|
|
and other computer language source files, and even plain
|
|
text files. With the addition of the \fB-m\fP and \fB-M\fP options
|
|
the distinction between position-sensitive and
|
|
context-sensitive default system tests became important because the
|
|
order of testing is important. The context-sensitive system
|
|
default tests should never be applied before any position-sensitive
|
|
tests even if the \fB-d\fP option is specified before a
|
|
\fB-m\fP option or \fB-M\fP option due to the high probability that
|
|
the context-sensitive system default tests will incorrectly
|
|
identify arbitrary text files as text files before position-sensitive
|
|
tests specified by the \fB-m\fP or \fB-M\fP option would be
|
|
applied to give a more accurate identification.
|
|
.LP
|
|
Leaving the meaning of \fB-M -\fP and \fB-m -\fP unspecified allows
|
|
an existing prototype of these options to continue to work
|
|
in a backwards-compatible manner. (In that implementation, \fB-M -\fP
|
|
was roughly equivalent to \fB-d\fP in
|
|
IEEE\ Std\ 1003.1-2001.)
|
|
.LP
|
|
The historical \fB-c\fP option was omitted as not particularly useful
|
|
to users or portable shell scripts. In addition, a
|
|
reasonable implementation of the \fIfile\fP utility would report any
|
|
errors found each time the magic file is read.
|
|
.LP
|
|
The historical format of the magic file was the same as that specified
|
|
by the Rationale in the ISO\ POSIX-2:1993 standard
|
|
for the \fIoffset\fP, \fIvalue\fP, and \fImessage\fP fields; however,
|
|
it used less precise type fields than the format specified
|
|
by the current normative text. The new type field values are a superset
|
|
of the historical ones.
|
|
.LP
|
|
The following is an example magic file:
|
|
.sp
|
|
.RS
|
|
.nf
|
|
|
|
\fB0 short 070707 cpio archive
|
|
0 short 0143561 Byte-swapped cpio archive
|
|
0 string 070707 ASCII cpio archive
|
|
0 long 0177555 Very old archive
|
|
0 short 0177545 Old archive
|
|
0 short 017437 Old packed data
|
|
0 string \\037\\036 Packed data
|
|
0 string \\377\\037 Compacted data
|
|
0 string \\037\\235 Compressed data
|
|
>2 byte&0x80 >0 Block compressed
|
|
>2 byte&0x1f x %d bits
|
|
0 string \\032\\001 Compiled Terminfo Entry
|
|
0 short 0433 Curses screen image
|
|
0 short 0434 Curses screen image
|
|
0 string <ar> System V Release 1 archive
|
|
0 string !<arch>\\n__.SYMDEF Archive random library
|
|
0 string !<arch> Archive
|
|
0 string ARF_BEGARF PHIGS clear text archive
|
|
0 long 0x137A2950 Scalable OpenFont binary
|
|
0 long 0x137A2951 Encrypted scalable OpenFont binary
|
|
\fP
|
|
.fi
|
|
.RE
|
|
.LP
|
|
The use of a basic integer data type is intended to allow the implementation
|
|
to choose a word size commonly used by applications
|
|
on that architecture.
|
|
.SH FUTURE DIRECTIONS
|
|
.LP
|
|
None.
|
|
.SH SEE ALSO
|
|
.LP
|
|
\fIar\fP , \fIls\fP , \fIpax\fP
|
|
.SH COPYRIGHT
|
|
Portions of this text are reprinted and reproduced in electronic form
|
|
from IEEE Std 1003.1, 2003 Edition, Standard for Information Technology
|
|
-- Portable Operating System Interface (POSIX), The Open Group Base
|
|
Specifications Issue 6, Copyright (C) 2001-2003 by the Institute of
|
|
Electrical and Electronics Engineers, Inc and The Open Group. In the
|
|
event of any discrepancy between this version and the original IEEE and
|
|
The Open Group Standard, the original IEEE and The Open Group Standard
|
|
is the referee document. The original Standard can be obtained online at
|
|
http://www.opengroup.org/unix/online.html .
|