mirror of
https://github.com/kellyjonbrazil/jc.git
synced 2025-06-23 00:29:59 +02:00
284 lines
6.5 KiB
Markdown
Executable File
284 lines
6.5 KiB
Markdown
Executable File
# JC
|
|
JSON CLI output utility
|
|
|
|
`jc` is used to JSONify the output of many standard linux cli tools for easier parsing in scripts. Parsers for `ls`, `ifconfig`, and `netstat` are currently included and more can be added via modules.
|
|
|
|
This allows further command line processing of output with tools like `jq` simply by piping commands:
|
|
|
|
```
|
|
$ ls -l /usr/bin | jc --ls | jq .[] | jq 'select(.bytes > 50000000)'
|
|
{
|
|
"filename": "emacs",
|
|
"flags": "-r-xr-xr-x",
|
|
"links": 1,
|
|
"owner": "root",
|
|
"group": "wheel",
|
|
"bytes": 117164432,
|
|
"date": "May 3 22:26"
|
|
}
|
|
```
|
|
|
|
## Installation
|
|
```
|
|
$ pip3 install jc
|
|
```
|
|
|
|
## Usage
|
|
`jc` accepts piped input from `STDIN` and outputs a JSON representation of the previous command's output to `STDOUT`. The JSON output can be compact or pretty formatted.
|
|
|
|
The first argument is required and identifies the command that is piping output to `jc` input. For example:
|
|
- `--ls` enables the `ls` parser
|
|
- `--ifconfig` enables the `ifconfig` parser
|
|
- `--netstat` enables the `netstat` parser
|
|
|
|
The second `-p` argument is optional and specifies whether to pretty format the JSON output.
|
|
|
|
## Examples
|
|
### ls
|
|
```
|
|
$ ls -l /bin | jc --ls -p
|
|
[
|
|
{
|
|
"filename": "bash",
|
|
"flags": "-r-xr-xr-x",
|
|
"links": 1,
|
|
"owner": "root",
|
|
"group": "wheel",
|
|
"bytes": 618416,
|
|
"date": "May 3 22:26"
|
|
},
|
|
{
|
|
"filename": "cat",
|
|
"flags": "-rwxr-xr-x",
|
|
"links": 1,
|
|
"owner": "root",
|
|
"group": "wheel",
|
|
"bytes": 23648,
|
|
"date": "May 3 22:26"
|
|
},
|
|
{
|
|
"filename": "chmod",
|
|
"flags": "-rwxr-xr-x",
|
|
"links": 1,
|
|
"owner": "root",
|
|
"group": "wheel",
|
|
"bytes": 30016,
|
|
"date": "May 3 22:26"
|
|
},
|
|
...
|
|
]
|
|
```
|
|
### ifconfig
|
|
```
|
|
$ ifconfig | jc --ifconfig -p
|
|
[
|
|
{
|
|
"name": "docker0",
|
|
"flags": "4099",
|
|
"state": "UP,BROADCAST,MULTICAST",
|
|
"mtu": "1500",
|
|
"ipv4_addr": "172.17.0.1",
|
|
"ipv4_mask": "255.255.0.0",
|
|
"ipv4_bcast": "0.0.0.0",
|
|
"mac_addr": "02:42:53:18:31:cc",
|
|
"type": "Ethernet",
|
|
"rx_packets": "0",
|
|
"rx_errors": "0",
|
|
"rx_dropped": "0",
|
|
"rx_overruns": "0",
|
|
"rx_frame": "0",
|
|
"tx_packets": "0",
|
|
"tx_errors": "0",
|
|
"tx_dropped": "0",
|
|
"tx_overruns": "0",
|
|
"tx_carrier": "0",
|
|
"tx_collisions": "0",
|
|
"ipv6_addr": null,
|
|
"ipv6_mask": null,
|
|
"ipv6_scope": null,
|
|
"metric": null
|
|
},
|
|
{
|
|
"name": "ens33",
|
|
"flags": "4163",
|
|
"state": "UP,BROADCAST,RUNNING,MULTICAST",
|
|
"mtu": "1500",
|
|
"ipv4_addr": "192.168.71.135",
|
|
"ipv4_mask": "255.255.255.0",
|
|
"ipv4_bcast": "192.168.71.255",
|
|
"ipv6_addr": "fe80::c1cb:715d:bc3e:b8a0",
|
|
"ipv6_mask": "64",
|
|
"ipv6_scope": "link",
|
|
"mac_addr": "00:0c:29:3b:58:0e",
|
|
"type": "Ethernet",
|
|
"rx_packets": "26348",
|
|
"rx_errors": "0",
|
|
"rx_dropped": "0",
|
|
"rx_overruns": "0",
|
|
"rx_frame": "0",
|
|
"tx_packets": "5308",
|
|
"tx_errors": "0",
|
|
"tx_dropped": "0",
|
|
"tx_overruns": "0",
|
|
"tx_carrier": "0",
|
|
"tx_collisions": "0",
|
|
"metric": null
|
|
},
|
|
{
|
|
"name": "lo",
|
|
"flags": "73",
|
|
"state": "UP,LOOPBACK,RUNNING",
|
|
"mtu": "65536",
|
|
"ipv4_addr": "127.0.0.1",
|
|
"ipv4_mask": "255.0.0.0",
|
|
"ipv4_bcast": null,
|
|
"ipv6_addr": "::1",
|
|
"ipv6_mask": "128",
|
|
"ipv6_scope": "host",
|
|
"mac_addr": null,
|
|
"type": "Local Loopback",
|
|
"rx_packets": "64",
|
|
"rx_errors": "0",
|
|
"rx_dropped": "0",
|
|
"rx_overruns": "0",
|
|
"rx_frame": "0",
|
|
"tx_packets": "64",
|
|
"tx_errors": "0",
|
|
"tx_dropped": "0",
|
|
"tx_overruns": "0",
|
|
"tx_carrier": "0",
|
|
"tx_collisions": "0",
|
|
"metric": null
|
|
}
|
|
]
|
|
```
|
|
### netstat
|
|
```
|
|
$ netstat -p | jc --netstat -p
|
|
{
|
|
"client": {
|
|
"tcp": {
|
|
"ipv4": [
|
|
{
|
|
"local_address": "localhost.localdo",
|
|
"local_port": "34480",
|
|
"foreign_address": "lb-192-30-255-113",
|
|
"foreign_port": "https",
|
|
"state": "ESTABLISHED",
|
|
"pid": 53550,
|
|
"program_name": "git-remote-ht",
|
|
"receive_q": 0,
|
|
"send_q": 0
|
|
},
|
|
{
|
|
"local_address": "localhost.localdo",
|
|
"local_port": "34478",
|
|
"foreign_address": "lb-192-30-255-113",
|
|
"foreign_port": "https",
|
|
"state": "ESTABLISHED",
|
|
"pid": 53550,
|
|
"program_name": "git-remote-ht",
|
|
"receive_q": 0,
|
|
"send_q": 0
|
|
}
|
|
]
|
|
}
|
|
}
|
|
}
|
|
```
|
|
```
|
|
$ netstat -lp | jc --netstat -p
|
|
{
|
|
"server": {
|
|
"tcp": {
|
|
"ipv4": [
|
|
{
|
|
"local_address": "localhost",
|
|
"local_port": "smtp",
|
|
"foreign_address": "0.0.0.0",
|
|
"foreign_port": "*",
|
|
"state": "LISTEN",
|
|
"pid": 1594,
|
|
"program_name": "master",
|
|
"receive_q": 0,
|
|
"send_q": 0
|
|
},
|
|
{
|
|
"local_address": "0.0.0.0",
|
|
"local_port": "ssh",
|
|
"foreign_address": "0.0.0.0",
|
|
"foreign_port": "*",
|
|
"state": "LISTEN",
|
|
"pid": 21918,
|
|
"program_name": "sshd",
|
|
"receive_q": 0,
|
|
"send_q": 0
|
|
}
|
|
],
|
|
"ipv6": [
|
|
{
|
|
"local_address": "localhost",
|
|
"local_port": "smtp",
|
|
"foreign_address": "[::]",
|
|
"foreign_port": "*",
|
|
"state": "LISTEN",
|
|
"pid": 1594,
|
|
"program_name": "master",
|
|
"receive_q": 0,
|
|
"send_q": 0
|
|
},
|
|
{
|
|
"local_address": "[::]",
|
|
"local_port": "ssh",
|
|
"foreign_address": "[::]",
|
|
"foreign_port": "*",
|
|
"state": "LISTEN",
|
|
"pid": 21918,
|
|
"program_name": "sshd",
|
|
"receive_q": 0,
|
|
"send_q": 0
|
|
}
|
|
]
|
|
},
|
|
"udp": {
|
|
"ipv4": [
|
|
{
|
|
"local_address": "0.0.0.0",
|
|
"local_port": "bootpc",
|
|
"foreign_address": "0.0.0.0",
|
|
"foreign_port": "*",
|
|
"pid": 13903,
|
|
"program_name": "dhclient",
|
|
"receive_q": 0,
|
|
"send_q": 0
|
|
},
|
|
{
|
|
"local_address": "localhost",
|
|
"local_port": "323",
|
|
"foreign_address": "0.0.0.0",
|
|
"foreign_port": "*",
|
|
"pid": 30926,
|
|
"program_name": "chronyd",
|
|
"receive_q": 0,
|
|
"send_q": 0
|
|
}
|
|
],
|
|
"ipv6": [
|
|
{
|
|
"local_address": "localhost",
|
|
"local_port": "323",
|
|
"foreign_address": "[::]",
|
|
"foreign_port": "*",
|
|
"pid": 30926,
|
|
"program_name": "chronyd",
|
|
"receive_q": 0,
|
|
"send_q": 0
|
|
}
|
|
]
|
|
}
|
|
}
|
|
}
|
|
```
|
|
## Acknowledgments
|
|
- `ifconfig-parser` module from https://github.com/KnightWhoSayNi/ifconfig-parser
|