Christos decided to keep the manpages in mdoc(7) format,
so stop using our own versions of these.
This commit is contained in:
parent
da4c6b80d9
commit
3aefeab5df
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=175820
@ -33,4 +33,16 @@ CFLAGS+= -I${.CURDIR}
|
|||||||
DPADD= ${LIBMAGIC} ${LIBZ}
|
DPADD= ${LIBMAGIC} ${LIBZ}
|
||||||
LDADD= -lmagic -lz
|
LDADD= -lmagic -lz
|
||||||
|
|
||||||
|
FILEVER!= awk '$$1 == "\#define" && $$2 == "VERSION" { print $$3; exit }' \
|
||||||
|
${.CURDIR}/config.h
|
||||||
|
|
||||||
|
CLEANFILES+= ${MAN}
|
||||||
|
|
||||||
.include <bsd.prog.mk>
|
.include <bsd.prog.mk>
|
||||||
|
|
||||||
|
.for mp in ${MAN}
|
||||||
|
${mp}: ${mp:C/[0-9]/man/}
|
||||||
|
sed -e 's/__FSECTION__/5/g' -e 's/__CSECTION__/1/g' \
|
||||||
|
-e 's/__VERSION__/${FILEVER}/g' \
|
||||||
|
-e 's,__MAGIC__,${MAGICPATH}/magic,g' ${.ALLSRC} > ${.TARGET}
|
||||||
|
.endfor
|
||||||
|
@ -1,588 +0,0 @@
|
|||||||
.\" $FreeBSD$
|
|
||||||
.\" $Id: file.man,v 1.57 2005/08/18 15:18:22 christos Exp $
|
|
||||||
.Dd August 18, 2005
|
|
||||||
.Dt FILE 1 "Copyright but distributable"
|
|
||||||
.Os
|
|
||||||
.Sh NAME
|
|
||||||
.Nm file
|
|
||||||
.Nd determine file type
|
|
||||||
.Sh SYNOPSIS
|
|
||||||
.Nm
|
|
||||||
.Op Fl bchikLnNprsvz
|
|
||||||
.Op Fl f Ar namefile
|
|
||||||
.Op Fl F Ar separator
|
|
||||||
.Op Fl m Ar magicfiles
|
|
||||||
.Ar
|
|
||||||
.Nm
|
|
||||||
.Fl C
|
|
||||||
.Op Fl m Ar magicfile
|
|
||||||
.Sh DESCRIPTION
|
|
||||||
This manual page documents version 4.21 of the
|
|
||||||
.Nm
|
|
||||||
utility which tests each argument in an attempt to classify it.
|
|
||||||
There are three sets of tests, performed in this order:
|
|
||||||
file system tests, magic number tests, and language tests.
|
|
||||||
The
|
|
||||||
.Em first
|
|
||||||
test that succeeds causes the file type to be printed.
|
|
||||||
.Pp
|
|
||||||
The type printed will usually contain one of the words
|
|
||||||
.Dq Li text
|
|
||||||
(the file contains only
|
|
||||||
printing characters and a few common control
|
|
||||||
characters and is probably safe to read on an
|
|
||||||
.Tn ASCII
|
|
||||||
terminal),
|
|
||||||
.Dq Li executable
|
|
||||||
(the file contains the result of compiling a program
|
|
||||||
in a form understandable to some
|
|
||||||
.Ux
|
|
||||||
kernel or another),
|
|
||||||
or
|
|
||||||
.Dq Li data
|
|
||||||
meaning anything else (data is usually
|
|
||||||
.Sq binary
|
|
||||||
or non-printable).
|
|
||||||
Exceptions are well-known file formats (core files, tar archives)
|
|
||||||
that are known to contain binary data.
|
|
||||||
When modifying the file
|
|
||||||
.Pa /usr/share/misc/magic
|
|
||||||
or the program itself,
|
|
||||||
.Em "preserve these keywords" .
|
|
||||||
People depend on knowing that all the readable files in a directory
|
|
||||||
have the word
|
|
||||||
.Dq Li text
|
|
||||||
printed.
|
|
||||||
Do not do as Berkeley did and change
|
|
||||||
.Dq Li "shell commands text"
|
|
||||||
to
|
|
||||||
.Dq Li "shell script" .
|
|
||||||
Note that the file
|
|
||||||
.Pa /usr/share/misc/magic
|
|
||||||
is built mechanically from a large number of small files in
|
|
||||||
the subdirectory
|
|
||||||
.Pa Magdir
|
|
||||||
in the source distribution of this program.
|
|
||||||
.Pp
|
|
||||||
The file system tests are based on examining the return from a
|
|
||||||
.Xr stat 2
|
|
||||||
system call.
|
|
||||||
The program checks to see if the file is empty,
|
|
||||||
or if it is 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 .
|
|
||||||
.Pp
|
|
||||||
The magic number tests are used to check for files with data in
|
|
||||||
particular fixed formats.
|
|
||||||
The canonical example of this is a binary executable (compiled program)
|
|
||||||
.Pa a.out
|
|
||||||
file, whose format is defined in
|
|
||||||
.In a.out.h
|
|
||||||
and possibly
|
|
||||||
.In exec.h
|
|
||||||
in the standard include directory.
|
|
||||||
These files have a
|
|
||||||
.Sq "magic number"
|
|
||||||
stored in a particular place
|
|
||||||
near the beginning of the file that tells the
|
|
||||||
.Ux
|
|
||||||
operating system
|
|
||||||
that the file is a binary executable, and which of several types thereof.
|
|
||||||
The concept of
|
|
||||||
.Sq "magic number"
|
|
||||||
has been applied by extension to data files.
|
|
||||||
Any file with some invariant identifier at a small fixed
|
|
||||||
offset into the file can usually be described in this way.
|
|
||||||
The information identifying these files is read from the compiled
|
|
||||||
magic file
|
|
||||||
.Pa /usr/share/misc/magic.mgc ,
|
|
||||||
or
|
|
||||||
.Pa /usr/share/misc/magic
|
|
||||||
if the compile file does not exist.
|
|
||||||
In addition
|
|
||||||
.Nm
|
|
||||||
will look in
|
|
||||||
.Pa $HOME/.magic.mgc ,
|
|
||||||
or
|
|
||||||
.Pa $HOME/.magic
|
|
||||||
for magic entries.
|
|
||||||
.Pp
|
|
||||||
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
|
|
||||||
.Dq Li text
|
|
||||||
because they will be mostly readable on nearly any terminal;
|
|
||||||
UTF-16 and EBCDIC are only
|
|
||||||
.Dq Li "character data"
|
|
||||||
because, while
|
|
||||||
they contain text, it is text that will require translation
|
|
||||||
before it can be read.
|
|
||||||
In addition,
|
|
||||||
.Nm
|
|
||||||
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
|
|
||||||
.Ux Ns -standard
|
|
||||||
LF, this will be reported.
|
|
||||||
Files that contain embedded escape sequences or overstriking
|
|
||||||
will also be identified.
|
|
||||||
.Pp
|
|
||||||
Once
|
|
||||||
.Nm
|
|
||||||
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
|
|
||||||
.Pa names.h )
|
|
||||||
that can appear anywhere in the first few blocks of a file.
|
|
||||||
For example, the keyword
|
|
||||||
.Ic .br
|
|
||||||
indicates that the file is most likely a
|
|
||||||
.Xr troff 1
|
|
||||||
input file, just as the keyword
|
|
||||||
.Ic struct
|
|
||||||
indicates a C program.
|
|
||||||
These tests are less reliable than the previous
|
|
||||||
two groups, so they are performed last.
|
|
||||||
The language test routines also test for some miscellany
|
|
||||||
(such as
|
|
||||||
.Xr tar 1
|
|
||||||
archives).
|
|
||||||
.Pp
|
|
||||||
Any file that cannot be identified as having been written
|
|
||||||
in any of the character sets listed above is simply said to be
|
|
||||||
.Dq Li data .
|
|
||||||
.Sh OPTIONS
|
|
||||||
.Bl -tag -width indent
|
|
||||||
.It Fl b , -brief
|
|
||||||
Do not prepend filenames to output lines (brief mode).
|
|
||||||
.It Fl c , -checking-printout
|
|
||||||
Cause a checking printout of the parsed form of the magic file.
|
|
||||||
This is usually used in conjunction with
|
|
||||||
.Fl m
|
|
||||||
to debug a new magic file before installing it.
|
|
||||||
.It Fl C , -compile
|
|
||||||
Write a
|
|
||||||
.Pa magic.mgc
|
|
||||||
output file that contains a pre-parsed version of
|
|
||||||
file.
|
|
||||||
.It Fl f , -files-from Ar namefile
|
|
||||||
Read the names of the files to be examined from
|
|
||||||
.Ar namefile
|
|
||||||
(one per line)
|
|
||||||
before the argument list.
|
|
||||||
Either
|
|
||||||
.Ar namefile
|
|
||||||
or at least one filename argument must be present;
|
|
||||||
to test the standard input, use
|
|
||||||
.Dq Fl
|
|
||||||
as a filename argument.
|
|
||||||
.It Fl F , -separator Ar separator
|
|
||||||
Use the specified string as the separator between the filename and the
|
|
||||||
file result returned.
|
|
||||||
Defaults to
|
|
||||||
.Ql \&: .
|
|
||||||
.It Fl h , -no-dereference
|
|
||||||
Causes symlinks not to be followed
|
|
||||||
(on systems that support symbolic links).
|
|
||||||
This is the default if the
|
|
||||||
environment variable
|
|
||||||
.Ev POSIXLY_CORRECT
|
|
||||||
is not defined.
|
|
||||||
.It Fl i , -mime
|
|
||||||
Causes the file command to output mime type strings rather than the more
|
|
||||||
traditional human readable ones.
|
|
||||||
Thus it may say
|
|
||||||
.Dq Li "text/plain; charset=us-ascii"
|
|
||||||
rather than
|
|
||||||
.Dq Li "ASCII text" .
|
|
||||||
In order for this option to work, file changes the way
|
|
||||||
it handles files recognised by the command itself (such as many of the
|
|
||||||
text file types, directories etc), and makes use of an alternative
|
|
||||||
.Pa magic
|
|
||||||
file.
|
|
||||||
(See
|
|
||||||
.Sx FILES
|
|
||||||
section, below).
|
|
||||||
.It Fl k , -keep-going
|
|
||||||
Do not stop at the first match, keep going.
|
|
||||||
.It Fl L , -dereference
|
|
||||||
option causes symlinks to be followed, as the like-named option in
|
|
||||||
.Xr ls 1
|
|
||||||
(on systems that support symbolic links).
|
|
||||||
This is the default if the environment variable
|
|
||||||
.Ev POSIXLY_CORRECT
|
|
||||||
is defined.
|
|
||||||
.It Fl m , -magic-file Ar list
|
|
||||||
Specify an alternate list of files containing magic numbers.
|
|
||||||
This can be a single file, or a colon-separated list of files.
|
|
||||||
If a compiled magic file is found alongside, it will be used instead.
|
|
||||||
With the
|
|
||||||
.Fl i
|
|
||||||
or
|
|
||||||
.Fl -mime
|
|
||||||
option, the program adds
|
|
||||||
.Pa .mime
|
|
||||||
to each file name.
|
|
||||||
.It Fl n , -no-buffer
|
|
||||||
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.
|
|
||||||
.It Fl N , -no-pad
|
|
||||||
Do not pad filenames so that they align in the output.
|
|
||||||
.It Fl p , -preserve-date
|
|
||||||
On systems that support
|
|
||||||
.Xr utime 3
|
|
||||||
or
|
|
||||||
.Xr utimes 2 ,
|
|
||||||
attempt to preserve the access time of files analyzed, to pretend that
|
|
||||||
.Nm
|
|
||||||
never read them.
|
|
||||||
.It Fl r , -raw
|
|
||||||
Do not translate unprintable characters to \eooo.
|
|
||||||
Normally
|
|
||||||
.Nm
|
|
||||||
translates unprintable characters to their octal representation.
|
|
||||||
.It Fl s , -special-files
|
|
||||||
Normally,
|
|
||||||
.Nm
|
|
||||||
only attempts to read and determine the type of argument files which
|
|
||||||
.Xr stat 2
|
|
||||||
reports are ordinary files.
|
|
||||||
This prevents problems, because reading special files may have peculiar
|
|
||||||
consequences.
|
|
||||||
Specifying the
|
|
||||||
.Fl s
|
|
||||||
option causes
|
|
||||||
.Nm
|
|
||||||
to also read argument files which are block or character special files.
|
|
||||||
This is useful for determining the file system types of the data in raw
|
|
||||||
disk partitions, which are block special files.
|
|
||||||
This option also causes
|
|
||||||
.Nm
|
|
||||||
to disregard the file size as reported by
|
|
||||||
.Xr stat 2
|
|
||||||
since on some systems it reports a zero size for raw disk partitions.
|
|
||||||
.It Fl v , -version
|
|
||||||
Print the version of the program and exit.
|
|
||||||
.It Fl z , -uncompress
|
|
||||||
Try to look inside compressed files.
|
|
||||||
.It Fl -help
|
|
||||||
Print a help message and exit.
|
|
||||||
.El
|
|
||||||
.Sh FILES
|
|
||||||
.Bl -tag -width ".Pa /usr/share/misc/magic.mime" -compact
|
|
||||||
.It Pa /usr/share/misc/magic.mgc
|
|
||||||
Default compiled list of magic numbers
|
|
||||||
.It Pa /usr/share/misc/magic
|
|
||||||
Default list of magic numbers
|
|
||||||
.It Pa /usr/share/misc/magic.mime.mgc
|
|
||||||
Default compiled list of magic numbers, used to output mime types when
|
|
||||||
the
|
|
||||||
.Fl i
|
|
||||||
option is specified.
|
|
||||||
.It Pa /usr/share/misc/magic.mime
|
|
||||||
Default list of magic numbers, used to output mime types when the
|
|
||||||
.Fl i
|
|
||||||
option is specified.
|
|
||||||
.El
|
|
||||||
.Sh ENVIRONMENT
|
|
||||||
The environment variable
|
|
||||||
.Ev MAGIC
|
|
||||||
can be used to set the default magic number file name.
|
|
||||||
If that variable is set, then
|
|
||||||
.Nm
|
|
||||||
will not attempt to open
|
|
||||||
.Pa $HOME/.magic .
|
|
||||||
.Nm
|
|
||||||
adds
|
|
||||||
.Pa .mime
|
|
||||||
and/or
|
|
||||||
.Pa .mgc
|
|
||||||
to the value of this variable as appropriate.
|
|
||||||
The environment variable
|
|
||||||
.Ev POSIXLY_CORRECT
|
|
||||||
controls (on systems that support symbolic links), if
|
|
||||||
.Nm
|
|
||||||
will attempt to follow symlinks or not.
|
|
||||||
If set, then
|
|
||||||
.Nm
|
|
||||||
follows symlink, otherwise it does not.
|
|
||||||
This is also controlled
|
|
||||||
by the
|
|
||||||
.Fl L
|
|
||||||
and
|
|
||||||
.Fl h
|
|
||||||
options.
|
|
||||||
.Sh SEE ALSO
|
|
||||||
.Xr hexdump 1 ,
|
|
||||||
.Xr od 1 ,
|
|
||||||
.Xr strings 1 ,
|
|
||||||
.Xr magic 5
|
|
||||||
.Sh STANDARDS CONFORMANCE
|
|
||||||
This program is believed to exceed the
|
|
||||||
.St -svid4
|
|
||||||
of FILE(CMD), as near as one can determine from the vague language
|
|
||||||
contained therein.
|
|
||||||
Its behaviour is mostly compatible with the System V program of the same name.
|
|
||||||
This version knows more magic, however, so it will produce
|
|
||||||
different (albeit more accurate) output in many cases.
|
|
||||||
.Pp
|
|
||||||
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,
|
|
||||||
.Pp
|
|
||||||
.Dl ">10 string language impress\ (imPRESS data)"
|
|
||||||
.Pp
|
|
||||||
in an existing magic file would have to be changed to
|
|
||||||
.Pp
|
|
||||||
.Dl ">10 string language\e impress (imPRESS data)"
|
|
||||||
.Pp
|
|
||||||
In addition, in this version, if a pattern string contains a backslash,
|
|
||||||
it must be escaped.
|
|
||||||
For example
|
|
||||||
.Pp
|
|
||||||
.Dl "0 string \ebegindata Andrew Toolkit document"
|
|
||||||
.Pp
|
|
||||||
in an existing magic file would have to be changed to
|
|
||||||
.Pp
|
|
||||||
.Dl "0 string \e\ebegindata Andrew Toolkit document"
|
|
||||||
.Pp
|
|
||||||
SunOS releases 3.2 and later from Sun Microsystems include a
|
|
||||||
.Xr file 1
|
|
||||||
command derived from the System V one, but with some extensions.
|
|
||||||
My version differs from Sun's only in minor ways.
|
|
||||||
It includes the extension of the
|
|
||||||
.Sq Ic &
|
|
||||||
operator, used as,
|
|
||||||
for example,
|
|
||||||
.Pp
|
|
||||||
.Dl ">16 long&0x7fffffff >0 not stripped"
|
|
||||||
.Sh MAGIC DIRECTORY
|
|
||||||
The magic file entries have been collected from various sources,
|
|
||||||
mainly USENET, and contributed by various authors.
|
|
||||||
.An Christos Zoulas
|
|
||||||
(address below) will collect additional
|
|
||||||
or corrected magic file entries.
|
|
||||||
A consolidation of magic file entries
|
|
||||||
will be distributed periodically.
|
|
||||||
.Pp
|
|
||||||
The order of entries in the magic file is significant.
|
|
||||||
Depending on what system you are using, the order that
|
|
||||||
they are put together may be incorrect.
|
|
||||||
If your old
|
|
||||||
.Nm
|
|
||||||
command uses a magic file,
|
|
||||||
keep the old magic file around for comparison purposes
|
|
||||||
(rename it to
|
|
||||||
.Pa /usr/share/misc/magic.orig ) .
|
|
||||||
.Sh EXAMPLES
|
|
||||||
.Bd -literal
|
|
||||||
$ 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, dynamically linked (uses shared libs),
|
|
||||||
not stripped
|
|
||||||
/dev/hda: application/x-not-regular-file
|
|
||||||
/dev/wd0a: application/x-not-regular-file
|
|
||||||
.Ed
|
|
||||||
.Sh HISTORY
|
|
||||||
There has been a
|
|
||||||
.Nm
|
|
||||||
command in every
|
|
||||||
.Ux
|
|
||||||
since at least Research Version 4
|
|
||||||
(man page dated November, 1973).
|
|
||||||
The System V version introduced one significant major change:
|
|
||||||
the external list of magic number types.
|
|
||||||
This slowed the program down slightly but made it a lot more flexible.
|
|
||||||
.Pp
|
|
||||||
This program, based on the System V version,
|
|
||||||
was written by
|
|
||||||
.An Ian Darwin Aq ian@darwinsys.com
|
|
||||||
without looking at anybody else's source code.
|
|
||||||
.Pp
|
|
||||||
.An John Gilmore
|
|
||||||
revised the code extensively, making it better than
|
|
||||||
the first version.
|
|
||||||
.An Geoff Collyer
|
|
||||||
found several inadequacies
|
|
||||||
and provided some magic file entries.
|
|
||||||
Contributions by the
|
|
||||||
.Sq Ic &
|
|
||||||
operator by
|
|
||||||
.An Rob McMahon Aq cudcv@warwick.ac.uk ,
|
|
||||||
1989.
|
|
||||||
.Pp
|
|
||||||
.An Guy Harris Aq guy@netapp.com ,
|
|
||||||
made many changes from 1993 to the present.
|
|
||||||
.Pp
|
|
||||||
Primary development and maintenance from 1990 to the present by
|
|
||||||
.An Christos Zoulas Aq christos@astron.com .
|
|
||||||
.Pp
|
|
||||||
Altered by
|
|
||||||
.An Chris Lowth Aq chris@lowth.com ,
|
|
||||||
2000:
|
|
||||||
Handle the
|
|
||||||
.Fl i
|
|
||||||
option to output mime type strings and using an alternative
|
|
||||||
magic file and internal logic.
|
|
||||||
.Pp
|
|
||||||
Altered by
|
|
||||||
.An Eric Fischer Aq enf@pobox.com ,
|
|
||||||
July, 2000,
|
|
||||||
to identify character codes and attempt to identify the languages
|
|
||||||
of
|
|
||||||
.No non- Ns Tn ASCII
|
|
||||||
files.
|
|
||||||
.Pp
|
|
||||||
The list of contributors to the
|
|
||||||
.Pa Magdir
|
|
||||||
directory (source for the
|
|
||||||
.Pa /usr/share/misc/magic
|
|
||||||
file) is too long to include here.
|
|
||||||
You know who you are; thank you.
|
|
||||||
.Sh LEGAL NOTICE
|
|
||||||
Copyright (c)
|
|
||||||
.An Ian F. Darwin ,
|
|
||||||
Toronto, Canada, 1986-1999.
|
|
||||||
Covered by the standard Berkeley Software Distribution copyright; see the file
|
|
||||||
.Pa LEGAL.NOTICE
|
|
||||||
in the source distribution.
|
|
||||||
.Pp
|
|
||||||
The files
|
|
||||||
.Pa tar.h
|
|
||||||
and
|
|
||||||
.Pa is_tar.c
|
|
||||||
were written by
|
|
||||||
.An John Gilmore
|
|
||||||
from his public-domain
|
|
||||||
.Nm tar
|
|
||||||
program, and are not covered by the above license.
|
|
||||||
.Sh BUGS
|
|
||||||
There must be a better way to automate the construction of the
|
|
||||||
.Pa Magic
|
|
||||||
file from all the glop in
|
|
||||||
.Pa Magdir .
|
|
||||||
What is it?
|
|
||||||
Better yet, the magic file should be compiled into binary (say,
|
|
||||||
.Xr ndbm 3
|
|
||||||
or, better yet, fixed-length
|
|
||||||
.Tn ASCII
|
|
||||||
strings for use in heterogenous network environments) for faster startup.
|
|
||||||
Then the program would run as fast as the Version 7 program of the same name,
|
|
||||||
with the flexibility of the System V version.
|
|
||||||
.Pp
|
|
||||||
The
|
|
||||||
.Nm
|
|
||||||
utility uses several algorithms that favor speed over accuracy,
|
|
||||||
thus it can be misled about the contents of
|
|
||||||
text
|
|
||||||
files.
|
|
||||||
.Pp
|
|
||||||
The support for
|
|
||||||
text
|
|
||||||
files (primarily for programming languages)
|
|
||||||
is simplistic, inefficient and requires recompilation to update.
|
|
||||||
.Pp
|
|
||||||
There should be an
|
|
||||||
.Ic else
|
|
||||||
clause to follow a series of continuation lines.
|
|
||||||
.Pp
|
|
||||||
The magic file and keywords should have regular expression support.
|
|
||||||
Their use of
|
|
||||||
.Tn "ASCII TAB"
|
|
||||||
as a field delimiter is ugly and makes
|
|
||||||
it hard to edit the files, but is entrenched.
|
|
||||||
.Pp
|
|
||||||
It might be advisable to allow upper-case letters in keywords
|
|
||||||
for e.g.,
|
|
||||||
.Xr troff 1
|
|
||||||
commands vs man page macros.
|
|
||||||
Regular expression support would make this easy.
|
|
||||||
.Pp
|
|
||||||
The program does not grok
|
|
||||||
.Tn FORTRAN .
|
|
||||||
It should be able to figure
|
|
||||||
.Tn FORTRAN
|
|
||||||
by seeing some keywords which
|
|
||||||
appear indented at the start of line.
|
|
||||||
Regular expression support would make this easy.
|
|
||||||
.Pp
|
|
||||||
The list of keywords in
|
|
||||||
.Pa ascmagic
|
|
||||||
probably belongs in the
|
|
||||||
.Pa Magic
|
|
||||||
file.
|
|
||||||
This could be done by using some keyword like
|
|
||||||
.Sq Ic *
|
|
||||||
for the offset value.
|
|
||||||
.Pp
|
|
||||||
Another optimisation would be to sort
|
|
||||||
the magic file so that we can just run down all the
|
|
||||||
tests for the first byte, first word, first long, etc, once we
|
|
||||||
have fetched it.
|
|
||||||
Complain about conflicts in the magic file entries.
|
|
||||||
Make a rule that the magic entries sort based on file offset rather
|
|
||||||
than position within the magic file?
|
|
||||||
.Pp
|
|
||||||
The program should provide a way to give an estimate
|
|
||||||
of
|
|
||||||
.Dq how good
|
|
||||||
a guess is.
|
|
||||||
We end up removing guesses (e.g.\&
|
|
||||||
.Dq Li "From "
|
|
||||||
as first 5 chars of file) because
|
|
||||||
they are not as good as other guesses (e.g.\&
|
|
||||||
.Dq Li "Newsgroups:"
|
|
||||||
versus
|
|
||||||
.Dq Li "Return-Path:" ) .
|
|
||||||
Still, if the others do not pan out, it should be possible to use the
|
|
||||||
first guess.
|
|
||||||
.Pp
|
|
||||||
This program is slower than some vendors' file commands.
|
|
||||||
The new support for multiple character codes makes it even slower.
|
|
||||||
.Pp
|
|
||||||
This manual page, and particularly this section, is too long.
|
|
||||||
.Sh AVAILABILITY
|
|
||||||
You can obtain the original author's latest version by anonymous FTP
|
|
||||||
on
|
|
||||||
.Pa ftp.astron.com
|
|
||||||
in the directory
|
|
||||||
.Pa /pub/file/file-X.YZ.tar.gz
|
|
@ -1,444 +0,0 @@
|
|||||||
.\"
|
|
||||||
.\" $FreeBSD$
|
|
||||||
.\"
|
|
||||||
.\" install as magic.4 on USG, magic.5 on V7 or Berkeley systems.
|
|
||||||
.\"
|
|
||||||
.Dd February 19, 2006
|
|
||||||
.Dt MAGIC 5 "Public Domain"
|
|
||||||
.Os
|
|
||||||
.Sh NAME
|
|
||||||
.Nm magic
|
|
||||||
.Nd file command's magic number file
|
|
||||||
.Sh DESCRIPTION
|
|
||||||
This manual page documents the format of the magic file as
|
|
||||||
used by the
|
|
||||||
.Nm
|
|
||||||
command, version 4.21.
|
|
||||||
The
|
|
||||||
.Nm file
|
|
||||||
command identifies the type of a file using,
|
|
||||||
among other tests,
|
|
||||||
a test for whether the file begins with a certain
|
|
||||||
.Em "magic number" .
|
|
||||||
The file
|
|
||||||
.Pa /usr/share/misc/magic
|
|
||||||
specifies what magic numbers are to be tested for,
|
|
||||||
what message to print if a particular magic number is found,
|
|
||||||
and additional information to extract from the file.
|
|
||||||
.Pp
|
|
||||||
Each line of the file specifies a test to be performed.
|
|
||||||
A test compares the data starting at a particular offset
|
|
||||||
in the file with a 1-byte, 2-byte, or 4-byte numeric value or
|
|
||||||
a string.
|
|
||||||
If the test succeeds, a message is printed.
|
|
||||||
The line consists of the following fields:
|
|
||||||
.Bl -tag -width indent
|
|
||||||
.It offset
|
|
||||||
A number specifying the offset, in bytes, into the file of the data
|
|
||||||
which is to be tested.
|
|
||||||
.It type
|
|
||||||
The type of the data to be tested.
|
|
||||||
The possible values are:
|
|
||||||
.Bl -tag -width indent
|
|
||||||
.It byte
|
|
||||||
A one-byte value.
|
|
||||||
.It short
|
|
||||||
A two-byte value (on most systems) in this machine's native byte order.
|
|
||||||
.It long
|
|
||||||
A four-byte value (on most systems) in this machine's native byte order.
|
|
||||||
.It string
|
|
||||||
A string of bytes.
|
|
||||||
The string type specification can be optionally followed
|
|
||||||
by /[Bbc]*.
|
|
||||||
The
|
|
||||||
.Dq B
|
|
||||||
flag compacts whitespace in the target, which must contain
|
|
||||||
at least one whitespace character.
|
|
||||||
If the magic has
|
|
||||||
.Ar n
|
|
||||||
consecutive blanks, the target needs at least
|
|
||||||
.Ar n
|
|
||||||
consecutive blanks to match.
|
|
||||||
The
|
|
||||||
.Dq b
|
|
||||||
flag treats every blank in the target as an optional blank.
|
|
||||||
Finally the
|
|
||||||
.Dq c
|
|
||||||
flag, specifies case insensitive matching: lowercase characters
|
|
||||||
in the magic match both lower and upper case characters in the
|
|
||||||
targer, whereas upper case characters in the magic, only much
|
|
||||||
uppercase characters in the target.
|
|
||||||
.It pstring
|
|
||||||
A pascal style string where the first byte is interpreted as the an
|
|
||||||
unsigned length.
|
|
||||||
The string is not
|
|
||||||
.Dv NUL
|
|
||||||
terminated.
|
|
||||||
.It date
|
|
||||||
A four-byte value interpreted as a
|
|
||||||
.Ux
|
|
||||||
date.
|
|
||||||
.It ldate
|
|
||||||
A four-byte value interpreted as a
|
|
||||||
.Ux Ns -style
|
|
||||||
date, but interpreted as
|
|
||||||
local time rather than UTC.
|
|
||||||
.It beshort
|
|
||||||
A two-byte value (on most systems) in big-endian byte order.
|
|
||||||
.It belong
|
|
||||||
A four-byte value (on most systems) in big-endian byte order.
|
|
||||||
.It bedate
|
|
||||||
A four-byte value (on most systems) in big-endian byte order,
|
|
||||||
interpreted as a
|
|
||||||
.Ux
|
|
||||||
date.
|
|
||||||
.It beldate
|
|
||||||
A four-byte value (on most systems) in big-endian byte order,
|
|
||||||
interpreted as a
|
|
||||||
.Ux Ns -style
|
|
||||||
date, but interpreted as local time rather
|
|
||||||
than UTC.
|
|
||||||
.It bestring16
|
|
||||||
A two-byte unicode (UCS16) string in big-endian byte order.
|
|
||||||
.It leshort
|
|
||||||
A two-byte value (on most systems) in little-endian byte order.
|
|
||||||
.It lelong
|
|
||||||
A four-byte value (on most systems) in little-endian byte order.
|
|
||||||
.It ledate
|
|
||||||
A four-byte value (on most systems) in little-endian byte order,
|
|
||||||
interpreted as a
|
|
||||||
.Ux
|
|
||||||
date.
|
|
||||||
.It leldate
|
|
||||||
A four-byte value (on most systems) in little-endian byte order,
|
|
||||||
interpreted as a
|
|
||||||
.Ux Ns -style
|
|
||||||
date, but interpreted as local time rather
|
|
||||||
than UTC.
|
|
||||||
.It lestring16
|
|
||||||
A two-byte unicode (UCS16) string in little-endian byte order.
|
|
||||||
.It melong
|
|
||||||
A four-byte value (on most systems) in middle-endian (PDP-11) byte order.
|
|
||||||
.It medate
|
|
||||||
A four-byte value (on most systems) in middle-endian (PDP-11) byte order,
|
|
||||||
interpreted as a
|
|
||||||
.Ux
|
|
||||||
date.
|
|
||||||
.It meldate
|
|
||||||
A four-byte value (on most systems) in middle-endian (PDP-11) byte order,
|
|
||||||
interpreted as a
|
|
||||||
.Ux Ns -style
|
|
||||||
date, but interpreted as local time rather
|
|
||||||
than UTC.
|
|
||||||
.It regex
|
|
||||||
A regular expression match in extended
|
|
||||||
.Tn POSIX
|
|
||||||
regular expression syntax
|
|
||||||
(much like egrep).
|
|
||||||
The type specification can be optionally followed by
|
|
||||||
.Ql /c
|
|
||||||
for case-insensitive matches.
|
|
||||||
The regular expression is always
|
|
||||||
tested against the first
|
|
||||||
.Ar N
|
|
||||||
lines, where
|
|
||||||
.Ar N
|
|
||||||
is the given offset, thus it
|
|
||||||
is only useful for (single-byte encoded) text.
|
|
||||||
.Ql ^
|
|
||||||
and
|
|
||||||
.Ql $
|
|
||||||
will match the beginning and end of individual lines, respectively,
|
|
||||||
not beginning and end of file.
|
|
||||||
.It search
|
|
||||||
A literal string search starting at the given offset.
|
|
||||||
It must be followed by
|
|
||||||
.Li / Ns Aq Ar number
|
|
||||||
which specifies how many matches shall be attempted (the range).
|
|
||||||
This is suitable for searching larger binary expressions with variable
|
|
||||||
offsets, using
|
|
||||||
.Ql \e
|
|
||||||
escapes for special characters.
|
|
||||||
.El
|
|
||||||
.El
|
|
||||||
.Pp
|
|
||||||
The numeric types may optionally be followed by
|
|
||||||
.Em &
|
|
||||||
and a numeric value,
|
|
||||||
to specify that the value is to be AND'ed with the
|
|
||||||
numeric value before any comparisons are done.
|
|
||||||
Prepending a
|
|
||||||
.Em u
|
|
||||||
to the type indicates that ordered comparisons should be unsigned.
|
|
||||||
.Bl -tag -width indent
|
|
||||||
.It test
|
|
||||||
The value to be compared with the value from the file.
|
|
||||||
If the type is
|
|
||||||
numeric, this value
|
|
||||||
is specified in C form; if it is a string, it is specified as a C string
|
|
||||||
with the usual escapes permitted (e.g.\& \en for new-line).
|
|
||||||
.It ""
|
|
||||||
Numeric values
|
|
||||||
may be preceded by a character indicating the operation to be performed.
|
|
||||||
It may be
|
|
||||||
.Em = ,
|
|
||||||
to specify that the value from the file must equal the specified value,
|
|
||||||
.Em < ,
|
|
||||||
to specify that the value from the file must be less than the specified
|
|
||||||
value,
|
|
||||||
.Em > ,
|
|
||||||
to specify that the value from the file must be greater than the specified
|
|
||||||
value,
|
|
||||||
.Em & ,
|
|
||||||
to specify that the value from the file must have set all of the bits
|
|
||||||
that are set in the specified value,
|
|
||||||
.Em ^ ,
|
|
||||||
to specify that the value from the file must have clear any of the bits
|
|
||||||
that are set in the specified value, or
|
|
||||||
.Em ~ ,
|
|
||||||
the value specified after is negated before tested, or
|
|
||||||
.Em x ,
|
|
||||||
to specify that any value will match.
|
|
||||||
If the character is omitted,
|
|
||||||
it is assumed to be
|
|
||||||
.Em = .
|
|
||||||
For all tests except
|
|
||||||
.Dq string
|
|
||||||
and
|
|
||||||
.Dq regex ,
|
|
||||||
operation
|
|
||||||
.Em !\&
|
|
||||||
specifies that the line matches if the test does
|
|
||||||
.Em not
|
|
||||||
succeed.
|
|
||||||
.It ""
|
|
||||||
Numeric values are specified in C form; e.g.\&
|
|
||||||
.Em 13
|
|
||||||
is decimal,
|
|
||||||
.Em 013
|
|
||||||
is octal, and
|
|
||||||
.Em 0x13
|
|
||||||
is hexadecimal.
|
|
||||||
.It ""
|
|
||||||
For string values, the byte string from the
|
|
||||||
file must match the specified byte string.
|
|
||||||
The operators
|
|
||||||
.Em = ,
|
|
||||||
.Em <
|
|
||||||
and
|
|
||||||
.Em >
|
|
||||||
(but not
|
|
||||||
.Em & )
|
|
||||||
can be applied to strings.
|
|
||||||
The length used for matching is that of the string argument
|
|
||||||
in the magic file.
|
|
||||||
This means that a line can match any string, and
|
|
||||||
then presumably print that string, by doing
|
|
||||||
.Em >\e0
|
|
||||||
(because all strings are greater than the null string).
|
|
||||||
.It message
|
|
||||||
The message to be printed if the comparison succeeds.
|
|
||||||
If the string
|
|
||||||
contains a
|
|
||||||
.Xr printf 3
|
|
||||||
format specification, the value from the file (with any specified masking
|
|
||||||
performed) is printed using the message as the format string.
|
|
||||||
.El
|
|
||||||
.Pp
|
|
||||||
Some file formats contain additional information which is to be printed
|
|
||||||
along with the file type or need additional tests to determine the true
|
|
||||||
file type.
|
|
||||||
These additional tests are introduced by one or more
|
|
||||||
.Em >
|
|
||||||
characters preceding the offset.
|
|
||||||
The number of
|
|
||||||
.Em >
|
|
||||||
on the line indicates the level of the test; a line with no
|
|
||||||
.Em >
|
|
||||||
at the beginning is considered to be at level 0.
|
|
||||||
Tests are arranged in a tree-like hierarchy:
|
|
||||||
If a the test on a line at level
|
|
||||||
.Em n
|
|
||||||
succeeds, all following tests at level
|
|
||||||
.Em n+1
|
|
||||||
are performed, and the messages printed if the tests succeed, until a line
|
|
||||||
with level
|
|
||||||
.Em n
|
|
||||||
(or less) appears.
|
|
||||||
For more complex files, one can use empty messages to get just the
|
|
||||||
"if/then" effect, in the following way:
|
|
||||||
.Bd -literal -offset indent
|
|
||||||
0 string MZ
|
|
||||||
>0x18 leshort <0x40 MS-DOS executable
|
|
||||||
>0x18 leshort >0x3f extended PC executable (e.g., MS Windows)
|
|
||||||
.Ed
|
|
||||||
.Pp
|
|
||||||
Offsets do not need to be constant, but can also be read from the file
|
|
||||||
being examined.
|
|
||||||
If the first character following the last
|
|
||||||
.Em >
|
|
||||||
is a
|
|
||||||
.Em \&(
|
|
||||||
then the string after the parenthesis is interpreted as an indirect offset.
|
|
||||||
That means that the number after the parenthesis is used as an offset in
|
|
||||||
the file.
|
|
||||||
The value at that offset is read, and is used again as an offset
|
|
||||||
in the file.
|
|
||||||
Indirect offsets are of the form:
|
|
||||||
.Em (x[.[bslBSL]][+\-][y]) .
|
|
||||||
The value of
|
|
||||||
.Em x
|
|
||||||
is used as an offset in the file.
|
|
||||||
A byte, short or long is read at that offset
|
|
||||||
depending on the
|
|
||||||
.Em [bslBSLm]
|
|
||||||
type specifier.
|
|
||||||
The capitalized types interpret the number as a big endian value, whereas
|
|
||||||
a small letter versions interpret the number as a little endian value;
|
|
||||||
the
|
|
||||||
.Em m
|
|
||||||
type interprets the number as a middle endian (PDP-11) value.
|
|
||||||
To that number the value of
|
|
||||||
.Em y
|
|
||||||
is added and the result is used as an offset in the file.
|
|
||||||
The default type
|
|
||||||
if one is not specified is long.
|
|
||||||
.Pp
|
|
||||||
That way variable length structures can be examined:
|
|
||||||
.Bd -literal -offset indent
|
|
||||||
# MS Windows executables are also valid MS-DOS executables
|
|
||||||
0 string MZ
|
|
||||||
>0x18 leshort <0x40 MZ executable (MS-DOS)
|
|
||||||
# skip the whole block below if it is not an extended executable
|
|
||||||
>0x18 leshort >0x3f
|
|
||||||
>>(0x3c.l) string PE\e0\e0 PE executable (MS-Windows)
|
|
||||||
>>(0x3c.l) string LX\e0\e0 LX executable (OS/2)
|
|
||||||
.Ed
|
|
||||||
.Pp
|
|
||||||
This strategy of examining has one drawback: You must make sure that
|
|
||||||
you eventually print something, or users may get empty output (like, when
|
|
||||||
there is neither PE\e0\e0 nor LE\e0\e0 in the above example).
|
|
||||||
.Pp
|
|
||||||
If this indirect offset cannot be used as-is, there are simple calculations
|
|
||||||
possible: appending
|
|
||||||
.Em [+-*/%&|^]<number>
|
|
||||||
inside parentheses allows one to modify
|
|
||||||
the value read from the file before it is used as an offset:
|
|
||||||
.Bd -literal -offset indent
|
|
||||||
# MS Windows executables are also valid MS-DOS executables
|
|
||||||
0 string MZ
|
|
||||||
# sometimes, the value at 0x18 is less that 0x40 but there's still an
|
|
||||||
# extended executable, simply appended to the file
|
|
||||||
>0x18 leshort <0x40
|
|
||||||
>>(4.s*512) leshort 0x014c COFF executable (MS-DOS, DJGPP)
|
|
||||||
>>(4.s*512) leshort !0x014c MZ executable (MS-DOS)
|
|
||||||
.Ed
|
|
||||||
.Pp
|
|
||||||
Sometimes you do not know the exact offset as this depends on the length or
|
|
||||||
position (when indirection was used before) of preceding fields.
|
|
||||||
You can
|
|
||||||
specify an offset relative to the end of the last uplevel field using
|
|
||||||
.Em &
|
|
||||||
as a prefix to the offset:
|
|
||||||
.Bd -literal -offset indent
|
|
||||||
0 string MZ
|
|
||||||
>0x18 leshort >0x3f
|
|
||||||
>>(0x3c.l) string PE\e0\e0 PE executable (MS-Windows)
|
|
||||||
# immediately following the PE signature is the CPU type
|
|
||||||
>>>&0 leshort 0x14c for Intel 80386
|
|
||||||
>>>&0 leshort 0x184 for DEC Alpha
|
|
||||||
.Ed
|
|
||||||
.Pp
|
|
||||||
Indirect and relative offsets can be combined:
|
|
||||||
.Bd -literal -offset indent
|
|
||||||
0 string MZ
|
|
||||||
>0x18 leshort <0x40
|
|
||||||
>>(4.s*512) leshort !0x014c MZ executable (MS-DOS)
|
|
||||||
# if it's not COFF, go back 512 bytes and add the offset taken
|
|
||||||
# from byte 2/3, which is yet another way of finding the start
|
|
||||||
# of the extended executable
|
|
||||||
>>>&(2.s-514) string LE LE executable (MS Windows VxD driver)
|
|
||||||
.Ed
|
|
||||||
.Pp
|
|
||||||
Or the other way around:
|
|
||||||
.Bd -literal -offset indent
|
|
||||||
0 string MZ
|
|
||||||
>0x18 leshort >0x3f
|
|
||||||
>>(0x3c.l) string LE\e0\e0 LE executable (MS-Windows)
|
|
||||||
# at offset 0x80 (-4, since relative offsets start at the end
|
|
||||||
# of the uplevel match) inside the LE header, we find the absolute
|
|
||||||
# offset to the code area, where we look for a specific signature
|
|
||||||
>>>(&0x7c.l+0x26) string UPX \eb, UPX compressed
|
|
||||||
.Ed
|
|
||||||
.Pp
|
|
||||||
Or even both!
|
|
||||||
.Bd -literal -offset indent
|
|
||||||
0 string MZ
|
|
||||||
>0x18 leshort >0x3f
|
|
||||||
>>(0x3c.l) string LE\e0\e0 LE executable (MS-Windows)
|
|
||||||
# at offset 0x58 inside the LE header, we find the relative offset
|
|
||||||
# to a data area where we look for a specific signature
|
|
||||||
>>>&(&0x54.l-3) string UNACE \eb, ACE self-extracting archive
|
|
||||||
.Ed
|
|
||||||
.Pp
|
|
||||||
Finally, if you have to deal with offset/length pairs in your file, even the
|
|
||||||
second value in a parenthesed expression can be taken from the file itself,
|
|
||||||
using another set of parentheses.
|
|
||||||
Note that this additional indirect offset
|
|
||||||
is always relative to the start of the main indirect offset.
|
|
||||||
.Bd -literal -offset indent
|
|
||||||
0 string MZ
|
|
||||||
>0x18 leshort >0x3f
|
|
||||||
>>(0x3c.l) string PE\e0\e0 PE executable (MS-Windows)
|
|
||||||
# search for the PE section called ".idata"...
|
|
||||||
>>>&0xf4 search/0x140 .idata
|
|
||||||
# ...and go to the end of it, calculated from start+length;
|
|
||||||
# these are located 14 and 10 bytes after the section name
|
|
||||||
>>>>(&0xe.l+(-4)) string PK\e3\e4 \eb, ZIP self-extracting archive
|
|
||||||
.Ed
|
|
||||||
.Sh BUGS
|
|
||||||
The formats
|
|
||||||
.Em long ,
|
|
||||||
.Em belong ,
|
|
||||||
.Em lelong ,
|
|
||||||
.Em melong ,
|
|
||||||
.Em short ,
|
|
||||||
.Em beshort ,
|
|
||||||
.Em leshort ,
|
|
||||||
.Em date ,
|
|
||||||
.Em bedate ,
|
|
||||||
.Em medate ,
|
|
||||||
.Em ledate ,
|
|
||||||
.Em beldate ,
|
|
||||||
.Em leldate ,
|
|
||||||
and
|
|
||||||
.Em meldate
|
|
||||||
are system-dependent; perhaps they should be specified as a number
|
|
||||||
of bytes (2B, 4B, etc),
|
|
||||||
since the files being recognized typically come from
|
|
||||||
a system on which the lengths are invariant.
|
|
||||||
.Pp
|
|
||||||
If
|
|
||||||
.Pa /usr/share/misc/magic
|
|
||||||
is newer than
|
|
||||||
.Pa /usr/share/misc/magic.mgc
|
|
||||||
it is not used.
|
|
||||||
Use the command:
|
|
||||||
.Dq Li "cd /usr/share/misc && file -C -m magic"
|
|
||||||
to rebuild.
|
|
||||||
.Sh SEE ALSO
|
|
||||||
.Xr file 1
|
|
||||||
.\"
|
|
||||||
.\" From: guy@sun.uucp (Guy Harris)
|
|
||||||
.\" Newsgroups: net.bugs.usg
|
|
||||||
.\" Subject: /etc/magic's format isn't well documented
|
|
||||||
.\" Message-ID: <2752@sun.uucp>
|
|
||||||
.\" Date: 3 Sep 85 08:19:07 GMT
|
|
||||||
.\" Organization: Sun Microsystems, Inc.
|
|
||||||
.\" Lines: 136
|
|
||||||
.\"
|
|
||||||
.\" Here's a manual page for the format accepted by the "file" made by adding
|
|
||||||
.\" the changes I posted to the S5R2 version.
|
|
||||||
.\"
|
|
||||||
.\" Modified for Ian Darwin's version of the file command.
|
|
||||||
.\" @(#)$Id: magic.man,v 1.30 2006/02/19 18:16:03 christos Exp $
|
|
Loading…
Reference in New Issue
Block a user