suckless unix tools
Go to file
FRIGN ecb351f1d5 Properly parse numbers in od(1)
Previously, it'd drop right through in the number case and return
crazy-long numbers (like 28 for L), resulting in unexpected behaviour.
2015-10-26 11:55:41 +00:00
libutf Add mkrunetype.awk 2015-02-23 20:36:47 +01:00
libutil Make strtol() parsing even stricter in parseoffset() 2015-09-30 19:44:11 +01:00
LICENSE Created od, with improvements suggested by FRIGN 2015-09-30 19:44:10 +01:00
Makefile Initial implementation of flock(1) 2015-10-07 10:27:47 +01:00
README Mark getconf as audited in README 2015-10-26 11:55:41 +00:00
TODO Add getconf(1) 2015-10-01 17:17:23 +01:00
arg.h Add LNGARG() to sbase. 2015-07-10 16:45:52 +02:00
basename.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
basename.c Do not use arg.h for tools which take no flags 2015-04-25 11:43:14 +01:00
cal.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
cal.c Add *fshut() functions to properly flush file streams 2015-04-05 09:13:56 +01:00
cat.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
cat.c Simplify return & fshut() logic 2015-05-26 16:41:43 +01:00
chgrp.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
chgrp.c Add maxdepth to recurse() 2015-04-20 11:12:40 +01:00
chmod.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
chmod.c Add maxdepth to recurse() 2015-04-20 11:12:40 +01:00
chown.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
chown.c Add maxdepth to recurse() 2015-04-20 11:12:40 +01:00
chroot.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
chroot.c Do not use arg.h for tools which take no flags 2015-04-25 11:43:14 +01:00
cksum.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
cksum.c cksum: Skip files with read errors and continue 2015-06-13 10:39:54 +01:00
cmp.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
cmp.c Simplify return & fshut() logic 2015-05-26 16:41:43 +01:00
cols.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
cols.c Simplify return & fshut() logic 2015-05-26 16:41:43 +01:00
comm.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
comm.c comm: Print first trailing unpaired line in file 1 2015-08-04 12:35:44 +01:00
compat.h Add compat.h 2014-11-17 15:46:28 +00:00
config.mk use CC for sbase-box, remove LD 2015-09-03 19:17:59 +01:00
cp.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
cp.c Add *fshut() functions to properly flush file streams 2015-04-05 09:13:56 +01:00
cron.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
cron.c Check getline()-return-values properly 2015-03-27 14:49:48 +01:00
crypt.h Refactor cryptcheck() to allow multiple list-files and stdin 2015-03-01 22:51:52 +01:00
cut.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
cut.c Make fname static in cut() in cut(1) 2015-08-04 12:08:13 +01:00
date.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
date.c Add *fshut() functions to properly flush file streams 2015-04-05 09:13:56 +01:00
dirname.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
dirname.c Do not use arg.h for tools which take no flags 2015-04-25 11:43:14 +01:00
du.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
du.c include stdint.h for SIZE_MAX 2015-04-29 22:25:03 +01:00
echo.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
echo.c Do not use arg.h for tools which take no flags 2015-04-25 11:43:14 +01:00
env.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
env.c env: Fix return value if the command could not be found 2015-10-07 16:25:54 +01:00
expand.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
expand.c Simplify return & fshut() logic 2015-05-26 16:41:43 +01:00
expr.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
expr.c Simplify return & fshut() logic 2015-05-26 16:41:43 +01:00
false.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
false.c Simplify true(1) and false(1) 2014-10-03 00:03:08 +01:00
find.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
find.c find: NULL terminate braces array in exec primary 2015-07-23 11:51:05 +01:00
flock.1 Implement -o for flock(1) to close fd before exec 2015-10-26 11:55:41 +00:00
flock.c Implement -o for flock(1) to close fd before exec 2015-10-26 11:55:41 +00:00
fold.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
fold.c Simplify return & fshut() logic 2015-05-26 16:41:43 +01:00
fs.h Add SILENT flag to recurse() 2015-04-20 11:12:40 +01:00
getconf.1 getconf.1: fix: end list (El) 2015-10-10 01:18:24 +02:00
getconf.c Prepend "usage: " in usage() 2015-10-04 17:00:47 +01:00
grep.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
grep.c Simplify return & fshut() logic 2015-05-26 16:41:43 +01:00
head.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
head.c Simplify return & fshut() logic 2015-05-26 16:41:43 +01:00
hostname.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
hostname.c Do not use arg.h for tools which take no flags 2015-04-25 11:43:14 +01:00
join.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
join.c join: Use LIMIT macro 2015-07-23 11:51:05 +01:00
kill.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
kill.c kill: Include strings.h for strcasecmp() 2015-04-29 16:42:49 +01:00
link.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
link.c Do not use arg.h for tools which take no flags 2015-04-25 11:43:14 +01:00
ln.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
ln.c ln: allow dangling symlinks 2015-06-07 09:09:42 +01:00
logger.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
logger.c Add *fshut() functions to properly flush file streams 2015-04-05 09:13:56 +01:00
logname.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
logname.c Add *fshut() functions to properly flush file streams 2015-04-05 09:13:56 +01:00
ls.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
ls.c ls: handle character/block files in long format 2015-10-04 16:45:51 +01:00
md5.h Add crypt.[ch] and update md5sum and sha1sum 2013-07-18 09:51:17 -04:00
md5sum.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
md5sum.c Simplify return & fshut() logic 2015-05-26 16:41:43 +01:00
mkdir.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
mkdir.c Move mkdirp() to libutil 2015-04-20 18:04:08 +01:00
mkfifo.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
mkfifo.c Audit mkfifo(1) 2015-03-02 17:25:29 +01:00
mktemp.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
mktemp.c mktemp improvements 2015-05-10 12:58:38 +01:00
mv.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
mv.c Add maxdepth to recurse() 2015-04-20 11:12:40 +01:00
nice.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
nice.c Don't return but _exit after failed exec*() and fork() 2015-03-09 01:12:59 +01:00
nl.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
nl.c Simplify return & fshut() logic 2015-05-26 16:41:43 +01:00
nohup.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
nohup.c Do not use arg.h for tools which take no flags 2015-04-25 11:43:14 +01:00
od.1 Add -e and -E flags to od(1) and properly handle endianness 2015-10-26 11:55:41 +00:00
od.c Properly parse numbers in od(1) 2015-10-26 11:55:41 +00:00
paste.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
paste.c Simplify return & fshut() logic 2015-05-26 16:41:43 +01:00
printenv.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
printenv.c Do not use arg.h for tools which take no flags 2015-04-25 11:43:14 +01:00
printf.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
printf.c Remove debug-code in printf(1) 2015-06-22 20:03:55 +01:00
pwd.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
pwd.c Add *fshut() functions to properly flush file streams 2015-04-05 09:13:56 +01:00
queue.h Use queue.h in grep(1) 2014-11-16 12:39:15 +00:00
readlink.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
readlink.c readlink: simplify -f 2015-06-04 23:54:09 +01:00
renice.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
renice.c Audit renice(1) 2015-03-17 22:15:09 +01:00
rm.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
rm.c Add SILENT flag to recurse() 2015-04-20 11:12:40 +01:00
rmdir.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
rmdir.c Add argv0 to usage() in rmdir.c 2015-03-02 16:24:08 +01:00
sed.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
sed.c ls: printf("%s", s) -> fputs(s, stdout) 2015-09-30 19:44:10 +01:00
seq.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
seq.c Add *fshut() functions to properly flush file streams 2015-04-05 09:13:56 +01:00
setsid.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
setsid.c Do not use arg.h for tools which take no flags 2015-04-25 11:43:14 +01:00
sha1.h Add crypt.[ch] and update md5sum and sha1sum 2013-07-18 09:51:17 -04:00
sha1sum.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
sha1sum.c Simplify return & fshut() logic 2015-05-26 16:41:43 +01:00
sha256.h Add sha256sum(1) 2013-07-20 13:20:16 -04:00
sha256sum.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
sha256sum.c Simplify return & fshut() logic 2015-05-26 16:41:43 +01:00
sha512.h Add sha512sum(1) 2013-08-04 11:00:34 -04:00
sha512sum.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
sha512sum.c Simplify return & fshut() logic 2015-05-26 16:41:43 +01:00
sleep.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
sleep.c Do not use arg.h for tools which take no flags 2015-04-25 11:43:14 +01:00
sort.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
sort.c Audit sort(1) and mark it as finished 2015-08-04 12:08:13 +01:00
split.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
split.c Print error message when size == 0 in split(1) 2015-09-30 19:44:10 +01:00
sponge.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
sponge.c Simplify return & fshut() logic 2015-05-26 16:41:43 +01:00
strings.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
strings.c Simplify return & fshut() logic 2015-05-26 16:41:43 +01:00
sync.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
sync.c Do not use arg.h for tools which take no flags 2015-04-25 11:43:14 +01:00
tail.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
tail.c tail: Don't print garbage when input contains no newlines. 2015-08-30 18:36:19 +01:00
tar.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
tar.c Stop defining major()/minor() and makedev() 2015-10-04 16:39:28 +01:00
tee.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
tee.c Simplify return & fshut() logic 2015-05-26 16:41:43 +01:00
test.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
test.c Audit test(1) 2015-03-17 23:35:11 +01:00
text.h Use size_t for number of lines in linebuf 2015-01-31 22:49:43 +00:00
tftp.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
tftp.c Add TFTP client as specified by RFC 1350 2015-08-14 13:11:16 +01:00
time.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
time.c fork: no need to _exit() on the error case 2015-03-10 20:05:18 +01:00
touch.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
touch.c touch: Use both atime and mtime of reference file 2015-05-16 13:34:00 +01:00
tr.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
tr.c Simplify return & fshut() logic 2015-05-26 16:41:43 +01:00
true.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
true.c Simplify true(1) and false(1) 2014-10-03 00:03:08 +01:00
tty.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
tty.c Do not use arg.h for tools which take no flags 2015-04-25 11:43:14 +01:00
uname.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
uname.c Update putword() to accept a FILE * 2015-04-21 18:00:47 +01:00
unexpand.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
unexpand.c Simplify return & fshut() logic 2015-05-26 16:41:43 +01:00
uniq.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
uniq.c Simplify return & fshut() logic 2015-05-26 16:41:43 +01:00
unlink.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
unlink.c Do not use arg.h for tools which take no flags 2015-04-25 11:43:14 +01:00
utf.h Scrap chartorunearr(), introducing utftorunestr() 2015-02-11 21:32:09 +01:00
util.h Add parseoffset() 2015-09-30 19:44:10 +01:00
uudecode.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
uudecode.c Simplify return & fshut() logic 2015-05-26 16:41:43 +01:00
uuencode.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
uuencode.c Simplify return & fshut() logic 2015-05-26 16:41:43 +01:00
wc.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
wc.c Simplify return & fshut() logic 2015-05-26 16:41:43 +01:00
which.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
which.c which: Add LICENSE header 2015-04-27 19:33:57 +01:00
xargs.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
xargs.c Simplify return & fshut() logic 2015-05-26 16:41:43 +01:00
yes.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
yes.c Do not use arg.h for tools which take no flags 2015-04-25 11:43:14 +01:00

