# Coreutils-&coreutils-version;

The Coreutils package contains utilities for showing and setting the basic system characteristics.

## Installation of Coreutils

A known issue with the `uname` program from this package is that the `-p` switch always returns `unknown`. The following patch fixes this behavior for all architectures:

    patch -Np1 -i ../&coreutils-uname-patch;

Now prepare Coreutils for compilation:

    FORCE_UNSAFE_CONFIGURE=1 \
      ./configure --prefix=/usr \
        --enable-no-install-program=kill,uptime \
        --enable-install-program=hostname

## The meaning of the configure options:

`FORCE_UNSAFE_CONFIGURE=1`

- Forces Coreutils to compile when using the root user.

Compile the package:

    make

The test suite of Coreutils makes several assumptions about the presence of system users and groups that are not valid within the minimal environment that exists at the moment. Therefore, additional items need to be set up before running the tests. Skip down to Install the package if not running the test suite.

Create two `dummy` groups and a `dummy` user:

    echo "dummy1:x:1000:" >> /etc/group
    echo "dummy2:x:1001:dummy" >> /etc/group
    echo "dummy:x:1000:1000::/root:/bin/bash" >> /etc/passwd

Now the test suite is ready to be run. First, run the tests that are meant to be run as user `root`:

    make NON_ROOT_USERNAME=dummy SUBDIRS= check-root

The testsuite will now be run as the `dummy` user. Fix the permissions for a few files to allow this:

    chown -Rv dummy .

Then run the remainder of the tests as the `dummy` user:

    su dummy -s /bin/bash \
        -c "PATH=$PATH make RUN_EXPENSIVE_TESTS=yes -k check || true"

When testing is complete, remove the `dummy` user and groups:

    sed -i '/dummy/d' /etc/passwd /etc/group

Install the package:

    make install

Move programs to the locations specified by the FHS:

    mv -v /usr/bin/{cat,chgrp,chmod,chown,cp,date} /bin
    mv -v /usr/bin/{dd,df,echo,false,hostname,ln,ls,mkdir,mknod} /bin
    mv -v /usr/bin/{mv,pwd,rm,rmdir,stty,true,uname} /bin
    mv -v /usr/bin/chroot /usr/sbin

