| |
| Making and Installing lsof 4 |
| |
| ******************************************************************** |
| | The latest release of lsof is always available via anonymous ftp | |
| | from lsof.itap.purdue.edu. Look in pub/tools/unix/lsof. | |
| ******************************************************************** |
| |
| Contents |
| |
| Pre-built Lsof Binaries |
| Making Lsof |
| Other Configure Script Options |
| Environment Variables |
| Security |
| Run-time Warnings |
| Device Access Warnings |
| NFS Blocks |
| Caches -- Name and Device |
| Raw Sockets |
| Other Compile-time Definitions |
| The AFSConfig Script |
| The Inventory Script |
| The Customize Script |
| Cautions |
| Warranty |
| License |
| Bug Reports |
| The 00FAQ File |
| The lsof-l Mailing List |
| Field Output Example Scripts |
| Field Output C Library |
| Testing Lsof |
| Dialect Notes |
| AFS |
| AIX |
| Apple Darwin |
| Auspex LFS (no longer maintained) |
| BSDI BSD/OS |
| DEC OSF/1, Digital UNIX, Tru64 UNIX |
| FreeBSD |
| HP-UX |
| IPv6 |
| Linux |
| NetBSD |
| NEXTSTEP and OPENSTEP |
| OpenBSD |
| Pyramid DC/OSx and Reliant UNIX (no longer available) |
| Caldera OpenUNIX |
| SCO OpenServer |
| SCO|Caldera UnixWare |
| Solaris 2.x, 7, 8, 9 and 10 |
| Ultrix (no longer available) |
| Veritas VxFS and VxVM |
| User-contributed Dialect Support |
| Dialects No Longer Supported |
| Installing Lsof |
| Setuid-root Lsof Dialects |
| Setgid Lsof Dialects |
| Porting lsof 4 to a New UNIX Dialect |
| Quick Start to Using lsof |
| Cross-configuring Lsof |
| Environment Variables Affecting the Configure Script |
| |
| |
| ======================= |
| Pre-built Lsof Binaries |
| ======================= |
| |
| Avoid using pre-built lsof binaries if you can; build your own |
| instead. |
| |
| I do not support lsof binaries built and packaged by third parties nor |
| lsof binaries built from anything but the latest lsof revision. (See |
| the Bug Reports section for more information on the details of lsof |
| support.) |
| |
| One important reasone for those support restrictions is that when lsof |
| is built its Configure script tunes lsof to the features available on |
| the building system, often embodied in supporting header files and |
| libraries. If the building system doesn't have support for a |
| particular feature, lsof won't be built to support the feature on any |
| system. |
| |
| The Veritas VxFS file system is a good example of a feature that |
| requires build-time support. |
| |
| UNIX dialect version differences -- Solaris 8 versus 9, AIX 4.3.3 |
| vesus 5.2, etc. -- can also render a pre-built lsof binary useless |
| on a different version. So can kernel bit size. |
| |
| There are so many potential pitfalls to using an lsof binary |
| improperly that I strongly recommend lsof be used only where it is |
| built. |
| |
| |
| =========== |
| Making Lsof |
| =========== |
| |
| $ cd <lsof source directory> |
| $ ./Configure <your dialect's abbreviation> |
| $ make |
| |
| (Consult the 00FAQ and 00XCONFIG files of the lsof distribution |
| for information about using make command invocations and environment |
| variables to override lsof default Makefile strings.) |
| |
| This lsof distribution can be used with many UNIX dialects. However, |
| it must be configured specifically for each dialect. Configuration |
| is done in three ways: 1) by changing definitions in the machine.h |
| header file of the UNIX dialect of interest; 2) by defining |
| environment variable values prior to calling Configure (see the |
| 00XCONFIG file, the Environment Variabls and Environment Variables |
| Affecting the Configure Script sections of this file); and 3) by |
| running the Configure shell script found in the top level of the |
| distribution directory. |
| |
| You may not need to change any machine.h definitions, but you might |
| want to look at them anyway. Pay particular attention to the |
| definitions that are discussed in the Security section of this |
| file. Please read that section. |
| |
| The Configure script calls three other scripts in the lsof |
| distribution: AFSConfig; Inventory; and Customize. The AFSConfig |
| script is called for selected dialects (AIX, HP-UX, NEXTSTEP, and |
| Solaris) to locate AFS header files and determine the AFS version. |
| See The AFSConfig Script section of this file for more information. |
| |
| The Inventory script checks the completeness of the lsof distribution. |
| Configure calls Inventory after it has accepted the dialect |
| abbreviation, but before it configures the top-level directory for |
| the dialect. See The Inventory Script section of this file for |
| more information. |
| |
| Configure calls the Customize script after it has configured the |
| top-level lsof directory for the declared dialect. Customize helps |
| you modify some of the important compile-time definitions of |
| machine.h. See the The Customize Script section. |
| |
| You should also think about where you will install lsof and its |
| man page, and whom you will let execute lsof. Please read the |
| Installing Lsof section of this file for information on installation |
| considerations. |
| |
| Once you have inspected the machine.h file for the dialect for |
| which you want to build lsof, and made any changes you need, run |
| the Configure script, supplying it with the abbreviation for the |
| dialect. (See the following table.) Configure selects the |
| appropriate options for the dialect and runs the Mksrc shell script |
| in the dialect sub-directory to construct the appropriate source |
| files in the top-level distribution directory. |
| |
| Configure may also run the MkKernOpts script in the dialect |
| sub-directory to propagate kernel build options to the dialect |
| Makefile. This is done for only a few dialects -- e.g., DC/OSx, |
| and Reliant UNIX. |
| |
| Configure creates a dialect-specific Makefile. You may want to |
| inspect or edit this Makefile to make it conform to local conventions. |
| If you want the Makefile to install lsof and its man page, you will |
| have to create an appropriate install rule. |
| |
| Lsof may be configured using UNIX dialect abbreviations from the |
| following table. Alternative abbreviations are indicated by a |
| separating `|'. For example, for SCO OpenServer you can use either |
| the ``osr'' or the ``sco'' abbreviation: |
| |
| $ Configure osr |
| or |
| $ Configure sco |
| |
| Abbreviations UNIX Dialect |
| ------------- ------------ |
| |
| aix IBM AIX 5.[23] and 5.3-ML1 using IBM's C Compiler |
| aixgcc IBM AIX 5.[12] and 5.3-ML1 using gcc |
| darwin Apple Darwin 7.x and 8.x for Power Macintosh systems |
| decosf DEC OSF/1, Digital UNIX, Tru64 UNIX 4.0 and 5.1 |
| digital_unix Digital UNIX, DEC OSF/1, Tru64 UNIX 4.0 and 5.1 |
| du Digital UNIX, DEC OSF/1, Tru64 UNIX 4.0 and 5.1 |
| freebsd FreeBSD 4.x, 4.1x, 5.x and [67].x |
| hpux HP-UX 11.00, 11.11 and 11.23, using HP's C |
| Compiler, both /dev/kmem-based and PSTAT-based |
| hpuxgcc HP-UX 11.00, 11.11 and 11.23, using gcc, both |
| /dev/kmem-based and PSTAT-based |
| linux Linux 2.1.72 and above for x86-based systems |
| netbsd NetBSD 1.[456], 2.x and 3.x |
| next NEXTSTEP 3.[13] |
| nextstep NEXTSTEP 3.[13] |
| ns NEXTSTEP 3.[13] |
| nxt NEXTSTEP 3.[13] |
| openbsd OpenBSD 2.[89] and 3.[0-9] |
| openstep OPENSTEP 4.x |
| os OPENSTEP 4.x |
| osr SCO OpenServer Release 5.0.6, using the C compiler |
| from the SCO developer's kit |
| osrgcc SCO OpenServer Release 5.0.6, using gcc |
| osr6 SCO Openserver 6.0.0, using the SCO C compiler |
| sco SCO OpenServer Release 5.0.6, using the C compiler |
| from the SCO developer's kit |
| scogcc SCO OpenServer Release 5.0.6, using gcc |
| solaris Solaris 2.x, 7, 8, 9 and 10 using gcc |
| solariscc Solaris 2.x, 7, 8, 9 and 10 using Sun's cc |
| tru64 Tru64 UNIX, DEC OSF/1, Digital UNIX 4.0 and 5.1 |
| unixware SCO|Caldera UnixWare 7.1.4 |
| uw SCO|Caldera UnixWare 7.1.4 |
| |
| If you have an earlier version of a dialect not named in the above |
| list, lsof may still work on your system. I have no way of testing |
| that myself. Try configuring for the named dialect -- e.g., if |
| you're using Solaris 2.1, try configuring for Solaris 2.5.1. |
| |
| After you have configured lsof for your UNIX dialect and have |
| selected options via the Customize script (See the The Customize |
| Script section.) , use the make command to build lsof -- e.g., |
| |
| $ make |
| |
| |
| Other Configure Script Options |
| ============================== |
| |
| There are three other useful options to the Configure script besides |
| the dialect abbreviation: |
| |
| -clean may be specified to remove all traces of |
| a dialect configuration, including the |
| Makefile, symbolic links, and library files. |
| |
| -h may be specified to obtain a list of |
| -help Configure options, including dialect |
| abbreviations. |
| |
| -n may be specified to stop the Configure |
| script from calling the Customize and |
| Inventory scripts. |
| |
| Caution: -n also suppresses the AFSConfig |
| step. |
| |
| |
| |
| Environment Variables |
| ===================== |
| |
| Lsof configuration, building, and execution may be affected by |
| environment variable settings. See the Definitions That Affect |
| Compilation section in the 00PORTING file, the General Environment |
| Variables section in the 00XCONFIG file, the Dialect-Specific |
| Environment Variables section in the 00XCONFIG file, and the |
| Environment Variables Affecting the Configure Script section of |
| this file for more information. |
| |
| Note in the General Environment Variables section of the 00XCONFIG |
| file that there are five environment variables that can be used to |
| pre-define values in lsof's -v output: LSOF_BLDCMT, LSOF_HOST, |
| LSOF_LOGNAME, LSOF_SYSINFO, and LSOF_USER. |
| |
| |
| Security |
| ======== |
| |
| If the symbol HASSECURITY is defined, a security mode is enabled, |
| and lsof will allow only the root user to list all open files. |
| Non-root users may list only open files whose processes have the |
| same user ID as the real user ID of the lsof process (the one that |
| its user logged on with). |
| |
| However, if HASNOSOCKSECURITY is also defined, anyone may list |
| anyone else's open socket files, provided their listing is enabled |
| with the "-i" option. |
| |
| Lsof is distributed with the security mode disabled -- HASSECURITY |
| is not defined. (When HASSECURITY is not defined, the definition |
| of HASNOSOCKSECURITY has no meaning.) You can enable the security |
| mode by defining HASSECURITY in the Makefile or in the machine.h |
| header file for the specific dialect you're using -- e.g. |
| dialects/aix/machine.h. |
| |
| The Customize script, run by Configure when it has finished its |
| work, gives you the opportunity to define HASSECURITY and |
| HASNOSOCKSECURITY. (See the The Customize Script section.) |
| |
| The lsof -h output indicates the state HASSECURITY and HASNOSOCKSECURITY |
| had when lsof was built, reporting: |
| |
| "Only root can list all files;" |
| if HASSECURITY was defined and HASNOSOCKSECURITY wasn't |
| defined; |
| |
| "Only root can list all files, but anyone can list socket files." |
| if HASSECURITY and HASNOSOCKSECURITY were both defined; |
| |
| "Anyone can list all files;" |
| if HASSECURITY wasn't defined. (The definition of |
| HASNOSOCKSECURITY doesn't matter when HASSECURITY isn't |
| defined.) |
| |
| You should carefully consider the implications of using the default |
| security mode. When lsof is compiled in the absence of the |
| HASSECURITY definition, anyone who can execute lsof may be able to |
| see the presence of all open files. This may allow the lsof user |
| to observe open files -- e.g., log files used to track intrusions |
| -- whose presence you would rather not disclose. |
| |
| All pre-compiled binaries on lsof.itap.purdue.edu and mirrored from |
| it were constructed without the HASSECURITY definition. |
| |
| As distributed, lsof writes a user-readable and user-writable device |
| cache file in the home directory of the real user ID executing |
| lsof. There are other options for constructing the device cache file |
| path, and they each have security implications. |
| |
| The 00DCACHE file in the lsof distribution discusses device cache |
| file path construction in great detail. It tells how to disable |
| the various device cache file path options, or how to disable the |
| entire device cache file feature by removing the HASDCACHE definition |
| from the dialect's machine.h file. There is also information on |
| the device cache file feature in the 00FAQ file. (The 00DCACHE |
| and 00FAQ files are part of the lsof distribution package.) |
| |
| The Customize script, run by Configure after it has finished its |
| work, gives you the opportunity to change the compile-time options |
| related to the device cache file. (See The Customize Script |
| section.) |
| |
| Since lsof may need setgid or setuid-root permission (See the Setgid |
| Lsof Dialects and Setuid-root Lsof Dialects sections.), its security |
| should always be viewed with skepticism. Lest the setgid and |
| setuid-root permissions allow lsof to read kernel name list or |
| memory files, declared with the -k and -m options, that the lsof |
| user can't normally access, lsof uses access(2) to establish its |
| real user's authority to read such files when it can't surrender |
| its power before opening them. This change was added at the |
| suggestion of Tim Ramsey. |
| |
| Lsof surrenders setgid permission on most dialects when it has |
| gained access to the kernel's memory devices. There are exceptions |
| to this rule, and some lsof implementations need to run setuid-root. |
| (The Setgid Lsof Dialects and Setuid-root Lsof Dialects sections |
| contains a list of lsof implementations and the permissions |
| recommended in the distribution's Makefiles.) |
| |
| The surrendering of setgid permission is controlled by the WILLDROPGID |
| definition in the dialect machine.h header files. |
| |
| In the end you must judge for yourself and your installation the |
| risks that lsof presents and restrict access to it according to |
| your circumstances and judgement. |
| |
| |
| Run-time Warnings |
| ================= |
| |
| Lsof can issue warning messages when it runs -- e.g., about the |
| state of the device cache file, about an inability to access an |
| NFS file system, etc. Issuance of warnings are enabled by default |
| in the lsof distribution. |
| |
| Issuance or warnings may be disabled by default by defining |
| WARNINGSTATE in the dialect's machine.h. The Customize script may |
| also be used to change the default warning message issuance state. |
| (See The Customize Script section.) |
| |
| The ``-w'' option description of the ``-h'' option (help) output |
| will indicate the default warning issuance state. Whatever the |
| state may be, it can be reversed with ``-w''. |
| |
| |
| Device Access Warnings |
| ====================== |
| |
| When lsof encounters a /dev (or /devices) directory, one of its |
| sub-directories, or one of their files that it cannot access with |
| opendir(3) or stat(2), it issues a warning message and continues. |
| Lsof will be more likely to issue such a warning when it has been |
| installed with setgid(<some group name>) permission; it won't have |
| trouble if it has been installed with setuid(root) permission or |
| is being run under the root login. |
| |
| The lsof caller can inhibit or enable the warning with the -w |
| option, depending on the issuance state of run-time warnings. (See |
| the Run-time Warnings section.) |
| |
| The warning messages do not appear when lsof obtains device |
| information from a device cache file that it has built and believes |
| to be current or when warning message issuance is disabled by |
| default. (See the "Caches -- Name and Device" section for more |
| information on the device cache file.) |
| |
| The lsof builder can inhibit the warning by disabling the definition |
| of WARNDEVACCESS in the dialect's machine.h or disable all warnings |
| by defining WARNINGSTATE. WARNDEVACCESS is defined by default for |
| most dialects. However, some dialects have some device directory |
| elements that are private -- e.g., HP-UX -- and it is more convenient |
| for the lsof user if warning messages about them are inhibited. |
| |
| Output from lsof's -h option indicates the status of WARNDEVACCESS. |
| If it was defined when lsof was compiled, this message will appear: |
| |
| /dev warnings = enabled |
| |
| If WARNDEVACCESS was not defined when lsof was compiled, this |
| message will appear instead: |
| |
| /dev warnings = disabled |
| |
| The Customize script, run by Configure after it has finished its |
| work, gives you the opportunity to change the WARNDEVACCESS |
| definition. (See The Customize Script section.) |
| |
| |
| NFS Blocks |
| ========== |
| |
| Lsof is susceptible to NFS blocks when it tries to lstat() mounted |
| file systems and when it does further processing -- lstat() and |
| readlink() -- on its optional file and file system arguments. |
| |
| Lsof tries to avoid being stopped completely by NFS blocks by doing |
| the lstat() and readlink() functions in a child process, which |
| returns the function response via a pipe. The lsof parent limits |
| the wait for data to arrive in the pipe with a SIGALRM, and, if |
| the alarm trips, terminates the child process with a SIGINT and a |
| SIGKILL. |
| |
| This is as reliable and portable a method for breaking NFS deadlocks |
| as I have found, although it still fails under some combinations |
| of NFS version, UNIX dialect, and NFS file system mount options. |
| It generally succeeds when the "intr" or "soft" mount options are |
| used; it generally fails when the "hard" mount option is used. |
| |
| When lsof cannot kill the child process, a second timeout causes |
| it to stop waiting for the killed child to complete. While the |
| second timeout allows lsof to complete, it may leave behind a hung |
| child process. Unless warnings are inhibited by default or with |
| the -w option, lsof reports the possible hung child. |
| |
| NFS block handling was updated with suggestions made by Andreas |
| Stolcke. Andreas suggested using the alternate device numbers that |
| appear in the mount tables of some dialects when it is not possible |
| to stat(2) the mount points. |
| |
| The -b option was added to direct lsof to avoid the stat(2) and |
| readlink(2) calls that might block on NFS mount points and always |
| use the alternate device numbers. If warning message issuance is |
| enabled and you don't want warning messages about what lsof is |
| doing, use the -w option, too. |
| |
| The -O option directs lsof to avoid doing the potentially blocking |
| operations in child processes. Instead, when -O is specified, lsof |
| does them directly. While this consumes far less system overhead, |
| it can cause lsof to hang, so I advise you to use -O sparingly. |
| |
| |
| Caches -- Name and Device |
| ========================== |
| |
| Robert Ehrlich suggested that lsof obtain path name components for |
| open files from the kernel's name cache. Where possible, lsof |
| dialect implementations do that. The -C option inhibits kernel |
| name cache examination. |
| |
| Since AFS apparently does not use the kernel's name cache, where |
| lsof supports AFS it is unable to identify AFS files with path name |
| components. |
| |
| Robert also suggested that lsof cache the information it obtains |
| via stat(2) for nodes in /dev (or /devices) to reduce subsequent |
| running time. Lsof does that, too. |
| |
| In the default distribution the device cache file is stored in |
| .lsof_hostname, mode 0600, in the home directory of the login of |
| the user ID that executes lsof. The suffix, hostname, is the first |
| component of the host's name returned by gethostname(2). If lsof |
| is executed by a user ID whose home directory is NFS-mounted from |
| several hosts, the user ID's home directory may collect several |
| device cache files, one for each host from which it was executed. |
| |
| Lsof senses accidental or malicious damage to the device cache file |
| with extensive integrity checks, including the use of a 16 bit CRC. |
| It also tries to sense changes in /dev (or /devices) that indicate |
| the device cache file is out of date. |
| |
| There are other options for forming the device cache file path. |
| Methods the lsof builder can use to control and employ them are |
| documented in the separate 00DCACHE file of the lsof distribution. |
| |
| |
| Raw Sockets |
| =========== |
| |
| On many UNIX systems raw sockets use a separate network control |
| block structure. Display of files for applications using raw |
| sockets -- ping, using ICMP, for example -- need special support |
| for displaying their information. This support is so dialect-specific |
| and information to provide it so difficult to find that not all |
| dialect revisions of lsof handle raw sockets completely. |
| |
| |
| Other Compile-time Definitions |
| ============================== |
| |
| The machine.h and dlsof.h header files for each dialect contains |
| definitions that affect the compilation of lsof. Check the |
| Definitions That Affect Compilation section of the 00PORTING file |
| of the lsof distribution for their descriptions. (Also see The |
| Customize Script section.) |
| |
| |
| The AFSConfig Script |
| ==================== |
| |
| Lsof supports AFS on some combinations of UNIX dialect and AFS |
| version. See the AFS section of this document for a list of |
| supported combinations. |
| |
| When configuring for dialects where AFS is supported, the Configure |
| script calls the AFSConfig script to determine the location of AFS |
| header files and the AFS version. Configure will not call AFSConfig, |
| even for the selected dialects, unless the file /usr/vice/etc/ThisCell |
| exists. |
| |
| The AFS header file location is recorded in the AFSHeaders file; |
| version, AFSVersion. Once these values have been recorded, Configure |
| can be told to skip the calling of AFSConfig by specifying its |
| (Configure's) -n option. |
| |
| |
| The Inventory Script |
| ==================== |
| |
| The lsof distribution contains a script, called Inventory, that |
| checks the distribution for completeness. It uses the file 00MANIFEST |
| in the distribution as a reference point. |
| |
| After the Configure script has accepted the dialect abbreviation, |
| it normally calls the Inventory script to make sure the distribution |
| is complete. |
| |
| After Inventory has run, it creates the file ".ck00MAN" in the |
| top-level directory to record for itself the fact that the inventory |
| has been check. Should Inventory be called again, it senses this |
| file and asks the caller if another check is in order, or if the |
| check should be skipped. |
| |
| The -n option may be supplied to Configure to make it bypass the |
| calling of the Inventory script. (The option also causes Configure |
| to avoid calling the Customize script.) |
| |
| The lsof power user may want to define (touch) the file ".neverInv". |
| Configure avoids calling the Inventory script when ".neverInv" |
| exists. |
| |
| |
| The Customize Script |
| ==================== |
| |
| Normally when the Configure script has finished its work, it calls |
| another shell script in the lsof distribution called Customize. |
| (You can tell Configure to bypass Customize with its -n option.) |
| |
| Customize leads you through the specification of these important |
| compile-time definitions for the dialect's machine.h header file: |
| |
| HASDCACHE device cache file control |
| HASENVDC device cache file environment |
| variable name |
| HASPERSDC personal device cache file path |
| format |
| HASPERSDCPATH name of environment variable that |
| provides an additional component |
| of the personal device cache file |
| path |
| HASSYSDC system-wide device cache file path |
| HASKERNIDCK the build-time to run-time kernel |
| identity check |
| HASSECURITY the security option |
| HASNOSOCKSECURITY the open socket listing option whe |
| HASSECURITY is defined |
| WARNDEVACCESS /dev (or /devices) warning message |
| control |
| WARNINGSTATE warning message issuance state |
| |
| The Customize script accompanies its prompting for entry of new |
| values for these definitions with brief descriptions of each of |
| them. More information on these definitions may be found in this |
| file or in the 00DCACHE and 00FAQ files of the lsof distribution. |
| |
| You don't need to run Customize after Configure. You can run it |
| later or you can edit machine.h directly. |
| |
| The -n option may be supplied to Configure to make it bypass the |
| calling of the Customize script. (The option also causes Configure |
| to avoid calling the Inventory script.) |
| |
| The lsof power user may want to define (touch) the file ".neverCust". |
| Configure avoids calling the Customize script when ".neverCust" |
| exists. |
| |
| Customize CAUTION: the Customize script works best when it is |
| applied to a newly configured lsof source base -- i.e., the machine.h |
| header file has not been previously modified by the Customize |
| script. If you have previously configured lsof, and want to rerun |
| the Customize script, I recommend you clean out the previous |
| configuration and create a new one: |
| |
| $ Configure -clean |
| $ Configure <dialect_abbreviation> |
| ... |
| Customize in response to the Customize script prompts. |
| |
| |
| Cautions |
| ======== |
| |
| Lsof is a tool that is closely tied to the UNIX operating system |
| version. It uses header files that describe kernel structures and |
| reads kernel structures that typically change from OS version to |
| OS version, and even within a version as vendor patches are applied. |
| |
| DON'T TRY TO USE AN LSOF BINARY, COMPILED FOR ONE UNIX OS VERSION, |
| ON ANOTHER. VENDOR PATCHES INFLUENCE THE VERSION IDENTITY. |
| |
| On some UNIX dialects lsof versions may be even more restricted by |
| architecture type. |
| |
| The bottom line is use lsof where you built it. If you intend to |
| use a common lsof binary on multiple systems, make sure all systems |
| run exactly the same OS version and have exactly the same patches. |
| |
| |
| Warranty |
| ======== |
| |
| Lsof is provided as-is without any warranty of any kind, either |
| expressed or implied, including, but not limited to, the implied |
| warranties of merchantability and fitness for a particular purpose. |
| The entire risk as to the quality and performance of lsof is with |
| you. Should lsof prove defective, you assume the cost of all |
| necessary servicing, repair, or correction. |
| |
| |
| License |
| ======= |
| |
| Lsof has no license. Its use and distribution are subject to these |
| terms and conditions, found in each lsof source file. (The copyright |
| year in or format of the notice may vary slightly.) |
| |
| /* |
| * Copyright 2002 Purdue Research Foundation, West Lafayette, |
| * Indiana 47907. All rights reserved. |
| * |
| * Written by Victor A. Abell |
| * |
| * This software is not subject to any license of the American |
| * Telephone and Telegraph Company or the Regents of the |
| * University of California. |
| * |
| * Permission is granted to anyone to use this software for |
| * any purpose on any computer system, and to alter it and |
| * redistribute it freely, subject to the following |
| * restrictions: |
| * |
| * 1. Neither the authors nor Purdue University are responsible |
| * for any consequences of the use of this software. |
| * |
| * 2. The origin of this software must not be misrepresented, |
| * either by explicit claim or by omission. Credit to the |
| * authors and Purdue University must appear in documentation |
| * and sources. |
| * |
| * 3. Altered versions must be plainly marked as such, and must |
| * not be misrepresented as being the original software. |
| * |
| * 4. This notice may not be removed or altered. |
| */ |
| |
| |
| Bug Reports |
| =========== |
| |
| Now that the obligatory disclaimer is out of the way, let me hasten to |
| add that I accept lsof bug reports and try hard to respond to them. I |
| will also consider and discuss requests for new features, ports to new |
| dialects, or ports to new OS versions. |
| |
| PLEASE DON'T SEND BUG REPORTS ABOUT LSOF TO THE UNIX DIALECT OR DIALECT |
| OPTION VENDOR. |
| |
| At worst such bug reports will confuse the vendor; at best, the vendor |
| will forward the bug report to me. |
| |
| PLEASE DON'T SEND BUG REPORTS ABOUT LSOF BINARIES BUILT OR DISTRIBUTED |
| BY SOMEONE ELSE, BECAUSE I CAN'T SUPPORT THEM. |
| |
| I do support binaries I built, obtained ONLY from lsof.itap.purdue.edu. |
| Before reporting a problem with a lsof.itap.purdue.edu binary, please |
| verify the correctness of the signatures found in its associated |
| CHECKSUMS file. |
| |
| Before you send me a bug report, please do these things: |
| |
| * Make sure you try the latest lsof revision. |
| |
| + Download the latest revision from: |
| |
| ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof |
| |
| + Verify the signatures of what you have downloaded; |
| |
| + While connected to lsof.itap.purdue.edu, check for patches: |
| |
| ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/patches |
| |
| + If patches exist, install them in the latest revision |
| you just downloaded. Then build the latest revision and |
| see if it fixes your bug. |
| |
| * If you're having trouble compiling lsof with gcc, try the |
| UNIX dialect vendor's compiler. I don't have access to gcc on |
| all test systems, so my support for it is hit-and-miss, and so |
| is my ability to respond to gcc compilation problem reports. |
| |
| * Check the lsof frequently asked questions file, 00FAQ, |
| to see if there's a question and answer relevant to your |
| problem. |
| |
| * Make sure you're running the lsof you think you are by |
| checking the path to it with which(1). When in doubt, use an |
| absolute path to lsof. Make sure that lsof binary has |
| sufficient permissions to do what you ask, including internal |
| permissions given it (e.g., restrictions on what files lsof may |
| report for whom) during its build. |
| |
| When you send a bug report, make sure you include output from your |
| running of lsof's Configure script. If you were able to compile a |
| running lsof, please also include: |
| |
| * Output from which(1) that shows the absolute path to the |
| lsof binary in question; |
| |
| * Output from running lsof with its -h and -v options at |
| lsof's absolute path; |
| |
| * Output from "ls -l" directed to lsof's absolute path. |
| |
| If you weren't able to compile a running lsof, please send me: the |
| compiler error output; identification of the lsof revision you're using |
| (contents of the lsof version.c file); identification of your system |
| (full uname output or output from whatever other tool identifies the |
| system); and compiler identification (e.g., gcc -v output). |
| |
| Either set of output will help me understand how lsof was configured |
| and what UNIX dialect and lsof revision is involved. |
| |
| Please send all bug reports, requests, etc. to me via e-mail at |
| <abe@purdue.edu>. Make sure "lsof" appears in the "Subject:" line so |
| my e-mail filter won't classify your letter as Spam. |
| |
| |
| The 00FAQ File |
| ============== |
| |
| The lsof distribution contains an extensive frequently asked |
| questions file on lsof features and problems. I recommend you |
| consult it before sending me e-mail. Use your favorite editor or |
| pager to search 00FAQ -- e.g., supplying as a search argument some |
| fixed text from an lsof error message. |
| |
| |
| The lsof-l Mailing List |
| ======================= |
| |
| Information about lsof, including notices about the availability |
| of new revisions, may be found in mailings of the lsof-l listserv. |
| For more information about it, including instructions on how to |
| subscribe, read the 00LSOF-L file of the lsof distribution. |
| |
| |
| Field Output Example Scripts |
| ============================ |
| |
| Example AWK and Perl 4 or 5 scripts for post-processing lsof field |
| output are locate in the scripts sub-directory of the lsof distribution. |
| The scripts sub-directory contains a 00README file with information |
| about the scripts. |
| |
| |
| Field Output C Library |
| ====================== |
| |
| The lsof test suite (See "Testing Lsof."), checks basic lsof |
| operations using field output. The test suite has its own library |
| of C functions for common test program operations, including |
| processing of field output. The library or selections of its |
| functions could be adapted for use by C programs that want to |
| process lsof field output. See the library in the file LTlib.c |
| in the tests/ sub-directory |
| |
| |
| Testing Lsof |
| ============ |
| |
| Lsof has an automated test suite in the tests/ sub-directory that |
| can be used to test some basic lsof features -- once lsof has been |
| configured and made. Tests are arranged in three groups: basic |
| tests that should run on all dialects; standard tests that should |
| run on all dialects; and optional tests that may not run on all |
| dialects or may need special resources to run. See 00TEST for more |
| information.) |
| |
| CAUTION!!! Before you attempt to use the test suite make sure that |
| the lsof you want to test can access the necessary kernel resources |
| -- e.g., /dev/mem, /dev/kmem, /proc, etc. Usually you want to test |
| the lsof you just built, so this is an important check. (See |
| 00TEST.) |
| |
| To run the basic and standard tests, using the lsof in the parent |
| directory of tests/, do this: |
| |
| $ cd tests |
| $ make test |
| or $ make std |
| or $ make standard |
| |
| The basic and standard tests may be run as silently as possible, |
| using the lsof in the parent directory of tests/, with: |
| |
| $ cd tests |
| $ make auto |
| |
| This is the "automatic" test mode, designed for use by scripts that |
| build lsof. The caller is expected to test the make exit code to |
| determine if the tests succeeded. The caller should divert standard |
| output and standard error to /dev/null to suppress make's error |
| exit message. |
| |
| The optional tests may be run, using the lsof in the parent directory |
| of tests/, with: |
| |
| $ cd tests |
| $ make opt |
| or $ make optional |
| |
| It's possible to excute individual tests, too. See the 00TEST file |
| of this distribution for more informaiton on the tests, what they |
| do, and how to run and possibly customize each test. |
| |
| It's possible to run the tests, using an lsof other than the one |
| in the parent directory of /tests, too. See 00TEST for information |
| about using the LT_LSOF_PATH environment variable to do that. |
| |
| |
| ============= |
| Dialect Notes |
| ============= |
| |
| |
| AFS |
| === |
| |
| Lsof recognizes AFS files on the following combinations of UNIX |
| dialect and AFS versions: |
| |
| AIX 4.1.4 (AFS 3.4a) |
| Linux 1.2.13 (AFS 3.3) |
| NEXTSTEP 3.2 (AFS 3.3) (untested on recent lsof revisions) |
| Solaris 2.6 (AFS 3.4a) |
| Ultrix 4.2 RISC (AFS 3.2b) (no longer available) |
| |
| Lsof has not been tested under other combinations -- e.g. HP-UX |
| 10.10 and AFS 3.4a -- and probably won't even compile there. Often |
| when a UNIX dialect version or AFS version changes, the new header |
| files come into conflict, causing compiler objections. |
| |
| |
| AIX |
| === |
| |
| Specify the aix Configure abbreviation for AIX 4.1.[45], 4.2[.1], |
| 4.3[.123], 5L, and 5.[123]. |
| |
| Specify aixgcc on AIX above 4.1 to use the gcc compiler. (Gcc can't be |
| used to compile lsof on AIX 4.1 and below because of kernel structure |
| alignment differences between it and xlc.) Gcc results sometimes |
| depend on the version of the gcc compiler that is used. |
| |
| Compilation of lsof with gcc on AIX 4.3[.123], 5L, and 5.[123] has been |
| sparsely tested with varying degrees of success: it has been reported |
| to succeed on AIX 4.3.3 and 32 bit Power AIX 5.1; to fail on ia64 AIX |
| 5.1 and 64 bit Power AIX 5.1; and to succeed on 32 and 64 bit Power AIX |
| 5.2. Lsof compilation with gcc hasn't been tested on AIX 5.3. |
| |
| At revision 4.61 and above lsof is configured and built to match the |
| bit size of the kernel of Power architecture AIX 5.1 systems. Lsof |
| binaries built for 32 and 64 bit kernels are not interchangeable. See |
| 00FAQ for more information. |
| |
| The Configure script uses /usr/bin/oslevel to determine the AIX version |
| for AIX less than 5 and ``uname -rv'' for AIX 5 and higher. If |
| /usr/bin/oslevel isn't executable on AIX less than 5, the Configure |
| script issues a warning message and uses ``uname -rv'' to determine the |
| AIX version. |
| |
| When Configure must use ``uname -rv'' on AIX less than 5 to determine |
| the AIX version, the result will lack a correct third component -- |
| e.g., the `4' of ``4.1.4''. If your AIX less than 5 system lacks lacks |
| an executable oslevel, I suggest you edit the Configure-produced |
| Makefile and complete the _AIXV definition in the CFGF string. |
| |
| By default lsof avoids using the kernel's readx() function, causing |
| it to be unable to report information on some text and library file |
| references. The ``-X'' option allows the lsof user to ask for the |
| information readx() supplies. |
| |
| Lsof avoids readx() to avoid the possibility of triggering a kernel |
| problem, known as the Stale Segment ID kernel bug. Kevin Ruderman |
| reported this bug to me. The bug shows up when the kernel's |
| dir_search() function hangs, hanging the application process that |
| called it so completely that the application process can neither |
| be killed nor stopped. The hang is the consequence of another |
| process (perhaps lsof) making legitimate use of the kernel's readx() |
| function to access the kernel memory that dir_search() is examining. |
| IBM has indicated they have no plans to fix the bug. |
| |
| A fuller discussion of this bug may be found in the 00FAQ file of |
| the lsof distribution. There you will find a description of the |
| Stale Segment ID bug, the APAR on it, and a discussion of the |
| sequence of events that exposes it. |
| |
| I added the ``-X'' function so you can tell lsof to use readx(), |
| but if you use ``-X'', you should be alert to its possibly serious |
| side effects. Although readx() is normally disabled, its state is |
| controlled with the HASXOPT, HASXOPT_ROOT, and HASXOPT_VALUE |
| definitions in dialects/aix/machine.h, and you can change its |
| default state by changing those definitions. You can also change |
| HASXOPT_ROOT via the Customize script. |
| |
| You can also compile lsof with readx() use permanently enabled or |
| disabled -- see the comments about the definitions in the |
| dialects/aix/machine.h header file. You may want to permanently |
| disable lsof's use of readx() if you plan to make lsof publicly |
| executable. You can also restrict -X to processes whose real UID |
| is root by defining HASXOPT_ROOT. |
| |
| I have never seen lsof cause the Stale Segment ID bug to occur and |
| haven't had a report that it has, but I believe there is a possibility |
| it could. |
| |
| AFS support for AIX was added with help help from Bob Cook and Jan |
| Tax who provided test systems. |
| |
| Henry Grebler and David J. Wilson helped with lsof for AIX 4.2. |
| |
| Bill Pemberton provided an AIX 4.3 test system. Andrew Kephart |
| and Tom Weaver provided AIX 4.3 technical assistance. Niklas |
| Edmundsson did 4.3.1 testing. Doug Crabill provided an AIX 4.3.2 |
| test system. Jeff W. Stewart provided an AIX 4.3.3 test system. |
| |
| The SMT file type for AIX 4.1.[45], 4.2[.1], and 4.3[.12] is my |
| fabrication. See the 00FAQ file more information on it. |
| |
| Loc Le and Nasser Momtaheni of IBM provided test systems for AIX 5L and |
| 5.1. Lsof for AIX 5L and 5.1 needs setuid-root permission to process |
| the -X option on systems whose architecture type is ia64. |
| |
| Dale Talcott of Purdue provided AIX 5.1 and 5.2 test systems. Dale and |
| John Jackson of Purdue provided an AIX 5.3 test system. |
| |
| |
| Apple Darwin |
| ============ |
| |
| The Apple Darwin port was provided by Allan Nathanson for version |
| 1.2. Allan also arranged for access to a test system for maintenance |
| and regression testing. Dale Talcott provided a test system, too. |
| |
| Allan supplied patches for updates to 1.4, 5.x, 6.x, 7.x and 8.x. |
| |
| |
| BSDI BSD/OS |
| =========== |
| |
| As of lsof revision 4.77 support for BSDI BSD/OS has been |
| discontinued. Lsof revision 4.76 with BSDI BSD/OS support may be found |
| on lsof.itap.purdue.edu in pub/tools/unix/lsof/src. |
| |
| |
| DEC OSF/1, Digital UNIX, Tru64 UNIX |
| =================================== |
| |
| Robert Benites, Dean Brock, Angel Li, Dwight McKay, Berkley Shands, |
| Ron Young and Steve Wilson have kindly provided test systems. |
| Jeffrey Mogul has provided technical assistance. Dave Morrison |
| and Lawrence MacIntyre did Digital UNIX V3.2 testing. |
| |
| Lsof supports the ADVFS/MSFS layered file system product. Lsof |
| can locate all the open files of an ADVFS/MSFS file system when |
| its path is specified, provided the file system is listed in |
| /etc/fstab with an ``advfs'' type. (This /etc/fstab caveat applies |
| only to Digital UNIX 2.0.) At Digital UNIX 4.0 and Tru64 UNIX, |
| using code provided by David Brock, lsof 4.20 and above can locate |
| ADVFS file paths. |
| |
| Testing of lsof on DEC OSF/1 and Digital UNIX 4.0 ended with lsof |
| revision 4.74. Hence, the lsof documentation has dropped the claim |
| that it works there. For a distribution of lsof 4.74 that was tested |
| on DEC OSF/1 and Digital UNIX 4.0, check pub/tools/unix/lsof/OLD/src |
| on the lsof ftp home, lsof.itap.purdue.edu. |
| |
| Lsof revisions past 4.74 have only been tested on Tru64 UNIX 5.1. |
| |
| |
| FreeBSD |
| ======= |
| |
| Bill Bormann of Purdue University provided access to several FreeBSD |
| test systems. Ade Barkah, John Clear, Ralph Forsythe, Michael |
| Haro, Kurt Jaeger, and William McVey have also provided FreeBSD |
| test systems. |
| |
| The FreeBSD distribution header files are augmented by header files |
| in the dialects/freebsd/include directory. |
| |
| David O'Brien maintains the lsof FreeBSD port package. |
| |
| |
| HP-UX |
| ===== |
| |
| Lsof has two HP-UX bases: /dev/kmem for HP-UX 11.0 and earlier; |
| and PSTAT for HP-UX 11.11 and later. The lsof Configure script |
| will pick the appropriate base. |
| |
| To use the CCITT x.25 socket support for HP-UX, you must have the |
| x.25 header files in /etc/conf/x25 |
| |
| Pasi Kaara helped with the HP-UX port, especially with its CCITT |
| x.25 socket support. |
| |
| Richard Allen provided HP-UX 10.x and 11.x test systems, as did |
| Mark Bixby, and Elias Halldor Agustsson. Marc Winkler helped test |
| the 10.20 port. Richard J. Rauenzahn provided a 64 bit HP-UX 11 |
| test system and an HP-UX 11.11 development system. |
| |
| AFS support for HP-UX was added thanks to help from Chaskiel Moses |
| Grundman, who provided a test system. |
| |
| The /dev/kmem-based HP-UX 11.00 support is extremely fragile. It |
| depends on privately developed kernel structure definitions. (See |
| .../dialects/hpux/hpux11 for the header files making the definitions.) |
| Those header files and their definitions will not be updated by |
| HP-UX 11.00 patches, making it likely that any patch changing a |
| kernel structure critical to lsof will break lsof in some way. |
| |
| It's possible to build a 64 bit lsof for 64 bit HP-UX 11.00 with |
| gcc, but you must have a gcc compiler capable of producing 64 bit |
| executables. See the 00FAQ file for more information. |
| |
| The PSTAT-based lsof for HP-UX 11.11 and later is much more solid. |
| I am indebted to the vision of HP for providing an lsof kernel API |
| through the PSTAT implementation. Specifically I appreciate the |
| help of HP staff members Carl Davidson, Louis Huemiller, Rich |
| Rauenzahn, and Sailu Yallapragada that made PSTAT-based HP-UX lsof |
| possible. |
| |
| |
| IPv6 |
| ==== |
| |
| Lsof has IPv6 support that has been tested for these UNIX dialects: |
| AIX 4.3.x; Apple Darwin 5.[12] and 6.0; the INRIA and KAME FreeBSD IPv6 |
| implementations; PSTAT-based HP-UX; /proc-based Linux; the INRIA and |
| KAME NetBSD implementations; and Solaris 8 and 9. Lsof has IPv6 |
| support that hasn't been tested for: OpenBSD (KAME); OpenUNIX 8; Tru64 |
| Unix 5.[01]; and UnixWare 7.1.[34]. |
| |
| Please let me know if your UNIX dialect has IPv6 support and I'll |
| see if it can be supported by lsof. |
| |
| |
| Linux |
| ===== |
| |
| Tim Korb, Steve Logue, Joseph J. Nuspl Jr., and Jonathan Sergent |
| have provided Linux test systems. |
| |
| Michael Shields helped add and test automatic handling of ELF/COFF |
| form names in /System.map, Marty Leisner and Keith Parks have helped |
| test many lsof revisions. Marty has provided valuable suggestions, |
| Linux hints, and code, too. |
| |
| The 00FAQ file gives some Linux tips, including information on |
| coping with system map file problems. |
| |
| To determine the state of the Linux 2.1.x C library lseek() function, |
| the lsof Configure script runs a test program that must have |
| permission to read /dev/kmem. The test determines if the lseek() |
| function properly handles kernel offsets, which appear to be negative |
| because their high order bit is set. If the lseek() test reveals |
| a faulty lseek(), Configure activates the use of a private lseek() |
| function for kernel offset positioning. See the Linux problems |
| section of the 00FAQ file of the lsof distribution for more |
| information. |
| |
| |
| NetBSD |
| ====== |
| |
| Greg Earle and Paul Kranenburg have assisted with the NetBSD ports. |
| Paul has provided test systems. Ray Phillips provided a NetBSA |
| Alpha test system. Andrew Brown also provided a test system. |
| |
| The NetBSD dialect version of lsof is compiled using the dialect |
| sources it shares with OpenBSD in the n+obsd dialect sub-directory. |
| |
| |
| NEXTSTEP and OPENSTEP |
| ===================== |
| |
| Virtual memory header files that allow lsof to display text references |
| were derived from the contents of /usr/include/vm of NEXTSTEP 2.0. |
| NeXT did not ship the virtual memory header files with other NEXTSTEP |
| or OPENSTEP versions. |
| |
| You may use the RC_FLAGS environment variable to declare compiler |
| options outside the Makefile. A common use of this variable is to |
| define the architecture types to be included in a "fat" executable. |
| See the comments in dialects/next/Makefile for an example. |
| |
| |
| OpenBSD |
| ======= |
| |
| David Mazieres has provided OpenBSD test systems. The OpenBSD |
| dialect version of lsof is compiled using the dialect sources it |
| shares with NetBSD in the n+obsd dialect sub-directory. |
| |
| Kenneth Stailey has provided OpenBSD testing and advice. |
| |
| John Dzubera (Zube) reports, "lsof 4.33 compiles and runs on OpenBSD |
| 2.3 for the pmax architecture (decstation 3100)." |
| |
| I have not tested lsof on OpenBSD 3.8, but David Mazieres reports |
| revision 4.76 worked on OpenBSD 3.8. |
| |
| |
| Pyramid DC/OSx and Reliant UNIX |
| =============================== |
| |
| As of lsof revision 4.52 support for all Pyramid dialects has been |
| discontinued. Lsof revision 4.51 with Pyramid support may be |
| obtained upon request. Send the request to abe@purdue.edu. |
| |
| These two UNIX dialects are very similar and share dialect-specific |
| source files from the pyramid sub-directory. |
| |
| The Reliant Unix Pyramid C compiler issues warning messages that |
| I haven't found a convenient way to suppress. You can ignore |
| warning messages about casts and conversions that lose bits. The |
| message "warning: undefining __STDC__" is intentionally caused by |
| the lsof MkKernOpts configuration script to suppress warning messages |
| about cast and conversion problems in standard system header files, |
| such as <stdio.h> and <string.h>. |
| |
| Bruce Beare and Kevin Smith provided test systems. |
| |
| |
| Caldera OpenUNIX |
| ================ |
| |
| Larry Rosenman provided an OpenUNIX 8 test system. Matthew Thurmaier |
| provided technical assistance, along with these people from Caldera: |
| Jack Craig, Robert Lipe, and Bela Lubkin. |
| |
| Robert Lipe supplied changes to lsof for OpenUNIX 8.0.1. Those |
| changes were also incorporated in UnixWare 7.1.3 when it became |
| the release name for OpenUNIX 8.0.1. |
| |
| Support for lsof on OpenUNIX ended at lsof revision 4.74. The last |
| lsof revision, 4.74, tested on OpenUNIX, may be found at the lsof |
| "home" ftp site, lsof.itap.purdue.edu, in pub/tools/unix/lsof/OLD/src. |
| |
| |
| SCO OpenServer |
| ============== |
| |
| Dion Johnson, Bela Lubkin, and Nathan Peterson of SCO gave me copies |
| of SCO OpenServer and the SCO OpenServer Development System 3.0 |
| and provided technical advice for the lsof port. |
| |
| Hugh Dickins, Bela Lubkin, Craig B. Olofson, and Nathan Peterson |
| provided version 5.0 and gave technical advice for porting lsof to |
| it. Bela provided the 5.0.4 changes. D. Chris Daniels provided |
| a 5.0.4 test system, Lee Penn provided one for 5.0.5, and John |
| Dubois for 5.0.6. |
| |
| The <netdb.h> header file was accidentally omitted from some SCO |
| OpenServer Development System releases. The Configure script will |
| sense its absence and substitute an equivalent from the BSD |
| distribution. The BSD <netdb.h> and the <sys/cdefs.h> header file |
| it includes are located in the dialects/os/include sub-directory |
| tree. |
| |
| To compile lsof from its distribution sources you must have the |
| TCP/IP and NSF headers in /usr/include. While those are optional |
| OpenServer packages, I have access to no system that doesn't have |
| them, so I'm unable to build lsof for such a configuration. However, |
| it should be possible to modify the lsof Configure script and |
| sources so lsof would compile and work without those optional |
| packages. |
| |
| If you have an OpenServer system configured without the TCP/IP and |
| NFS packages, and want to tackle the job of building lsof for it, |
| contact me via e-mail at <abe@purdue.edu>. I'll identify the |
| Configure script, header file, and source file changes you will |
| need to make. (Caution: this is not a simple task, or I would have |
| already done it.) |
| |
| The optional osrgcc and scogcc Configure abbreviations construct |
| Makefiles for compiling lsof with gcc. |
| |
| The UnixWare 7.1.4 sources are used for OpenServer Release 6.0.0. |
| Hence there is a separate Configure abbreviation for it, "osr6". |
| Richard of SCO provided a test system and technical assistance. |
| |
| |
| SCO|Caldera UnixWare |
| ============ |
| |
| D. Chris Daniels, John Hughes, Ken Laing, Andrew Merril, Lee Penn, and |
| Matthew Thurmaier provided test systems. Bela Lubkin provided |
| technical assistance. Larry Rosenman provided 7.1.[34] test systems. |
| |
| |
| Solaris 2.x, 7, 8, 9 and 10 |
| =========================== |
| |
| SEE THE CAUTIONS SECTION OF THIS DOCUMENT. |
| |
| The latest Solaris revision of lsof 4 might work under Solaris |
| 2.[1-4] and 2.5[.1] and 7 but hasn't been tested there. I have no |
| test systems for those Solaris versions. |
| |
| Lsof will compile with gcc and the Sun C compiler under Solaris. |
| If you want to use the Sun compiler, use the solariscc Configure |
| abbreviation. If you use a gcc version less than 2.8 on Solaris, |
| make sure the gcc-specific includes have been updated for your |
| version of Solaris -- i.e., run the gcc fixincludes script. |
| |
| Solaris 7, 8, 9 and 10 support for 64 bit kernels depends on a Sun |
| WorkShop or Forte C compiler version that supports the "-xarch=v9" |
| flag -- usually 5.0 or greater. Gcc versions 2.95 and above *may* |
| be configured and built for 64 bit support, but it takes some extra |
| work, the resulting compiler may be fragile, and the gcc developers |
| discourage it. I've built 64 bit capable gcc compilers for Solaris |
| 7, 8 and 9 from gcc versions 2.95 through 3.0.1 and produced working |
| lsof executables with them. More information on 64 bit gcc for |
| Solaris may be found in the 00FAQ file. |
| |
| Solaris 10 ZFS support is questionable, because Sun does not distribute |
| the ZFS kernel structure definition header files. The lsof Configure |
| script and source code use some risky work-arounds. ZFS file system |
| support was made possible with help from Horst Scheuermann. |
| |
| Dave Curry and Steve Kirsch provided resources for Solaris 2.x |
| ports. Casper Dik and Gerry Singleton consulted and provided |
| valuable assistance. |
| |
| Henry Katz, Joseph Kowalski, Charles Stephens, Mike Sullivan, and |
| Mike Tracy provided technical assistance. |
| |
| AFS support was added to Solaris lsof with help from Curt Freeland, |
| Heidi Hornstein, Michael L. Lewis, Terry McCoy, Phillip Moore, and |
| Sushila R. Subramanian. |
| |
| Casper Dik provided valuable assistance for the Solaris 8 support. |
| |
| Sun has graciously provided me access to BETA versions of Solaris |
| 2.5, 2.6, 7, 8, and 9. |
| |
| John Dzubera provided Solaris 7 and 8 test systems. |
| |
| Mike Miscevic provided Solaris 10 test systems. |
| |
| |
| Ultrix |
| ====== |
| |
| As of lsof revision 4.52 support for Ultrix is no longer available, |
| because I no longer have an Ultrix test system. |
| |
| Terry Friedrichsen, Dwight McKay, and Jeffrey Mogul helped me with |
| this port. |
| |
| DECnet support was added to Ultrix lsof with the help of John |
| Beacom, who kindly provided a test system. The Configure script |
| decides that DECnet support is available if /usr/lib/libdnet.a and |
| /usr/include/netdnet/dn.h exist and are readable. |
| |
| |
| Veritas VxFS and VxVM |
| ===================== |
| |
| Lsof supports some versions of Veritas VxFS and VxVM on some UNIX |
| dialects. Consult the lsof Configure script for the specific |
| dialect, and consult the lsof dialect-specific source files for |
| the UNIX dialect of interest. Veritas support will usually be |
| found in a source file named dnode[1-9].c. |
| |
| Since Veritas rarely has a version number that can be extracted |
| with shell commands, lsof doesn't use it. Instead, when lsof |
| supports Veritas, the Configure script will form compile-time |
| definitions starting with HASVXFS. Check the lsof 00PORTING |
| documentation file for more information. |
| |
| Lsof Veritas support requires that the supporting Veritas header |
| files be installed -- e.g., in /usr/include/sys/fs. (The location |
| will depend in the dialect's header file conventions.) |
| |
| Some information on lsof support for Veritas extensions may be |
| found in the lsof 00DIST file. |
| |
| Chris Kordish and Andy Thomas have provided Solaris VxFS test |
| systems. |
| |
| |
| ================================ |
| User-contributed Dialect Support |
| ================================ |
| |
| There are some user-contributed dialect versions of lsof; more |
| information on them can be found at: |
| |
| ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/contrib |
| |
| Check the 00INDEX file there for details. |
| |
| |
| ============================ |
| Dialects No Longer Supported |
| ============================ |
| |
| Because I don't have access to test systems, these UNIX dialects |
| are no longer supported by lsof: |
| |
| CDC EP/IX |
| /dev/kmem-based Linux |
| MIPS RISC/os |
| Motorola V/88 |
| Pyramid DC/OSx |
| Pyramid Reliant UNIX |
| Sequent DYNIX |
| SGI IRIX |
| SunOS 4.x |
| Ultrix |
| UnixWare below 7.0 |
| |
| Remnants of the support lsof once provided for these dialects may |
| be found in: |
| |
| ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/OLD/binaries |
| and |
| ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/OLD/dialects |
| |
| |
| =============== |
| Installing Lsof |
| =============== |
| |
| The distributed Makefiles do not have actions that will install |
| lsof. I've come to the conclusion there is no standard for installing |
| lsof or its man page, so I no longer distribute make rules for |
| installing them. You should adjust the Makefile for your local |
| preferences. |
| |
| The Makefile does have an install rule that will cause lsof to |
| compile by virtue of its dependency clause. Some Makefiles also |
| have a dependency that causes the production of a man page that is |
| ready to install. However, the actions of the install rule will |
| not cause the lsof executable or its man page to be installed in |
| any UNIX system-wide directory. |
| |
| Instead, after the compilation and optional man page production |
| are completed, the install rule will produce a brief description |
| of what actions you might add to the install rule. The description |
| will suggest the possible modes, ownerships, permissions, and |
| destinations your install rule might employ to install the lsof |
| executable and man page. |
| |
| As you form your install rule, keep in mind that lsof usually needs |
| some type of special permission to do its job. That may be permission |
| to read memory devices such as /dev/kmem, /dev/mem, or /dev/swap, |
| or it may be authorization to read entries in the /proc file system. |
| |
| Memory device access can usually be provided by setting the modes |
| of the lsof executable so that it's effective group identifier when |
| it runs is the same as the group that has permission to read the |
| memory devices -- i.e., it is setgid-group. The privileged group |
| is usually kmem, sys, or system. |
| |
| Don't overlook using ACLs -- e.g., on AIX or Solaris 8 -- to give |
| lsof permission to access memory devices. ACLs, coupled to a |
| separate group like kmem, can be safer than giving lsof setgid |
| authorization to a commonly used system group. |
| |
| When lsof needs to read /proc file system entries, it must be |
| installed with modes that make its effective user identifier root |
| when it runs -- i.e., it must be setuid-root. If lsof must be |
| installed setuid-root (only the AIX 5L, PSTAT-based HPUX, and |
| /proc-based Linux, ports need such power.), then access to memory |
| devices is automatic (or not needed in the case of /proc-based |
| Linux). |
| |
| Your choice of permissions for lsof may also be affected by your |
| desire to allow anyone to use it or your need to restrict its usage |
| to specific individuals. You will have to be guided by local policy |
| and convention in this case. |
| |
| The next two sections, Setgid Lsof Dialect Versions and Setuid-root |
| Lsof Dialect Versions, list recommended install permissions. |
| |
| The system directory where you install the lsof executable is also |
| open to choice. A traditional place for a tool like lsof is |
| /usr/local/etc, but recent changes in directory structure organization |
| suggest that somewhere in /opt may be more suitable. |
| |
| Bear one other factor in mind when choosing a location for the lsof |
| executable -- it usually is a shared executable, requiring access |
| to shared libraries. Thus, locations like /sbin or /usr/sbin are |
| probably unsuitable. |
| |
| Once you've chosen a location for the executable you may find that |
| the location for the man page follows -- e.g., if the executable |
| goes in /usr/local/etc, then the man page goes in /usr/local/man. |
| If the executable location doesn't imply a location for the man |
| page, you'll have to let local custom guide you. |
| |
| |
| Setuid-root Lsof Dialect Versions |
| ================================= |
| |
| These dialect versions should be installed with setuid-root |
| permission -- i.e., the lsof binary should be owned by root and |
| its setuid execution bit (04000) should be set. |
| |
| AIX 5L and above for full use of the -X option |
| Apple Darwin 8.x for Power Macintosh systems |
| PSTAT-based HP-UX 11.11 and 11.23 |
| /proc-based Linux (generally 2.1.72 and above) |
| |
| |
| Setgid Lsof Dialect Versions |
| ============================ |
| |
| These dialect versions should be installed with setgid permission, |
| owned by the group that can read kernel memory devices such as |
| /dev/drum, /dev/kmem, /dev/ksyms, /dev/mem, /dev/swap. ACLs may |
| be another mechanism (e.g., under AIX or Solaris 8) you can use to |
| grant read permission to the kernel memory devices. |
| |
| AIX 4.1.[45], 4.2[.1], and 4.3[.123] |
| Apple Darwin 7.x for Power Macintosh systems |
| DEC OSF/1, Digital UNIX, Tru64 UNIX 2.0, 3.2, 4.0, and 5.[01] |
| FreeBSD 2.1.6, 2.2[.x], 3.x, 4.x, 5.x and [67].x |
| /dev/kmem-based 11.00 |
| NetBSD 1.[456], 2.x and 3.x |
| NEXTSTEP 3.[13] |
| OpenBSD 2.[89] and 3.[0-9] |
| OPENSTEP 4.x |
| Caldera OpenUNIX 8 |
| SCO OpenServer 5.0.[46] |
| SCO UnixWare 7.0 and 7.1.[0134] |
| Solaris 2.6, 8, 9 and 10 |
| Ultrix 4.2 (no longer available) |
| |
| ==================================== |
| Porting lsof 4 to a New UNIX Dialect |
| ==================================== |
| |
| If you're brave enough to consider this, look at the 00PORTING |
| file. Please contact me before you start. I might be able to help |
| you or even do the port myself. |
| |
| Don't overlook the contrib/ directory in pub/tools/unix/lsof on my |
| ftp server, lsof.itap.purdue.edu. It contains user-contributed ports |
| of lsof to dialects I don't distribute, because I can't test new |
| revisions of lsof on them. |
| |
| |
| ========================= |
| Quick Start to Using lsof |
| ========================= |
| |
| For information on how to get started quickly using lsof, consult |
| the 00QUICKSTART file of the lsof distribution. It cuts past the |
| formal density of the lsof man page to provide quick examples of |
| using lsof to solve common open file display problems. |
| |
| |
| ====================== |
| Cross-configuring Lsof |
| ====================== |
| |
| Using environment variables it is possible to Configure (and possibly |
| build) lsof for one UNIX dialect on a different one -- e.g., you |
| are running Configure on a Linux 2.3 system and you want to Configure |
| and build lsof for Linux 2.4. |
| |
| See the 00XCONFIG file of the lsof distribution for a discussion |
| of how to do this. |
| |
| |
| ==================================================== |
| Environment Variables Affecting the Configure Script |
| ==================================================== |
| |
| Configure script actions can be modified by introducing values to |
| the script via environment variables. In many cases the environment |
| variable values take the place of test operations the Configure |
| script makes. |
| |
| For more information on environment variables that can affect |
| Configure, consult the 00XCONFIG file of the lsof distribution. |
| See the General Environment Variables sections for descriptions of |
| ones that affect all dialects. Consult the Dialect-Specific |
| Environment Variables section for ones that might affect the dialect |
| you are trying to configure. |
| |
| |
| Vic Abell <abe@purdue.edu> |
| April 24, 2007 |