mirror of
https://github.com/kellyjonbrazil/jc.git
synced 2025-12-26 00:31:54 +02:00
1336 lines
27 KiB
Markdown
Executable File
1336 lines
27 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. See the **Parsers** section for supported commands.
|
|
|
|
This allows further command line processing of output with tools like `jq` simply by piping commands:
|
|
|
|
```
|
|
$ ls -l /usr/bin | jc --ls | jq '.[] | select(.size|tonumber > 50000000)'
|
|
{
|
|
"filename": "emacs",
|
|
"flags": "-r-xr-xr-x",
|
|
"links": "1",
|
|
"owner": "root",
|
|
"group": "wheel",
|
|
"size": "117164432",
|
|
"date": "May 3 22:26"
|
|
}
|
|
```
|
|
|
|
The `jc` parsers can also be used as python modules. In this case the output will be a python dictionary instead of JSON:
|
|
```
|
|
>>> import jc.parsers.ls
|
|
>>>
|
|
>>> data='''-rwxr-xr-x 1 root wheel 23648 May 3 22:26 cat
|
|
... -rwxr-xr-x 1 root wheel 30016 May 3 22:26 chmod
|
|
... -rwxr-xr-x 1 root wheel 29024 May 3 22:26 cp
|
|
... -rwxr-xr-x 1 root wheel 375824 May 3 22:26 csh
|
|
... -rwxr-xr-x 1 root wheel 28608 May 3 22:26 date
|
|
... -rwxr-xr-x 1 root wheel 32000 May 3 22:26 dd
|
|
... -rwxr-xr-x 1 root wheel 23392 May 3 22:26 df
|
|
... -rwxr-xr-x 1 root wheel 18128 May 3 22:26 echo'''
|
|
>>>
|
|
>>> jc.parsers.ls.parse(data)
|
|
[{'filename': 'cat', 'flags': '-rwxr-xr-x', 'links': '1', 'owner': 'root', 'group': 'wheel',
|
|
'size': '23648', 'date': 'May 3 22:26'}, {'filename': 'chmod', 'flags': '-rwxr-xr-x',
|
|
'links': '1', 'owner': 'root', 'group': 'wheel', 'size': '30016', 'date': 'May 3 22:26'},
|
|
{'filename': 'cp', 'flags': '-rwxr-xr-x', 'links': '1', 'owner': 'root', 'group': 'wheel',
|
|
'size': '29024', 'date': 'May 3 22:26'}, {'filename': 'csh', 'flags': '-rwxr-xr-x', 'links': '1',
|
|
'owner': 'root', 'group': 'wheel', 'size': '375824', 'date': 'May 3 22:26'}, {'filename': 'date',
|
|
'flags': '-rwxr-xr-x', 'links': '1', 'owner': 'root', 'group': 'wheel', 'size': '28608',
|
|
'date': 'May 3 22:26'}, {'filename': 'dd', 'flags': '-rwxr-xr-x', 'links': '1', 'owner': 'root',
|
|
'group': 'wheel', 'size': '32000', 'date': 'May 3 22:26'}, {'filename': 'df', 'flags': '-rwxr-xr-x',
|
|
'links': '1', 'owner': 'root', 'group': 'wheel', 'size': '23392', 'date': 'May 3 22:26'},
|
|
{'filename': 'echo', 'flags': '-rwxr-xr-x', 'links': '1', 'owner': 'root', 'group': 'wheel',
|
|
'size': '18128', 'date': 'May 3 22:26'}]
|
|
```
|
|
Two representations of the data are possible. The default representation uses a strict schema per parser and converts known numbers to int/float JSON values. Certain known values of None are converted to JSON Null, and, in some cases, additional semantic context fields are added. To access the raw, pre-processed JSON, use the `-r` or `raw=True` options.
|
|
|
|
## Installation
|
|
```
|
|
$ pip3 install --upgrade jc
|
|
```
|
|
|
|
## Usage
|
|
```
|
|
jc PARSER [OPTIONS]
|
|
```
|
|
|
|
`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.
|
|
|
|
### Parsers
|
|
- `--arp` enables the `arp` parser
|
|
- `--df` enables the `df` parser
|
|
- `--dig` enables the `dig` parser
|
|
- `--env` enables the `env` parser
|
|
- `--free` enables the `free` parser
|
|
- `--history` enables the `history` parser
|
|
- `--ifconfig` enables the `ifconfig` parser
|
|
- `--iptables` enables the `iptables` parser
|
|
- `--jobs` enables the `jobs` parser
|
|
- `--ls` enables the `ls` parser
|
|
- `--lsblk` enables the `lsblk` parser
|
|
- `--lsmod` enables the `lsmod` parser
|
|
- `--lsof` enables the `lsof` parser
|
|
- `--mount` enables the `mount` parser
|
|
- `--netstat` enables the `netstat` parser
|
|
- `--ps` enables the `ps` parser
|
|
- `--route` enables the `route` parser
|
|
- `--uname` enables the `uname -a` parser
|
|
- `--uptime` enables the `uptime` parser
|
|
- `--w` enables the `w` parser
|
|
|
|
### Options
|
|
- `-p` pretty format the JSON output
|
|
- `-r` raw output. Provides a more literal JSON output with all values as text and no additional sematic processing
|
|
|
|
## Examples
|
|
### arp
|
|
```
|
|
$ arp | jc --arp -p
|
|
[
|
|
{
|
|
"address": "gateway",
|
|
"hwtype": "ether",
|
|
"hwaddress": "00:50:56:f7:4a:fc",
|
|
"flags_mask": "C",
|
|
"iface": "ens33"
|
|
},
|
|
{
|
|
"address": "192.168.71.1",
|
|
"hwtype": "ether",
|
|
"hwaddress": "00:50:56:c0:00:08",
|
|
"flags_mask": "C",
|
|
"iface": "ens33"
|
|
},
|
|
{
|
|
"address": "192.168.71.254",
|
|
"hwtype": "ether",
|
|
"hwaddress": "00:50:56:fe:7a:b4",
|
|
"flags_mask": "C",
|
|
"iface": "ens33"
|
|
}
|
|
]
|
|
```
|
|
```
|
|
$ arp -a | jc --arp -p
|
|
[
|
|
{
|
|
"name": "?",
|
|
"address": "192.168.71.1",
|
|
"hwtype": "ether",
|
|
"hwaddress": "00:50:56:c0:00:08",
|
|
"iface": "ens33"
|
|
},
|
|
{
|
|
"name": "?",
|
|
"address": "192.168.71.254",
|
|
"hwtype": "ether",
|
|
"hwaddress": "00:50:56:fe:7a:b4",
|
|
"iface": "ens33"
|
|
},
|
|
{
|
|
"name": "_gateway",
|
|
"address": "192.168.71.2",
|
|
"hwtype": "ether",
|
|
"hwaddress": "00:50:56:f7:4a:fc",
|
|
"iface": "ens33"
|
|
}
|
|
]
|
|
```
|
|
### df
|
|
```
|
|
$ df | jc --df -p
|
|
[
|
|
{
|
|
"filesystem": "udev",
|
|
"1k-blocks": "977500",
|
|
"used": "0",
|
|
"available": "977500",
|
|
"use_percent": "0%",
|
|
"mounted": "/dev"
|
|
},
|
|
{
|
|
"filesystem": "tmpfs",
|
|
"1k-blocks": "201732",
|
|
"used": "1204",
|
|
"available": "200528",
|
|
"use_percent": "1%",
|
|
"mounted": "/run"
|
|
},
|
|
{
|
|
"filesystem": "/dev/sda2",
|
|
"1k-blocks": "20508240",
|
|
"used": "5748312",
|
|
"available": "13695124",
|
|
"use_percent": "30%",
|
|
"mounted": "/"
|
|
},
|
|
{
|
|
"filesystem": "tmpfs",
|
|
"1k-blocks": "1008648",
|
|
"used": "0",
|
|
"available": "1008648",
|
|
"use_percent": "0%",
|
|
"mounted": "/dev/shm"
|
|
}
|
|
...
|
|
]
|
|
```
|
|
### dig
|
|
```
|
|
$ dig cnn.com www.cnn.com @205.251.194.64 | jc --dig -p
|
|
[
|
|
{
|
|
"id": "28182",
|
|
"opcode": "QUERY",
|
|
"status": "NOERROR",
|
|
"flags": "qr rd ra",
|
|
"query_num": "1",
|
|
"answer_num": "4",
|
|
"authority_num": "0",
|
|
"additional_num": "1",
|
|
"question": {
|
|
"name": "cnn.com.",
|
|
"class": "IN",
|
|
"type": "A"
|
|
},
|
|
"answer": [
|
|
{
|
|
"name": "cnn.com.",
|
|
"class": "IN",
|
|
"type": "A",
|
|
"ttl": "5",
|
|
"data": "151.101.193.67"
|
|
},
|
|
{
|
|
"name": "cnn.com.",
|
|
"class": "IN",
|
|
"type": "A",
|
|
"ttl": "5",
|
|
"data": "151.101.1.67"
|
|
},
|
|
{
|
|
"name": "cnn.com.",
|
|
"class": "IN",
|
|
"type": "A",
|
|
"ttl": "5",
|
|
"data": "151.101.129.67"
|
|
},
|
|
{
|
|
"name": "cnn.com.",
|
|
"class": "IN",
|
|
"type": "A",
|
|
"ttl": "5",
|
|
"data": "151.101.65.67"
|
|
}
|
|
],
|
|
"query_time": "45 msec",
|
|
"server": "192.168.71.2#53(192.168.71.2)",
|
|
"when": "Wed Oct 30 03:11:21 PDT 2019",
|
|
"rcvd": "100"
|
|
},
|
|
{
|
|
"id": "23264",
|
|
"opcode": "QUERY",
|
|
"status": "NOERROR",
|
|
"flags": "qr aa rd",
|
|
"query_num": "1",
|
|
"answer_num": "1",
|
|
"authority_num": "4",
|
|
"additional_num": "1",
|
|
"question": {
|
|
"name": "www.cnn.com.",
|
|
"class": "IN",
|
|
"type": "A"
|
|
},
|
|
"answer": [
|
|
{
|
|
"name": "www.cnn.com.",
|
|
"class": "IN",
|
|
"type": "CNAME",
|
|
"ttl": "300",
|
|
"data": "turner-tls.map.fastly.net."
|
|
}
|
|
],
|
|
"authority": [
|
|
{
|
|
"name": "cnn.com.",
|
|
"class": "IN",
|
|
"type": "NS",
|
|
"ttl": "3600",
|
|
"data": "ns-1086.awsdns-07.org."
|
|
},
|
|
{
|
|
"name": "cnn.com.",
|
|
"class": "IN",
|
|
"type": "NS",
|
|
"ttl": "3600",
|
|
"data": "ns-1630.awsdns-11.co.uk."
|
|
},
|
|
{
|
|
"name": "cnn.com.",
|
|
"class": "IN",
|
|
"type": "NS",
|
|
"ttl": "3600",
|
|
"data": "ns-47.awsdns-05.com."
|
|
},
|
|
{
|
|
"name": "cnn.com.",
|
|
"class": "IN",
|
|
"type": "NS",
|
|
"ttl": "3600",
|
|
"data": "ns-576.awsdns-08.net."
|
|
}
|
|
],
|
|
"query_time": "33 msec",
|
|
"server": "205.251.194.64#53(205.251.194.64)",
|
|
"when": "Wed Oct 30 03:11:21 PDT 2019",
|
|
"rcvd": "212"
|
|
}
|
|
]
|
|
```
|
|
```
|
|
$ dig -x 1.1.1.1 | jc --dig -p
|
|
[
|
|
{
|
|
"id": "27526",
|
|
"opcode": "QUERY",
|
|
"status": "NOERROR",
|
|
"flags": "qr rd ra",
|
|
"query_num": "1",
|
|
"answer_num": "1",
|
|
"authority_num": "0",
|
|
"additional_num": "1",
|
|
"question": {
|
|
"name": "1.1.1.1.in-addr.arpa.",
|
|
"class": "IN",
|
|
"type": "PTR"
|
|
},
|
|
"answer": [
|
|
{
|
|
"name": "1.1.1.1.IN-ADDR.ARPA.",
|
|
"class": "IN",
|
|
"type": "PTR",
|
|
"ttl": "5",
|
|
"data": "one.one.one.one."
|
|
}
|
|
],
|
|
"query_time": "34 msec",
|
|
"server": "192.168.71.2#53(192.168.71.2)",
|
|
"when": "Wed Oct 30 03:13:48 PDT 2019",
|
|
"rcvd": "98"
|
|
}
|
|
]
|
|
```
|
|
### env
|
|
```
|
|
$ env | jc --env -p
|
|
{
|
|
"TERM": "xterm-256color",
|
|
"SHELL": "/bin/bash",
|
|
"USER": "root",
|
|
"PATH": "/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin",
|
|
"PWD": "/root",
|
|
"LANG": "en_US.UTF-8",
|
|
"HOME": "/root",
|
|
"LOGNAME": "root",
|
|
"_": "/usr/bin/env"
|
|
}
|
|
```
|
|
### free
|
|
```
|
|
$ free | jc --free -p
|
|
[
|
|
{
|
|
"type": "Mem",
|
|
"total": "2017300",
|
|
"used": "213104",
|
|
"free": "1148452",
|
|
"shared": "1176",
|
|
"buff_cache": "655744",
|
|
"available": "1622204"
|
|
},
|
|
{
|
|
"type": "Swap",
|
|
"total": "2097148",
|
|
"used": "0",
|
|
"free": "2097148"
|
|
}
|
|
]
|
|
```
|
|
### history
|
|
```
|
|
$ history | jc --history -p
|
|
{
|
|
"n118": "sleep 100",
|
|
"n119": "ls /bin",
|
|
"n120": "echo \"hello\"",
|
|
"n121": "docker images",
|
|
...
|
|
}
|
|
```
|
|
### 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
|
|
}
|
|
]
|
|
```
|
|
### iptables
|
|
```
|
|
$ sudo iptables -L -t nat | jc --iptables -p
|
|
[
|
|
{
|
|
"chain": "PREROUTING",
|
|
"rules": [
|
|
{
|
|
"target": "PREROUTING_direct",
|
|
"prot": "all",
|
|
"opt": "--",
|
|
"source": "anywhere",
|
|
"destination": "anywhere"
|
|
},
|
|
{
|
|
"target": "PREROUTING_ZONES_SOURCE",
|
|
"prot": "all",
|
|
"opt": "--",
|
|
"source": "anywhere",
|
|
"destination": "anywhere"
|
|
},
|
|
{
|
|
"target": "PREROUTING_ZONES",
|
|
"prot": "all",
|
|
"opt": "--",
|
|
"source": "anywhere",
|
|
"destination": "anywhere"
|
|
},
|
|
{
|
|
"target": "DOCKER",
|
|
"prot": "all",
|
|
"opt": "--",
|
|
"source": "anywhere",
|
|
"destination": "anywhere",
|
|
"options": "ADDRTYPE match dst-type LOCAL"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"chain": "INPUT",
|
|
"rules": []
|
|
},
|
|
{
|
|
"chain": "OUTPUT",
|
|
"rules": [
|
|
{
|
|
"target": "OUTPUT_direct",
|
|
"prot": "all",
|
|
"opt": "--",
|
|
"source": "anywhere",
|
|
"destination": "anywhere"
|
|
},
|
|
{
|
|
"target": "DOCKER",
|
|
"prot": "all",
|
|
"opt": "--",
|
|
"source": "anywhere",
|
|
"destination": "!loopback/8",
|
|
"options": "ADDRTYPE match dst-type LOCAL"
|
|
}
|
|
]
|
|
},
|
|
...
|
|
]
|
|
```
|
|
```
|
|
$ sudo iptables -vnL -t filter | jc --iptables -p
|
|
[
|
|
{
|
|
"chain": "INPUT",
|
|
"rules": [
|
|
{
|
|
"pkts": "1571",
|
|
"bytes": "3394K",
|
|
"target": "ACCEPT",
|
|
"prot": "all",
|
|
"opt": "--",
|
|
"in": "*",
|
|
"out": "*",
|
|
"source": "0.0.0.0/0",
|
|
"destination": "0.0.0.0/0",
|
|
"options": "ctstate RELATED,ESTABLISHED"
|
|
},
|
|
{
|
|
"pkts": "0",
|
|
"bytes": "0",
|
|
"target": "ACCEPT",
|
|
"prot": "all",
|
|
"opt": "--",
|
|
"in": "lo",
|
|
"out": "*",
|
|
"source": "0.0.0.0/0",
|
|
"destination": "0.0.0.0/0"
|
|
},
|
|
{
|
|
"pkts": "711",
|
|
"bytes": "60126",
|
|
"target": "INPUT_direct",
|
|
"prot": "all",
|
|
"opt": "--",
|
|
"in": "*",
|
|
"out": "*",
|
|
"source": "0.0.0.0/0",
|
|
"destination": "0.0.0.0/0"
|
|
},
|
|
{
|
|
"pkts": "711",
|
|
"bytes": "60126",
|
|
"target": "INPUT_ZONES_SOURCE",
|
|
"prot": "all",
|
|
"opt": "--",
|
|
"in": "*",
|
|
"out": "*",
|
|
"source": "0.0.0.0/0",
|
|
"destination": "0.0.0.0/0"
|
|
},
|
|
{
|
|
"pkts": "711",
|
|
"bytes": "60126",
|
|
"target": "INPUT_ZONES",
|
|
"prot": "all",
|
|
"opt": "--",
|
|
"in": "*",
|
|
"out": "*",
|
|
"source": "0.0.0.0/0",
|
|
"destination": "0.0.0.0/0"
|
|
},
|
|
{
|
|
"pkts": "0",
|
|
"bytes": "0",
|
|
"target": "DROP",
|
|
"prot": "all",
|
|
"opt": "--",
|
|
"in": "*",
|
|
"out": "*",
|
|
"source": "0.0.0.0/0",
|
|
"destination": "0.0.0.0/0",
|
|
"options": "ctstate INVALID"
|
|
},
|
|
{
|
|
"pkts": "710",
|
|
"bytes": "60078",
|
|
"target": "REJECT",
|
|
"prot": "all",
|
|
"opt": "--",
|
|
"in": "*",
|
|
"out": "*",
|
|
"source": "0.0.0.0/0",
|
|
"destination": "0.0.0.0/0",
|
|
"options": "reject-with icmp-host-prohibited"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"chain": "FORWARD",
|
|
"rules": [
|
|
{
|
|
"pkts": "0",
|
|
"bytes": "0",
|
|
"target": "DOCKER-ISOLATION",
|
|
"prot": "all",
|
|
"opt": "--",
|
|
"in": "*",
|
|
"out": "*",
|
|
"source": "0.0.0.0/0",
|
|
"destination": "0.0.0.0/0"
|
|
},
|
|
{
|
|
"pkts": "0",
|
|
"bytes": "0",
|
|
"target": "DOCKER",
|
|
"prot": "all",
|
|
"opt": "--",
|
|
"in": "*",
|
|
"out": "docker0",
|
|
"source": "0.0.0.0/0",
|
|
"destination": "0.0.0.0/0"
|
|
},
|
|
{
|
|
"pkts": "0",
|
|
"bytes": "0",
|
|
"target": "ACCEPT",
|
|
"prot": "all",
|
|
"opt": "--",
|
|
"in": "*",
|
|
"out": "docker0",
|
|
"source": "0.0.0.0/0",
|
|
"destination": "0.0.0.0/0",
|
|
"options": "ctstate RELATED,ESTABLISHED"
|
|
},
|
|
{
|
|
"pkts": "0",
|
|
"bytes": "0",
|
|
"target": "ACCEPT",
|
|
"prot": "all",
|
|
"opt": "--",
|
|
"in": "docker0",
|
|
"out": "!docker0",
|
|
"source": "0.0.0.0/0",
|
|
"destination": "0.0.0.0/0"
|
|
},
|
|
{
|
|
"pkts": "0",
|
|
"bytes": "0",
|
|
"target": "ACCEPT",
|
|
"prot": "all",
|
|
"opt": "--",
|
|
"in": "docker0",
|
|
"out": "docker0",
|
|
"source": "0.0.0.0/0",
|
|
"destination": "0.0.0.0/0"
|
|
},
|
|
{
|
|
"pkts": "0",
|
|
"bytes": "0",
|
|
"target": "ACCEPT",
|
|
"prot": "all",
|
|
"opt": "--",
|
|
"in": "*",
|
|
"out": "*",
|
|
"source": "0.0.0.0/0",
|
|
"destination": "0.0.0.0/0",
|
|
"options": "ctstate RELATED,ESTABLISHED"
|
|
},
|
|
{
|
|
"pkts": "0",
|
|
"bytes": "0",
|
|
"target": "ACCEPT",
|
|
"prot": "all",
|
|
"opt": "--",
|
|
"in": "lo",
|
|
"out": "*",
|
|
"source": "0.0.0.0/0",
|
|
"destination": "0.0.0.0/0"
|
|
},
|
|
{
|
|
"pkts": "0",
|
|
"bytes": "0",
|
|
"target": "FORWARD_direct",
|
|
"prot": "all",
|
|
"opt": "--",
|
|
"in": "*",
|
|
"out": "*",
|
|
"source": "0.0.0.0/0",
|
|
"destination": "0.0.0.0/0"
|
|
},
|
|
{
|
|
"pkts": "0",
|
|
"bytes": "0",
|
|
"target": "FORWARD_IN_ZONES_SOURCE",
|
|
"prot": "all",
|
|
"opt": "--",
|
|
"in": "*",
|
|
"out": "*",
|
|
"source": "0.0.0.0/0",
|
|
"destination": "0.0.0.0/0"
|
|
},
|
|
{
|
|
"pkts": "0",
|
|
"bytes": "0",
|
|
"target": "FORWARD_IN_ZONES",
|
|
"prot": "all",
|
|
"opt": "--",
|
|
"in": "*",
|
|
"out": "*",
|
|
"source": "0.0.0.0/0",
|
|
"destination": "0.0.0.0/0"
|
|
},
|
|
{
|
|
"pkts": "0",
|
|
"bytes": "0",
|
|
"target": "FORWARD_OUT_ZONES_SOURCE",
|
|
"prot": "all",
|
|
"opt": "--",
|
|
"in": "*",
|
|
"out": "*",
|
|
"source": "0.0.0.0/0",
|
|
"destination": "0.0.0.0/0"
|
|
},
|
|
{
|
|
"pkts": "0",
|
|
"bytes": "0",
|
|
"target": "FORWARD_OUT_ZONES",
|
|
"prot": "all",
|
|
"opt": "--",
|
|
"in": "*",
|
|
"out": "*",
|
|
"source": "0.0.0.0/0",
|
|
"destination": "0.0.0.0/0"
|
|
},
|
|
{
|
|
"pkts": "0",
|
|
"bytes": "0",
|
|
"target": "DROP",
|
|
"prot": "all",
|
|
"opt": "--",
|
|
"in": "*",
|
|
"out": "*",
|
|
"source": "0.0.0.0/0",
|
|
"destination": "0.0.0.0/0",
|
|
"options": "ctstate INVALID"
|
|
},
|
|
{
|
|
"pkts": "0",
|
|
"bytes": "0",
|
|
"target": "REJECT",
|
|
"prot": "all",
|
|
"opt": "--",
|
|
"in": "*",
|
|
"out": "*",
|
|
"source": "0.0.0.0/0",
|
|
"destination": "0.0.0.0/0",
|
|
"options": "reject-with icmp-host-prohibited"
|
|
}
|
|
]
|
|
},
|
|
...
|
|
]
|
|
```
|
|
### jobs
|
|
```
|
|
$ jobs -l | jc --jobs -p
|
|
[
|
|
{
|
|
"job_number": "1",
|
|
"pid": "19510",
|
|
"status": "Running",
|
|
"command": "sleep 1000 &"
|
|
},
|
|
{
|
|
"job_number": "2",
|
|
"pid": "19511",
|
|
"status": "Running",
|
|
"command": "sleep 1001 &"
|
|
},
|
|
{
|
|
"job_number": "3",
|
|
"pid": "19512",
|
|
"history": "previous",
|
|
"status": "Running",
|
|
"command": "sleep 1002 &"
|
|
},
|
|
{
|
|
"job_number": "4",
|
|
"pid": "19513",
|
|
"history": "current",
|
|
"status": "Running",
|
|
"command": "sleep 1003 &"
|
|
}
|
|
]
|
|
```
|
|
### ls
|
|
```
|
|
$ ls -l /usr/bin | jc --ls -p
|
|
[
|
|
{
|
|
"filename": "apropos",
|
|
"link_to": "whatis",
|
|
"flags": "lrwxrwxrwx.",
|
|
"links": "1",
|
|
"owner": "root",
|
|
"group": "root",
|
|
"size": "6",
|
|
"date": "Aug 15 10:53"
|
|
},
|
|
{
|
|
"filename": "arch",
|
|
"flags": "-rwxr-xr-x.",
|
|
"links": "1",
|
|
"owner": "root",
|
|
"group": "root",
|
|
"size": "33080",
|
|
"date": "Aug 19 23:25"
|
|
},
|
|
{
|
|
"filename": "awk",
|
|
"link_to": "gawk",
|
|
"flags": "lrwxrwxrwx.",
|
|
"links": "1",
|
|
"owner": "root",
|
|
"group": "root",
|
|
"size": "4",
|
|
"date": "Aug 15 10:53"
|
|
},
|
|
{
|
|
"filename": "base64",
|
|
"flags": "-rwxr-xr-x.",
|
|
"links": "1",
|
|
"owner": "root",
|
|
"group": "root",
|
|
"size": "37360",
|
|
"date": "Aug 19 23:25"
|
|
},
|
|
{
|
|
"filename": "basename",
|
|
"flags": "-rwxr-xr-x.",
|
|
"links": "1",
|
|
"owner": "root",
|
|
"group": "root",
|
|
"size": "29032",
|
|
"date": "Aug 19 23:25"
|
|
},
|
|
{
|
|
"filename": "bash",
|
|
"flags": "-rwxr-xr-x.",
|
|
"links": "1",
|
|
"owner": "root",
|
|
"group": "root",
|
|
"size": "964600",
|
|
"date": "Aug 8 05:06"
|
|
},
|
|
...
|
|
]
|
|
```
|
|
### lsblk
|
|
```
|
|
$ lsblk | jc --lsblk -p
|
|
[
|
|
{
|
|
"name": "sda",
|
|
"maj_min": "8:0",
|
|
"rm": "0",
|
|
"size": "20G",
|
|
"ro": "0",
|
|
"type": "disk"
|
|
},
|
|
{
|
|
"name": "sda1",
|
|
"maj_min": "8:1",
|
|
"rm": "0",
|
|
"size": "1G",
|
|
"ro": "0",
|
|
"type": "part",
|
|
"mountpoint": "/boot"
|
|
},
|
|
{
|
|
"name": "sda2",
|
|
"maj_min": "8:2",
|
|
"rm": "0",
|
|
"size": "19G",
|
|
"ro": "0",
|
|
"type": "part"
|
|
},
|
|
{
|
|
"name": "centos-root",
|
|
"maj_min": "253:0",
|
|
"rm": "0",
|
|
"size": "17G",
|
|
"ro": "0",
|
|
"type": "lvm",
|
|
"mountpoint": "/"
|
|
},
|
|
{
|
|
"name": "centos-swap",
|
|
"maj_min": "253:1",
|
|
"rm": "0",
|
|
"size": "2G",
|
|
"ro": "0",
|
|
"type": "lvm",
|
|
"mountpoint": "[SWAP]"
|
|
},
|
|
{
|
|
"name": "sr0",
|
|
"maj_min": "11:0",
|
|
"rm": "1",
|
|
"size": "1024M",
|
|
"ro": "0",
|
|
"type": "rom"
|
|
}
|
|
]
|
|
```
|
|
### lsmod
|
|
```
|
|
$ lsmod | jc --lsmod -p
|
|
[
|
|
...
|
|
{
|
|
"module": "nf_conntrack",
|
|
"size": "139224",
|
|
"used": "7",
|
|
"by": [
|
|
"nf_nat",
|
|
"nf_nat_ipv4",
|
|
"nf_nat_ipv6",
|
|
"xt_conntrack",
|
|
"nf_nat_masquerade_ipv4",
|
|
"nf_conntrack_ipv4",
|
|
"nf_conntrack_ipv6"
|
|
]
|
|
},
|
|
{
|
|
"module": "ip_set",
|
|
"size": "45799",
|
|
"used": "0"
|
|
},
|
|
{
|
|
"module": "nfnetlink",
|
|
"size": "14519",
|
|
"used": "1",
|
|
"by": [
|
|
"ip_set"
|
|
]
|
|
},
|
|
{
|
|
"module": "ebtable_filter",
|
|
"size": "12827",
|
|
"used": "1"
|
|
},
|
|
{
|
|
"module": "ebtables",
|
|
"size": "35009",
|
|
"used": "2",
|
|
"by": [
|
|
"ebtable_nat",
|
|
"ebtable_filter"
|
|
]
|
|
},
|
|
...
|
|
]
|
|
```
|
|
### lsof
|
|
```
|
|
$ sudo lsof | jc --lsof -p | more
|
|
[
|
|
{
|
|
"command": "systemd",
|
|
"pid": "1",
|
|
"tid": null,
|
|
"user": "root",
|
|
"fd": "cwd",
|
|
"type": "DIR",
|
|
"device": "8,2",
|
|
"size_off": "4096",
|
|
"node": "2",
|
|
"name": "/"
|
|
},
|
|
{
|
|
"command": "systemd",
|
|
"pid": "1",
|
|
"tid": null,
|
|
"user": "root",
|
|
"fd": "rtd",
|
|
"type": "DIR",
|
|
"device": "8,2",
|
|
"size_off": "4096",
|
|
"node": "2",
|
|
"name": "/"
|
|
},
|
|
{
|
|
"command": "systemd",
|
|
"pid": "1",
|
|
"tid": null,
|
|
"user": "root",
|
|
"fd": "txt",
|
|
"type": "REG",
|
|
"device": "8,2",
|
|
"size_off": "1595792",
|
|
"node": "668802",
|
|
"name": "/lib/systemd/systemd"
|
|
},
|
|
{
|
|
"command": "systemd",
|
|
"pid": "1",
|
|
"tid": null,
|
|
"user": "root",
|
|
"fd": "mem",
|
|
"type": "REG",
|
|
"device": "8,2",
|
|
"size_off": "1700792",
|
|
"node": "656167",
|
|
"name": "/lib/x86_64-linux-gnu/libm-2.27.so"
|
|
},
|
|
{
|
|
"command": "systemd",
|
|
"pid": "1",
|
|
"tid": null,
|
|
"user": "root",
|
|
"fd": "mem",
|
|
"type": "REG",
|
|
"device": "8,2",
|
|
"size_off": "121016",
|
|
"node": "655394",
|
|
"name": "/lib/x86_64-linux-gnu/libudev.so.1.6.9"
|
|
},
|
|
...
|
|
]
|
|
```
|
|
### mount
|
|
```
|
|
$ mount | jc --mount -p
|
|
[
|
|
{
|
|
"filesystem": "sysfs",
|
|
"mount_point": "/sys",
|
|
"type": "sysfs",
|
|
"access": [
|
|
"rw",
|
|
"nosuid",
|
|
"nodev",
|
|
"noexec",
|
|
"relatime"
|
|
]
|
|
},
|
|
{
|
|
"filesystem": "proc",
|
|
"mount_point": "/proc",
|
|
"type": "proc",
|
|
"access": [
|
|
"rw",
|
|
"nosuid",
|
|
"nodev",
|
|
"noexec",
|
|
"relatime"
|
|
]
|
|
},
|
|
{
|
|
"filesystem": "udev",
|
|
"mount_point": "/dev",
|
|
"type": "devtmpfs",
|
|
"access": [
|
|
"rw",
|
|
"nosuid",
|
|
"relatime",
|
|
"size=977500k",
|
|
"nr_inodes=244375",
|
|
"mode=755"
|
|
]
|
|
},
|
|
...
|
|
]
|
|
```
|
|
### netstat
|
|
```
|
|
$ netstat -p | jc --netstat -p
|
|
[
|
|
{
|
|
"transport_protocol": "tcp",
|
|
"network_protocol": "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"
|
|
},
|
|
{
|
|
"transport_protocol": "tcp",
|
|
"network_protocol": "ipv4",
|
|
"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"
|
|
}
|
|
]
|
|
```
|
|
```
|
|
$ sudo netstat -lpn | jc --netstat -p
|
|
[
|
|
{
|
|
"transport_protocol": "tcp",
|
|
"network_protocol": "ipv4",
|
|
"local_address": "127.0.0.1",
|
|
"local_port": "25",
|
|
"foreign_address": "0.0.0.0",
|
|
"foreign_port": "*",
|
|
"state": "LISTEN",
|
|
"pid": "1584",
|
|
"program_name": "master",
|
|
"receive_q": "0",
|
|
"send_q": "0"
|
|
},
|
|
{
|
|
"transport_protocol": "tcp",
|
|
"network_protocol": "ipv4",
|
|
"local_address": "0.0.0.0",
|
|
"local_port": "22",
|
|
"foreign_address": "0.0.0.0",
|
|
"foreign_port": "*",
|
|
"state": "LISTEN",
|
|
"pid": "1213",
|
|
"program_name": "sshd",
|
|
"receive_q": "0",
|
|
"send_q": "0"
|
|
},
|
|
{
|
|
"transport_protocol": "tcp",
|
|
"network_protocol": "ipv6",
|
|
"local_address": "::1",
|
|
"local_port": "25",
|
|
"foreign_address": "::",
|
|
"foreign_port": "*",
|
|
"state": "LISTEN",
|
|
"pid": "1584",
|
|
"program_name": "master",
|
|
"receive_q": "0",
|
|
"send_q": "0"
|
|
},
|
|
{
|
|
"transport_protocol": "udp",
|
|
"network_protocol": "ipv4",
|
|
"local_address": "0.0.0.0",
|
|
"local_port": "68",
|
|
"foreign_address": "0.0.0.0",
|
|
"foreign_port": "*",
|
|
"pid": "19177",
|
|
"program_name": "dhclient",
|
|
"receive_q": "0",
|
|
"send_q": "0"
|
|
},
|
|
...
|
|
]
|
|
```
|
|
### ps
|
|
```
|
|
$ ps -ef | jc --ps -p
|
|
[
|
|
...
|
|
{
|
|
"uid": "root",
|
|
"pid": "545",
|
|
"ppid": "1",
|
|
"c": "0",
|
|
"stime": "Oct21",
|
|
"tty": "?",
|
|
"time": "00:00:03",
|
|
"cmd": "/usr/lib/systemd/systemd-journald"
|
|
},
|
|
{
|
|
"uid": "root",
|
|
"pid": "566",
|
|
"ppid": "1",
|
|
"c": "0",
|
|
"stime": "Oct21",
|
|
"tty": "?",
|
|
"time": "00:00:00",
|
|
"cmd": "/usr/sbin/lvmetad -f"
|
|
},
|
|
{
|
|
"uid": "root",
|
|
"pid": "580",
|
|
"ppid": "1",
|
|
"c": "0",
|
|
"stime": "Oct21",
|
|
"tty": "?",
|
|
"time": "00:00:00",
|
|
"cmd": "/usr/lib/systemd/systemd-udevd"
|
|
},
|
|
{
|
|
"uid": "root",
|
|
"pid": "659",
|
|
"ppid": "2",
|
|
"c": "0",
|
|
"stime": "Oct21",
|
|
"tty": "?",
|
|
"time": "00:00:00",
|
|
"cmd": "[kworker/u257:0]"
|
|
},
|
|
{
|
|
"uid": "root",
|
|
"pid": "666",
|
|
"ppid": "2",
|
|
"c": "0",
|
|
"stime": "Oct21",
|
|
"tty": "?",
|
|
"time": "00:00:00",
|
|
"cmd": "[hci0]"
|
|
},
|
|
...
|
|
]
|
|
```
|
|
### route
|
|
```
|
|
$ route | jc --route -p
|
|
[
|
|
{
|
|
"destination": "default",
|
|
"gateway": "gateway",
|
|
"genmask": "0.0.0.0",
|
|
"flags": "UG",
|
|
"metric": "100",
|
|
"ref": "0",
|
|
"use": "0",
|
|
"iface": "ens33"
|
|
},
|
|
{
|
|
"destination": "172.17.0.0",
|
|
"gateway": "0.0.0.0",
|
|
"genmask": "255.255.0.0",
|
|
"flags": "U",
|
|
"metric": "0",
|
|
"ref": "0",
|
|
"use": "0",
|
|
"iface": "docker0"
|
|
},
|
|
{
|
|
"destination": "192.168.71.0",
|
|
"gateway": "0.0.0.0",
|
|
"genmask": "255.255.255.0",
|
|
"flags": "U",
|
|
"metric": "100",
|
|
"ref": "0",
|
|
"use": "0",
|
|
"iface": "ens33"
|
|
}
|
|
]
|
|
```
|
|
### uname -a
|
|
```
|
|
$ uname -a | jc --uname -p
|
|
{
|
|
"kernel_name": "Linux",
|
|
"node_name": "user-ubuntu",
|
|
"kernel_release": "4.15.0-65-generic",
|
|
"operating_system": "GNU/Linux",
|
|
"hardware_platform": "x86_64",
|
|
"processor": "x86_64",
|
|
"machine": "x86_64",
|
|
"kernel_version": "#74-Ubuntu SMP Tue Sep 17 17:06:04 UTC 2019"
|
|
}
|
|
```
|
|
### uptime
|
|
```
|
|
$ uptime | jc --uptime -p
|
|
{
|
|
"time": "16:52",
|
|
"uptime": "3 days, 4:49",
|
|
"users": "5",
|
|
"load_1m": "1.85",
|
|
"load_5m": "1.90",
|
|
"load_15m": "1.91"
|
|
}
|
|
```
|
|
### w
|
|
```
|
|
$ w | jc --w -p
|
|
[
|
|
{
|
|
"user": "root",
|
|
"tty": "ttyS0",
|
|
"from": "-",
|
|
"login_at": "Mon20",
|
|
"idle": "0.00s",
|
|
"jcpu": "14.70s",
|
|
"pcpu": "0.00s",
|
|
"what": "bash"
|
|
},
|
|
{
|
|
"user": "root",
|
|
"tty": "pts/0",
|
|
"from": "192.168.71.1",
|
|
"login_at": "Thu22",
|
|
"idle": "22:46m",
|
|
"jcpu": "0.05s",
|
|
"pcpu": "0.05s",
|
|
"what": "-bash"
|
|
}
|
|
]
|
|
```
|
|
|
|
## Contributions
|
|
Feel free to add/improve code or parsers!
|
|
|
|
## Compatibility
|
|
Tested on:
|
|
- Centos 7.7
|
|
- Ubuntu 18.4
|
|
|
|
## Acknowledgments
|
|
- `ifconfig-parser` module from https://github.com/KnightWhoSayNi/ifconfig-parser
|
|
- Parsing code from Conor Heine at https://gist.github.com/cahna/43a1a3ff4d075bcd71f9d7120037a501 adapted for some parsers
|