		    lsof (LiSt Open Files) version 4
			    (revision 4.85)


    ********************************************************************
    | The latest release of lsof is always available via anonymous ftp |
    | from lsof.itap.purdue.edu.  Look in pub/tools/unix/lsof.         |
    ********************************************************************

******************************************************************************
| CHECK THE PATCHES/ SUBDIRECTORY FOR FIXES TO THE LATEST LSOF DISTRIBUTION. |
******************************************************************************

 **************************************************************************
 | AVOID USING PRE-BUILT LSOF BINARIES: SEE THE "PRE-BUILT LSOF BINARIES" |
 |                 SECTION IN 00README FOR AN EXPLANATION.                |
 **************************************************************************

   **********************************************************************
   | READ 00LSOF-L FOR INFORMATION ON THE LSOF-L LISTSERV MAILING LIST. |
   **********************************************************************

    *********************************************************************
    |      CHECK 00FAQ BEFORE REPORTING BUGS TO <abe@purdue.edu>.       |
    | 00FAQ ALSO AT: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/FAQ |
    *********************************************************************

    ********************************************************************
    | IMPORTANT!  This README file explains how the lsof tar archive   |
    | is assembled -- it's a "wrapper" tar archive.  Please read the   |
    | explanation of its naming and construction, immediately          |
    | following the initial list of supported dialects.                |
    ********************************************************************


Lsof version 4 lists open files for running UNIX processes.  It is a
descendent of ofiles, fstat, and lsof versions 1, 2, and 3.  It has
been tested recently on these UNIX dialects.

	AIX 5.3
	Apple Darwin 9 and Mac OS X 10.[56]
	FreeBSD 4.9 and 6.4 for x86-based systems
	FreeBSD 8.[02] and 9.0 for AMD64-based systems
	Linux 2.1.72 and above for x86-based systems
	Solaris 9, 10 and 11

Lsof 4 may work on other versions of these dialects, but hasn't been
tested there recently.  Lsof versions 2 and 3 are still available and
may provide older dialect version support.  See the notes on them in
this file.

The pub/tools/unix/lsof/contrib directory on lsof.itap.purdue.edu also
contains information on other ports.

Version 4 of lsof is distributed as bzip2'd, gzip'd and compressed tar
archives in the files:

    ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/lsof.tar.bz2
  and
    ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/lsof.tar.gz
  and
    ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/lsof.tar.Z

These files are links to the current distribution, whose name includes
the revision number:

    ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof_<rev>.tar.bz2
  and
    ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof_<rev>.tar.gz
  and
    ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof_<rev>.tar.Z

<rev> is the revision number -- e.g., 4.85.  These archives are called
wrappers, because the lsof source tar archive, its GPG certificate
(lsof_<rev>_src.tar.sig), and some documentation files are wrapped
together inside them.  (The GPG certificate authenticates the source
tar archive.)  A tar archive with: a ``.bz2'' suffix has been
compressed with bzip2; ``.gz'', with gzip; and ``.Z'', with compress.

When the wrapper tar is gunzip'd or uncompressed, and its tar archive
contents are extracted, an lsof_4.85 subdirectory is created in the
directory where the extraction was performed.  The lsof_4.85
subdirectory contains these files:

	00.README.FIRST		contains introductory distribution
				information.

	README.lsof_4.85	contains instructions for the
				security-conscious on how to be
				sure that no one has tampered with
				the distribution.

	RELEASE_SUMMARY_4.85	is this file.

	lsof_4.85_src.tar       is a tar archive, containing the
				lsof sources.  When extracted with
				tar it creates a subdirectory named
				lsof_4.85_src in the directory
				where the extraction was performed.
				The lsof source files will be found
				in lsof_4.85_src.

	lsof_4.85_src.tar.sig   is a GPG certificate, authenticating
				the lsof_4.85_src.tar archive.  See the
				README.lsof_4.85 file for more
				information on GPG authentication of
				lsof_4.85_src.tar.

If you've obtained this file and an lsof distribution from a mirror
site, please be aware that THE LATEST VERSION OF LSOF IS AVAILABLE VIA
ANONYMOUS FTP FROM LSOF.ITAP.PURDUE.EDU IN THE PUB/TOOLS/UNIX/LSOF
DIRECTORY.

