nix-super/doc/manual/src/command-ref/nix-hash.md

105 lines
3 KiB
Markdown
Raw Normal View History

2020-07-24 13:56:19 +03:00
Title: nix-hash
2020-07-23 13:58:42 +03:00
2020-07-24 13:56:19 +03:00
# Name
2020-07-23 13:58:42 +03:00
2020-07-24 13:56:19 +03:00
`nix-hash` - compute the cryptographic hash of a path
2020-07-23 13:58:42 +03:00
2020-07-24 13:56:19 +03:00
# Synopsis
2020-07-23 13:58:42 +03:00
2020-07-24 13:56:19 +03:00
`nix-hash` [`--flat`] [`--base32`] [`--truncate`] [`--type` *hashAlgo*] *path…*
2020-07-23 13:58:42 +03:00
2020-07-24 13:56:19 +03:00
`nix-hash` `--to-base16` *hash…*
2020-07-23 13:58:42 +03:00
2020-07-24 13:56:19 +03:00
`nix-hash` `--to-base32` *hash…*
2020-07-23 13:58:42 +03:00
# Description
The command `nix-hash` computes the cryptographic hash of the contents
of each *path* and prints it on standard output. By default, it computes
2020-07-23 13:58:42 +03:00
an MD5 hash, but other hash algorithms are available as well. The hash
is printed in hexadecimal. To generate the same hash as
`nix-prefetch-url` you have to specify multiple arguments, see below for
an example.
2020-07-24 16:46:16 +03:00
The hash is computed over a *serialisation* of each path: a dump of
the file system tree rooted at the path. This allows directories and
symlinks to be hashed as well as regular files. The dump is in the
*NAR format* produced by [`nix-store
--dump`](nix-store.md#operation---dump). Thus, `nix-hash path`
yields the same cryptographic hash as `nix-store --dump path |
md5sum`.
2020-07-23 13:58:42 +03:00
# Options
- `--flat`
Print the cryptographic hash of the contents of each regular file
*path*. That is, do not compute the hash over the dump of *path*.
The result is identical to that produced by the GNU commands
`md5sum` and `sha1sum`.
2020-07-23 13:58:42 +03:00
- `--base32`
Print the hash in a base-32 representation rather than hexadecimal.
This base-32 representation is more compact and can be used in Nix
expressions (such as in calls to `fetchurl`).
- `--truncate`
Truncate hashes longer than 160 bits (such as SHA-256) to 160 bits.
- `--type` *hashAlgo*
2020-07-23 13:58:42 +03:00
Use the specified cryptographic hash algorithm, which can be one of
`md5`, `sha1`, and `sha256`.
- `--to-base16`
Dont hash anything, but convert the base-32 hash representation
*hash* to hexadecimal.
2020-07-23 13:58:42 +03:00
- `--to-base32`
Dont hash anything, but convert the hexadecimal hash representation
*hash* to base-32.
2020-07-23 13:58:42 +03:00
# Examples
Computing the same hash as `nix-prefetch-url`:
2020-07-31 16:43:25 +03:00
```console
$ nix-prefetch-url file://<(echo test)
1lkgqb6fclns49861dwk9rzb6xnfkxbpws74mxnx01z9qyv1pjpj
$ nix-hash --type sha256 --flat --base32 <(echo test)
1lkgqb6fclns49861dwk9rzb6xnfkxbpws74mxnx01z9qyv1pjpj
```
2020-07-23 13:58:42 +03:00
Computing hashes:
2020-07-31 16:43:25 +03:00
```console
$ mkdir test
$ echo "hello" > test/world
2020-07-24 13:56:19 +03:00
2020-07-31 16:43:25 +03:00
$ nix-hash test/ (MD5 hash; default)
8179d3caeff1869b5ba1744e5a245c04
2020-07-24 13:56:19 +03:00
2020-07-31 16:43:25 +03:00
$ nix-store --dump test/ | md5sum (for comparison)
8179d3caeff1869b5ba1744e5a245c04 -
2020-07-24 13:56:19 +03:00
2020-07-31 16:43:25 +03:00
$ nix-hash --type sha1 test/
e4fd8ba5f7bbeaea5ace89fe10255536cd60dab6
2020-07-24 13:56:19 +03:00
2020-07-31 16:43:25 +03:00
$ nix-hash --type sha1 --base32 test/
nvd61k9nalji1zl9rrdfmsmvyyjqpzg4
2020-07-24 13:56:19 +03:00
2020-07-31 16:43:25 +03:00
$ nix-hash --type sha256 --flat test/
error: reading file `test/': Is a directory
2020-07-24 13:56:19 +03:00
2020-07-31 16:43:25 +03:00
$ nix-hash --type sha256 --flat test/world
5891b5b522d5df086d0ff0b110fbd9d21bb4fc7163af34d08286a2e846f6be03
```
2020-07-23 13:58:42 +03:00
Converting between hexadecimal and base-32:
2020-07-31 16:43:25 +03:00
```console
$ nix-hash --type sha1 --to-base32 e4fd8ba5f7bbeaea5ace89fe10255536cd60dab6
nvd61k9nalji1zl9rrdfmsmvyyjqpzg4
2020-07-24 13:56:19 +03:00
2020-07-31 16:43:25 +03:00
$ nix-hash --type sha1 --to-base16 nvd61k9nalji1zl9rrdfmsmvyyjqpzg4
e4fd8ba5f7bbeaea5ace89fe10255536cd60dab6
```