Add OpenBSD support to the scripts Fix sysctl usage for FreeBSD in a couple places
79 lines
2.1 KiB
Bash
Executable file
79 lines
2.1 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
# SPDX-FileCopyrightText: 2024 Splunk, Inc.
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
|
|
# shellcheck disable=SC1091
|
|
. "$(dirname "$0")"/common.sh
|
|
|
|
if [ "$KERNEL" = "OpenBSD" ] ; then
|
|
fstat | awk '/^USER/{print "COMMAND PID USER FD MOUNT"} $5 ~ /^\// {print $2, $3, $1, $4, $5} $5 !~ /^\// && !/^USER/ {print $2, $3, $1, $4, $5, $6, $7, $8, $9, $10, $11}'
|
|
exit 0
|
|
fi
|
|
|
|
assertHaveCommand lsof
|
|
CMD='lsof -nPs +c 0'
|
|
|
|
# shellcheck disable=SC2016
|
|
FILTER='/Permission denied|NOFD|unknown/ {next}'
|
|
|
|
if [[ "$KERNEL" = "Linux" ]] || [[ "$KERNEL" = "HP-UX" ]] || [[ "$KERNEL" = "Darwin" ]] || [[ "$KERNEL" = "FreeBSD" ]] ; then
|
|
if [ "$KERNEL" = "Darwin" ] ; then
|
|
# shellcheck disable=SC2016
|
|
FILTER='/KQUEUE|PIPE|PSXSEM/ {next}'
|
|
elif [ "$KERNEL" = "FreeBSD" ] ; then
|
|
if [[ $KERNEL_RELEASE =~ 11.* ]] || [[ $KERNEL_RELEASE =~ 12.* ]] || [[ $KERNEL_RELEASE =~ 13.* ]]; then
|
|
# empty condition to allow the execution of script as is
|
|
echo > /dev/null
|
|
else
|
|
failUnsupportedScript
|
|
fi
|
|
fi
|
|
else
|
|
failUnsupportedScript
|
|
fi
|
|
|
|
PARSE_0='NR == 1 {
|
|
# Extract positions and headers from the first line
|
|
for (i = 1; i <= NF; i++) {
|
|
positions[i] = index($0, $i)
|
|
headers[i] = length($i)
|
|
if (i == NF) {
|
|
printf "%s", $i
|
|
}
|
|
else {
|
|
printf "%10s ", $i
|
|
}
|
|
}
|
|
printf "\n"
|
|
next
|
|
}'
|
|
PARSE_1='{
|
|
id = 1
|
|
for (i = 1; i <= length(positions); i++) {
|
|
if (i == length(positions)) {
|
|
field = substr($0, positions[i])
|
|
} else {
|
|
field = substr($0, positions[i], headers[i])
|
|
}
|
|
if (field ~ /^ *$/) {
|
|
field = "?"
|
|
id--
|
|
} else {
|
|
field = $id
|
|
}
|
|
id = id + 1
|
|
if (i == length(positions)) {
|
|
printf "%s", field
|
|
}
|
|
else {
|
|
printf "%10s ", field
|
|
}
|
|
}
|
|
printf "\n"
|
|
}
|
|
'
|
|
|
|
assertHaveCommand "$CMD"
|
|
# shellcheck disable=SC2094
|
|
$CMD 2>"$TEE_DEST" | tee "$TEE_DEST" | awk "$FILTER $PARSE_0 $PARSE_1"
|
|
echo "Cmd = [$CMD 2>$TEE_DEST]; | awk -v positions=\"$positions\" -v headers=\"$headers\" \"$FILTER $PRINTF\"" >> "$TEE_DEST"
|