Patches to lsof distributions may be found in the patches/ sub-
directory where you found lsof.tar.bz2, lsof.tar.gz or lsof.tar.Z.
If there are any patches to the current distribution, they will be
found in the patches/4.85/ branch.

(If you need a copy of gunzip, look for it at prep.ai.mit.edu in
pub/gnu/gzip*.)

* The September 27, 2011 revision (4.85): adds an automatic work-around for
  an lgrp_root conflict in some Solaris 9 and 10 versions; supports FreeBSD
  7.4 and 8.[12] (8.1 not tested); adds fixes for Solaris 11 kernel module
  path determination; picked lint for Linux; added more Linux cross
  configuration support; adds support for Mac OS X 10.6; tested on FreeBSD
  6.4; adapts to FreeBSD ZFS update; drops support for FreeBSD 7.x; adjusts
  for Solaris 10 with patch 144488-10; added Linux +|-e option support;
  adjusts for a FreeBSD 9 change; fixes a Linux AF_UNIX path reporting bug;
  adjusts for dropping of RPC headers from Linux GlibC 2.14; adds Linux
  Netlink protocol support; corrects UDP6-lite Linux path.


Read the 00.README.FIRST in the lsof distribution first.

Read the 00DIST distribution file for more details on feature additions
and bug fixes.

The 00README distribution file has build instructions, dialect
descriptions, special feature discussions, and installation hints.

The 00FAQ file contains a list of frequently asked questions and their
answers.

The 00DCACHE file explains device cache file path formation.

The 00PORTING file contains information on porting lsof to other UNIX
dialects.

The 00QUICKSTART file gives a quick introduction to using lsof.