Other Coreutils programs are used by some of the scripts in the CLFS-Bootscripts package. As `/usr` may not be available during the early stages of booting, those binaries need to be on the root partition:

    mv -v /usr/bin/{[,basename,head,install,nice} /bin
    mv -v /usr/bin/{readlink,sleep,sync,test,touch} /bin
    ln -svf ../../bin/install /usr/bin

## Contents of Coreutils

Installed programs Installed library Installed directory
- [, base64, basename, cat, chcon, chgrp, chmod, chown, chroot, cksum, comm, cp, csplit, cut, date, dd, df, dir, dircolors, dirname, du, echo, env, expand, expr, factor, false, fmt, fold, groups, head, hostid, hostname, id, install, join, link, ln, logname, ls, md5sum, mkdir, mkfifo, mknod, mktemp, mv, nice, nl, nohup, nproc, od, paste, pathchk, pinky, pr, printenv, printf, ptx, pwd, readlink, realpath, rm, rmdir, runcon, seq, sha1sum, sha224sum, sha256sum, sha384sum, sha512sum, shred, shuf, sleep, sort, split, stat, stdbuf, stty, sum, sync, tac, tail, tee, test, timeout, touch, tr, true, truncate, tsort, tty, uname, unexpand, uniq, unlink, users, vdir, wc, who, whoami, and yes libstdbuf.so /usr/lib/coreutils

Short Descriptions

`base64`

- Base64 encode/decode data and print to standard output

`basename`

- Strips any path and a given suffix from a file name

`cat`

- Concatenates files to standard output

`chcon`

- Changes security context for files and directories

`chgrp`

- Changes the group ownership of files and directories

`chmod`

- Changes the permissions of each file to the given mode; the mode can be either a symbolic representation of the changes to make or an octal number representing the new permissions

`chown`

- Changes the user and/or group ownership of files and directories

`chroot`

- Runs a command with the specified directory as the `/` directory

`cksum`

- Prints the Cyclic Redundancy Check (CRC) checksum and the byte counts of each specified file

`comm`

- Compares two sorted files, outputting in three columns the lines that are unique and the lines that are common

`cp`

- Copies files

`csplit`

- Splits a given file into several new files, separating them according to given patterns or line numbers and outputting the byte count of each new file

`cut`

- Prints sections of lines, selecting the parts according to given fields or positions

`date`

- Displays the current time in the given format, or sets the system date

`dd`

- Copies a file using the given block size and count, while optionally performing conversions on it

`df`

- Reports the amount of disk space available (and used) on all mounted file systems, or only on the file systems holding the selected files

`dir`

- Lists the contents of each given directory (the same as the `ls` command)

`dircolors`

- Outputs commands to set the `LS_COLOR` environment variable to change the color scheme used by `ls`

`dirname`

- Strips the non-directory suffix from a file name

`du`

- Reports the amount of disk space used by the current directory, by each of the given directories (including all subdirectories) or by each of the given files

`echo`

- Displays the given strings

`env`

- Runs a command in a modified environment

`expand`

- Converts tabs to spaces

`expr`

- Evaluates expressions

`factor`

- Prints the prime factors of all specified integer numbers

`false`

- Does nothing, unsuccessfully; it always exits with a status code indicating failure

`fmt`

- Reformats the paragraphs in the given files

`fold`

- Wraps the lines in the given files

`groups`

- Reports a user's group memberships

`head`

- Prints the first ten lines (or the given number of lines) of each given file

`hostid`

- Reports the numeric identifier (in hexadecimal) of the host

`hostname`

- Reports or sets the name of the host

`id`

- Reports the effective user ID, group ID, and group memberships of the current user or specified user

`install`

- Copies files while setting their permission modes and, if possible, their owner and group

`join`

- Joins the lines that have identical join fields from two separate files

`link`

- Creates a hard link with the given name to a file

`ln`

- Makes hard links or soft (symbolic) links between files

`logname`

- Reports the current user's login name

`ls`

- Lists the contents of each given directory

`md5sum`

- Reports or checks Message Digest 5 (MD5) checksums

`mkdir`

- Creates directories with the given names

`mkfifo`

- Creates First-In, First-Outs (FIFOs), a named pipe in UNIX parlance, with the given names

`mknod`

- Creates device nodes with the given names; a device node is a character special file, a block special file, or a FIFO

`mktemp`

- Creates temporary files in a secure manner; it is used in scripts

`mv`

- Moves or renames files or directories

`nice`

- Runs a program with modified scheduling priority

`nl`

- Numbers the lines from the given files

`nohup`

- Runs a command immune to hangups, with its output redirected to a log file

`nproc`

- Prints the number of processing units available to the current process

`od`

- Dumps files in octal and other formats

`paste`

- Merges the given files, joining sequentially corresponding lines side by side, separated by tab characters

`pathchk`

- Checks if file names are valid or portable

`pinky`

- Is a lightweight finger client; it reports some information about the given users

`pr`

- Paginates and columnates files for printing

`printenv`

- Prints the environment

`printf`

- Prints the given arguments according to the given format, much like the C printf function

`ptx`

- Produces a permuted index from the contents of the given files, with each keyword in its context

`pwd`

- Reports the name of the current working directory

`readlink`

- Reports the value of the given symbolic link

`realpath`

- Prints the resolved path

`rm`

- Removes files or directories

`rmdir`

- Removes directories if they are empty

`runcon`

- Runs a command with specified security context

`seq`

- Prints a sequence of numbers within a given range and with a given increment

`sha1sum`

- Prints or checks 160-bit Secure Hash Algorithm 1 (SHA1) checksums

`sha224sum`

- Prints or checks SHA224 checksums

`sha256sum`

- Prints or checks SHA256 checksums

`sha384sum`

- Prints or checks SHA384 checksums

`sha512sum`

- Prints or checks SHA512 checksums

`shred`

- Overwrites the given files repeatedly with complex patterns, making it difficult to recover the data

`shuf`

- Write a random permutation of the input lines to standard output or a file

`sleep`

- Pauses for the given amount of time

`sort`

- Sorts the lines from the given files

`split`

- Splits the given file into pieces, by size or by number of lines

`stat`

- Displays file or filesystem status

`stdbuf`

- Runs a command with modified buffering operations for its standard streams

`stty`

- Sets or reports terminal line settings

`sum`

- Prints checksum and block counts for each given file

`sync`

- Flushes file system buffers; it forces changed blocks to disk and updates the super block

`tac`

- Concatenates the given files in reverse

`tail`

- Prints the last ten lines (or the given number of lines) of each given file

`tee`

- Reads from standard input while writing both to standard output and to the given files

`test` or `[`

- Compares values and checks file types

`timeout`

- Runs a command with a time limit

`touch`

- Changes file timestamps, setting the access and modification times of the given files to the current time; files that do not exist are created with zero length

`tr`

- Translates, squeezes, and deletes the given characters from standard input

`true`

- Does nothing, successfully; it always exits with a status code indicating success

`truncate`

- Shrinks or expands a file to the specified size

`tsort`

- Performs a topological sort; it writes a completely ordered list according to the partial ordering in a given file

`tty`

- Reports the file name of the terminal connected to standard input

`uname`

- Reports system information

`unexpand`

- Converts spaces to tabs

`uniq`

- Discards all but one of successive identical lines

`unlink`

- Removes the given file

`users`

- Reports the names of the users currently logged on

`vdir`

- Is the same as `ls -l`

`wc`

- Reports the number of lines, words, and bytes for each given file, as well as a total line when more than one file is given

`who`

- Reports who is logged on

`whoami`

- Reports the user name associated with the current effective user ID

`yes`

- Repeatedly outputs y or a given string until killed

`libstdbuf`

- Library used by `stdbuf`