1
1
mirror of https://github.com/wader/fq.git synced 2024-11-27 14:14:58 +03:00
fq/README.md

127 lines
4.0 KiB
Markdown
Raw Normal View History

2020-06-08 03:29:51 +03:00
# fq
2021-11-29 15:34:45 +03:00
Tool, language and decoders for inspecting binary data.
2020-06-08 03:29:51 +03:00
2021-10-10 03:17:29 +03:00
![fq demo](doc/demo.svg)
2020-06-08 03:29:51 +03:00
2021-11-29 15:34:45 +03:00
In most cases fq works the same way as jq but instead of reading JSON it reads binary data.
2021-12-20 17:15:43 +03:00
The result is a JSON compatible structures where each value has a bit range, symbolic
2021-12-06 00:07:56 +03:00
interpretations and know how to be presented in a useful way.
2021-11-22 16:16:59 +03:00
You can pronounce the name as you wish, i pronounce jq /dʒeikju:/ so I usually prefer /efkju:/.
2021-11-29 15:34:45 +03:00
**NOTE:** fq is early in development and many things are missing, broken or do not make sense.
2021-12-20 17:15:43 +03:00
That also means there is a great opportunity to help out!
2021-11-22 16:16:59 +03:00
2021-09-18 20:27:46 +03:00
## Goals
2021-11-03 13:02:45 +03:00
- Make binary formats accessible and queryable.
2021-09-19 01:51:15 +03:00
- Nested formats and bit-oriented decoding.
2021-10-31 17:25:45 +03:00
- Quick and comfortable CLI tool.
2021-11-03 13:02:45 +03:00
- Bit and byte transformations and conversions.
2021-09-19 01:51:15 +03:00
- Programmer's calculator.
2021-09-18 20:27:46 +03:00
## Hopes
- Make it useful enough that people want to help improve it.
- Inspire people to create similar tools.
2021-11-03 13:02:45 +03:00
## Usage
2021-12-20 17:15:43 +03:00
Basic usage is `fq . file`.
2021-11-17 12:20:51 +03:00
For details see [usage.md](doc/usage.md)
2021-11-03 13:02:45 +03:00
2020-06-08 03:29:51 +03:00
## Install
2021-12-20 17:15:43 +03:00
Download [release](https://github.com/wader/fq/releases) for your
2021-11-29 15:34:45 +03:00
platform, unarchive it and move the executable to `PATH` etc.
2020-06-08 03:29:51 +03:00
### Homebrew
```sh
# install latest release
brew install wader/tap/fq
```
### Arch Linux
`fq` can be installed from the [community repository](https://archlinux.org/packages/community/x86_64/fq/) using [pacman](https://wiki.archlinux.org/title/Pacman):
```sh
pacman -S fq
```
You can also build and install the development (VCS) package using an [AUR helper](https://wiki.archlinux.org/index.php/AUR_helpers):
```sh
paru -S fq-git
```
2021-12-23 12:44:31 +03:00
### Nix
```sh
nix-shell -p fq
```
### FreeBSD
Use the [fq](https://cgit.freebsd.org/ports/tree/misc/fq) port.
2020-06-08 03:29:51 +03:00
### Build from source
2021-09-19 11:27:56 +03:00
Make sure you have go 1.17 or later installed.
To install directly from git repository do:
2020-06-08 03:29:51 +03:00
```sh
2021-09-19 11:27:56 +03:00
# build and install latest release
2020-06-08 03:29:51 +03:00
go install github.com/wader/fq@latest
2021-10-29 19:46:19 +03:00
2021-09-19 11:27:56 +03:00
# or build and install latest master
go install github.com/wader/fq@master
2021-10-29 19:46:19 +03:00
2021-09-19 11:27:56 +03:00
# copy binary to $PATH if needed
cp "$(go env GOPATH)/bin/fq" /usr/local/bin
```
To build and run tests from source directory:
```sh
make test fq
# copy binary to $PATH if needed
cp fq /usr/local/bin
2020-06-08 03:29:51 +03:00
```
## Supported formats
[./formats_list.jq]: sh-start
aac_frame, adts, adts_frame, apev2, ar, av1_ccr, av1_frame, av1_obu, avc_annexb, avc_au, avc_dcr, avc_nalu, avc_pps, avc_sei, avc_sps, bsd_loopback_frame, bson, bzip2, dns, dns_tcp, elf, ether8023_frame, exif, flac, flac_frame, flac_metadatablock, flac_metadatablocks, flac_picture, flac_streaminfo, gif, gzip, hevc_annexb, hevc_au, hevc_dcr, hevc_nalu, icc_profile, icmp, id3v1, id3v11, id3v2, ipv4_packet, jpeg, json, matroska, mp3, mp3_frame, mp4, mpeg_asc, mpeg_es, mpeg_pes, mpeg_pes_packet, mpeg_spu, mpeg_ts, ogg, ogg_page, opus_packet, pcap, pcapng, png, protobuf, protobuf_widevine, pssh_playready, raw, sll2_packet, sll_packet, tar, tcp_segment, tiff, udp_datagram, vorbis_comment, vorbis_packet, vp8_frame, vp9_cfm, vp9_frame, vpx_ccr, wav, webp, xing, zip
2020-06-08 03:29:51 +03:00
[#]: sh-end
2021-11-17 12:20:51 +03:00
For details see [formats.md](doc/formats.md)
2020-06-08 03:29:51 +03:00
## TODO and ideas
2021-11-17 12:20:51 +03:00
See [TODO.md](doc/TODO.md)
2020-06-08 03:29:51 +03:00
## Development
2021-11-17 12:20:51 +03:00
See [dev.md](doc/dev.md)
2020-06-08 03:29:51 +03:00
## Thanks and related projects
2021-11-19 02:23:04 +03:00
This project would not have been possible without [itchyny](https://github.com/itchyny)'s
2021-11-29 15:34:45 +03:00
jq implementation [gojq](https://github.com/itchyny/gojq). I also want to thank
2020-06-08 03:29:51 +03:00
[HexFiend](https://github.com/HexFiend/HexFiend) for inspiration and ideas and [stedolan](https://github.com/stedolan)
for inventing the [jq](https://github.com/stedolan/jq) language.
Similar or related projects:
- [HexFiend](https://github.com/HexFiend/HexFiend)
- [binspector](https://github.com/binspector/binspector)
- [kaitai](https://kaitai.io)
- [Wireshark](https://www.wireshark.org) (specially `tshark -T json`)
- [MediaInfo](https://mediaarea.net/en/MediaInfo) (specially `mediainfo --Output=JSON` and `mediainfo --Details=1`)
- [GNU poke](https://www.jemarch.net/poke)
- [ffmpeg/ffprobe](https://ffmpeg.org)
- [hexdump](https://git.kernel.org/pub/scm/utils/util-linux/util-linux.git/tree/text-utils/hexdump.c)