The distribution files lsof.8 (nroff source) and lsof.man (nroff
formatted output) contain the manual page for lsof; it is the only
other documentation besides the source code (it's included).


Version 4 Binaries
==================

Version 4 binaries for some revisions, dialects, and platforms may be
found in pub/tools/unix/lsof/binaries.  Check the README files for
exact descriptions.  Check the dialect-specific Makefiles for
installation instructions.  CHECKSUMS and GPG certificates are provided
for authentication.

Please think very carefully before you decide to use a pre-built binary
instead of making your own from the sources.  Here are some points to
consider:

1. Lsof must run setgid or setuid.  Are you willing to trust that
   power to a binary you didn't construct yourself?

2. Lsof binaries may be generated on a system whose configuration
   header files differ from yours.  Under Digital UNIX (DEC OSF/1), for
   example, lsof includes header files from the machine's configuration
   directory, /sys/<name>.  Are you willing to gamble that your
   configuration directory's header files match the ones used to
   compile lsof?

3. Lsof is often configured with specific options that are determined
   from the configuration of the system on which it is configured --
   e.g., Solaris patch level, dynamic loader libraries, etc.  Are you
   sure that the lsof binary you retrieve will have been configured for
   your system? If you get a binary that is misconfigured for you, it
   may not work at all.

If you haven't already guessed, I believe firmly that you should
retrieve sources and build your own binary.  If you still want to use
the distribution binaries, please authenticate what you retrieved with
the GPG certificates; please compare checksums, too.


Version 4 Checksums
===================

Security checksums -- both MD5 and sum(1) -- for revisions of lsof
version 4 are contained in the README.lsof_<rev> files in the wrapper
tar archives of pub/tools/unix/lsof.

The CHECKSUMS file, found with the distribution archives, contains
information on validating the archives with external MD5 checksums and
external GPG certificates.


GPG Certificates
================

The lsof wrapper tar archive includes a GPG certificate file in its
contained lsof_4.71_src.tar.sig file.

Binary files have detached GPG certificates that may be found in their
directories with ".sig" extensions.

The certificates are signed with my GPG public key, which may be found
in the file:

    ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/Victor_A_Abell.gpg

My key may also be available at some public key servers,

There is also authentication information in the CHECKSUMS file (a link
to CHECKSUMS_<rev>), found with the lsof distribution files.  CHECKSUMS
contains external MD5 checksums for the distribution files and
information on using the external GPG certificates, found with the lsof
distribution files.


Old Dialect Support
===================

Remnants of source code and binaries for dialects for which lsof once
provided support may be obtained by request.  Send the request to
abe@purdue.edu.

Dialects no longer supported include:

	CDC EP/IX
	MIPS RISC/os
	Motorola V/88
	Pyramid DC/OSx
	Pyramid Reliant UNIX
	Sequent DYNIX
	SGI IRIX
	SunOS 4.1.x
	Ultrix

Generally I drop support for a dialect when I no longer have access to
a test system.


Lsof Version 2
==============

The version 3 predecessor, revision 36 of version 2, is also available
upon request.  Send the request to abe@purdue.edu.

I recommend you avoid lsof version 2.  It's out of date and I no
longer provide support for it.  (Versions 3 and 4 support more
dialects, and have many enhancements, bug fixes, and improvements.)
Version 2 was tested on the following UNIX dialects:

	AIX 3.2.[1234] for the IBM RISC/System 6000
	DEC OSF/1 1.[23] and 2.0 for the DEC Alpha
	EP/IX 1.4.3 and 2.1.1 for the CDC 4680
	ETAV 1.17 for the ETA-10P*
	FreeBSD 1.0e for x86-based systems
	HP-UX [789].x for HP systems
	IRIX 4.0.5 and 5.1.1 for SGI systems
	NEXTSTEP 2.1, 3.0, 3.1 for NeXT systems
	Sequent Dynix 3.0.12 for Sequent Symmetry systems
	SunOS 4.1.[123] for Sun 3 and 4 systems
	SunOS 5.[13] (Solaris 2.[13]) for Sun 4 systems
	Ultrix 2.2 and 4.2 for DEC systems

(If you need a copy of gunzip, look for it at prep.ai.mit.edu in
pub/gnu.)


Version 2 Checksums
===================

MD5:
	(OLD/lsof236tar.gz) = f8a1ab3971ea2f6a3ea16752f84409e8

sum(1):
	39996   106 OLD/lsof236tar.gz

The file OLD/lsof236tar.gz.asc is a detached PGP certificate that may
be used to authenticate OLD/lsof236tar.gz with my PGP public key.  You
may find my PGP public key at:

  ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/OLD/Victor_A_Abell.pgp
    

Lsof Version 3
==============

The last revision of lsof version 3, 3.88, may obtained by request.
Send the request to abe@purdue.edu.

I recommend version 4 over version 3.  It is the version I actively
support.

Lsof version 3 was tested on these UNIX dialects:

	AIX 3.2.5, 4.1[.[1234]], and 4.2
	BSDI BSD/OS 2.0, 2.0.1, and 2.1 for x86-based systems
	DC/OSx 1.1 for Pyramid systems
	Digital UNIX (DEC OSF/1) 2.0, 3.0, 3.2, and 4.0
	EP/IX 2.1.1 for the CDC 4680
	FreeBSD 1.1.5.1, 2.0, 2.0.5, 2.1, 2.1.5 for x86-based
	    systems
	HP-UX 8.x, 9.x, 10.01, 10.10, and 10.20
	IRIX 5.2, 5.3, 6.0, 6.0.1, and 6.[124]
	Linux 2.0.3[01] and 2.1.57 for x86-based systems
	NetBSD 1.0, 1.1, and 1.2 for x86 and SPARC-based
	    systems
	NEXTSTEP 2.1 and 3.[0123] for NEXTSTEP architectures
	OpenBSD 1.2 and 2.0 for x86-based systems
	Reliant UNIX 5.43 for Pyramid systems
	RISC/os 4.52 for MIPS R2000-based systems
	SCO OpenServer 1.1, 3.0, and 5.0.[024] for x86-based 
	    systems
	SCO UnixWare 2.1 and 2.1.1 for x86-based systems
	Sequent PTX 2.1.[1569], 4.0.[23], 4.1.[024], 4.2[.1],
	    and 4.3
	Solaris 2.[12345], 2.5.1, and 2.6-Beta
	SunOS 4.1.x
	Ultrix 4.2, 4.3, 4.4, and 4.5


Vic Abell <abe@purdue.edu>
September 27, 2011
