|
Packit |
6f02de |
# $Id: list_fields.awk,v 1.3 97/09/23 09:32:38 abe Exp $
|
|
Packit |
6f02de |
#
|
|
Packit |
6f02de |
# list_fields.awk -- sample awk script to list lsof full field output
|
|
Packit |
6f02de |
# (i.e., -F output without -0)
|
|
Packit |
6f02de |
#
|
|
Packit |
6f02de |
# NB: this is not particularly elegant awk; several sections were
|
|
Packit |
6f02de |
# replicated, perhaps unnecessarily, to produce a sample quickly
|
|
Packit |
6f02de |
# and simply.
|
|
Packit |
6f02de |
#
|
|
Packit |
6f02de |
#
|
|
Packit |
6f02de |
# Copyright 1994 Purdue Research Foundation, West Lafayette, Indiana
|
|
Packit |
6f02de |
# 47907. All rights reserved.
|
|
Packit |
6f02de |
#
|
|
Packit |
6f02de |
# Written by Victor A. Abell
|
|
Packit |
6f02de |
#
|
|
Packit |
6f02de |
# This software is not subject to any license of the American Telephone
|
|
Packit |
6f02de |
# and Telegraph Company or the Regents of the University of California.
|
|
Packit |
6f02de |
#
|
|
Packit |
6f02de |
# Permission is granted to anyone to use this software for any purpose on
|
|
Packit |
6f02de |
# any computer system, and to alter it and redistribute it freely, subject
|
|
Packit |
6f02de |
# to the following restrictions:
|
|
Packit |
6f02de |
#
|
|
Packit |
6f02de |
# 1. Neither the authors nor Purdue University are responsible for any
|
|
Packit |
6f02de |
# consequences of the use of this software.
|
|
Packit |
6f02de |
#
|
|
Packit |
6f02de |
# 2. The origin of this software must not be misrepresented, either by
|
|
Packit |
6f02de |
# explicit claim or by omission. Credit to the authors and Purdue
|
|
Packit |
6f02de |
# University must appear in documentation and sources.
|
|
Packit |
6f02de |
#
|
|
Packit |
6f02de |
# 3. Altered versions must be plainly marked as such, and must not be
|
|
Packit |
6f02de |
# misrepresented as being the original software.
|
|
Packit |
6f02de |
#
|
|
Packit |
6f02de |
# 4. This notice may not be removed or altered.
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
# Clear file and process status.
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
BEGIN {
|
|
Packit |
6f02de |
fhdr = fdst = pidst = 0;
|
|
Packit |
6f02de |
access = dev = devch = fd = inode = lock = name = offset = "";
|
|
Packit |
6f02de |
proto = size = state = stream = type = "";
|
|
Packit |
6f02de |
cmd = login = pgrp = pid = ppid = uid = "";
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
# Start a new process.
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
/^p/ {
|
|
Packit |
6f02de |
val = substr($0, 2);
|
|
Packit |
6f02de |
if (pidst) {
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
# Print a previously accumulated process set.
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
printf "COMMAND PID PGRP PPID USER\n";
|
|
Packit |
6f02de |
printf "%-9.9s %6d %6d %6d", cmd, pid, pgrp, ppid;
|
|
Packit |
6f02de |
if (login != "") { printf " %s\n", login }
|
|
Packit |
6f02de |
else { printf " %s\n", uid }
|
|
Packit |
6f02de |
pidst = 0;
|
|
Packit |
6f02de |
cmd = login = pgrp = pid = uid = "";
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
if (fdst) {
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
# Print a previously accumulated file set.
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
if (fhdr == 0) {
|
|
Packit |
6f02de |
printf " FD TYPE DEVICE SIZE/OFF INODE NAME\n";
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
printf " %4.4s%1.1s%1.1s %4.4s", fd, access, lock, type;
|
|
Packit |
6f02de |
t = dev; if (devch != "") { t = devch }
|
|
Packit |
6f02de |
printf(" %10.10s", t);
|
|
Packit |
6f02de |
t = size; if (offset != "") { t = offset }
|
|
Packit |
6f02de |
printf " %10.10s", t;
|
|
Packit |
6f02de |
t = inode; if (proto != "") { t = proto }
|
|
Packit |
6f02de |
printf " %10.10s", t;
|
|
Packit |
6f02de |
t = stream; if (name != "") {t = name }
|
|
Packit |
6f02de |
printf " %s", t;
|
|
Packit |
6f02de |
if (state != "") { printf " %s)\n", state } else { printf "\n" }
|
|
Packit |
6f02de |
access = dev = devch = fd = inode = lock = name = offset = "";
|
|
Packit |
6f02de |
proto = size = state = stream = type = "";
|
|
Packit |
6f02de |
fdst = fhdr = 0
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
# Record a new process.
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
pidst = 1;
|
|
Packit |
6f02de |
pid = val;
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
/^g|^c|^u|^L|^R/ {
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
# Save process set information.
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
id = substr($0, 1, 1);
|
|
Packit |
6f02de |
val = substr($0, 2);
|
|
Packit |
6f02de |
if (id == "g") { pgrp = val; next } # PGRP
|
|
Packit |
6f02de |
if (id == "c") { cmd = val; next } # command
|
|
Packit |
6f02de |
if (id == "u") { uid = val; next } # UID
|
|
Packit |
6f02de |
if (id == "L") { login = val; next } # login name
|
|
Packit |
6f02de |
if (id == "R") { ppid = val; next } # PPID
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
/^f|^a|^l|^t|^d|^D|^s|^o|^i|^P|^S|^T|^n/ {
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
# Save file set information.
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
id = substr($0, 1, 1);
|
|
Packit |
6f02de |
val = substr($0, 2);
|
|
Packit |
6f02de |
if (id == "f") {
|
|
Packit |
6f02de |
if (pidst) {
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
# Print a previously accumulated process set.
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
printf "COMMAND PID PGRP PPID USER\n";
|
|
Packit |
6f02de |
printf "%-9.9s %6d %6d %6d", cmd, pid, pgrp, ppid;
|
|
Packit |
6f02de |
if (login != "") { printf " %s\n", login }
|
|
Packit |
6f02de |
else { printf " %s\n", uid }
|
|
Packit |
6f02de |
pidst = 0;
|
|
Packit |
6f02de |
cmd = login = pgrp = pid = uid = "";
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
if (fdst) {
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
# Print a previously accumulated file set.
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
if (fhdr == 0) {
|
|
Packit |
6f02de |
printf " FD TYPE DEVICE SIZE/OFF INODE NAME\n";
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
fhdr = 1;
|
|
Packit |
6f02de |
printf " %4.4s%1.1s%1.1s %4.4s", fd, access, lock, type;
|
|
Packit |
6f02de |
t = dev; if (devch != "") { t = devch }
|
|
Packit |
6f02de |
printf(" %10.10s", t);
|
|
Packit |
6f02de |
t = size; if (offset != "") { t = offset }
|
|
Packit |
6f02de |
printf " %10.10s", t;
|
|
Packit |
6f02de |
t = inode; if (proto != "") { t = proto }
|
|
Packit |
6f02de |
printf " %10.10s", t;
|
|
Packit |
6f02de |
t = stream; if (name != "") {t = name }
|
|
Packit |
6f02de |
printf " %s", t;
|
|
Packit |
6f02de |
if (state != "") { printf " %s)\n", state } else { printf "\n" }
|
|
Packit |
6f02de |
access = dev = devch = fd = inode = lock = name = offset = "";
|
|
Packit |
6f02de |
proto = size = state = stream = type = "";
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
# Start an new file set.
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
fd = val;
|
|
Packit |
6f02de |
fdst = 1;
|
|
Packit |
6f02de |
next;
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
# Save file set information.
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
if (id == "a") { access = val; next } # access
|
|
Packit |
6f02de |
if (id == "l") { lock = val; next } # lock
|
|
Packit |
6f02de |
if (id == "t") { type = val; next } # type
|
|
Packit |
6f02de |
if (id == "d") { devch = val; next } # device characters
|
|
Packit |
6f02de |
if (id == "D") { dev = val; next } # device major/minor numbers
|
|
Packit |
6f02de |
if (id == "s") { size = val; next } # size
|
|
Packit |
6f02de |
if (id == "o") { offset = val; next } # offset
|
|
Packit |
6f02de |
if (id == "i") { inode = val; next } # inode number
|
|
Packit |
6f02de |
if (id == "P") { proto = val; next } # protocol
|
|
Packit |
6f02de |
if (id == "S") { stream = val; next } # stream name
|
|
Packit |
6f02de |
if (id == "T") { # TCP/TPI state
|
|
Packit |
6f02de |
if (state == "") {
|
|
Packit |
6f02de |
state = sprintf("(%s", val);
|
|
Packit |
6f02de |
} else {
|
|
Packit |
6f02de |
state = sprintf("%s %s", state, val);
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
next
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
if (id == "n") { name = val; next } # name, comment, etc.
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
END {
|
|
Packit |
6f02de |
if (pidst) {
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
# Print last process set.
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
printf "COMMAND PID PGRP PPID USER\n";
|
|
Packit |
6f02de |
printf "%-9.9s %6d %6d %6d", cmd, pid, pgrp, ppid;
|
|
Packit |
6f02de |
if (login != "") { printf " %s\n", login }
|
|
Packit |
6f02de |
else { printf " %s\n", uid }
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
if (fdst) {
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
# Print last file set.
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
if (fhdr == 0) {
|
|
Packit |
6f02de |
printf " FD TYPE DEVICE SIZE/OFF INODE NAME\n";
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
printf " %4.4s%1.1s%1.1s %4.4s", fd, access, lock, type;
|
|
Packit |
6f02de |
t = dev; if (devch != "") { t = devch }
|
|
Packit |
6f02de |
printf(" %10.10s", t);
|
|
Packit |
6f02de |
t = size; if (offset != "") { t = offset }
|
|
Packit |
6f02de |
printf " %10.10s", t;
|
|
Packit |
6f02de |
t = inode; if (proto != "") { t = proto }
|
|
Packit |
6f02de |
printf " %10.10s", t;
|
|
Packit |
6f02de |
t = stream; if (name != "") {t = name }
|
|
Packit |
6f02de |
printf " %s", t;
|
|
Packit |
6f02de |
if (state != "") { printf " %s)\n", state; } else { printf "\n"; }
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
}
|