README

sbase - suckless unix tools
===========================

sbase  is a  collection of  unix  tools that  are inherently  portable
across UNIX and UNIX-like systems.

The following tools are implemented:

'#'  -> UTF-8 support, '=' -> Implicit UTF-8 support, '*' -> Finished,
'|'  -> Audited,       'o' -> POSIX 2013 compliant,   'x' -> Non-POSIX,
'()' -> Petty flag

     UTILITY     MISSING
     -------     -------
=*|o basename    .
=*|o cal         .
=*|o cat         .
=*|o chgrp       .
=*|o chmod       .
=*|o chown       .
=*|x chroot      .
=*|o cksum       .
=*|o cmp         .
#*|x cols        .
=*|o comm        .
=*|o cp          (-i)
=*|x cron        .
#*|o cut         .
=*|o date        .
=*|o dirname     .
=*|o du          .
=*|o echo        .
=*|o env         .
#*|o expand      .
#*|o expr        .
=*|o false       .
=    find        .
=* x flock       .
#*|o fold        .
=*|o getconf     (-v)
=* o grep        .
=*|o head        .
=*|x hostname    .
=* o join        .
=*|o kill        .
=*|o link        .
=*|o ln          .
=*|o logger      .
=*|o logname     .
#* o ls          (-C, -k, -m, -p, -s, -x)
=*|x md5sum      .
=*|o mkdir       .
=*|o mkfifo      .
=*|x mktemp      .
=*|o mv          (-i)
=*|o nice        .
#*|o nl          .
=*|o nohup       .
=*|o od          .
#*|o paste       .
=*|x printenv    .
#*|o printf      .
=*|o pwd         .
=*|x readlink    .
=*|o renice      .
=*|o rm          (-i)
=*|o rmdir       .
#    sed         .
=*|x seq         .
=*|x setsid      .
=*|x sha1sum     .
=*|x sha256sum   .
=*|x sha512sum   .
=*|o sleep       .
#*|o sort        (-d, -f, -i)
=*|o split       .
=*|x sponge      .
#*|o strings     .
=*|x sync        .
=*|o tail        .
=*|x tar         .
=*|o tee         .
=*|o test        .
=* x tftp        .
=*|o time        .
=*|o touch       .
#*|o tr          .
=*|o true        .
=*|o tty         .
=*|o uname       .
#*|o unexpand    .
=*|o uniq        .
=*|o unlink      .
=*|o uudecode    .
=*|o uuencode    .
#*|o wc          .
=*|x which       .
=*|o xargs       (-p)
=*|x yes         .

The  complement of  sbase  is  ubase[1] which  is  Linux-specific  and
provides all  the non-portable tools.   Together they are  intended to
form a base system similar to busybox but much smaller and suckless.

Building
--------

To  build sbase,  simply  type  make.  You  may  have  to fiddle  with
config.mk depending on your system.

You  can  also  build  sbase-box,  which  generates  a  single  binary
containing  all  the  required  tools.    You  can  then  symlink  the
individual tools to sbase-box or run: make sbase-box-install

Ideally you will  want to statically link sbase.  If  you are on Linux
we recommend using musl-libc[2].

Portability
-----------

sbase has been  compiled on a variety of  different operating systems,
including Linux, *BSD, OSX, Haiku, Solaris, SCO OpenServer and others.

Various combinations of operating  systems and architectures have also
been built.

You can build sbase with gcc, clang, tcc, nwcc and pcc.

[1] http://git.suckless.org/ubase/
[2] http://www.musl-libc.org/