#env-var #variables #environment #processes #linux #key #key-value

app envgrep

Search through all processes environment variables on linux

1 unstable release

0.1.0 Jun 23, 2021

#22 in #processes

MIT license

8KB
97 lines

EnvGrep

Linux CLI utility to find environment variable keys or values in all processes that you have permissions to read.

Example

Let's imagine that we have a long-running server process that have a few environment variables that are used for configuration: SERVER_VERSION, SERVER_BIND_PORT, and SERVER_ID. We can simulate this using a few tail -f /dev/null processes.

$ env SERVER_VERSION=1.0.1 SERVER_ID=1 SERVER_BIND_PORT=:8080 tail -f /dev/null &
[1] 1969
$ env SERVER_VERSION=1.0.1 SERVER_ID=2 SERVER_BIND_PORT=:9090 tail -f /dev/null &
[2] 1970
$ env SERVER_VERSION=1.0.1 SERVER_ID=3 SERVER_BIND_PORT=:8181 tail -f /dev/null &
[3] 1971

Now that these processes are running and have their variables set, we can search both keys and values using envgrep.

# To find all configuration variables for all servers
$ envgrep SERVER
/proc/1969/environ (tail -f /dev/null):
SERVER_VERSION = "1.0.1"
SERVER_ID = "1"
SERVER_BIND_PORT = ":8080"

/proc/1970/environ (tail -f /dev/null):
SERVER_VERSION = "1.0.1"
SERVER_ID = "2"
SERVER_BIND_PORT = ":9090"

/proc/1971/environ (tail -f /dev/null):
SERVER_VERSION = "1.0.1"
SERVER_ID = "3"
SERVER_BIND_PORT = ":8181"

# To find only the IDs for the server processes
$ envgrep SERVER_ID
/proc/1969/environ (tail -f /dev/null):
SERVER_ID = "1"

/proc/1970/environ (tail -f /dev/null):
SERVER_ID = "2"

/proc/1971/environ (tail -f /dev/null):
SERVER_ID = "3"

# To find the specific process that is running on port 8181
$ envgrep 8181
/proc/1971/environ (tail -f /dev/null):
SERVER_BIND_PORT = ":8181"

Installing

envgrep is currently not packaged with any distro's package manager, so you must rely on cargo to compile and install from source.

$ cargo install envgrep

Command-line options

envgrep 0.1.0
Search through the environment variables of all running processes on the system and report on all variables that match
the specified pattern

USAGE:
    envgrep [FLAGS] <PATTERN>

FLAGS:
    -i, --case-insensitive    Perform case-insensitive matching with the specified regex
    -h, --help                Prints help information
    -V, --version             Prints version information
    -v, --verbose             Print all error messages as they occur instead of hiding them

ARGS:
    <PATTERN>    Regex pattern to use to search for environment variables. Matches on both parts of the `KEY=value`
                 string (independently), so parts of the environment variable name, value, or both can be used here``

Limitations

Envgrep can search through procfs for environment variables, but applications can also modify their own environments. Many executables do not rewrite changes to their environment back into procfs, so if your executable modifies its own environment it may not show up in the output of envgrep.

The tool currently relies on procfs, so it only works on operating systems that support procfs (no macOS or Windows support).

Dependencies

~7MB
~122K SLoC