commit: b561ffde50d6959a80c39befb3630958ea6c6062
parent 7ca69ce584517d8c5e7a181c6f1469edc7d96f45
Author: Haelwenn (lanodan) Monnier <contact@hacktivis.me>
Date: Sat, 7 Sep 2024 23:57:40 +0200
oasis 148b006672
Diffstat:
114 files changed, 4512 insertions(+), 0 deletions(-)
diff --git a/share/man/man1/arch.1 b/share/man/man1/arch.1
@@ -0,0 +1,25 @@
+.\" utils-std: Collection of commonly available Unix tools
+.\" Copyright 2017 Haelwenn (lanodan) Monnier <contact+utils@hacktivis.me>
+.\" SPDX-License-Identifier: MPL-2.0
+.Dd 2024-04-11
+.Dt ARCH 1
+.Os
+.Sh NAME
+.Nm arch
+.Nd print architecture name (same as uname -m)
+.Sh SYNOPSIS
+.Nm
+.Sh DESCRIPTION
+.Nm
+prints the architecture name, aka machine name.
+Should be equivalent to
+.Cm uname
+.Fl m .
+.Sh EXIT STATUS
+.Ex -std
+.Sh SEE ALSO
+.Xr uname 1
+.Sh STANDARDS
+GNU extension.
+.Sh AUTHORS
+.An Haelwenn (lanodan) Monnier Aq Mt contact+utils@hacktivis.me
diff --git a/share/man/man1/arch.1.gz b/share/man/man1/arch.1.gz
Binary files differ.
diff --git a/share/man/man1/base64.1 b/share/man/man1/base64.1
@@ -0,0 +1,43 @@
+.\" utils-std: Collection of commonly available Unix tools
+.\" Copyright 2017 Haelwenn (lanodan) Monnier <contact+utils@hacktivis.me>
+.\" SPDX-License-Identifier: MPL-2.0
+.Dd 2023-11-01
+.Dt BASE64 1
+.Os
+.Sh NAME
+.Nm base64
+.Nd encode/decode base64 data to standard output
+.Sh SYNOPSIS
+.Nm
+.Op Fl d
+.Op Fl w Ar wrap
+.Op Ar file...
+.Sh DESCRIPTION
+.Nm
+reads
+.Ar file ,
+encodes or decodes in base64 and writes the results into standard output.
+If no
+.Ar file
+is given,
+.Nm
+reads from the standard input.
+.Sh OPTIONS
+.Bl -tag -width _w_wrap
+.It Fl d
+Decode input instead of encoding it.
+.It Fl w Ar wrap
+Write at most
+.Ar wrap
+characters per line instead of the default of 76 characters.
+If
+.Ar wrap
+is 0, then no newlines are written.
+.El
+.Sh EXIT STATUS
+.Ex -std
+.Sh STANDARDS
+.Nm
+follows base64 as defined in RFC3548 and RFC4648.
+.Sh AUTHORS
+.An Haelwenn (lanodan) Monnier Aq Mt contact+utils@hacktivis.me
diff --git a/share/man/man1/base64.1.gz b/share/man/man1/base64.1.gz
Binary files differ.
diff --git a/share/man/man1/basename.1 b/share/man/man1/basename.1
@@ -0,0 +1,38 @@
+.\" utils-std: Collection of commonly available Unix tools
+.\" Copyright 2017 Haelwenn (lanodan) Monnier <contact+utils@hacktivis.me>
+.\" SPDX-License-Identifier: MPL-2.0
+.Dd 2024-07-28
+.Dt BASENAME 1
+.Os
+.Sh NAME
+.Nm basename
+.Nd print last path component of a path
+.Sh SYNOPSIS
+.Nm
+.Op Ar path
+.Op Ar suffix
+.Sh DESCRIPTION
+.Nm
+prints the last path component of
+.Ar path
+with removing any trailing slashes as well as trailing
+.Ar suffix
+when applicable.
+.Pp
+When
+.Ar path
+isn't given or is an empty string
+.Dq \&.
+is printed.
+.Sh EXIT STATUS
+.Ex -std
+.Sh SEE ALSO
+.Xr dirname 1 ,
+.Xr basename 3
+.Sh STANDARDS
+.Nm
+should be compliant with the
+IEEE Std 1003.1-2024 (“POSIX.1”)
+specification.
+.Sh AUTHORS
+.An Haelwenn (lanodan) Monnier Aq Mt contact+utils@hacktivis.me
diff --git a/share/man/man1/basename.1.gz b/share/man/man1/basename.1.gz
Binary files differ.
diff --git a/share/man/man1/cat.1 b/share/man/man1/cat.1
@@ -0,0 +1,54 @@
+.\" utils-std: Collection of commonly available Unix tools
+.\" Copyright 2017 Haelwenn (lanodan) Monnier <contact+utils@hacktivis.me>
+.\" SPDX-License-Identifier: MPL-2.0
+.Dd 2022-02-13
+.Dt CAT 1
+.Os
+.Sh NAME
+.Nm cat
+.Nd concatenate files
+.Sh SYNOPSIS
+.Nm
+.Op Fl u
+.Op Ar file...
+.Sh DESCRIPTION
+.Nm
+reads each
+.Ar file
+in sequence and writes it on the standard output.
+If no
+.Ar file
+is given,
+.Nm
+reads from the standard input.
+.Sh OPTIONS
+The
+.Fl u
+option is ignored, present only for POSIX compatibility.
+.Sh EXIT STATUS
+.Ex -std
+.Sh EXAMPLES
+.Bl -tag -width Ds
+.It Ql cat file1 - file2 - file3
+Print the contents of
+.Ar file1 ;
+then copy standard input until EOF (^D) is received;
+then print the contents of
+.Ar file2 ;
+then the rest of standard input until EOF (^D) is received again;
+finally
+.Nm
+will print the contents of
+.Ar file3 .
+Note that when standard input refers to a file, the second dash
+does nothing as there isn't any remaining data to print.
+.It Ql time cat
+Get a stopwatch utility which stops once EOF is pressed.
+.El
+.Sh STANDARDS
+.Nm
+is mostly compliant with the
+IEEE Std 1003.1-2024 (“POSIX.1”)
+specification.
+.Sh AUTHORS
+.An Haelwenn (lanodan) Monnier Aq Mt contact+utils@hacktivis.me
diff --git a/share/man/man1/cat.1.gz b/share/man/man1/cat.1.gz
Binary files differ.
diff --git a/share/man/man1/chmod.1 b/share/man/man1/chmod.1
@@ -0,0 +1,98 @@
+.\" utils-std: Collection of commonly available Unix tools
+.\" Copyright 2017 Haelwenn (lanodan) Monnier <contact+utils@hacktivis.me>
+.\" SPDX-License-Identifier: MPL-2.0
+.Dd 2024-03-12
+.Dt CHMOD 1
+.Os
+.Sh NAME
+.Nm chmod
+.Nd Change files modes
+.Sh SYNOPSIS
+.Nm
+.Op Fl cRv
+.Ar mode
+.Ar file...
+.Sh DESCRIPTION
+.Nm
+sets the permissions bits given by
+.Ar mode
+on each given
+.Ar file .
+.Pp
+.Ar mode
+can be either an octal natural number between 0 and 7777 (ie. 0644 for rw-r--r--), or a symbolic operation, like
+.Ql +r or
+.Ql g=o-x ,
+see
+.Sx SYMBOLIC OPERATIONS
+section for more information.
+.Pp
+If
+.Ar mode
+starts with a dash (or is user-provided), it should be broken from options with a preceeding double-dash
+.Pq --
+like so:
+.Dl chmod -v -- -w,+r foobar
+.Sh OPTIONS
+.Bl -tag -width Ds
+.It Fl c
+Print mode changes
+.It Fl R
+Recurse into directories passed to
+.It Fl v
+Verbose, print both changes and retained modes
+.Ar file
+.El
+.Sh SYMBOLIC OPERATIONS
+Roughly corresponds to the following regex:
+.Ql ((^|,)[ugoa]*([+-=][ugo]|[+-=][rwxXst]+)+)+
+.Bl -tag -width Ds
+.It ,
+Separator between each operation,
+.Ql g+r,o=g
+sets read for group and copies to other the resulting permissions of group.
+.It [ugoa]
+who: Sets who to assign permissions to.
+.It [+-=]
+op: Respectively add(+), del(-), set(=).
+.Pp
+When who isn't given,
+.Xr umask 3
+is followed similarly to file creation.
+When neither permcopy nor permlist is given, set(=) clears all permissions.
+.It [ugo]
+permcopy: Sets who to copy permissions from.
+.It [rwxXst]+
+permlist: Sets which permissions to assign, respectively:
+.Bl -tag -width X
+.It r
+Read
+.It w
+Write
+.It x
+Execute/Search
+.It X
+Search (directories-only)
+.It s
+Setuid when assigned to user, setgid when assigned to group.
+.It t
+Sticky bit.
+.El
+.El
+.Sh EXIT STATUS
+.Ex -std
+.Sh SEE ALSO
+.Xr stat 1
+.Sh STANDARDS
+.Nm
+should be compliant with the
+IEEE Std 1003.1-2024 (“POSIX.1”)
+specification.
+.Pp
+The
+.Fl c
+and
+.Fl v
+options are present for compatibility with other modern systems such as BusyBox and GNU coreutils.
+.Sh AUTHORS
+.An Haelwenn (lanodan) Monnier Aq Mt contact+utils@hacktivis.me
diff --git a/share/man/man1/chmod.1.gz b/share/man/man1/chmod.1.gz
Binary files differ.
diff --git a/share/man/man1/chown.1 b/share/man/man1/chown.1
@@ -0,0 +1,86 @@
+.\" utils-std: Collection of commonly available Unix tools
+.\" Copyright 2017 Haelwenn (lanodan) Monnier <contact+utils@hacktivis.me>
+.\" SPDX-License-Identifier: MPL-2.0
+.Dd 2024-04-27
+.Dt CHOWN 1
+.Os
+.Sh NAME
+.Nm chown , chgrp
+.Nd Change files ownership
+.Sh SYNOPSIS
+.Nm chown
+.Op Fl v
+.Op Fl h | Fl R Op Fl HLP
+.Ar owner Ns Op : Ns Ar group
+.Ar file...
+.Nm chgrp
+.Op Fl v
+.Op Fl h | Fl R Op Fl HLP
+.Ar group
+.Ar file...
+.Sh DESCRIPTION
+.Nm chown
+sets the user ID given by
+.Ar owner ,
+and when given by
+.Ar group ,
+the group ID on each given
+.Ar file .
+.Pp
+.Nm chgrp
+sets the group ID given by
+.Ar group
+on each given
+.Ar file .
+.Pp
+The
+.Ar owner
+and
+.Ar group
+arguments can be either numeric IDs, or names.
+Ownership refers to both user and group.
+.Sh OPTIONS
+.Bl -tag -width Ds
+.It Fl h
+If
+.Ar file
+is a symbolic link, set it's ownership.
+.It Fl H
+If
+.Fl R
+is also specified,
+and
+.Ar file
+refers to a symbolic link itself refering to a directory,
+change ownership of the directory and it's childs.
+.It Fl L
+If
+.Fl R
+is also specified,
+and symbolic links refering to directories are found,
+change ownership of said directories and their childs.
+.It Fl P
+If
+.Fl R
+is also specified,
+change ownership of symbolic links without dereferencing.
+.It Fl R
+Recurse into directories.
+.It Fl v
+Verbose, print a message about each processed file, whether a change was made or not.
+.El
+.Sh EXIT STATUS
+.Ex -std
+.Sh SEE ALSO
+.Xr stat 1
+.Sh STANDARDS
+.Nm
+should be compliant with the
+IEEE Std 1003.1-2024 (“POSIX.1”)
+specification.
+.Pp
+The
+.Fl v
+option is an extension, also present in GNU coreutils.
+.Sh AUTHORS
+.An Haelwenn (lanodan) Monnier Aq Mt contact+utils@hacktivis.me
diff --git a/share/man/man1/chown.1.gz b/share/man/man1/chown.1.gz
Binary files differ.
diff --git a/share/man/man1/chroot.1 b/share/man/man1/chroot.1
@@ -0,0 +1,52 @@
+.\" utils-std: Collection of commonly available Unix tools
+.\" Copyright 2017 Haelwenn (lanodan) Monnier <contact+utils@hacktivis.me>
+.\" SPDX-License-Identifier: MPL-2.0
+.Dd 2023-08-04
+.Dt CHROOT 1
+.Os
+.Sh NAME
+.Nm chroot
+.Nd run in another root directory
+.Sh SYNOPSIS
+.Nm
+.Ar newroot
+.Op Ar command Op Ar argument...
+.Sh DESCRIPTION
+.Nm
+runs
+.Ar command
+in the root directory at
+.Ar newroot .
+If no
+.Ar command
+was given,
+.Nm
+instead runs
+.Ql $SHELL -i
+with
+.Ev SHELL
+itself defaulting to
+.Pa /bin/sh .
+.Sh EXIT STATUS
+If
+.Ar command
+is invoked, the exit status of
+.Nm
+shall be the exit status of
+.Ar command ;
+Otherwise, the
+.Nm
+utility shall exit with one of the following values:
+.Bl -tag -width Ds
+.It 125
+An error occured in
+.Nm
+.It 126
+.Ar command
+was found but couldn't be invoked.
+.It 127
+.Ar command
+wasn't found.
+.El
+.Sh AUTHORS
+.An Haelwenn (lanodan) Monnier Aq Mt contact+utils@hacktivis.me
diff --git a/share/man/man1/chroot.1.gz b/share/man/man1/chroot.1.gz
Binary files differ.
diff --git a/share/man/man1/cksum.1 b/share/man/man1/cksum.1
@@ -0,0 +1,27 @@
+.\" utils-std: Collection of commonly available Unix tools
+.\" Copyright 2017 Haelwenn (lanodan) Monnier <contact+utils@hacktivis.me>
+.\" SPDX-License-Identifier: MPL-2.0
+.Dd 2024-08-13
+.Dt CKSUM 1
+.Os
+.Sh NAME
+.Nm cksum
+.Nd write file checksums and sizes
+.Sh SYNOPSIS
+.Nm
+.Op Ar file...
+.Sh DESCRIPTION
+.Nm
+reads each
+.Ar file ,
+or standard input if none were specified,
+and prints each of their CRC-32 checksum and filesize.
+.Sh EXIT STATUS
+.Ex -std
+.Sh STANDARDS
+.Nm
+should be compliant with the
+IEEE Std 1003.1-2024 (“POSIX.1”)
+specification.
+.Sh AUTHORS
+.An Haelwenn (lanodan) Monnier Aq Mt contact+utils@hacktivis.me
diff --git a/share/man/man1/cksum.1.gz b/share/man/man1/cksum.1.gz
Binary files differ.
diff --git a/share/man/man1/cmp.1 b/share/man/man1/cmp.1
@@ -0,0 +1,96 @@
+.\" utils-std: Collection of commonly available Unix tools
+.\" Copyright 2017 Haelwenn (lanodan) Monnier <contact+utils@hacktivis.me>
+.\" SPDX-License-Identifier: MPL-2.0
+.Dd 2024-05-02
+.Dt CMP 1
+.Os
+.Sh NAME
+.Nm cmp
+.Nd compare two files
+.Sh SYNOPSIS
+.Nm
+.Op Fl ls
+.Op Fl n Ar max_bytes
+.Ar file1
+.Ar file2
+.Sh DESCRIPTION
+The
+.Nm
+utility checks files
+.Ar file1
+and
+.Ar file2
+for a different byte and prints it out.
+.Sh OPTIONS
+The following options are supported:
+.Bl -tag -width __
+.It Fl l
+Write the byte number and if found, the two bytes found different.
+.It Fl n Ar max_bytes
+Only compare the first
+.Ar max_bytes .
+.It Fl s
+Write nothing when files differ, errors are still printed out to stderr.
+.El
+.Sh STDOUT
+When a difference is found, the default message format is:
+.Bd -ragged -offset indent -compact
+.Dq %s %s differ: char %d, line %d\en ,
+.Ar file1 ,
+.Ar file2 ,
+.Aq Ar byte position within line
+.Aq Ar line position
+.Ed
+.Pp
+When
+.Fl l
+is passed, the format is:
+.Bd -ragged -offset indent -compact
+.Dq %d %o %o\en ,
+.Aq Ar byte position ,
+.Aq Ar file1 byte ,
+.Aq Ar file2 byte
+.Ed
+.Pp
+When
+.Fl s
+is passed, nothing should be printed to standard output.
+.Sh STDERR
+If
+.Fl s
+is not passed, and a file is shorter than the other,
+an error with the following format is printed:
+.Bd -ragged -offset indent
+.Dq cmp: EOF on %s line %ld\en ,
+.Aq Ar name of shorter file ,
+.Aq Ar line number
+.Ed
+.Pp
+Note that unlike the other formats, only the following format is standard:
+.Bd -ragged -offset indent -compact
+.Dq cmp: EOF on %s%s\en ,
+.Aq Ar name of shorter file ,
+.Aq Ar additional info
+.Ed
+Where
+.Aq Ar additional info
+can be empty or have any single-line information starting with a space.
+.Sh EXIT STATUS
+.Bl -tag -width __
+.It 0
+The files are identical.
+.It 1
+The files are different.
+.It >1
+An error occurred.
+.El
+.Sh STANDARDS
+.Nm
+should be compliant with the
+IEEE Std 1003.1-2024 (“POSIX.1”)
+specification.
+The
+.Fl n Ar max_bytes
+option is an extension.
+.Sh AUTHORS
+.An Haelwenn (lanodan) Monnier Aq Mt contact+utils@hacktivis.me
diff --git a/share/man/man1/cmp.1.gz b/share/man/man1/cmp.1.gz
Binary files differ.
diff --git a/share/man/man1/cut.1 b/share/man/man1/cut.1
@@ -0,0 +1,74 @@
+.\" utils-std: Collection of commonly available Unix tools
+.\" Copyright 2017 Haelwenn (lanodan) Monnier <contact+utils@hacktivis.me>
+.\" SPDX-License-Identifier: MPL-2.0
+.Dd 2024-08-24
+.Dt CUT 1
+.Os
+.Sh NAME
+.Nm cut
+.Nd cut each line with selected characters/fields
+.Sh SYNOPSIS
+.Nm
+.Fl b Ar list
+.Op Fl n
+.Op Ar file...
+.Nm
+.Fl c Ar list
+.Op Ar file...
+.Nm
+.Fl f Ar list
+.Op Fl d Ar delim
+.Op Fl s
+.Op Ar file...
+.Sh DESCRIPTION
+.Nm
+reads lines from each each
+.Ar file
+or if unspecified standard input,
+and cuts out bytes
+.Pq Fl b ,
+characters
+.Pq Fl c ,
+or character-delimited fields
+.Pq Fl f .
+.Pp
+The
+.Ar list
+argument is a comma-separated list of 1-based ranges, where for example
+.Ql 1,2,3
+and
+.Ql 1-3
+are equivalents.
+.Sh OPTIONS
+.Bl -tag -width _d_delim
+.It Fl b Ar list
+Cut bytes based on
+.Ar list .
+.It Fl c Ar list
+Cut codepoints based on
+.Ar list .
+.It Fl d Ar delim
+Set the field delimiter to the character
+.Ar delim ,
+if an empty string is passed, then NULL is used as separator.
+(default:\ \et)
+.It Fl f Ar list
+Cut fields based on
+.Ar list .
+.It Fl n
+Do not split codepoints. (Currently unsupported in this implementation)
+.It Fl s
+Suppress lines with no delimiter characters,
+otherwise whole delimiter-less lines are printed as-is.
+.El
+.Sh EXIT STATUS
+.Ex -std
+.Sh STANDARDS
+Except for the lack of support for
+.Fl n ,
+.Nm
+should be compliant with the
+IEEE Std 1003.1-2024 (“POSIX.1”)
+specification.
+.Sh AUTHORS
+.An Haelwenn (lanodan) Monnier Aq Mt contact+utils@hacktivis.me
diff --git a/share/man/man1/cut.1.gz b/share/man/man1/cut.1.gz
Binary files differ.
diff --git a/share/man/man1/date.1 b/share/man/man1/date.1
@@ -0,0 +1,170 @@
+.\" utils-std: Collection of commonly available Unix tools
+.\" Copyright 2017 Haelwenn (lanodan) Monnier <contact+utils@hacktivis.me>
+.\" SPDX-License-Identifier: MPL-2.0
+.Dd 2024-07-25
+.Dt DATE 1
+.Os
+.Sh NAME
+.Nm date
+.Nd display date and time
+.Sh SYNOPSIS
+.Nm
+.Op Fl jRu
+.Op Fl d Ar datetime | Fl r Ar epoch
+.Op Cm + Ns Ar format
+.Nm
+.Op Fl jRu
+.Ar mmddHHMM Ns Oo Oo Ar CC Oc Ns Ar yy Oc
+.Op Cm + Ns Ar format
+.Nm
+.Op Fl jRu
+.Fl f Ar now_format
+.Ar now
+.Op Cm + Ns Ar format
+.Sh DESCRIPTION
+When
+.Nm
+is invoked without arguments it displays the current datetime
+Otherwise, depending on the options specified, will print the datetime in a user-defined way.
+.Sh OPTIONS
+.Bl -tag -width Ds
+.It Fl d Ar datetime
+Use
+.Ar datetime
+instead of current datetime.
+.\" utils-std: Collection of commonly available Unix tools
+.\" Copyright 2017 Haelwenn (lanodan) Monnier <contact+utils@hacktivis.me>
+.\" SPDX-License-Identifier: MPL-2.0
+.\"
+.\" Example:
+.\" .Fl d Ar datetime
+.\" .so lib/iso_parse.mdoc
+.\"
+Should be formatted either with a leading @ (at) symbol followed by
+the Unix timestamp (number of seconds before and after 1970-01-01 00:00:00Z),
+for example
+.Ql @1698791420
+corresponds to 2023-10-31 23:30:20 UTC
+.Pp
+Or as
+.Ql YYYY-MM-DDThh:mm:SS[frac][tz] ,
+where:
+.Bl -tag -width Ds
+.It Ql YYYY-MM-DD
+Corresponds to %Y-%m-%d of
+.Xr strptime 3 .
+.It Ql T
+Is either
+.Ql T
+or a space.
+.It Ql [frac]
+Is either empty, or fractional seconds starting with either a comma
+.Pq \&,
+or a period
+.Pq \&. .
+.It Ql [tz]
+When empty it corresponds to local time.
+Otherwise it can be an UTC offset in the format
+.Ql [+-]HH:?MM
+or the letter
+.Qq Z ,
+signifying UTC.
+.El
+.Pp
+Some examples:
+.Bl -bullet -compact
+.It
+.Ql 2003-06-02T13:37:42.713Z
+.It
+.Ql 1971-01-02T03:04:05.678+0900
+.El
+.It Fl f Ar now_format
+Use
+.Ar now_format
+as the
+.Xr strptime 3
+format string for
+.Ar now ,
+which will be used instead of the current datetime.
+.It Fl j
+Do no set the system date.
+This allows to use the
+.Fl f
+flag to convert one datetime to another.
+.It Fl u
+Use UTC (coordinated universal time) instead of the local time.
+.It Fl r Ar epoch
+Use
+.Ar epoch
+(seconds relative to 1970-01-01 00:00:00 UTC)
+instead of current datetime.
+.It Fl R
+Set the default value of
+.Ar format
+to match RFC5322 (Internet Message Format).
+.It Ar mmddHHMM Ns Oo Oo Ar CC Oc Ns Ar yy Oc
+Sets custom datetime, if
+.Fl j
+isn't set, the system time is also set.
+.Pp
+Each letters corresponds to:
+.Bl -tag -width mm -compact
+.It mm
+months aka %m
+.It dd
+days aka %d
+.It HH
+hours aka %H
+.It MM
+minutes aka %M
+.It CC
+centuries aka %C
+.It yy
+century-less years aka %y
+.El
+.Pp
+For example 072505542024 corresponds to 2024-07-25T05:54, as you can verify with the following command:
+.Dl date -j 072505542024 +%Y-%m-%dT%H:%M
+.It Cm + Ns Ar format
+Set the displayed datetime in
+.Xr strftime 3
+format.
+Otherwise defaults to
+.Ql %c
+.El
+.Sh ENVIRONMENT
+Look at the manual page of
+.Xr strftime 3
+for the environment variables, typical ones are
+.Ev TZ ,
+.Ev LC_TIME
+and
+.Ev LC_ALL
+but this depends on your system.
+.Sh EXIT STATUS
+.Ex -std
+.Sh SEE ALSO
+.Xr clock_settime 3 ,
+.Xr strftime 3
+.Sh STANDARDS
+.Nm
+should be compliant with the
+IEEE Std 1003.1-2024 (“POSIX.1”)
+specification.
+.Pp
+The
+.Fl d
+and
+.Fl R
+options are present for compatibility with other modern systems such as
+NetBSD, BusyBox, and GNU coreutils.
+.br
+The
+.Fl r
+option is inspired from BSD and illumos,
+.Fl f
+and
+.Fl j
+options are inspired by FreeBSD and NetBSD.
+.Sh AUTHORS
+.An Haelwenn (lanodan) Monnier Aq Mt contact+utils@hacktivis.me
diff --git a/share/man/man1/date.1.gz b/share/man/man1/date.1.gz
Binary files differ.
diff --git a/share/man/man1/df.1 b/share/man/man1/df.1
@@ -0,0 +1,83 @@
+.\" utils-std: Collection of commonly available Unix tools
+.\" Copyright 2017 Haelwenn (lanodan) Monnier <contact+utils@hacktivis.me>
+.\" SPDX-License-Identifier: MPL-2.0
+.Dd 2024-03-31
+.Dt DF 1
+.Os
+.Sh NAME
+.Nm df
+.Nd display mounted filesystems usage
+.Sh SYNOPSIS
+.Nm
+.Op Fl ahilPkT
+.Op Fl t Ar mnt_type
+.Op Fl x Ar mnt_type
+.Op Ar file...
+.Sh DESCRIPTION
+.Nm
+displays the current usage and mountpoints of mounted filesystems in a space-separated list containing:
+Filesystem, Total, Used, Available, Use percentage, Mountpoint.
+If
+.Ar file
+is given
+.Nm
+filters to the first filesystem containing each
+.Ar file .
+.Pp
+Unlike some implementations the table formatting isn't perfect, you might want to use
+.Xr column 1
+to get more readable output.
+Also padding is disabled when output isn't a TTY so you can more easily use tools like
+.Xr cut 1 .
+.Sh OPTIONS
+.Bl -tag -width Ds
+.It Fl a
+Display all mounted filesystems, otherwise
+.Nm
+deduplicates filesystems and skips ones with a blocksize of zero.
+.It Fl h
+Print human readable sizes.
+.It Fl i
+Print inode usage statistics.
+.It Fl l
+Exclude known remote filesystems.
+.It Fl P
+POSIX Formatting, prints in blocks of 512 when
+.It Fl k
+Forces printing in blocks of 1024.
+.Fl k
+is also passed, disables
+.Fl h .
+.It Fl T
+Print filesystem type right after the Filesystem column.
+.It Fl t Ar mnt_type
+Include only selected filesystems matching
+.Ar mnt_type .
+For example
+.Qq nfs4 .
+Option can be passed multiple times to include multiple types.
+.It Fl x Ar mnt_type
+Exclude filesystems types matching
+.Ar mnt_type .
+For example
+.Qq nfs4 .
+Option can be passed multiple times to exclude multiple types.
+.El
+.Sh EXIT STATUS
+.Ex -std
+.Sh SEE ALSO
+.Xr statvfs 3
+.Sh STANDARDS
+.Nm
+should be compliant with the
+IEEE Std 1003.1-2024 (“POSIX.1”)
+specification.
+.Pp
+.Fl i ,
+.Fl l ,
+.Fl t
+and
+.Fl x
+are extensions inspired by other implementations such as FreeBSD and GNU.
+.Sh AUTHORS
+.An Haelwenn (lanodan) Monnier Aq Mt contact+utils@hacktivis.me
diff --git a/share/man/man1/df.1.gz b/share/man/man1/df.1.gz
Binary files differ.
diff --git a/share/man/man1/dirname.1 b/share/man/man1/dirname.1
@@ -0,0 +1,26 @@
+.\" utils-std: Collection of commonly available Unix tools
+.\" Copyright 2017 Haelwenn (lanodan) Monnier <contact+utils@hacktivis.me>
+.\" SPDX-License-Identifier: MPL-2.0
+.Dd 2021-04-05
+.Dt DIRNAME 1
+.Os
+.Sh NAME
+.Nm dirname
+.Nd return the parent directory of a file pathname
+.Sh SYNOPSIS
+.Nm
+.Ar string
+.Sh DESCRIPTION
+Returns the parent directory of
+.Ar string .
+.Sh EXIT STATUS
+.Ex -std
+.Sh SEE ALSO
+.Xr direname 3
+.Sh STANDARDS
+.Nm
+should be compliant with the
+IEEE Std 1003.1-2024 (“POSIX.1”)
+specification.
+.Sh AUTHORS
+.An Haelwenn (lanodan) Monnier Aq Mt contact+utils@hacktivis.me
diff --git a/share/man/man1/dirname.1.gz b/share/man/man1/dirname.1.gz
Binary files differ.
diff --git a/share/man/man1/echo.1 b/share/man/man1/echo.1
@@ -0,0 +1,44 @@
+.\" utils-std: Collection of commonly available Unix tools
+.\" Copyright 2017 Haelwenn (lanodan) Monnier <contact+utils@hacktivis.me>
+.\" SPDX-License-Identifier: MPL-2.0
+.Dd 2024-03-18
+.Dt ECHO 1
+.Os
+.Sh NAME
+.Nm echo
+.Nd write arguments to standard output
+.Sh SYNOPSIS
+.Nm
+.Op Fl n
+.Op Ar string...
+.Sh DESCRIPTION
+.Nm
+buffers all
+.Ar string
+together with a final newline and then does a single write to standard output.
+If there is no
+.Ar string ,
+only the newline is written.
+.Pp
+The
+.Fl -
+operand, which generaly terminates option processing, is treated as part of
+.Ar string .
+.Sh OPTIONS
+.Bl -tag -width Ds
+.It Fl n
+Do not print the trailing newline character.
+.El
+.Sh EXIT STATUS
+.Ex -std
+.Sh SEE ALSO
+.Xr printf 1
+.Sh STANDARDS
+Not XSI-compliant as
+.Fl n
+is parsed as an option and backslash operators aren't supported.
+Should be compliant with the rest of the
+IEEE Std 1003.1-2024 (“POSIX.1”)
+specification.
+.Sh AUTHORS
+.An Haelwenn (lanodan) Monnier Aq Mt contact+utils@hacktivis.me
diff --git a/share/man/man1/echo.1.gz b/share/man/man1/echo.1.gz
Binary files differ.
diff --git a/share/man/man1/env.1 b/share/man/man1/env.1
@@ -0,0 +1,97 @@
+.\" utils-std: Collection of commonly available Unix tools
+.\" Copyright 2017 Haelwenn (lanodan) Monnier <contact+utils@hacktivis.me>
+.\" SPDX-License-Identifier: MPL-2.0
+.Dd 2022-04-19
+.Dt ENV 1
+.Os
+.Sh NAME
+.Nm env
+.Nd control and print environment
+.Sh SYNOPSIS
+.Nm
+.Op Fl i
+.Op Fl u Ar name
+.Op Ar name Ns = Ns Ar value
+.Op Ar command Op Ar argument...
+.Nm
+.Op Fl i
+.Op Fl u Ar name
+.Op Ar name Ns = Ns Ar value
+.Fl S Ar command_string
+.Sh DESCRIPTION
+.Nm
+if specified runs
+.Ar command
+or
+.Ar command_string ,
+and otherwise prints the environment.
+.Pp
+The environment can be modified via the following options:
+.Bl -tag -width Ds
+.It Fl i
+Ignore the existing environment.
+.It Fl u Ar name
+Removes the variable named
+.Ar name
+from the new environment.
+.It Ar name Ns = Ns Ar value
+Adds the variable named
+.Ar name
+with the value
+.Ar value
+into the new environment, it cannot itself contain the
+.Qq =
+character.
+.El
+.Pp
+The
+.Fl S Ar command_string
+option allows to split a full command passed as a single argument
+similarly to a shell, useful for shebangs where most Unix-likes
+do not do argument splitting.
+.br
+For example:
+.Dl #!/usr/bin/env -S perl -w -T
+.Sh EXIT STATUS
+If
+.Ar command
+is invoked, the exit status of
+.Nm
+shall be the exit status of
+.Ar command ;
+Otherwise, the
+.Nm
+utility shall exit with one of the following values:
+.Bl -tag -width Ds
+.It 0
+.Nm
+completed successfully.
+.It 1
+An error occured in
+.Nm
+.It 126
+.Ar command
+was found but couldn't be invoked.
+.It 127
+.Ar command
+wasn't found.
+.El
+.Sh STANDARDS
+.Nm
+should be compliant with the
+IEEE Std 1003.1-2024 (“POSIX.1”)
+specification.
+.Pp
+The
+.Fl u
+flag is an extension known to be present in
+.Fx ,
+.Nx ,
+GNU coreutils, BusyBox, ...
+.br
+The
+.Fl S
+flag in an extension known to be present in GNU coreutils and
+.Fx .
+.Sh AUTHORS
+.An Haelwenn (lanodan) Monnier Aq Mt contact+utils@hacktivis.me
diff --git a/share/man/man1/env.1.gz b/share/man/man1/env.1.gz
Binary files differ.
diff --git a/share/man/man1/false.1 b/share/man/man1/false.1
@@ -0,0 +1,23 @@
+.\" utils-std: Collection of commonly available Unix tools
+.\" Copyright 2017 Haelwenn (lanodan) Monnier <contact+utils@hacktivis.me>
+.\" SPDX-License-Identifier: MPL-2.0
+.Dd 2022-02-13
+.Dt FALSE 1
+.Os
+.Sh NAME
+.Nm false
+.Nd do nothing, unsuccessfully
+.Sh SYNOPSIS
+.Nm
+.Sh DESCRIPTION
+.Nm
+will return with exit status code one.
+.Sh EXIT STATUS
+One.
+.Sh STANDARDS
+.Nm
+should be compliant with the
+IEEE Std 1003.1-2024 (“POSIX.1”)
+specification.
+.Sh AUTHORS
+.An Haelwenn (lanodan) Monnier Aq Mt contact+utils@hacktivis.me
diff --git a/share/man/man1/false.1.gz b/share/man/man1/false.1.gz
Binary files differ.
diff --git a/share/man/man1/head.1 b/share/man/man1/head.1
@@ -0,0 +1,89 @@
+.\" utils-std: Collection of commonly available Unix tools
+.\" Copyright 2017 Haelwenn (lanodan) Monnier <contact+utils@hacktivis.me>
+.\" SPDX-License-Identifier: MPL-2.0
+.Dd 2024-05-27
+.Dt HEAD 1
+.Os
+.Sh NAME
+.Nm head
+.Nd print first part of files
+.Sh SYNOPSIS
+.Nm
+.Op Fl qv
+.Op Fl c Ar size | Fl n Ar num | Fl Ar num
+.Op Ar file...
+.Sh DESCRIPTION
+.Nm
+reads each
+.Ar file
+in sequence and writes it's first part on standard output.
+If no
+.Ar file
+is given,
+.Nm
+reads from the standard input.
+.Sh OPTIONS
+.Bl -tag -width _c_size
+.It Fl c Ar size
+Read the first
+.Ar size
+bytes
+in each
+.Ar file .
+.Pp
+.Ar size
+can be multiplied by one of KMGTP (Kilo, Mega, Giga, Tera, ...)
+using power of 1024 by default, which can be either explicit via adding iB
+(like MiB), or turned into powers of 1000 by adding B (like MB).
+.It Fl n Ar num , Fl Ar num
+Read the first
+.Ar num
+lines in each
+.Ar file .
+.Pp
+The
+.Fl Ar num
+form is historical, new scripts should use the standard
+.Fl n Ar num
+form.
+.It Fl q
+Don't print header when multiple
+.Ar file
+are given.
+.It Fl v
+Always print header, regardless of the number of given
+.Ar file .
+.El
+.Pp
+If no option is specified,
+.Nm
+defaults to reading the first 10 lines.
+.Sh EXIT STATUS
+.Ex -std
+.Sh STDOUT
+Contains the specified part of each
+.Ar file ,
+with the following header when multiple
+.Ar file
+are given, or when
+.Fl v
+is set:
+.Bd -literal
+"==> %s <==\\n", <file>
+.Ed
+.Sh STANDARDS
+.Nm
+should be compliant with the
+IEEE Std 1003.1-2024 (“POSIX.1”)
+specification.
+.br
+The
+.Fl q
+and
+.Fl v
+options are extensions.
+The
+.Fl Ar num
+option is historical.
+.Sh AUTHORS
+.An Haelwenn (lanodan) Monnier Aq Mt contact+utils@hacktivis.me
diff --git a/share/man/man1/head.1.gz b/share/man/man1/head.1.gz
Binary files differ.
diff --git a/share/man/man1/id.1 b/share/man/man1/id.1
@@ -0,0 +1,55 @@
+.\" utils-std: Collection of commonly available Unix tools
+.\" Copyright 2017 Haelwenn (lanodan) Monnier <contact+utils@hacktivis.me>
+.\" SPDX-License-Identifier: MPL-2.0
+.Dd 2023-10-02
+.Dt ID 1
+.Os
+.Sh NAME
+.Nm id
+.Nd return user identity
+.Sh SYNOPSIS
+.Nm
+.Op Fl Ggu
+.Op Fl nr
+.Op Ar user
+.Sh DESCRIPTION
+By default
+.Nm
+prints the current
+.Ql uid ,
+.Ql gid
+and
+.Ql groups
+of the current session.
+If
+.Ar user
+is specifies then it reads from the
+.Xr passwd 5
+and
+.Xr group 5
+entries.
+.Sh OPTIONS
+.Bl -tag -width Ds
+.It Fl G
+Output only groups (effective, real, and supplementary) separated by spaces.
+.It Fl g
+Output only the effective group ID.
+.It Fl u
+Output only the effective user ID.
+.It Fl n
+Output names instead of IDs.
+.It Fl r
+Output the real IDs instead of effective IDs.
+.El
+.Sh EXIT STATUS
+.Ex -std
+.Sh SEE ALSO
+.Xr group 5 ,
+.Xr passwd 5
+.Sh STANDARDS
+.Nm
+should be compliant with the
+IEEE Std 1003.1-2024 (“POSIX.1”)
+specification.
+.Sh AUTHORS
+.An Haelwenn (lanodan) Monnier Aq Mt contact+utils@hacktivis.me
diff --git a/share/man/man1/id.1.gz b/share/man/man1/id.1.gz
Binary files differ.
diff --git a/share/man/man1/install.1 b/share/man/man1/install.1
@@ -0,0 +1,100 @@
+.\" utils-std: Collection of commonly available Unix tools
+.\" Copyright 2017 Haelwenn (lanodan) Monnier <contact+utils@hacktivis.me>
+.\" SPDX-License-Identifier: MPL-2.0
+.Dd 2024-05-01
+.Dt INSTALL 1
+.Os
+.Sh NAME
+.Nm install
+.Nd install binairies
+.Sh SYNOPSIS
+.Nm
+.Op Fl CcDpT
+.Op Fl g Ar group
+.Op Fl m Ar mode
+.Op Fl o Ar owner
+.Ar source...
+.Ar destination
+.Nm
+.Op Fl CcDpT
+.Op Fl g Ar group
+.Op Fl m Ar mode
+.Op Fl o Ar owner
+.Fl t Ar destination
+.Ar source...
+.Nm
+.Fl d
+.Op Fl c
+.Op Fl g Ar group
+.Op Fl m Ar mode
+.Op Fl o Ar owner
+.Ar directory...
+.Sh DESCRIPTION
+.Nm
+copies the given
+.Ar source
+files to
+.Ar destination .
+If
+.Ar destination
+is a directory then source is copied into destination with its original filename,
+otherwise if it already exists, it is removed.
+.Pp
+The mode of
+.Ar destination
+is set to 755 unless
+.Fl m Ar mode
+is specified.
+.Sh OPTIONS
+.Bl -tag -width _o_owner
+.It Fl C
+Ignored, for compatibility with other implementations.
+.It Fl c
+Copy the file, default behavior in all modern implementations.
+.It Fl d
+Create directories, including their parents.
+.It Fl D
+Create parent directories for
+.Ar destination .
+.br
+Note that this option isn't portable, as
+.Fx
+and
+.Nx
+implementation of
+.Nm
+takes an argument like so:
+.Fl D Ar destdir
+.It Fl g Ar group
+Sets group ownership.
+.It Fl m Ar mode
+Sets alternative mode.
+The default mode is set to
+.Ql 0755/rwr-xr-x .
+.It Fl o Ar owner
+Sets user ownership.
+.It Fl p
+Preserve file access and modification times.
+.It Fl t Ar destination
+Use
+.Ar destination
+as directory to copy each
+.Ar source
+into.
+.It Fl T
+Treat
+.Ar destination
+as a normal file.
+Which asserts a single
+.Ar source
+operand.
+.El
+.Sh STANDARDS
+None known.
+.Sh HISTORY
+The
+.Nm
+utility appeared in
+.Bx 4.2 .
+.Sh AUTHORS
+.An Haelwenn (lanodan) Monnier Aq Mt contact+utils@hacktivis.me
diff --git a/share/man/man1/install.1.gz b/share/man/man1/install.1.gz
Binary files differ.
diff --git a/share/man/man1/join.1 b/share/man/man1/join.1
@@ -0,0 +1,259 @@
+.\" SPDX-License-Identifier: BSD-3-Clause
+.\" Copyright (c) 1990, 1993
+.\" The Regents of the University of California. All rights reserved.
+.\"
+.\" This code is derived from software contributed to Berkeley by
+.\" the Institute of Electrical and Electronics Engineers, Inc.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\" notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\" notice, this list of conditions and the following disclaimer in the
+.\" documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of the University nor the names of its contributors
+.\" may be used to endorse or promote products derived from this software
+.\" without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" @(#)join.1 8.3 (Berkeley) 4/28/95
+.\"
+.Dd June 20, 2020
+.Dt JOIN 1
+.Os
+.Sh NAME
+.Nm join
+.Nd relational database operator
+.Sh SYNOPSIS
+.Nm
+.Oo
+.Fl a Ar file_number | Fl v Ar file_number
+.Oc
+.Op Fl e Ar string
+.Op Fl o Ar list
+.Op Fl t Ar char
+.Op Fl 1 Ar field
+.Op Fl 2 Ar field
+.Ar file1
+.Ar file2
+.Sh DESCRIPTION
+The
+.Nm
+utility performs an
+.Dq equality join
+on the specified files
+and writes the result to the standard output.
+The
+.Dq join field
+is the field in each file by which the files are compared.
+The first field in each line is used by default.
+There is one line in the output for each pair of lines in
+.Ar file1
+and
+.Ar file2
+which have identical join fields.
+Each output line consists of the join field, the remaining fields from
+.Ar file1
+and then the remaining fields from
+.Ar file2 .
+.Pp
+The default field separators are tab and space characters.
+In this case, multiple tabs and spaces count as a single field separator,
+and leading tabs and spaces are ignored.
+The default output field separator is a single space character.
+.Pp
+Many of the options use file and field numbers.
+Both file numbers and field numbers are 1 based, i.e., the first file on
+the command line is file number 1 and the first field is field number 1.
+The following options are available:
+.Bl -tag -width indent
+.It Fl a Ar file_number
+In addition to the default output, produce a line for each unpairable
+line in file
+.Ar file_number .
+.It Fl e Ar string
+Replace empty output fields with
+.Ar string .
+.It Fl o Ar list
+The
+.Fl o
+option specifies the fields that will be output from each file for
+each line with matching join fields.
+Each element of
+.Ar list
+has either the form
+.Ar file_number . Ns Ar field ,
+where
+.Ar file_number
+is a file number and
+.Ar field
+is a field number, or the form
+.Ql 0
+.Pq zero ,
+representing the join field.
+The elements of list must be either comma
+.Pq Ql \&,
+or whitespace separated.
+(The latter requires quoting to protect it from the shell, or, a simpler
+approach is to use multiple
+.Fl o
+options.)
+.It Fl t Ar char
+Use character
+.Ar char
+as a field delimiter for both input and output.
+Every occurrence of
+.Ar char
+in a line is significant.
+.It Fl v Ar file_number
+Do not display the default output, but display a line for each unpairable
+line in file
+.Ar file_number .
+The options
+.Fl v Cm 1
+and
+.Fl v Cm 2
+may be specified at the same time.
+.It Fl 1 Ar field
+Join on the
+.Ar field Ns 'th
+field of
+.Ar file1 .
+.It Fl 2 Ar field
+Join on the
+.Ar field Ns 'th
+field of
+.Ar file2 .
+.El
+.Pp
+When the default field delimiter characters are used, the files to be joined
+should be ordered in the collating sequence of
+.Xr sort 1 ,
+using the
+.Fl b
+option, on the fields on which they are to be joined, otherwise
+.Nm
+may not report all field matches.
+When the field delimiter characters are specified by the
+.Fl t
+option, the collating sequence should be the same as
+.Xr sort 1
+without the
+.Fl b
+option.
+.Pp
+If one of the arguments
+.Ar file1
+or
+.Ar file2
+is
+.Sq Fl ,
+the standard input is used.
+.Sh EXIT STATUS
+.Ex -std
+.Sh EXAMPLES
+Assuming a file named
+.Pa nobel_laureates.txt
+with information about some of the first Nobel Peace Prize laureates:
+.Bd -literal -offset indent
+1901,Jean Henri Dunant,M
+1901,Frederic Passy,M
+1902,Elie Ducommun,M
+1905,Baroness Bertha Sophie Felicita Von Suttner,F
+1910,Permanent International Peace Bureau,
+.Ed
+.Pp
+and a second file
+.Pa nobel_nationalities.txt
+with their nationalities:
+.Bd -literal -offset indent
+Jean Henri Dunant,Switzerland
+Frederic Passy,France
+Elie Ducommun,Switzerland
+Baroness Bertha Sophie Felicita Von Suttner
+.Ed
+.Pp
+Join the two files using the second column from first file and the default first
+column from second file specifying a custom field delimiter:
+.Bd -literal -offset indent
+$ join -t, -1 2 nobel_laureates.txt nobel_nationalities.txt
+Jean Henri Dunant,1901,M,Switzerland
+Frederic Passy,1901,M,France
+Elie Ducommun,1902,M,Switzerland
+Baroness Bertha Sophie Felicita Von Suttner,1905,F
+.Ed
+.Pp
+Show only the year and the nationality of the laureate using
+.Ql <<NULL>>
+to replace empty fields:
+.Bd -literal -offset indent
+$ join -e "<<NULL>>" -t, -1 2 -o "1.1 2.2" nobel_laureates.txt nobel_nationalities.txt
+1901,Switzerland
+1901,France
+1902,Switzerland
+1905,<<NULL>>
+.Ed
+.Pp
+Show only lines from first file which do not have a match in second file:
+.Bd -literal -offset indent
+$ join -v1 -t, -1 2 nobel_laureates.txt nobel_nationalities.txt
+Permanent International Peace Bureau,1910,
+.Ed
+.Pp
+Assuming a file named
+.Pa capitals.txt
+with the following content:
+.Bd -literal -offset indent
+Belgium,Brussels
+France,Paris
+Italy,Rome
+Switzerland
+.Ed
+.Pp
+Show the name and capital of the country where the laureate was born.
+This example uses
+.Pa nobel_nationalities.txt
+as a bridge but does not show any information from that file.
+Also see the note about
+.Xr sort 1
+above to understand why we need to sort the intermediate result.
+.Bd -literal -offset indent
+$ join -t, -1 2 -o "1.2 2.2" nobel_laureates.txt nobel_nationalities.txt | \e
+ sort -k2 -t, | join -t, -e "<<NULL>>" -1 2 -o "1.1 2.2" - capitals.txt
+Elie Ducommun,<<NULL>>
+Jean Henri Dunant,<<NULL>>
+.Ed
+.Sh COMPATIBILITY
+Compatibility with
+.Fl a
+and multi-operand
+.Fl o
+from historical versions of
+.Nm
+got dropped, compatibility with
+.Fl j Ar field
+is kept for now.
+.Sh SEE ALSO
+.Xr awk 1 ,
+.Xr comm 1 ,
+.Xr paste 1 ,
+.Xr sort 1 ,
+.Xr uniq 1
+.Sh STANDARDS
+.Nm
+should be compliant with the
+IEEE Std 1003.1-2024 (“POSIX.1”)
+specification.
diff --git a/share/man/man1/join.1.gz b/share/man/man1/join.1.gz
Binary files differ.
diff --git a/share/man/man1/link.1 b/share/man/man1/link.1
@@ -0,0 +1,31 @@
+.\" utils-std: Collection of commonly available Unix tools
+.\" Copyright 2017 Haelwenn (lanodan) Monnier <contact+utils@hacktivis.me>
+.\" SPDX-License-Identifier: MPL-2.0
+.Dd 2022-04-22
+.Dt LINK 1
+.Os
+.Sh NAME
+.Nm link
+.Nd link one file to another file
+.Sh SYNOPSIS
+.Nm
+.Ar reference
+.Ar destination
+.Sh DESCRIPTION
+.Nm
+will call
+.Xr link 3
+with
+.Ar reference
+and
+.Ar destination ,
+returning an error message in case of failure.
+.Sh EXIT STATUS
+.Ex -std
+.Sh STANDARDS
+.Nm
+should be compliant with the
+IEEE Std 1003.1-2024 (“POSIX.1”)
+specification.
+.Sh AUTHORS
+.An Haelwenn (lanodan) Monnier Aq Mt contact+utils@hacktivis.me
diff --git a/share/man/man1/link.1.gz b/share/man/man1/link.1.gz
Binary files differ.
diff --git a/share/man/man1/ln.1 b/share/man/man1/ln.1
@@ -0,0 +1,78 @@
+.\" utils-std: Collection of commonly available Unix tools
+.\" Copyright 2017 Haelwenn (lanodan) Monnier <contact+utils@hacktivis.me>
+.\" SPDX-License-Identifier: MPL-2.0
+.Dd 2024-04-28
+.Dt LN 1
+.Os
+.Sh NAME
+.Nm ln
+.Nd create hard links and symbolic links
+.Sh SYNOPSIS
+.Nm
+.Op Fl fn
+.Op Fl L Ns | Ns Fl P
+.Ar source...
+.Ar target
+.Nm
+.Fl s
+.Op Fl fn
+.Ar reference...
+.Ar target
+.Sh DESCRIPTION
+.Nm
+create links at
+.Ar target
+for each given
+.Ar source
+or
+.Ar reference .
+.Pp
+When
+.Ar target
+is an existing directory or multiple
+.Ar source
+or
+.Ar reference
+are given,
+.Nm
+will create links into
+.Ar target .
+.Pp
+Should be noted that unlike commands like
+.Xr cp 1 ,
+.Ar reference
+is kept as is and therefore is always relative to
+.Ar target
+rather than the current directory.
+.Sh OPTIONS
+.Bl -tag -width __
+.It Fl f
+Forcefully create links by removing existing entries.
+.It Fl L
+If
+.Ar source
+is a symbolic link, dereference it.
+.It Fl n
+Prevent descending into
+.Ar target
+as a directory if it is a symbolic link.
+.It Fl P
+If
+.Ar source
+is a symbolic link, hard link it.
+This is the default.
+.It Fl s
+Create symbolic links instead of hard links.
+.El
+.Sh EXIT STATUS
+.Ex -std
+.Sh STANDARDS
+.Nm
+should be compliant with the
+IEEE Std 1003.1-2024 (“POSIX.1”)
+specification.
+The
+.Fl n
+option is an extension.
+.Sh AUTHORS
+.An Haelwenn (lanodan) Monnier Aq Mt contact+utils@hacktivis.me
diff --git a/share/man/man1/ln.1.gz b/share/man/man1/ln.1.gz
Binary files differ.
diff --git a/share/man/man1/logname.1 b/share/man/man1/logname.1
@@ -0,0 +1,28 @@
+.\" utils-std: Collection of commonly available Unix tools
+.\" Copyright 2017 Haelwenn (lanodan) Monnier <contact+utils@hacktivis.me>
+.\" SPDX-License-Identifier: MPL-2.0
+.Dd 2024-03-27
+.Dt LOGNAME 1
+.Os
+.Sh NAME
+.Nm logname
+.Nd print user's login name
+.Sh SYNOPSIS
+.Nm
+.Sh DESCRIPTION
+.Nm
+prints the user's login name.
+Should be equivalent to
+.Cm id
+.Fl un .
+.Sh EXIT STATUS
+.Ex -std
+.Sh SEE ALSO
+.Xr getlogin 3
+.Sh STANDARDS
+.Nm
+should be compliant with the
+IEEE Std 1003.1-2024 (“POSIX.1”)
+specification.
+.Sh AUTHORS
+.An Haelwenn (lanodan) Monnier Aq Mt contact+utils@hacktivis.me
diff --git a/share/man/man1/logname.1.gz b/share/man/man1/logname.1.gz
Binary files differ.
diff --git a/share/man/man1/mkdir.1 b/share/man/man1/mkdir.1
@@ -0,0 +1,49 @@
+.\" utils-std: Collection of commonly available Unix tools
+.\" Copyright 2017 Haelwenn (lanodan) Monnier <contact+utils@hacktivis.me>
+.\" SPDX-License-Identifier: MPL-2.0
+.Dd 2024-04-08
+.Dt MKDIR 1
+.Os
+.Sh NAME
+.Nm mkdir
+.Nd make directories
+.Sh SYNOPSIS
+.Nm
+.Op Fl pv
+.Op Fl m Ar mode
+.Ar dir...
+.Sh DESCRIPTION
+.Nm
+creates each given
+.Ar dir
+in the order specified.
+.Sh OPTIONS
+.Bl -tag -width _m_mode
+.It Fl m Ar mode
+Set permission of new directories specified by
+.Ar dir ,
+relative to a=rwx using the same format as
+.Xr chmod 1 .
+.It Fl p
+Parents mode, create missing directories present in the path given by
+.Ar dir .
+As required by POSIX, parents are created with u=wx|~umask as their default mode, ignoring
+.Fl m Ar mode .
+.It Fl v
+Verbose mode, print each successfully made directory.
+.El
+.Sh EXIT STATUS
+.Ex -std
+.Sh SEE ALSO
+.Xr chmod 1
+.Sh STANDARDS
+.Nm
+should be compliant with the
+IEEE Std 1003.1-2024 (“POSIX.1”)
+specification.
+.Pp
+The
+.Fl v
+option is an extension also present in GNU coreutils and FreeBSD.
+.Sh AUTHORS
+.An Haelwenn (lanodan) Monnier Aq Mt contact+utils@hacktivis.me
diff --git a/share/man/man1/mkdir.1.gz b/share/man/man1/mkdir.1.gz
Binary files differ.
diff --git a/share/man/man1/mkfifo.1 b/share/man/man1/mkfifo.1
@@ -0,0 +1,35 @@
+.\" utils-std: Collection of commonly available Unix tools
+.\" Copyright 2017 Haelwenn (lanodan) Monnier <contact+utils@hacktivis.me>
+.\" SPDX-License-Identifier: MPL-2.0
+.Dd 2024-04-23
+.Dt MKFIFO 1
+.Os
+.Sh NAME
+.Nm mkfifo
+.Nd Create FIFO special files
+.Sh SYNOPSIS
+.Nm
+.Op Fl m Ar mode
+.Ar file...
+.Sh DESCRIPTION
+.Nm
+creates a FIFO special file at
+.Ar file .
+.Sh OPTIONS
+.Bl -tag -width _m_mode
+.It Fl m Ar mode
+Set permission of new special file,
+relative to 0666/rw-rw-rw using the same format as
+.Xr chmod 1 .
+.El
+.Sh EXIT STATUS
+.Ex -std
+.Sh SEE ALSO
+.Xr mknod 1
+.Sh STANDARDS
+.Nm
+should be compliant with the
+IEEE Std 1003.1-2024 (“POSIX.1”)
+specification.
+.Sh AUTHORS
+.An Haelwenn (lanodan) Monnier Aq Mt contact+utils@hacktivis.me
diff --git a/share/man/man1/mkfifo.1.gz b/share/man/man1/mkfifo.1.gz
Binary files differ.
diff --git a/share/man/man1/mknod.1 b/share/man/man1/mknod.1
@@ -0,0 +1,67 @@
+.\" utils-std: Collection of commonly available Unix tools
+.\" Copyright 2017 Haelwenn (lanodan) Monnier <contact+utils@hacktivis.me>
+.\" SPDX-License-Identifier: MPL-2.0
+.Dd 2024-04-21
+.Dt MKNOD 1
+.Os
+.Sh NAME
+.Nm mknod
+.Nd Create FIFO, block-special, character-special files
+.Sh SYNOPSIS
+.Nm
+.Op Fl m Ar mode
+.Ar path
+.Ar b Ns | Ns Ar c Ns | Ns Ar u
+.Ar major
+.Ar minor
+.Nm
+.Op Fl m Ar mode
+.Ar path
+.Ar p
+.Sh DESCRIPTION
+.Nm
+creates special file at
+.Ar path
+of the given type:
+.Bl -tag -width ___
+.It Ar b
+Create block special file
+.It Ar c Ns | Ns Ar u
+Create character special file
+.It Ar p
+Create FIFO
+.El
+.Pp
+Both
+.Ar major
+and
+.Ar minor
+must be secified when type is
+.Ar b ,
+.Ar c ,
+or
+.Ar u ,
+and they must be omitted when type is
+.Ar p .
+The numbers given in
+.Ar major
+and
+.Ar minor
+are interpreted as hexadecimal with a leading 0x or 0X,
+octal with a leading 0,
+decimal otherwise.
+.Sh OPTIONS
+.Bl -tag -width _m_mode
+.It Fl m Ar mode
+Set permission of new special file,
+relative to 0666/rw-rw-rw using the same format as
+.Xr chmod 1 .
+.El
+.Sh EXIT STATUS
+.Ex -std
+.Sh SEE ALSO
+.Xr mkfifo 1
+.Sh STANDARDS
+None known.
+.Sh AUTHORS
+.An Haelwenn (lanodan) Monnier Aq Mt contact+utils@hacktivis.me
diff --git a/share/man/man1/mknod.1.gz b/share/man/man1/mknod.1.gz
Binary files differ.
diff --git a/share/man/man1/mktemp.1 b/share/man/man1/mktemp.1
@@ -0,0 +1,55 @@
+.\" utils-std: Collection of commonly available Unix tools
+.\" Copyright 2017 Haelwenn (lanodan) Monnier <contact+utils@hacktivis.me>
+.\" SPDX-License-Identifier: MPL-2.0
+.Dd 2024-07-30
+.Dt MKTEMP 1
+.Os
+.Sh NAME
+.Nm mktemp
+.Nd make a new randomly-named file or directory
+.Sh SYNOPSIS
+.Nm
+.Op Fl dqt
+.Op Fl p Ar tempdir
+.Op Ar template
+.Sh DESCRIPTION
+.Nm
+creates a new randomly-named file or directory,
+and prints its name.
+.Pp
+.Ar template
+must contain at least 6 consecutive
+.Ql X
+as last path component.
+If
+.Ar template
+is not specified,
+.Ql tmp.XXXXXXXXXX
+is used instead.
+.br
+Files are created with u+rw permissions, directories with u+rwx.
+.Sh OPTIONS
+.Bl -tag -width _d
+.It Fl d
+Create a directory, not a file.
+.It Fl q
+Quiet messages about file/directory creation failure.
+.It Fl p Ar tempdir
+Specify
+.Ar tempdir
+as an existing directory to create into.
+Overrides
+.Ev TMPDIR .
+.It Fl t
+Use
+.Ev TMPDIR
+or if unset,
+.Pa /tmp ,
+as an existing directory to create into.
+.El
+.Sh EXIT STATUS
+.Ex -std
+.Sh STANDARDS
+None known.
+.Sh AUTHORS
+.An Haelwenn (lanodan) Monnier Aq Mt contact+utils@hacktivis.me
diff --git a/share/man/man1/mktemp.1.gz b/share/man/man1/mktemp.1.gz
Binary files differ.
diff --git a/share/man/man1/mv.1 b/share/man/man1/mv.1
@@ -0,0 +1,96 @@
+.\" utils-std: Collection of commonly available Unix tools
+.\" Copyright 2017 Haelwenn (lanodan) Monnier <contact+utils@hacktivis.me>
+.\" SPDX-License-Identifier: MPL-2.0
+.Dd 2024-05-10
+.Dt MV 1
+.Os
+.Sh NAME
+.Nm mv
+.Nd move and rename files
+.Sh SYNOPSIS
+.Nm
+.Op Fl f Ns | Ns Fl i Ns | Ns Fl n
+.Op Fl v
+.Ar source
+.Ar destfile
+.Nm
+.Op Fl f Ns | Ns Fl i Ns | Ns Fl n
+.Op Fl v
+.Ar source...
+.Ar destdir
+.Nm
+.Op Fl f Ns | Ns Fl i Ns | Ns Fl n
+.Op Fl v
+.Fl t Ar destdir
+.Ar source...
+.Sh DESCRIPTION
+In the first form,
+.Nm
+moves each given
+.Ar source
+to
+.Ar destfile .
+This form is assumed when
+.Ar destfile
+does not refers to an existing directory, or a symlink pointing to one.
+Additionally, in this case a trailing slash and
+.Ar source
+not referring to a directory results in an error.
+.Pp
+In the second and third form,
+.Nm
+moves each given
+.Ar source
+into
+.Ar destdir
+with appending the
+.Ar source
+basename to
+.Ar destdir
+to create the full destination path.
+.Sh OPTIONS
+.Bl -tag -width _f
+.It Fl f
+Force, do not ask before overwriting to the destination path.
+Overrides previously set
+.Fl i
+and
+.Fl n
+options.
+.It Fl i
+Interactive, causes
+.Nm
+to ask before overwriting a file.
+Overrides previously set
+.Fl f
+and
+.Fl n
+options.
+.It Fl n
+No-clobber, never overwrite.
+Overrides previously set
+.Fl f
+and
+.Fl i
+options.
+.It Fl t Ar destdir
+Set the destination directory.
+.It Fl v
+Verbose, write which action has been done.
+.El
+.Sh STANDARDS
+.Nm
+should be compliant with the
+IEEE Std 1003.1-2024 (“POSIX.1”)
+specification.
+The
+.Fl n ,
+.Fl t Ar destdir
+and
+.Fl v
+options are extensions.
+.Sh HISTORY
+A
+.Nm
+command appeared in
+.At v1 .
diff --git a/share/man/man1/mv.1.gz b/share/man/man1/mv.1.gz
Binary files differ.
diff --git a/share/man/man1/nice.1 b/share/man/man1/nice.1
@@ -0,0 +1,57 @@
+.\" utils-std: Collection of commonly available Unix tools
+.\" Copyright 2017 Haelwenn (lanodan) Monnier <contact+utils@hacktivis.me>
+.\" SPDX-License-Identifier: MPL-2.0
+.Dd 2024-04-18
+.Dt NICE 1
+.Os
+.Sh NAME
+.Nm nice
+.Nd invoke command with modified nice scheduling value
+.Sh SYNOPSIS
+.Nm
+.Op Fl n Ar increment
+.Ar command
+.Op Ar argument...
+.Sh DESCRIPTION
+.Nm
+runs
+.Ar command
+with a modified niceness, changing the scheduling of the process.
+.Pp
+As required by POSIX, if the user lacks the privileges to change the niceness a warning message is printed to stderr but the execution continues and
+.Ar command
+gets executed, without it's niceness changed.
+.Sh OPTIONS
+.Bl -tag -width Ds
+.It Fl n Ar increment
+Positive or negative integer used to adjust the niceness of the process. (default: 0)
+.El
+.Sh EXIT STATUS
+If
+.Ar command
+is invoked, the exit status of
+.Nm
+shall be the exit status of
+.Ar command ;
+Otherwise, the
+.Nm
+utility shall exit with one of the following values:
+.Bl -tag -width Ds
+.It 125
+An error occured within the
+.Nm
+utility.
+.It 126
+.Ar command
+was found but couldn't be invoked.
+.It 127
+.Ar command
+wasn't found.
+.El
+.Sh STANDARDS
+.Nm
+should be compliant with the
+IEEE Std 1003.1-2024 (“POSIX.1”)
+specification.
+.Sh AUTHORS
+.An Haelwenn (lanodan) Monnier Aq Mt contact+utils@hacktivis.me
diff --git a/share/man/man1/nice.1.gz b/share/man/man1/nice.1.gz
Binary files differ.
diff --git a/share/man/man1/nohup.1 b/share/man/man1/nohup.1
@@ -0,0 +1,56 @@
+.\" utils-std: Collection of commonly available Unix tools
+.\" Copyright 2017 Haelwenn (lanodan) Monnier <contact+utils@hacktivis.me>
+.\" SPDX-License-Identifier: MPL-2.0
+.Dd 2024-04-15
+.Dt NOHUP 1
+.Os
+.Sh NAME
+.Nm nohup
+.Nd run command with hangups ignored
+.Sh SYNOPSIS
+.Nm
+.Ar command
+.Op Ar argument...
+.Sh DESCRIPTION
+.Nm
+runs
+.Ar command
+with SIGHUP ignored, allowing to keep
+.Ar command
+running even after the terminal hanged up.
+.Pp
+If stdout is TTY, it's output is saved to
+.Pa ./nohup.out
+or if it fails to open it for writing, to
+.Pa ~/nohup.out .
+If stderr is also a TTY, it's output is also saved to
+.Pa nohup.out .
+.Sh EXIT STATUS
+If
+.Ar command
+is invoked, the exit status of
+.Nm
+shall be the exit status of
+.Ar command ;
+Otherwise, the
+.Nm
+utility shall exit with one of the following values:
+.Bl -tag -width Ds
+.It 126
+.Ar command
+was found but couldn't be invoked.
+.It 127
+.Ar command
+wasn't found or an error occured within the
+.Nm
+utility.
+.El
+.Sh SEE ALSO
+.Xr tmux 1
+.Sh STANDARDS
+.Nm
+should be compliant with the
+IEEE Std 1003.1-2024 (“POSIX.1”)
+specification.
+.Sh AUTHORS
+.An Haelwenn (lanodan) Monnier Aq Mt contact+utils@hacktivis.me
diff --git a/share/man/man1/nohup.1.gz b/share/man/man1/nohup.1.gz
Binary files differ.
diff --git a/share/man/man1/nproc.1 b/share/man/man1/nproc.1
@@ -0,0 +1,27 @@
+.\" utils-std: Collection of commonly available Unix tools
+.\" Copyright 2017 Haelwenn (lanodan) Monnier <contact+utils@hacktivis.me>
+.\" SPDX-License-Identifier: MPL-2.0
+.Dd 2023-10-02
+.Dt NPROC 1
+.Os
+.Sh NAME
+.Nm nproc
+.Nd print the number of processors
+.Sh SYNOPSIS
+.Nm
+.Op Fl a
+.Sh DESCRIPTION
+By default
+.Nm
+prints the number of currently available processors to run processes.
+This may be lower than the number of processors which can be made available, which you can see via the
+.Fl a
+option.
+.Sh EXIT STATUS
+.Ex -std
+.Sh SEE ALSO
+.Xr sysconf 3
+.Sh STANDARDS
+None known.
+.Sh AUTHORS
+.An Haelwenn (lanodan) Monnier Aq Mt contact+utils@hacktivis.me
diff --git a/share/man/man1/nproc.1.gz b/share/man/man1/nproc.1.gz
Binary files differ.
diff --git a/share/man/man1/pathchk.1 b/share/man/man1/pathchk.1
@@ -0,0 +1,69 @@
+.\" utils-std: Collection of commonly available Unix tools
+.\" Copyright 2017 Haelwenn (lanodan) Monnier <contact+utils@hacktivis.me>
+.\" SPDX-License-Identifier: MPL-2.0
+.Dd 2024-04-19
+.Dt PATHCHK 1
+.Os
+.Sh NAME
+.Nm pathchk
+.Nd check pathname validity
+.Sh SYNOPSIS
+.Nm
+.Op Fl pP
+.Ar pathname...
+.Sh DESCRIPTION
+.Nm
+checks each
+.Ar pathname
+for their validity and portability.
+.Pp
+By default,
+.Nm
+does the following checks, based on the underlying filesystem:
+.Bl -bullet
+.It
+Isn't longer than PATH_MAX
+.It
+Doesn't have any path component longer than NAME_MAX
+.It
+Is reachable to the current user
+.It
+Doesn't contains invalid bytes
+.El
+.Pp
+Note that non-existing path components aren't seen as an error by
+.Nm .
+.Sh OPTIONS
+.Bl -tag -width ee
+.It Fl p
+Do not perform checks against the underlying filesystem, meaning:
+.Bl -bullet -compact
+.It
+_POSIX_PATH_MAX is used instead of PATH_MAX
+.It
+_POSIX_NAME_MAX is used instead of NAME_MAX
+.It
+Directories aren't checked for user reachability
+.It
+POSIX Portable Character Set is the only reference for invalid byte sequences
+.El
+.It Fl P
+Perform the following additional checks:
+.Bl -bullet -compact
+.It
+Doesn't contains a path component whose first character is the <hyphen-minus> character
+.It
+Isn't empty
+.El
+.El
+.Sh EXIT STATUS
+.Ex -std
+.Sh SEE ALSO
+.Xr test 1
+.Sh STANDARDS
+.Nm
+should be compliant with
+IEEE Std 1003.1-2024 (“POSIX.1”)
+specification.
+.Sh AUTHORS
+.An Haelwenn (lanodan) Monnier Aq Mt contact+utils@hacktivis.me
diff --git a/share/man/man1/pathchk.1.gz b/share/man/man1/pathchk.1.gz
Binary files differ.
diff --git a/share/man/man1/printf.1 b/share/man/man1/printf.1
@@ -0,0 +1,426 @@
+.\" SPDX-License-Identifier: BSD-3-Clause
+.\" Copyright (c) 1989, 1990, 1993
+.\" The Regents of the University of California. All rights reserved.
+.\"
+.\" This code is derived from software contributed to Berkeley by
+.\" the Institute of Electrical and Electronics Engineers, Inc.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\" notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\" notice, this list of conditions and the following disclaimer in the
+.\" documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of the University nor the names of its contributors
+.\" may be used to endorse or promote products derived from this software
+.\" without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.Dd July 1, 2020
+.Dt PRINTF 1
+.Os
+.Sh NAME
+.Nm printf
+.Nd formatted output
+.Sh SYNOPSIS
+.Nm
+.Ar format Op Ar argument...
+.Sh DESCRIPTION
+The
+.Nm
+utility formats and prints its arguments, after the first, under control
+of the
+.Ar format .
+The
+.Ar format
+is a character string which contains three types of objects: plain characters,
+which are simply copied to standard output, character escape sequences which
+are converted and copied to the standard output, and format specifications,
+each of which causes printing of the next successive
+.Ar argument .
+.Pp
+The
+.Ar argument
+after the first are treated as strings if the corresponding format is
+either
+.Cm c , b
+or
+.Cm s ;
+otherwise it is evaluated as a C constant, with the following extensions:
+.Pp
+.Bl -bullet -offset indent -compact
+.It
+A leading plus or minus sign is allowed.
+.It
+If the leading character is a single or double quote, the value is the
+character code of the next character.
+.El
+.Pp
+The format string is reused as often as necessary to satisfy the
+.Ar argument .
+Any extra format specifications are evaluated with zero or the null
+string.
+.Pp
+Character escape sequences are in backslash notation as defined in the
+.St -ansiC ,
+with extensions.
+The characters and their meanings
+are as follows:
+.Pp
+.Bl -tag -width Ds -offset indent -compact
+.It Cm \ea
+Write a <bell> character.
+.It Cm \eb
+Write a <backspace> character.
+.It Cm \ef
+Write a <form-feed> character.
+.It Cm \en
+Write a <new-line> character.
+.It Cm \er
+Write a <carriage return> character.
+.It Cm \et
+Write a <tab> character.
+.It Cm \ev
+Write a <vertical tab> character.
+.It Cm \e\'
+Write a <single quote> character.
+.It Cm \e\e
+Write a backslash character.
+.It Cm \ex Ns Ar hex-num
+Write a byte whose
+value is the 1- or 2-digits
+hexadecimal number
+.Ar hex-num .
+.It Cm \e Ns Ar num
+Write a byte whose
+value is the 1-, 2-, or 3-digit
+octal number
+.Ar num .
+.El
+Multibyte characters can be constructed using multiple
+.Cm \ex Ns Ar hex-num
+or
+.Cm \e Ns Ar num
+sequences.
+.Pp
+Each format specification is introduced by the percent character
+(``%'').
+The remainder of the format specification includes,
+in the following order:
+.Bl -tag -width Ds
+.It "Zero or more of the following flags:"
+.Bl -tag -width Ds
+.It Cm #
+A `#' character
+specifying that the value should be printed in an ``alternate form''.
+For
+.Cm b , c , d , s
+and
+.Cm u
+formats, this option has no effect.
+For the
+.Cm o
+formats the precision of the number is increased to force the first
+character of the output string to a zero.
+For the
+.Cm x
+.Pq Cm X
+format, a non-zero result has the string
+.Li 0x
+.Pq Li 0X
+prepended to it.
+For
+.Cm a , A , e , E , f , F , g
+and
+.Cm G
+formats, the result will always contain a decimal point, even if no
+digits follow the point (normally, a decimal point only appears in the
+results of those formats if a digit follows the decimal point).
+For
+.Cm g
+and
+.Cm G
+formats, trailing zeros are not removed from the result as they
+would otherwise be;
+.It Cm \&\-
+A minus sign `\-' which specifies
+.Em left adjustment
+of the output in the indicated field;
+.It Cm \&+
+A `+' character specifying that there should always be
+a sign placed before the number when using signed formats.
+.It Sq \&\ \&
+A space specifying that a blank should be left before a positive number
+for a signed format.
+A `+' overrides a space if both are used;
+.It Cm \&0
+A zero `0' character indicating that zero-padding should be used
+rather than blank-padding.
+A `\-' overrides a `0' if both are used;
+.El
+.It "Field Width:"
+An optional digit string specifying a
+.Em field width ;
+if the output string has fewer bytes than the field width it will
+be blank-padded on the left (or right, if the left-adjustment indicator
+has been given) to make up the field width (note that a leading zero
+is a flag, but an embedded zero is part of a field width);
+.It Precision:
+An optional period,
+.Sq Cm \&.\& ,
+followed by an optional digit string giving a
+.Em precision
+which specifies the number of digits to appear after the decimal point,
+for
+.Cm e
+and
+.Cm f
+formats, or the maximum number of bytes to be printed
+from a string; if the digit string is missing, the precision is treated
+as zero;
+.It Format:
+A character which indicates the type of format to use (one of
+.Cm diouxXfFeEgGaAcsb ) .
+The uppercase formats differ from their lowercase counterparts only in
+that the output of the former is entirely in uppercase.
+The floating-point format specifiers
+.Pq Cm fFeEgGaA
+may be prefixed by an
+.Cm L
+to request that additional precision be used, if available.
+.El
+.Pp
+A field width or precision may be
+.Sq Cm \&*
+instead of a digit string.
+In this case an
+.Ar argument
+supplies the field width or precision.
+.Pp
+The format characters and their meanings are:
+.Bl -tag -width Fl
+.It Cm diouXx
+The
+.Ar argument
+is printed as a signed decimal (d or i), unsigned octal, unsigned decimal,
+or unsigned hexadecimal (X or x), respectively.
+.It Cm fF
+The
+.Ar argument
+is printed in the style `[\-]ddd.ddd' where the number of d's
+after the decimal point is equal to the precision specification for
+the argument.
+If the precision is missing, 6 digits are given; if the precision
+is explicitly 0, no digits and no decimal point are printed.
+The values \*[If] and \*[Na] are printed as
+.Ql inf
+and
+.Ql nan ,
+respectively.
+.It Cm eE
+The
+.Ar argument
+is printed in the style
+.Cm e
+.Sm off
+.Sq Op - Ar d.ddd No \(+- Ar dd
+.Sm on
+where there
+is one digit before the decimal point and the number after is equal to
+the precision specification for the argument; when the precision is
+missing, 6 digits are produced.
+The values \*[If] and \*[Na] are printed as
+.Ql inf
+and
+.Ql nan ,
+respectively.
+.It Cm gG
+The
+.Ar argument
+is printed in style
+.Cm f
+.Pq Cm F
+or in style
+.Cm e
+.Pq Cm E
+whichever gives full precision in minimum space.
+.It Cm aA
+The
+.Ar argument
+is printed in style
+.Sm off
+.Sq Op - Ar h.hhh No \(+- Li p Ar d
+.Sm on
+where there is one digit before the hexadecimal point and the number
+after is equal to the precision specification for the argument;
+when the precision is missing, enough digits are produced to convey
+the argument's exact double-precision floating-point representation.
+The values \*[If] and \*[Na] are printed as
+.Ql inf
+and
+.Ql nan ,
+respectively.
+.It Cm c
+The first byte of
+.Ar argument
+is printed.
+.It Cm s
+Bytes from the string
+.Ar argument
+are printed until the end is reached or until the number of bytes
+indicated by the precision specification is reached; however if the
+precision is 0 or missing, the string is printed entirely.
+.It Cm b
+As for
+.Cm s ,
+but interpret character escapes in backslash notation in the string
+.Ar argument .
+The permitted escape sequences are slightly different in that
+octal escapes are
+.Cm \e0 Ns Ar num
+instead of
+.Cm \e Ns Ar num
+and that an additional escape sequence
+.Cm \ec
+stops further output from this
+.Nm
+invocation.
+.It Cm n$
+Allows reordering of the output according to
+.Ar argument .
+.It Cm \&%
+Print a `%'; no argument is used.
+.El
+.Pp
+The decimal point
+character is defined in the program's locale (category
+.Dv LC_NUMERIC ) .
+.Pp
+In no case does a non-existent or small field width cause truncation of
+a field; padding takes place only if the specified field width exceeds
+the actual width.
+.Pp
+Some shells may provide a builtin
+.Nm
+command which is similar or identical to this utility.
+Consult the
+.Xr builtin 1
+manual page.
+.Sh EXIT STATUS
+.Ex -std
+.Sh EXAMPLES
+Print the string
+.Qq hello :
+.Bd -literal -offset indent
+$ printf "%s\en" hello
+hello
+.Ed
+.Pp
+Same as above, but notice that the format string is not quoted and hence we
+do not get the expected behavior:
+.Bd -literal -offset indent
+$ printf %s\en hello
+hellon$
+.Ed
+.Pp
+Print arguments forcing sign only for the first argument:
+.Bd -literal -offset indent
+$ printf "%+d\en%d\en%d\en" 1 -2 13
++1
+-2
+13
+.Ed
+.Pp
+Same as above, but the single format string will be applied to the three
+arguments:
+.Bd -literal -offset indent
+$ printf "%+d\en" 1 -2 13
++1
+-2
++13
+.Ed
+.Pp
+Print number using only two digits after the decimal point:
+.Bd -literal -offset indent
+$ printf "%.2f\en" 31.7456
+31.75
+.Ed
+.Sh COMPATIBILITY
+The traditional
+.Bx
+behavior of converting arguments of numeric formats not beginning
+with a digit to the ASCII
+code of the first character is not supported.
+.Sh SEE ALSO
+.Xr builtin 1 ,
+.Xr echo 1 ,
+.Xr sh 1 ,
+.Xr printf 3
+.Sh STANDARDS
+The
+.Nm
+command is expected to be compatible with the
+.St -p1003.2
+specification.
+The
+.Cm \ex Ns Ar hex-num
+backslash-escape is an extension.
+.Sh HISTORY
+The
+.Nm
+command appeared in
+.Bx 4.3 Reno .
+It is modeled
+after the standard library function,
+.Xr printf 3 .
+.Sh CAVEATS
+ANSI hexadecimal character constants were deliberately not provided.
+.Pp
+Trying to print a dash ("-") as the first character causes
+.Nm
+to interpret the dash as a program argument.
+.Nm --
+must be used before
+.Ar format .
+.Pp
+If the locale contains multibyte characters
+(such as UTF-8),
+the
+.Cm c
+format and
+.Cm b
+and
+.Cm s
+formats with a precision
+may not operate as expected.
+.Sh BUGS
+Since the floating point numbers are translated from ASCII
+to floating-point and then back again, floating-point precision may be lost.
+(By default, the number is translated to an IEEE-754 double-precision
+value before being printed.
+The
+.Cm L
+modifier may produce additional precision, depending on the hardware platform.)
+.Pp
+The escape sequence \e000 is the string terminator.
+When present in the argument for the
+.Cm b
+format, the argument will be truncated at the \e000 character.
+.Pp
+Multibyte characters are not recognized in format strings (this is only
+a problem if
+.Ql %
+can appear inside a multibyte character).
diff --git a/share/man/man1/printf.1.gz b/share/man/man1/printf.1.gz
Binary files differ.
diff --git a/share/man/man1/pwd.1 b/share/man/man1/pwd.1
@@ -0,0 +1,25 @@
+.\" utils-std: Collection of commonly available Unix tools
+.\" Copyright 2017 Haelwenn (lanodan) Monnier <contact+utils@hacktivis.me>
+.\" SPDX-License-Identifier: MPL-2.0
+.Dd 2024-03-16
+.Dt PWD 1
+.Os
+.Sh NAME
+.Nm pwd
+.Nd print working directory
+.Sh SYNOPSIS
+.Nm
+.Sh DESCRIPTION
+.Nm
+prints the full path of the current working directory.
+.Sh EXIT STATUS
+Zero.
+.Sh SEE ALSO
+.Xr getcwd 3
+.Sh STANDARDS
+.Nm
+should be compliant with the
+IEEE Std 1003.1-2024 (“POSIX.1”)
+specification.
+.Sh AUTHORS
+.An Haelwenn (lanodan) Monnier Aq Mt contact+utils@hacktivis.me
diff --git a/share/man/man1/pwd.1.gz b/share/man/man1/pwd.1.gz
Binary files differ.
diff --git a/share/man/man1/realpath.1 b/share/man/man1/realpath.1
@@ -0,0 +1,58 @@
+.\" utils-std: Collection of commonly available Unix tools
+.\" Copyright 2017 Haelwenn (lanodan) Monnier <contact+utils@hacktivis.me>
+.\" SPDX-License-Identifier: MPL-2.0
+.Dd 2024-03-24
+.Dt REALPATH 1
+.Os
+.Sh NAME
+.Nm realpath
+.Nd print resolved path
+.Sh SYNOPSIS
+.Nm
+.Op Fl E Ns | Ns Fl e
+.Op Fl n Ns | Ns Fl z
+.Ar path...
+.Sh DESCRIPTION
+The
+.Nm
+utility resolves
+.Pa \&. ,
+.Pa .. ,
+and symlinks used in each
+.Ar path
+to print an absolute pathname.
+.Pp
+When no flags are passed, this implementation assumes the behavior of
+.Fl E .
+.Sh OPTIONS
+.Bl -tag -width ee
+.It Fl E
+Do not fail when the final path component does not exists and it's parent is a directory.
+.It Fl e
+Fail when
+.Ar path
+does not exists.
+.It Fl n
+Do not print a trailing separator.
+.It Fl z
+Use NULL byte as separator instead of newlines.
+.El
+.Sh EXIT STATUS
+.Ex -std
+.Sh SEE ALSO
+.Xr realpath 3
+.Sh STANDARDS
+.Nm
+should be compliant with the
+IEEE Std 1003.1-2024 (“POSIX.1”)
+specification.
+.Pp
+The options
+.Fl n
+and
+.Fl z
+and support for multiple
+.Ar path
+arguments are extensions present for compatibility with existing software.
+.Sh AUTHORS
+.An Haelwenn (lanodan) Monnier Aq Mt contact+utils@hacktivis.me
diff --git a/share/man/man1/realpath.1.gz b/share/man/man1/realpath.1.gz
Binary files differ.
diff --git a/share/man/man1/rm.1 b/share/man/man1/rm.1
@@ -0,0 +1,54 @@
+.\" utils-std: Collection of commonly available Unix tools
+.\" Copyright 2017 Haelwenn (lanodan) Monnier <contact+utils@hacktivis.me>
+.\" SPDX-License-Identifier: MPL-2.0
+.Dd 2024-03-20
+.Dt RM 1
+.Os
+.Sh NAME
+.Nm rm
+.Nd remove files and directories
+.Sh SYNOPSIS
+.Nm
+.Op Fl dfirRv
+.Op Ar file...
+.Sh DESCRIPTION
+The
+.Nm
+utility removes each given
+.Ar file ,
+by default directories aren't removed.
+.Pp
+As required by POSIX,
+.Nm
+explicitely checks if a file is writable, when not and
+.Fl f
+wasn't passed, the user is prompted before removal.
+Care should be taken when using other programs as
+.Xr unlink 2
+only fails when the containing directory isn't writable, rather than the file itself.
+.Sh OPTIONS
+.Bl -tag -width Ds
+.It Fl d
+Remove empty directories, doesn't empties them first via recursion.
+.It Fl f
+Force: Never prompt before recursing into directories and removing files, non-existing files do not change exit status nor produce diagnostic messages.
+Overrides
+.Fl i .
+.It Fl i
+Interactive: Prompt before removing any file
+.It Fl r , Fl R
+Recurse into directories, also allowing to remove them.
+.It Fl v
+Verbose: Print when a file got removed
+.El
+.Sh EXIT STATUS
+.Ex -std
+.Sh SEE ALSO
+.Xr unlink 2
+.Sh STANDARDS
+.Nm
+should be compliant with the
+IEEE Std 1003.1-2024 (“POSIX.1”)
+specification.
+.Sh AUTHORS
+.An Haelwenn (lanodan) Monnier Aq Mt contact+utils@hacktivis.me
diff --git a/share/man/man1/rm.1.gz b/share/man/man1/rm.1.gz
Binary files differ.
diff --git a/share/man/man1/rmdir.1 b/share/man/man1/rmdir.1
@@ -0,0 +1,51 @@
+.\" utils-std: Collection of commonly available Unix tools
+.\" Copyright 2017 Haelwenn (lanodan) Monnier <contact+utils@hacktivis.me>
+.\" SPDX-License-Identifier: MPL-2.0
+.Dd 2024-08-30
+.Dt RMDIR 1
+.Os
+.Sh NAME
+.Nm rmdir
+.Nd remove directories
+.Sh SYNOPSIS
+.Nm
+.Op Fl pv
+.Op Fl -ignore-fail-on-non-empty
+.Ar directory...
+.Sh DESCRIPTION
+The
+.Nm
+utility removes each given
+.Ar directory .
+.Sh OPTIONS
+.Bl -tag -width aa
+.It Fl -ignore-fail-on-non-empty
+Ignore failures to remove non-empty directories
+.It Fl p
+Remove all parents directories present in the
+.Ar directory
+argument, but not beyond.
+This is effectively the opposite of
+.Cm mkdir
+.Fl p
+.Ar directory
+.It Fl v
+Verbose, print each action done
+.El
+.Sh EXIT STATUS
+.Ex -std
+.Sh SEE ALSO
+.Xr rm 1
+.Sh STANDARDS
+.Nm
+should be compliant with the
+IEEE Std 1003.1-2024 (“POSIX.1”)
+specification.
+.Pp
+The
+.Fl v
+and
+.Fl -ignore-fail-on-non-empty
+options are extensions.
+.Sh AUTHORS
+.An Haelwenn (lanodan) Monnier Aq Mt contact+utils@hacktivis.me
diff --git a/share/man/man1/rmdir.1.gz b/share/man/man1/rmdir.1.gz
Binary files differ.
diff --git a/share/man/man1/seq.1 b/share/man/man1/seq.1
@@ -0,0 +1,45 @@
+.\" utils-std: Collection of commonly available Unix tools
+.\" Copyright 2017 Haelwenn (lanodan) Monnier <contact+utils@hacktivis.me>
+.\" SPDX-License-Identifier: MPL-2.0
+.Dd 2024-03-14
+.Dt SEQ 1
+.Os
+.Sh NAME
+.Nm seq
+.Nd print a sequence of numbers
+.Sh SYNOPSIS
+.Nm
+.Op Fl w
+.Op Fl s Ar separator
+.Op Fl t Ar terminator
+.Op Ar first Op Ar step
+.Ar last
+.Sh DESCRIPTION
+Prints out a list of floating numbers between
+.Ar first
+(defaults to 1)
+and
+.Ar last
+in increments of
+.Ar step
+(defaults to 1).
+.Sh OPTIONS
+.Bl -tag -width Ds
+.It Fl w
+Use the longest width between either the
+.Ar first
+or the
+.Ar last
+number of the sequence.
+Should match the longest number in the sequence reasonably well.
+.It Fl s Ar separator
+Set the string used between each number (default: "\\n" aka newline)
+.It Fl t Ar terminator
+Set the final string used at the end of the sequence (default: "\\n" aka newline)
+.El
+.Sh EXIT STATUS
+.Ex -std
+.Sh STANDARDS
+None known.
+.Sh AUTHORS
+.An Haelwenn (lanodan) Monnier Aq Mt contact+utils@hacktivis.me
diff --git a/share/man/man1/seq.1.gz b/share/man/man1/seq.1.gz
Binary files differ.
diff --git a/share/man/man1/sha1sum.1 b/share/man/man1/sha1sum.1
@@ -0,0 +1,39 @@
+.\" utils-std: Collection of commonly available Unix tools
+.\" Copyright 2017 Haelwenn (lanodan) Monnier <contact+utils@hacktivis.me>
+.\" SPDX-License-Identifier: MPL-2.0
+.Dd 2024-08-15
+.Dt SHA1SUM 1
+.Os
+.Sh NAME
+.Nm sha1sum
+.Nd write and verify sha1 checksums
+.Sh SYNOPSIS
+.Nm
+.Op Fl c
+.Op Ar file...
+.Sh DESCRIPTION
+.Nm
+reads each
+.Ar file ,
+or standard input if none were specified,
+and prints each of their SHA1 checksum.
+.Sh OPTIONS
+.Bl -tag -width _c
+.It Fl c
+Verify checksums contained in each
+.Ar file .
+Currently supported format being checksum, whitespace, an optional asterisk
+.Ql *
+and finally a filename.
+.El
+.Sh EXIT STATUS
+.Ex -std
+.Sh STANDARDS
+SHA1 is standardized both in FIPS 180-4 and RFC 3174.
+.Sh AUTHORS
+.An Haelwenn (lanodan) Monnier Aq Mt contact+utils@hacktivis.me
+.Sh SECURITY CONSIDERATIONS
+Due to it's known collissions SHA-1 is deprecated, the
+.Nm
+utility is only provided in the interest of compatibility and
+verification of legacy checksums.
diff --git a/share/man/man1/sha1sum.1.gz b/share/man/man1/sha1sum.1.gz
Binary files differ.
diff --git a/share/man/man1/sleep.1 b/share/man/man1/sleep.1
@@ -0,0 +1,35 @@
+.\" utils-std: Collection of commonly available Unix tools
+.\" Copyright 2017 Haelwenn (lanodan) Monnier <contact+utils@hacktivis.me>
+.\" SPDX-License-Identifier: MPL-2.0
+.Dd 2022-11-19
+.Dt SLEEP 1
+.Os
+.Sh NAME
+.Nm sleep
+.Nd delay for a specified amount of time
+.Sh SYNOPSIS
+.Nm
+.Ar duration...
+.Sh DESCRIPTION
+The
+.Nm
+utily shell suspends execution for the total of each
+.Ar duration
+argument.
+.Pp
+.Ar duration
+is a non-negative decimal number including floats, optionally followed by a suffix: s for seconds (default), m for minutes, h for hours.
+Longer durations are taken as out of scope.
+.Sh EXIT STATUS
+.Ex -std
+.Sh SEE ALSO
+.Xr at 1 ,
+.Xr crontab 1 ,
+.Xr nanosleep 3
+.Sh STANDARDS
+.Nm
+should be compliant with the
+IEEE Std 1003.1-2024 (“POSIX.1”)
+specification.
+.Sh AUTHORS
+.An Haelwenn (lanodan) Monnier Aq Mt contact+utils@hacktivis.me
diff --git a/share/man/man1/sleep.1.gz b/share/man/man1/sleep.1.gz
Binary files differ.
diff --git a/share/man/man1/split.1 b/share/man/man1/split.1
@@ -0,0 +1,83 @@
+.\" utils-std: Collection of commonly available Unix tools
+.\" Copyright 2017 Haelwenn (lanodan) Monnier <contact+utils@hacktivis.me>
+.\" SPDX-License-Identifier: MPL-2.0
+.Dd 2024-08-16
+.Dt SPLIT 1
+.Os
+.Sh NAME
+.Nm split
+.Nd split a file into chunks
+.Sh SYNOPSIS
+.Nm
+.Op Fl b Ar size | Fl l Ar lines
+.Op Fl a Ar suffix_length
+.Op Ar file
+.Op Ar name
+.Sh DESCRIPTION
+.Nm
+reads
+.Ar file
+or if unspecified standard input,
+and splits it's content into files containing at most
+.Ar size
+or
+.Ar lines .
+Each split file name is made with
+.Ar name
+followed by a base-26 (a-z) suffix of exactly
+.Ar suffix_length
+characters.
+By default, the first split suffix is "aa", then the second is "ab", and so on.
+.Sh OPTIONS
+.Bl -tag -width Ds
+.It Fl a Ar suffix_length
+(Default: 2) Set the amount of letters to use for the suffix portion of split files.
+.br
+Total of
+.Ar name
+size and
+.Ar suffix_length
+cannot exceed
+.Dv NAME_MAX .
+.It Fl b Ar size
+Split into files of
+.Ar size
+bytes,
+.Ar size
+can be multiplied by one of KMGTP (Kilo, Mega, Giga, Tera, ...)
+using power of 1024 by default, which can be either explicit via adding iB
+(like MiB), or turned into powers of 1000 by adding B (like MB).
+.It Fl l Ar lines
+(Default: 1000) Split into files of
+.Ar lines
+lines.
+.El
+.Sh OPERANDS
+.Bl -tag -width name
+.It Ar file
+Path to the file to be split, defaults to
+.Pa -
+if unspecified.
+.It Ar name
+Prefix to be used for each split file, defaults to
+.Ql x .
+.br
+Total of
+.Ar name
+size and
+.Ar suffix_length
+cannot exceed
+.Dv NAME_MAX .
+.El
+.Sh EXIT STATUS
+.Ex -std
+.Sh SEE ALSO
+.Xr csplit 1 ,
+.Xr truncate 1
+.Sh STANDARDS
+.Nm
+should be compliant with the
+IEEE Std 1003.1-2024 (“POSIX.1”)
+specification.
+.Sh AUTHORS
+.An Haelwenn (lanodan) Monnier Aq Mt contact+utils@hacktivis.me
diff --git a/share/man/man1/split.1.gz b/share/man/man1/split.1.gz
Binary files differ.
diff --git a/share/man/man1/strings.1 b/share/man/man1/strings.1
@@ -0,0 +1,61 @@
+.\" utils-std: Collection of commonly available Unix tools
+.\" Copyright 2017 Haelwenn (lanodan) Monnier <contact+utils@hacktivis.me>
+.\" SPDX-License-Identifier: MPL-2.0
+.Dd 2023-08-11
+.Dt STRINGS 1
+.Os
+.Sh NAME
+.Nm strings
+.Nd find printable strings
+.Sh SYNOPSIS
+.Nm
+.Op Fl a
+.Op Fl t Ar format
+.Op Fl n Ar number
+.Op Ar file...
+.Sh DESCRIPTION
+.Nm
+reads each
+.Ar file
+in sequence and writes printable strings longer than 4 or
+.Ar number .
+If no
+.Ar file
+is given or
+.Ar file
+is
+.Ql - ,
+.Nm
+reads from the standard input.
+.Sh OPTIONS
+.Bl -tag -width Ds
+.It Fl a
+Ignored, present for POSIX compatibility.
+Files are always scanned in their entirety and it is considered a flaw to do
+otherwise.
+.It Fl n Ar number
+Change the minimum string length (default: 4).
+.It Fl t Ar format
+Write the byte offset of each string found, the format is dependend on the
+format argument:
+.Bl -tag -width d
+.It d
+Decimal
+.It o
+Octal
+.It x
+Hexadecimal
+.El
+.El
+.Sh EXIT STATUS
+.Ex -std
+.Sh SEE ALSO
+.Xr nm 1 ,
+.Xr isprint 3
+.Sh STANDARDS
+.Nm
+should be compliant with the
+IEEE Std 1003.1-2024 (“POSIX.1”)
+specification.
+.Sh AUTHORS
+.An Haelwenn (lanodan) Monnier Aq Mt contact+utils@hacktivis.me
diff --git a/share/man/man1/strings.1.gz b/share/man/man1/strings.1.gz
Binary files differ.
diff --git a/share/man/man1/sync.1 b/share/man/man1/sync.1
@@ -0,0 +1,33 @@
+.\" utils-std: Collection of commonly available Unix tools
+.\" Copyright 2017 Haelwenn (lanodan) Monnier <contact+utils@hacktivis.me>
+.\" SPDX-License-Identifier: MPL-2.0
+.Dd 2024-07-28
+.Dt SYNC 1
+.Os
+.Sh NAME
+.Nm sync
+.Nd Schedule file system updates
+.Sh SYNOPSIS
+.Nm
+.Op Fl d
+.Op Ar file...
+.Sh DESCRIPTION
+Schedule cached writes to filesystems.
+If any
+.Ar file
+is specified, only those files are scheduled, otherwise all filesystems are synchronized.
+.Sh OPTIONS
+.Bl -tag -width _d
+.It Fl d
+Sync only file data, not metadata.
+.El
+.Sh EXIT STATUS
+.Ex -std
+.Sh SEE ALSO
+.Xr fdatasync 2 ,
+.Xr fsync 2 ,
+.Xr sync 2
+.Sh STANDARDS
+No applicable one known.
+.Sh AUTHORS
+.An Haelwenn (lanodan) Monnier Aq Mt contact+utils@hacktivis.me
diff --git a/share/man/man1/sync.1.gz b/share/man/man1/sync.1.gz
Binary files differ.
diff --git a/share/man/man1/tee.1 b/share/man/man1/tee.1
@@ -0,0 +1,35 @@
+.\" utils-std: Collection of commonly available Unix tools
+.\" Copyright 2017 Haelwenn (lanodan) Monnier <contact+utils@hacktivis.me>
+.\" SPDX-License-Identifier: MPL-2.0
+.Dd 2024-03-16
+.Dt TEE 1
+.Os
+.Sh NAME
+.Nm tee
+.Nd duplicate standard input
+.Sh SYNOPSIS
+.Nm
+.Op Fl a
+.Op Fl i
+.Op Ar file...
+.Sh DESCRIPTION
+.Nm
+copies standard input to standard output and to each given
+.Ar file
+.
+.Sh OPTIONS
+.Bl -tag -width Ds
+.It Fl a
+Append to the files instead of overwriting
+.It Fl i
+Ignore SIGINT
+.El
+.Sh EXIT STATUS
+.Ex -std
+.Sh STANDARDS
+.Nm
+should be compliant with the
+IEEE Std 1003.1-2024 (“POSIX.1”)
+specification.
+.Sh AUTHORS
+.An Haelwenn (lanodan) Monnier Aq Mt contact+utils@hacktivis.me
diff --git a/share/man/man1/tee.1.gz b/share/man/man1/tee.1.gz
Binary files differ.
diff --git a/share/man/man1/test.1 b/share/man/man1/test.1
@@ -0,0 +1,403 @@
+.\" SPDX-License-Identifier: BSD-3-Clause
+.\"-
+.\" Copyright (c) 1991, 1993
+.\" The Regents of the University of California. All rights reserved.
+.\"
+.\" This code is derived from software contributed to Berkeley by
+.\" the Institute of Electrical and Electronics Engineers, Inc.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\" notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\" notice, this list of conditions and the following disclaimer in the
+.\" documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of the University nor the names of its contributors
+.\" may be used to endorse or promote products derived from this software
+.\" without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.Dd October 5, 2016
+.Dt TEST 1
+.Os
+.Sh NAME
+.Nm test ,
+.Nm \&[
+.Nd condition evaluation utility
+.Sh SYNOPSIS
+.Nm
+.Ar expression
+.Nm \&[
+.Ar expression Cm \&]
+.Sh DESCRIPTION
+The
+.Nm
+utility evaluates the expression and, if it evaluates
+to true, returns a zero (true) exit status; otherwise
+it returns 1 (false).
+If there is no expression,
+.Nm
+also
+returns 1 (false).
+.Pp
+All operators and flags are separate arguments to the
+.Nm
+utility.
+.Pp
+When checking
+.Ar file ,
+one should consider TOCTOU race-conditions.
+Avoiding the issue altogether with directly using
+.Ar file
+instead is strongly recommended.
+.Pp
+The following primaries are used to construct expression:
+.Bl -tag -width Ar
+.It Fl b Ar file
+True if
+.Ar file
+exists and is a block special
+file.
+.It Fl c Ar file
+True if
+.Ar file
+exists and is a character
+special file.
+.It Fl d Ar file
+True if
+.Ar file
+exists and is a directory.
+.It Fl e Ar file
+True if
+.Ar file
+exists (regardless of type).
+.It Ar file1 Fl ef Ar file2
+True if
+.Ar file1
+and
+.Ar file2
+exist and refer to the same file.
+.It Fl f Ar file
+True if
+.Ar file
+exists and is a regular file.
+.It Fl g Ar file
+True if
+.Ar file
+exists and its set group ID flag
+is set.
+.It Fl h Ar file
+True if
+.Ar file
+exists and is a symbolic link.
+This operator is retained for compatibility with previous versions of
+this program.
+Do not rely on its existence; use
+.Fl L
+instead.
+.It Fl L Ar file
+True if
+.Ar file
+exists and is a symbolic link.
+.It Fl k Ar file
+True if
+.Ar file
+exists and its sticky bit is set.
+.It Fl n Ar string
+True if the length of
+.Ar string
+is nonzero.
+.It Ar file1 Fl nt Ar file2
+True if
+.Ar file1
+exists and is newer than
+.Ar file2 .
+.It Ar file1 Fl ot Ar file2
+True if
+.Ar file1
+exists and is older than
+.Ar file2 .
+.It Fl p Ar file
+True if
+.Ar file
+is a named pipe
+.Pq Tn FIFO .
+.It Fl r Ar file
+True if
+.Ar file
+exists and is readable.
+.It Fl S Ar file
+True if
+.Ar file
+exists and is a socket.
+.It Fl s Ar file
+True if
+.Ar file
+exists and has a size greater
+than zero.
+.It Fl t Ar file_descriptor
+True if the file whose file descriptor number
+is
+.Ar file_descriptor
+is open and is associated with a terminal.
+.It Fl u Ar file
+True if
+.Ar file
+exists and its set user ID flag
+is set.
+.It Fl w Ar file
+True if
+.Ar file
+exists and is writable.
+True
+indicates only that the write flag is on.
+The file is not writable on a read-only file
+system even if this test indicates true.
+.It Fl x Ar file
+True if
+.Ar file
+exists and is executable.
+True
+indicates only that the execute flag is on.
+If
+.Ar file
+is a directory, true indicates that
+.Ar file
+can be searched.
+.It Fl z Ar string
+True if the length of
+.Ar string
+is zero.
+.It Fl O Ar file
+True if
+.Ar file
+exists and its owner matches the effective user id of this process.
+.It Fl G Ar file
+True if
+.Ar file
+exists and its group matches the effective group id of this process.
+.It Ar string
+True if
+.Ar string
+is not the null
+string.
+.It Ar s1 Cm = Ar s2
+True if the strings
+.Ar s1
+and
+.Ar s2
+are identical.
+.It Ar s1 Cm != Ar s2
+True if the strings
+.Ar s1
+and
+.Ar s2
+are not identical.
+.It Ar s1 Cm < Ar s2
+True if string
+.Ar s1
+comes before
+.Ar s2
+based on the binary value of their characters.
+.It Ar s1 Cm > Ar s2
+True if string
+.Ar s1
+comes after
+.Ar s2
+based on the binary value of their characters.
+.It Ar n1 Fl eq Ar n2
+True if the integers
+.Ar n1
+and
+.Ar n2
+are algebraically
+equal.
+.It Ar n1 Fl ne Ar n2
+True if the integers
+.Ar n1
+and
+.Ar n2
+are not
+algebraically equal.
+.It Ar n1 Fl gt Ar n2
+True if the integer
+.Ar n1
+is algebraically
+greater than the integer
+.Ar n2 .
+.It Ar n1 Fl ge Ar n2
+True if the integer
+.Ar n1
+is algebraically
+greater than or equal to the integer
+.Ar n2 .
+.It Ar n1 Fl lt Ar n2
+True if the integer
+.Ar n1
+is algebraically less
+than the integer
+.Ar n2 .
+.It Ar n1 Fl le Ar n2
+True if the integer
+.Ar n1
+is algebraically less
+than or equal to the integer
+.Ar n2 .
+.El
+.Pp
+If
+.Ar file
+is a symbolic link,
+.Nm
+will fully dereference it and then evaluate the expression
+against the file referenced, except for the
+.Fl h
+and
+.Fl L
+primaries.
+.Pp
+These primaries can be combined with the following operators:
+.Bl -tag -width Ar
+.It Cm \&! Ar expression
+True if
+.Ar expression
+is false.
+.It Ar expression1 Fl a Ar expression2
+True if both
+.Ar expression1
+and
+.Ar expression2
+are true.
+.It Ar expression1 Fl o Ar expression2
+True if either
+.Ar expression1
+or
+.Ar expression2
+are true.
+.It Cm \&( Ar expression Cm \&)
+True if expression is true.
+.El
+.Pp
+The
+.Fl a
+operator has higher precedence than the
+.Fl o
+operator.
+.Pp
+Some shells may provide a builtin
+.Nm
+command which is similar or identical to this utility.
+Consult the
+.Xr builtin 1
+manual page.
+.Sh GRAMMAR AMBIGUITY
+The
+.Nm
+grammar is inherently ambiguous.
+In order to assure a degree of consistency,
+the cases described in the
+.St -p1003.2 ,
+section D11.2/4.62.4, standard
+are evaluated consistently according to the rules specified in the
+standards document.
+All other cases are subject to the ambiguity in the
+command semantics.
+.Pp
+In particular, only expressions containing
+.Fl a ,
+.Fl o ,
+.Cm \&(
+or
+.Cm \&)
+can be ambiguous.
+.Sh EXIT STATUS
+The
+.Nm
+utility exits with one of the following values:
+.Bl -tag -width indent
+.It 0
+expression evaluated to true.
+.It 1
+expression evaluated to false or expression was
+missing.
+.It >1
+An error occurred.
+.El
+.Sh EXAMPLES
+Implement
+.Li test FILE1 -nt FILE2
+using only
+.Tn POSIX
+functionality:
+.Pp
+.Dl test -n \&"$(find -L -- FILE1 -prune -newer FILE2 2>/dev/null)\&"
+.Pp
+This can be modified using non-standard
+.Xr find 1
+primaries like
+.Cm -newerca
+to compare other timestamps.
+.Sh COMPATIBILITY
+For compatibility with some other implementations,
+the
+.Cm =
+primary can be substituted with
+.Cm ==
+with the same meaning.
+.Sh SEE ALSO
+.Xr builtin 1 ,
+.Xr expr 1 ,
+.Xr find 1 ,
+.Xr sh 1 ,
+.Xr stat 1 ,
+.Xr symlink 7
+.Sh STANDARDS
+.Nm
+should be compliant with the
+IEEE Std 1003.1-2024 (“POSIX.1”)
+specification.
+.Pp
+The primaries
+.Cm == ,
+.Fl G ,
+and
+.Fl O
+are extensions.
+The
+.Fl a ,
+.Fl o
+binary primaries, and
+.Ql \&(
+and
+.Ql \&)
+operators are kept for backward compatibility but should be taken as deprecated.
+.Sh HISTORY
+A
+.Nm
+utility appeared in
+.At v7 .
+.Sh BUGS
+Both sides are always evaluated in
+.Fl a
+and
+.Fl o .
+For instance, the writable status of
+.Pa file
+will be tested by the following command even though the former expression
+indicated false, which results in a gratuitous access to the file system:
+.Dl "[ -z abc -a -w file ]"
+To avoid this, write
+.Dl "[ -z abc ] && [ -w file ]"
diff --git a/share/man/man1/test.1.gz b/share/man/man1/test.1.gz
Binary files differ.
diff --git a/share/man/man1/time.1 b/share/man/man1/time.1
@@ -0,0 +1,48 @@
+.\" utils-std: Collection of commonly available Unix tools
+.\" Copyright 2017 Haelwenn (lanodan) Monnier <contact+utils@hacktivis.me>
+.\" SPDX-License-Identifier: MPL-2.0
+.Dd 2022-12-01
+.Dt TIME 1
+.Os
+.Sh NAME
+.Nm time
+.Nd measure time used by a command
+.Sh SYNOPSIS
+.Nm
+.Op Fl p
+.Ar command
+.Op Ar argument...
+.Sh DESCRIPTION
+.Nm
+measures the wall-clock time, user CPU time, system/kernel CPU time, used by
+.Ar command
+and outputs it to stderr.
+.Sh OPTIONS
+.Fl p
+is ignored for compatibility reasons, the output is always in the POSIX format.
+.Sh EXIT STATUS
+If
+.Ar command
+is invoked, the exit status should be the one given by
+.Ar command .
+Otherwise, it will exit with the following values:
+.Bl -tag -width 1-125
+.It 1-125
+An error occured in
+.Ar command
+.It 126
+.Ar command
+was found but couldn't be invoked
+.It 127
+.Ar command
+could not be found
+.El
+.Sh SEE ALSO
+.Xr times 3
+.Sh STANDARDS
+.Nm
+should be compliant with the
+IEEE Std 1003.1-2024 (“POSIX.1”)
+specification.
+.Sh AUTHORS
+.An Haelwenn (lanodan) Monnier Aq Mt contact+utils@hacktivis.me
diff --git a/share/man/man1/time.1.gz b/share/man/man1/time.1.gz
Binary files differ.
diff --git a/share/man/man1/touch.1 b/share/man/man1/touch.1
@@ -0,0 +1,123 @@
+.\" utils-std: Collection of commonly available Unix tools
+.\" Copyright 2017 Haelwenn (lanodan) Monnier <contact+utils@hacktivis.me>
+.\" SPDX-License-Identifier: MPL-2.0
+.Dd 2023-06-03
+.Dt TOUCH 1
+.Os
+.Sh NAME
+.Nm touch
+.Nd change file access and modification times
+.Sh SYNOPSIS
+.Nm
+.Op Fl achm
+.Op Fl d Ar isotime | Fl t Ar datetime | Fl r Ar ref_file
+.Ar file...
+.Sh DESCRIPTION
+.Nm
+changes the date modification and access times on each
+.Ar file
+it is given.
+.Bl -tag -width Ds
+.It Fl a
+Change the access time, no changes to modification time unless
+.Fl m
+is also given.
+.It Fl c
+Do not create
+.Ar file .
+.It Fl d Ar isotime
+.\" utils-std: Collection of commonly available Unix tools
+.\" Copyright 2017 Haelwenn (lanodan) Monnier <contact+utils@hacktivis.me>
+.\" SPDX-License-Identifier: MPL-2.0
+.\"
+.\" Example:
+.\" .Fl d Ar datetime
+.\" .so lib/iso_parse.mdoc
+.\"
+Should be formatted either with a leading @ (at) symbol followed by
+the Unix timestamp (number of seconds before and after 1970-01-01 00:00:00Z),
+for example
+.Ql @1698791420
+corresponds to 2023-10-31 23:30:20 UTC
+.Pp
+Or as
+.Ql YYYY-MM-DDThh:mm:SS[frac][tz] ,
+where:
+.Bl -tag -width Ds
+.It Ql YYYY-MM-DD
+Corresponds to %Y-%m-%d of
+.Xr strptime 3 .
+.It Ql T
+Is either
+.Ql T
+or a space.
+.It Ql [frac]
+Is either empty, or fractional seconds starting with either a comma
+.Pq \&,
+or a period
+.Pq \&. .
+.It Ql [tz]
+When empty it corresponds to local time.
+Otherwise it can be an UTC offset in the format
+.Ql [+-]HH:?MM
+or the letter
+.Qq Z ,
+signifying UTC.
+.El
+.Pp
+Some examples:
+.Bl -bullet -compact
+.It
+.Ql 2003-06-02T13:37:42.713Z
+.It
+.Ql 1971-01-02T03:04:05.678+0900
+.El
+.It Fl h
+Do not follow symlinks.
+.It Fl m
+Change the modification time, no changes to access time unless
+.Fl a
+is also given.
+.It Fl t Ar datetime
+Use the specified
+.Ar datetime
+instead of the current time, with the form
+.Oo Oo CC Oc Ns YY Oc Ns MMDDhhmm Ns Oo \.SS Oc
+where:
+.Bl -tag -width _MMDDhhmm_
+.It Ql CC
+Corresponds to the first 2 digits of the year, aka %C
+.It Ql YY
+Corresponds to the last 2 digits of the year, aka %y
+.It Ql MMDDhhmm
+Corresponds to month, day, hours, minutes aka %m%d%H%M
+.It Ql .SS
+Corresponds to the seconds
+.El
+.Pp
+For example:
+.Ql 200306021337.42
+.It Fl r Ar ref_file
+Use the corresponding times of the file at
+.Ar ref_file
+instead of the current time.
+.El
+.Sh EXIT STATUS
+.Ex -std
+Note: Will exit with failure when
+.Fl c
+is given but the file doesn't exists.
+.Sh SEE ALSO
+.Xr stat 1 ,
+.Xr futimens 3 ,
+.Xr strptime 3
+.Sh STANDARDS
+.Nm
+should be compliant with the
+IEEE Std 1003.1-2024 (“POSIX.1”)
+specification.
+.Pp
+.Fl h
+is an extension.
+.Sh AUTHORS
+.An Haelwenn (lanodan) Monnier Aq Mt contact+utils@hacktivis.me
diff --git a/share/man/man1/touch.1.gz b/share/man/man1/touch.1.gz
Binary files differ.
diff --git a/share/man/man1/tr.1 b/share/man/man1/tr.1
@@ -0,0 +1,369 @@
+.\" SPDX-License-Identifier: BSD-3-Clause
+.\" $OpenBSD: tr.1,v 1.25 2015/02/28 21:51:57 bentley Exp $
+.\" $NetBSD: tr.1,v 1.5 1994/12/07 08:35:13 jtc Exp $
+.\"
+.\" Copyright (c) 1991, 1993
+.\" The Regents of the University of California. All rights reserved.
+.\"
+.\" This code is derived from software contributed to Berkeley by
+.\" the Institute of Electrical and Electronics Engineers, Inc.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\" notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\" notice, this list of conditions and the following disclaimer in the
+.\" documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of the University nor the names of its contributors
+.\" may be used to endorse or promote products derived from this software
+.\" without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" @(#)tr.1 8.1 (Berkeley) 6/6/93
+.\"
+.Dd $Mdocdate: February 28 2015 $
+.Dt TR 1
+.Os
+.Sh NAME
+.Nm tr
+.Nd translate characters
+.Sh SYNOPSIS
+.Nm tr
+.Op Fl Ccs
+.Ar string1 string2
+.Nm tr
+.Op Fl Cc
+.Fl d
+.Ar string1
+.Nm tr
+.Op Fl Cc
+.Fl s
+.Ar string1
+.Nm tr
+.Op Fl Cc
+.Fl ds
+.Ar string1 string2
+.Sh DESCRIPTION
+The
+.Nm
+utility copies the standard input to the standard output with substitution
+or deletion of selected characters.
+.Pp
+The options are as follows:
+.Bl -tag -width Ds
+.It Fl C
+Complements the set of characters in
+.Ar string1 ;
+for instance,
+.Dq -C\ ab
+includes every character except for
+.Sq a
+and
+.Sq b .
+.It Fl c
+The same as
+.Fl C .
+.It Fl d
+The
+.Fl d
+option causes characters to be deleted from the input.
+.It Fl s
+The
+.Fl s
+option squeezes multiple occurrences of the characters listed in the last
+operand (either
+.Ar string1
+or
+.Ar string2 )
+in the input into a single instance of the character.
+This occurs after all deletion and translation is completed.
+.El
+.Pp
+In the first synopsis form, the characters in
+.Ar string1
+are translated into the characters in
+.Ar string2
+where the first character in
+.Ar string1
+is translated into the first character in
+.Ar string2
+and so on.
+If
+.Ar string1
+is longer than
+.Ar string2 ,
+the last character found in
+.Ar string2
+is duplicated until
+.Ar string1
+is exhausted.
+.Pp
+In the second synopsis form, the characters in
+.Ar string1
+are deleted from the input.
+.Pp
+In the third synopsis form, the characters in
+.Ar string1
+are compressed as described for the
+.Fl s
+option.
+.Pp
+In the fourth synopsis form, the characters in
+.Ar string1
+are deleted from the input, and the characters in
+.Ar string2
+are compressed as described for the
+.Fl s
+option.
+.Pp
+The following conventions can be used in
+.Ar string1
+and
+.Ar string2
+to specify sets of characters:
+.Bl -tag -width [:equiv:]
+.It character
+Any character not described by one of the following conventions
+represents itself.
+.It \eoctal
+A backslash followed by 1, 2, or 3 octal digits represents a character
+with that encoded value.
+To follow an octal sequence with a digit as a character, left zero-pad
+the octal sequence to the full 3 octal digits.
+.It \echaracter
+A backslash followed by certain special characters maps to special
+values.
+.Pp
+.Bl -tag -width "nn" -offset indent -compact
+.It \ea
+<alert character>
+.It \eb
+<backspace>
+.It \ef
+<form-feed>
+.It \en
+<newline>
+.It \er
+<carriage return>
+.It \et
+<tab>
+.It \ev
+<vertical tab>
+.El
+.Pp
+A backslash followed by any other character maps to that character.
+.It c-c
+Represents the range of characters between the range endpoints, inclusively.
+.It [:class:]
+Represents all characters belonging to the defined character class.
+Class names are:
+.Pp
+.Bl -tag -width "xdigit" -offset indent -compact
+.It alnum
+<alphanumeric characters>
+.It alpha
+<alphabetic characters>
+.It blank
+<blank characters>
+.It cntrl
+<control characters>
+.It digit
+<numeric characters>
+.It graph
+<graphic characters>
+.It lower
+<lower-case alphabetic characters>
+.It print
+<printable characters>
+.It punct
+<punctuation characters>
+.It space
+<space characters>
+.It upper
+<upper-case characters>
+.It xdigit
+<hexadecimal characters>
+.El
+.Pp
+.\" All classes may be used in
+.\" .Ar string1 ,
+.\" and in
+.\" .Ar string2
+.\" when both the
+.\" .Fl d
+.\" and
+.\" .Fl s
+.\" options are specified.
+.\" Otherwise, only the classes ``upper'' and ``lower'' may be used in
+.\" .Ar string2
+.\" and then only when the corresponding class (``upper'' for ``lower''
+.\" and vice-versa) is specified in the same relative position in
+.\" .Ar string1 .
+.\" .Pp
+With the exception of the
+.Dq upper
+and
+.Dq lower
+classes, characters
+in the classes are in unspecified order.
+In the
+.Dq upper
+and
+.Dq lower
+classes, characters are entered in
+ascending order.
+.Pp
+For specific information as to which ASCII characters are included
+in these classes, see
+.Xr isalnum 3 ,
+.Xr isalpha 3 ,
+and related manual pages.
+.It [=equiv=]
+Represents all characters or collating (sorting) elements belonging to
+the same equivalence class as
+.Ar equiv .
+If
+there is a secondary ordering within the equivalence class, the characters
+are ordered in ascending sequence.
+Otherwise, they are ordered after their encoded values.
+An example of an equivalence class might be
+.Dq c
+and
+.Dq ch
+in Spanish;
+English has no equivalence classes.
+.It [#*n]
+Represents
+.Ar n
+repeated occurrences of the character represented by
+.Ar # .
+This
+expression is only valid when it occurs in
+.Ar string2 .
+If
+.Ar n
+is omitted or is zero, it is interpreted as large enough to extend the
+.Ar string2
+sequence to the length of
+.Ar string1 .
+If
+.Ar n
+has a leading zero, it is interpreted as an octal value; otherwise,
+it's interpreted as a decimal value.
+.El
+.Sh EXIT STATUS
+.Ex -std tr
+.Sh EXAMPLES
+The following examples are shown as given to the shell:
+.Pp
+Create a list of the words in file1, one per line, where a word is taken to
+be a maximal string of letters.
+.Pp
+.Dl $ tr -cs '[:alpha:]' '[\en*]' < file1
+.Pp
+Translate the contents of file1 to upper-case.
+.Pp
+.Dl $ tr '[:lower:]' '[:upper:]' < file1
+.Pp
+Strip out non-printable characters from file1.
+.Pp
+.Dl $ tr -cd '[:print:]' < file1
+.\" .Pp
+.\" Strip out diacritical marks from the base character
+.\" .Ql e .
+.\" .Dl $ tr '[=e=]' '[e*]' < file1 > file2
+.Sh SEE ALSO
+.Xr sed 1
+.Sh STANDARDS
+The
+.Nm
+utility is compliant with the
+.St -p1003.1-2008
+specification,
+except that the
+.Fl C
+option behaves the same as the
+.Fl c
+option since
+.Nm
+is not locale-aware.
+.Pp
+System V has historically implemented character ranges using the syntax
+.Dq [c-c]
+instead of the
+.Dq c-c
+used by historic
+.Bx
+implementations and
+standardized by POSIX.
+System V shell scripts should work under this implementation as long as
+the range is intended to map in another range, i.e., the command
+.Dq tr [a-z] [A-Z]
+will work as it will map the
+.Sq \&[
+character in
+.Ar string1
+to the
+.Sq \&[
+character in
+.Ar string2 .
+However, if the shell script is deleting or squeezing characters as in
+the command
+.Dq tr\ -d\ [a-z] ,
+the characters
+.Sq \&[
+and
+.Sq \&]
+will be
+included in the deletion or compression list, which would not have happened
+under an historic System V implementation.
+Additionally, any scripts that depended on the sequence
+.Dq a-z
+to represent the three characters
+.Sq a ,
+.Sq - ,
+and
+.Sq z
+will have to be rewritten as
+.Dq a\e-z .
+.Pp
+The
+.Nm
+utility has historically not permitted the manipulation of NUL bytes in
+its input and, additionally, has stripped NUL's from its input stream.
+This implementation has removed this behavior as a bug.
+.Pp
+The
+.Nm
+utility has historically been extremely forgiving of syntax errors:
+for example, the
+.Fl c
+and
+.Fl s
+options were ignored unless two strings were specified.
+This implementation will not permit illegal syntax.
+.Pp
+It should be noted that the feature wherein the last character of
+.Ar string2
+is duplicated if
+.Ar string2
+has less characters than
+.Ar string1
+is permitted by POSIX but is not required.
+Shell scripts attempting to be portable to other POSIX systems should use
+the
+.Dq [#*]
+convention instead of relying on this behavior.
diff --git a/share/man/man1/tr.1.gz b/share/man/man1/tr.1.gz
Binary files differ.
diff --git a/share/man/man1/true.1 b/share/man/man1/true.1
@@ -0,0 +1,23 @@
+.\" utils-std: Collection of commonly available Unix tools
+.\" Copyright 2017 Haelwenn (lanodan) Monnier <contact+utils@hacktivis.me>
+.\" SPDX-License-Identifier: MPL-2.0
+.Dd 2022-02-13
+.Dt TRUE 1
+.Os
+.Sh NAME
+.Nm true
+.Nd do nothing, successfully
+.Sh SYNOPSIS
+.Nm
+.Sh DESCRIPTION
+.Nm
+will return with exit status code zero.
+.Sh EXIT STATUS
+Zero.
+.Sh STANDARDS
+.Nm
+should be compliant with the
+IEEE Std 1003.1-2024 (“POSIX.1”)
+specification.
+.Sh AUTHORS
+.An Haelwenn (lanodan) Monnier Aq Mt contact+utils@hacktivis.me
diff --git a/share/man/man1/true.1.gz b/share/man/man1/true.1.gz
Binary files differ.
diff --git a/share/man/man1/truncate.1 b/share/man/man1/truncate.1
@@ -0,0 +1,79 @@
+.\" utils-std: Collection of commonly available Unix tools
+.\" Copyright 2017 Haelwenn (lanodan) Monnier <contact+utils@hacktivis.me>
+.\" SPDX-License-Identifier: MPL-2.0
+.Dd 2024-04-23
+.Dt TRUNCATE 1
+.Os
+.Sh NAME
+.Nm truncate
+.Nd change the size of files
+.Sh SYNOPSIS
+.Nm
+.Op Fl c
+.Fl r Ar ref_file
+.Ar file...
+.Nm
+.Op Fl c
+.Fl s [ Ar + Ns | Ns Ar - Ns | Ns Ar % Ns | Ns Ar / ] Ns Ar size Ns Op Ar suffix
+.Ar file...
+.Sh DESCRIPTION
+.Nm
+changes the size of each given
+.Ar file .
+Either with a size operation given via the
+.Fl s
+option or via a reference file given by
+.Fl r Ar ref_file .
+.Sh OPTIONS
+.Bl -tag -width Ds
+.It Fl c
+Prevent creating new files.
+.It Fl r Ar ref_file
+Set the size of
+.Ar file
+based on the file size of
+.Ar ref_file .
+.It Fl s [ Ar + Ns | Ns Ar - Ns | Ns Ar % Ns | Ns Ar / ] Ns Ar size Ns Op Ar suffix
+Size operation.
+.Bl -tag -width _ -compact
+.It Ar +
+Extend
+.Ar file
+by
+.Ar size
+.It Ar -
+Reduce
+.Ar file
+by
+.Ar size
+.It Ar %
+Round up
+.Ar file
+into a multiple of
+.Ar size ,
+useful for chunks.
+.It Ar /
+Round down
+.Ar file
+into a multiple of
+.Ar size ,
+useful for chunks.
+.El
+.Pp
+.Ar size
+is an integer optionally followed by a
+.Ar suffix
+being one of KMGTP (Kilo, Mega, Giga, Tera, ...) using power of 1024 by default, which can be either explicit via adding iB (like MiB), or turned into powers of 1000 by adding B (like MB).
+.El
+.Sh EXIT STATUS
+.Ex -std
+.Sh SEE ALSO
+.Xr split 1
+.Sh STANDARDS
+None known.
+.Sh HISTORY
+A
+.Nm
+utility appeared in FreeBSD 4.2.
+.Sh AUTHORS
+.An Haelwenn (lanodan) Monnier Aq Mt contact+utils@hacktivis.me
diff --git a/share/man/man1/truncate.1.gz b/share/man/man1/truncate.1.gz
Binary files differ.
diff --git a/share/man/man1/tty.1 b/share/man/man1/tty.1
@@ -0,0 +1,32 @@
+.\" utils-std: Collection of commonly available Unix tools
+.\" Copyright 2017 Haelwenn (lanodan) Monnier <contact+utils@hacktivis.me>
+.\" SPDX-License-Identifier: MPL-2.0
+.Dd 2024-03-16
+.Dt TTY 1
+.Os
+.Sh NAME
+.Nm tty
+.Nd return pathname of current terminal
+.Sh SYNOPSIS
+.Nm
+.Sh DESCRIPTION
+.Nm
+prints the name of the terminal used for standard input, or if not a terminal prints "not a tty\n" and exits 1.
+.Sh EXIT STATUS
+.Bl -tag -width >1
+.It 0
+Standard input is a terminal.
+.It 1
+Standard input is not a terminal.
+.It >1
+An error occured.
+.El
+.Sh SEE ALSO
+.Xr ttyname 3
+.Sh STANDARDS
+.Nm
+should be compliant with the
+IEEE Std 1003.1-2024 (“POSIX.1”)
+specification.
+.Sh AUTHORS
+.An Haelwenn (lanodan) Monnier Aq Mt contact+utils@hacktivis.me
diff --git a/share/man/man1/tty.1.gz b/share/man/man1/tty.1.gz
Binary files differ.
diff --git a/share/man/man1/uname.1 b/share/man/man1/uname.1
@@ -0,0 +1,46 @@
+.\" utils-std: Collection of commonly available Unix tools
+.\" Copyright 2017 Haelwenn (lanodan) Monnier <contact+utils@hacktivis.me>
+.\" SPDX-License-Identifier: MPL-2.0
+.Dd 2024-04-21
+.Dt UNAME 1
+.Os
+.Sh NAME
+.Nm uname
+.Nd return system name and information
+.Sh SYNOPSIS
+.Nm
+.Op Fl amnrsv
+.Sh DESCRIPTION
+.Nm
+prints the operating system name, and optionally more information about the system to standard output, separated by spaces.
+.Sh OPTIONS
+.Bl -tag -width __
+.It Fl a
+Enable all options, equivalent to passing
+.Fl mnrsv .
+.It Fl m
+Write machine name, also known as the processor architecture.
+.It Fl n
+Write network node name, also known as hostname.
+.It Fl r
+Write running operating system release.
+.It Fl s
+Write running operating system name.
+.It Fl v
+Write version level of running operating system release.
+.El
+.Pp
+If no options are specified,
+.Nm
+prints the operating system as if
+.Fl s
+was specified.
+.Sh EXIT STATUS
+.Ex -std
+.Sh STANDARDS
+.Nm
+should be compliant with the
+IEEE Std 1003.1-2024 (“POSIX.1”)
+specification.
+.Sh AUTHORS
+.An Haelwenn (lanodan) Monnier Aq Mt contact+utils@hacktivis.me
diff --git a/share/man/man1/uname.1.gz b/share/man/man1/uname.1.gz
Binary files differ.
diff --git a/share/man/man1/uniq.1 b/share/man/man1/uniq.1
@@ -0,0 +1,54 @@
+.\" utils-std: Collection of commonly available Unix tools
+.\" Copyright 2017 Haelwenn (lanodan) Monnier <contact+utils@hacktivis.me>
+.\" SPDX-License-Identifier: MPL-2.0
+.Dd 2024-05-02
+.Dt UNIQ 1
+.Os
+.Sh NAME
+.Nm uniq
+.Nd report or filter out duplicated lines
+.Sh SYNOPSIS
+.Nm
+.Op Fl c Ns | Ns Fl d Ns | Ns Fl u
+.Op Fl f Ar field_shift
+.Op Fl s Ar byte_shift
+.Op Ar input_file Op Ar output_file
+.Sh DESCRIPTION
+The
+.Nm
+utility reads
+.Ar file1
+and
+.Ar file2
+line-by-line and by default filters out repeating lines.
+.Sh OPTIONS
+The following options are supported:
+.Bl -tag -width Ds
+.It Fl c
+Prefix lines with how many times they are duplicated.
+.It Fl d
+Only write duplicated lines (count > 1).
+.It Fl f Ar field_shift
+Shift the compared line by
+.Ar field_shift
+amount of fields, where a field is
+.Aq blank
+separated.
+.It Fl s Ar byte_shift
+Shift the compared lines by
+.Ar byte_shift .
+If
+.Ar field_shift
+was also specified, it provides an additional shift.
+.It Fl u
+Only write unique lines (count == 1).
+.El
+.Sh EXIT STATUS
+.Ex -std
+.Sh STANDARDS
+.Nm
+should be compliant with the
+IEEE Std 1003.1-2024 (“POSIX.1”)
+specification.
+.Sh AUTHORS
+.An Haelwenn (lanodan) Monnier Aq Mt contact+utils@hacktivis.me
diff --git a/share/man/man1/uniq.1.gz b/share/man/man1/uniq.1.gz
Binary files differ.
diff --git a/share/man/man1/unlink.1 b/share/man/man1/unlink.1
@@ -0,0 +1,34 @@
+.\" utils-std: Collection of commonly available Unix tools
+.\" Copyright 2017 Haelwenn (lanodan) Monnier <contact+utils@hacktivis.me>
+.\" SPDX-License-Identifier: MPL-2.0
+.Dd 2022-05-10
+.Dt UNLINK 1
+.Os
+.Sh NAME
+.Nm unlink
+.Nd unlink filenames and possibly the referred files
+.Sh SYNOPSIS
+.Nm
+.Op Ar file...
+.Sh DESCRIPTION
+.Nm
+deletes each
+.Ar file
+link from the filesystem.
+If
+.Ar file
+was the last link and no processes have it open,
+.Ar file
+is deleted.
+.Sh EXIT STATUS
+.Ex -std
+.Sh SEE ALSO
+.Xr ln 1 ,
+.Xr rm 1
+.Sh STANDARDS
+.Nm
+should be compliant with the
+IEEE Std 1003.1-2024 (“POSIX.1”)
+specification.
+.Sh AUTHORS
+.An Haelwenn (lanodan) Monnier Aq Mt contact+utils@hacktivis.me
diff --git a/share/man/man1/unlink.1.gz b/share/man/man1/unlink.1.gz
Binary files differ.
diff --git a/share/man/man1/wc.1 b/share/man/man1/wc.1
@@ -0,0 +1,97 @@
+.\" utils-std: Collection of commonly available Unix tools
+.\" Copyright 2017 Haelwenn (lanodan) Monnier <contact+utils@hacktivis.me>
+.\" SPDX-License-Identifier: MPL-2.0
+.Dd 2024-04-24
+.Dt WC 1
+.Os
+.Sh NAME
+.Nm wc
+.Nd Count lines, words, bytes/characters
+.Sh SYNOPSIS
+.Nm
+.Op Fl c Ns | Ns Fl m
+.Op Fl lw
+.Op Ar file...
+.Sh DESCRIPTION
+.Nm
+reads each given
+.Ar file
+and by default report their numbers of newlines, words and bytes.
+If no
+.Ar file
+is given, then
+.Nm
+reads from standard input.
+.Pp
+A word is defined as a non-empty string delimited by whitespace,
+some other implementation choose to additionally exclude
+non-printable characters.
+.Sh OPTIONS
+.Bl -tag -width __
+.It Fl c
+Explicitly use single-byte mode, and write the number of bytes in each
+.Ar file .
+.It Fl l
+Write the number of newlines in each
+.Ar file .
+.It Fl m
+Switch to multi-byte mode, and write the number of codepoints in each
+.Ar file .
+The encoding is dependent on the
+.Xr locale 1
+environment variables.
+.Pp
+Note that while codepoints are often close enough to characters,
+some characters use multiple codepoints,
+plus by design
+.Nm
+cannot consider glyphs due to lacking rendering.
+.Pp
+For example with decomposed é (e with acute diacritic) in a
+.Ql C.UTF-8
+locale:
+.Bd -literal -compact
+$ printf '\\145\\314\\201\\n'
+é
+$ printf '\\145\\314\\201' | wc -c
+3
+$ printf '\\145\\314\\201' | wc -m
+2
+.Ed
+.It Fl w
+Write the number of words in each
+.Ar file .
+.El
+.Pp
+If any option is specified,
+.Nm
+reports only the requested information, without their ordering
+changing output formatting.
+The default is equivalent to
+.Cm wc
+.Fl clw .
+.Sh ENVIRONMENT VARIABLES
+See
+.Xr locale 1 .
+.Sh STDOUT
+By default the standard output reports each file in the form:
+.Bd -literal
+"%d %d %d %s", <newlines>, <words>, <bytes>, <file>
+.Ed
+.Pp
+Similarly to GNU and BusyBox, this implementation also makes sure
+to not print trailing whitespace, which would have to be trimmed
+in most scripts.
+.Pp
+If more than one
+.Ar file
+is given, a final line is printed with "total" instead of a pathname.
+.Sh EXIT STATUS
+.Ex -std
+.Sh STANDARDS
+.Nm
+should be compliant with the
+IEEE Std 1003.1-2024 (“POSIX.1”)
+specification.
+.Sh AUTHORS
+.An Haelwenn (lanodan) Monnier Aq Mt contact+utils@hacktivis.me
diff --git a/share/man/man1/wc.1.gz b/share/man/man1/wc.1.gz
Binary files differ.
diff --git a/share/man/man1/which.1 b/share/man/man1/which.1
@@ -0,0 +1,42 @@
+.\" utils-std: Collection of commonly available Unix tools
+.\" Copyright 2017 Haelwenn (lanodan) Monnier <contact+utils@hacktivis.me>
+.\" SPDX-License-Identifier: MPL-2.0
+.Dd 2024-05-29
+.Dt WHICH 1
+.Os
+.Sh NAME
+.Nm which
+.Nd locate executable within PATH
+.Sh SYNOPSIS
+.Nm
+.Op Fl as
+.Ar name...
+.Sh DESCRIPTION
+The
+.Nm
+utility scans
+.Ev PATH
+for each given executable
+.Ar name .
+.Pp
+.Nm
+shall not be used when the standard
+.Xr sh 1
+builtin
+.Cm command
+.Fl v
+.Ar name
+can be used instead.
+.Sh OPTIONS
+.Bl -tag -width _a
+.It Fl a
+List all matching executables.
+.It Fl s
+Do not print executable names.
+.El
+.Sh EXIT STATUS
+.Ex -std
+.Sh STANDARDS
+None.
+.Sh AUTHORS
+.An Haelwenn (lanodan) Monnier Aq Mt contact+utils@hacktivis.me
diff --git a/share/man/man1/which.1.gz b/share/man/man1/which.1.gz
Binary files differ.
diff --git a/share/man/man1/yes.1 b/share/man/man1/yes.1
@@ -0,0 +1,30 @@
+.\" utils-std: Collection of commonly available Unix tools
+.\" Copyright 2017 Haelwenn (lanodan) Monnier <contact+utils@hacktivis.me>
+.\" SPDX-License-Identifier: MPL-2.0
+.Dd 2024-04-12
+.Dt YES 1
+.Os
+.Sh NAME
+.Nm yes
+.Nd output a string repeatedly
+.Sh SYNOPSIS
+.Nm
+.Op Ar string...
+.Sh DESCRIPTION
+The
+.Nm
+utility repeatedly prints
+.Ar string
+or by default 'y'.
+.Sh EXIT STATUS
+.Ex -std
+.Sh SEE ALSO
+.Xr echo 1
+.Sh STANDARDS
+None known.
+.Sh HISTORY
+The
+.Nm
+command appeared in Version 7 AT&T UNIX.
+.Sh AUTHORS
+.An Haelwenn (lanodan) Monnier Aq Mt contact+utils@hacktivis.me
diff --git a/share/man/man1/yes.1.gz b/share/man/man1/yes.1.gz
Binary files differ.