diff options
Diffstat (limited to 'NEWS')
-rw-r--r-- | NEWS | 5150 |
1 files changed, 5150 insertions, 0 deletions
@@ -0,0 +1,5150 @@ +GNU coreutils NEWS -*- outline -*- + +* Noteworthy changes in release 8.32 (2020-03-05) [stable] + +** Bug fixes + + cp now copies /dev/fd/N correctly on platforms like Solaris where + it is a character-special file whose minor device number is N. + [bug introduced in fileutils-4.1.6] + + dd conv=fdatasync no longer reports a "Bad file descriptor" error + when fdatasync is interrupted, and dd now retries interrupted calls + to close, fdatasync, fstat and fsync instead of incorrectly + reporting an "Interrupted system call" error. + [bugs introduced in coreutils-6.0] + + df now correctly parses the /proc/self/mountinfo file for unusual entries + like ones with '\r' in a field value ("mount -t tmpfs tmpfs /foo$'\r'bar"), + when the source field is empty ('mount -t tmpfs "" /mnt'), and when the + filesystem type contains characters like a blank which need escaping. + [bugs introduced in coreutils-8.24 with the introduction of reading + the /proc/self/mountinfo file] + + factor again outputs immediately when stdout is a tty but stdin is not. + [bug introduced in coreutils-8.24] + + ln works again on old systems without O_DIRECTORY support (like Solaris 10), + and on systems where symlink ("x", ".") fails with errno == EINVAL + (like Solaris 10 and Solaris 11). + [bug introduced in coreutils-8.31] + + rmdir --ignore-fail-on-non-empty now works correctly for directories + that fail to be removed due to permission issues. Previously the exit status + was reversed, failing for non empty and succeeding for empty directories. + [bug introduced in coreutils-6.11] + + 'shuf -r -n 0 file' no longer mistakenly reads from standard input. + [bug introduced with the --repeat feature in coreutils-8.22] + + split no longer reports a "output file suffixes exhausted" error + when the specified number of files is evenly divisible by 10, 16, 26, + for --numeric, --hex, or default alphabetic suffixes respectively. + [bug introduced in coreutils-8.24] + + seq no longer prints an extra line under certain circumstances (such as + 'seq -f "%g " 1000000 1000000'). + [bug introduced in coreutils-6.10] + +** Changes in behavior + + Several programs now check that numbers end properly. For example, + 'du -d 1x' now reports an error instead of silently ignoring the 'x'. + Affected programs and options include du -d, expr's numeric operands + on non-GMP builds, install -g and -o, ls's TABSIZE environment + variable, mknod b and c, ptx -g and -w, shuf -n, and sort --batch-size + and --parallel. + + date now parses military time zones in accordance with common usage: + "A" to "M" are equivalent to UTC+1 to UTC+12 + "N" to "Y" are equivalent to UTC-1 to UTC-12 + "Z" is "zulu" time (UTC). + For example, 'date -d "09:00B" is now equivalent to 9am in UTC+2 time zone. + Previously, military time zones were parsed according to the obsolete + rfc822, with their value negated (e.g., "B" was equivalent to UTC-2). + [The old behavior was introduced in sh-utils 2.0.15 ca. 1999, predating + coreutils package.] + + ls issues an error message on a removed directory, on GNU/Linux systems. + Previously no error and no entries were output, and so indistinguishable + from an empty directory, with default ls options. + + uniq no longer uses strcoll() to determine string equivalence, + and so will operate more efficiently and consistently. + +** New Features + + ls now supports the --time=birth option to display and sort by + file creation time, where available. + + od --skip-bytes now can use lseek even if the input is not a regular + file, greatly improving performance in some cases. + + stat(1) supports a new --cached= option, used on systems with statx(2) + to control cache coherency of file system attributes, + useful on network file systems. + +** Improvements + + stat and ls now use the statx() system call where available, which can + operate more efficiently by only retrieving requested attributes. + + stat and tail now know about the "binderfs", "dma-buf-fs", "erofs", + "ppc-cmm-fs", and "z3fold" file systems. + stat -f -c%T now reports the file system type, and tail -f uses inotify. + +** Build-related + + gzip-compressed tarballs are distributed once again + + +* Noteworthy changes in release 8.31 (2019-03-10) [stable] + +** Bug fixes + + 'base64 a b' now correctly diagnoses 'b' as the extra operand, not 'a'. + [bug introduced in coreutils-5.3.0] + + When B already exists, 'cp -il A B' no longer immediately fails + after asking the user whether to proceed. + [This bug was present in "the beginning".] + + df no longer corrupts displayed multibyte characters on macOS. + [bug introduced with coreutils-8.18] + + seq no longer outputs inconsistent decimal point characters + for the last number, when locales are misconfigured. + [bug introduced in coreutils-7.0] + + shred, sort, and split no longer falsely report ftruncate errors + when outputting to less-common file types. For example, the shell + command 'sort /dev/null -o /dev/stdout | cat' no longer fails with + an "error truncating" diagnostic. + [bug was introduced with coreutils-8.18 for sort and split, and + (for shared memory objects only) with fileutils-4.1 for shred] + + sync no longer fails for write-only file arguments. + [bug introduced with argument support to sync in coreutils-8.24] + + 'tail -f file | filter' no longer exits immediately on AIX. + [bug introduced in coreutils-8.28] + + 'tail -f file | filter' no longer goes into an infinite loop + if filter exits and SIGPIPE is ignored. + [bug introduced in coreutils-8.28] + +** Changes in behavior + + cksum, dd, hostid, hostname, link, logname, sleep, tsort, unlink, + uptime, users, whoami, yes: now always process --help and --version options, + regardless of any other arguments present before any optional '--' + end-of-options marker. + + nohup now processes --help and --version as first options even if other + parameters follow. + + 'yes a -- b' now outputs 'a b' instead of including the end-of-options + marker as before: 'a -- b'. + + echo now always processes backslash escapes when the POSIXLY_CORRECT + environment variable is set. + + When possible 'ln A B' now merely links A to B and reports an error + if this fails, instead of statting A and B before linking. This + uses fewer system calls and avoids some races. The old statting + approach is still used in situations where hard links to directories + are allowed (e.g., NetBSD when superuser). + + ls --group-directories-first will also group symlinks to directories. + + 'test -a FILE' is not supported anymore. Long ago, there were concerns about + the high probability of humans confusing the -a primary with the -a binary + operator, so POSIX changed this to 'test -e FILE'. Scripts using it were + already broken and non-portable; the -a unary operator was never documented. + + wc now treats non breaking space characters as word delimiters + unless the POSIXLY_CORRECT environment variable is set. + +** New features + + id now supports specifying multiple users. + + 'date' now supports the '+' conversion specification flag, + introduced in POSIX.1-2017. + + printf, seq, sleep, tail, and timeout now accept floating point + numbers in either the current or the C locale. For example, if the + current locale's decimal point is ',', 'sleep 0,1' and 'sleep 0.1' + now mean the same thing. Previously, these commands accepted only + C-locale syntax with '.' as the decimal point. The new behavior is + more compatible with other implementations in non-C locales. + + test now supports the '-N FILE' unary operator (like e.g. bash) to check + whether FILE exists and has been modified since it was last read. + + env now supports '--default-signal[=SIG]', '--ignore-signal[=SIG]', and + '--block-signal[=SIG], to setup signal handling before executing a program. + + env now supports '--list-signal-handling' to indicate non-default + signal handling before executing a program. + +** New commands + + basenc is added to complement existing base64,base32 commands, + and encodes and decodes printable text using various common encodings: + base64,base64url,base32,base32hex,base16,base2,z85. + +** Improvements + + ls -l now better aligns abbreviated months containing digits, + which is common in Asian locales. + + stat and tail now know about the "sdcardfs" file system on Android. + stat -f -c%T now reports the file system type, and tail -f uses inotify. + + stat now prints file creation time when supported by the file system, + on GNU Linux systems with glibc >= 2.28 and kernel >= 4.11. + + +* Noteworthy changes in release 8.30 (2018-07-01) [stable] + +** Bug fixes + + 'cp --symlink SRC DST' will again correctly validate DST. + If DST is a regular file and SRC is a symlink to DST, + then cp will no longer allow that operation to clobber DST. + Also with -d, if DST is a symlink, then it can always be replaced, + even if it points to SRC on a separate device. + [bugs introduced with coreutils-8.27] + + 'cp -n -u' and 'mv -n -u' now consistently ignore the -u option. + Previously, this option combination suffered from race conditions + that caused -u to sometimes override -n. + [bug introduced with coreutils-7.1] + + 'cp -a --no-preserve=mode' now sets appropriate default permissions + for non regular files like fifos and character device nodes etc., + and leaves mode bits of existing files unchanged. + Previously it would have set executable bits on created special files, + and set mode bits for existing files as if they had been created. + [bug introduced with coreutils-8.20] + + 'cp --remove-destination file symlink' now removes the symlink + even if it can't be traversed. + [bug introduced with --remove-destination in fileutils-4.1.1] + + ls no longer truncates the abbreviated month names that have a + display width between 6 and 12 inclusive. Previously this would have + output ambiguous months for Arabic or Catalan locales. + + 'ls -aA' is now equivalent to 'ls -A', since -A now overrides -a. + [bug introduced in coreutils-5.3.0] + + 'mv -n A B' no longer suffers from a race condition that can + overwrite a simultaneously-created B. This bug fix requires + platform support for the renameat2 or renameatx_np syscalls, found + in recent Linux and macOS kernels. As a side effect, 'mv -n A A' + now silently does nothing if A exists. + [bug introduced with coreutils-7.1] + +** Changes in behavior + + 'cp --force file symlink' now removes the symlink even if + it is self referential. + + ls --color now matches file extensions case insensitively. + +** New features + + cp --reflink now supports --reflink=never to enforce a standard copy. + + env supports a new -v/--debug option to show verbose information about + each processing step. + + env supports a new -S/--split-string=S option to split a single argument + string into multiple arguments. Used to pass multiple arguments in scripts + (shebang lines). + + md5sum accepts a new option: --zero (-z) to delimit the output lines with a + NUL instead of a newline character. This also disables file name escaping. + This also applies to sha*sum and b2sum. + + rm --preserve-root now supports the --preserve-root=all option to + reject any command line argument that is mounted to a separate file system. + +** Improvements + + cut supports line lengths up to the max file size on 32 bit systems. + Previously only offsets up to SIZE_MAX-1 were supported. + + stat and tail now know about the "exfs" file system, which is a + version of XFS. stat -f --format=%T now reports the file system type, + and tail -f uses inotify. + + wc avoids redundant processing of ASCII text in multibyte locales, + which is especially significant on macOS. + + +* Noteworthy changes in release 8.29 (2017-12-27) [stable] + +** Bug fixes + + b2sum no longer crashes when processing certain truncated check files. + [bug introduced with b2sum coreutils-8.26] + + dd now ensures the correct cache ranges are specified for the "nocache" + and "direct" flags. Previously some pages in the page cache were not + invalidated. [bug introduced for "direct" in coreutils-7.5, + and with the "nocache" implementation in coreutils-8.11] + + df no longer hangs when given a fifo argument. + [bug introduced in coreutils-7.3] + + ptx -S no longer infloops for a pattern which returns zero-length matches. + [the bug dates back to the initial implementation] + + shred --remove will again repeatedly rename files with shortening names + to attempt to hide the original length of the file name. + [bug introduced in coreutils-8.28] + + stty no longer crashes when processing settings with -F also specified. + [bug introduced in fileutils-4.0] + + tail --bytes again supports non seekable inputs on all systems. + On systems like android it always tried to process as seekable inputs. + [bug introduced in coreutils-8.24] + + timeout will again notice its managed command exiting, even when + invoked with blocked CHLD signal, or in a narrow window where + this CHLD signal from the exiting child was missed. In each case + timeout would have then waited for the time limit to expire. + [bug introduced in coreutils-8.27] + +** New features + + timeout now supports the --verbose option to diagnose forced termination. + +** Improvements + + dd now supports iflag=direct with arbitrary sized files on all file systems. + + tail --bytes=NUM will efficiently seek to the end of block devices, + rather than reading from the start. + + Utilities which do not support long options (other than the default --help + and --version), e.g. cksum and sleep, now use more consistent error diagnostic + for unknown long options. + +** Build-related + + Default man pages are now distributed which are used if perl is + not available on the build system, or when cross compiling. + + +* Noteworthy changes in release 8.28 (2017-09-01) [stable] + +** Bug fixes + + cp and mv now merely warn about any failure to preserve symlink ownership. + Before, cp (without -p) would exit with a failure status, and a cross-device + mv would leave such symlinks behind in the source file system. + [the bug dates back to the initial implementation] + + When creating numbered backups, cp, install, ln, and mv now avoid + races that could lose backup data in unlikely circumstances. Since + the fix relies on the renameat2 system call of Linux kernel 3.15 and + later, the races are still present on other platforms. + [the bug dates back to the initial implementation] + + cp, install, ln, and mv no longer lose data when asked to copy a + backup file to its original via a differently-spelled file name. + E.g., 'rm -f a a~; : > a; echo data > a~; cp --backup=simple a~ ./a' + now fails instead of losing the data. + [the bug dates back to the initial implementation] + + cp, install, ln, and mv now ignore nonsensical backup suffixes. + For example, --suffix='/' and --suffix='' are now no-ops. + [the bug dates back to the initial implementation] + + date and touch no longer overwrite the heap with large + user specified TZ values (CVE-2017-7476). + [bug introduced in coreutils-8.27] + + dd status=progress now just counts seconds; e.g., it outputs "6 s" + consistently rather than sometimes outputting "6.00001 s". + [bug introduced in coreutils-8.24] + + df no longer interacts with excluded file system types, so for example + specifying -x nfs no longer hangs with problematic nfs mounts. + [bug introduced in coreutils-8.21] + + df no longer interacts with dummy file system types, so for example + no longer hangs with problematic nfs mounted via system.automount(5). + [bug introduced in coreutils-8.21] + + `groups inva:lid root` no longer exits immediately upon failure. + Now, it prints a diagnostic or a line to stdout for each argument. + [bug introduced in the bourne-shell-to-C rewrite for coreutils-6.11] + + kill now converts from number to signal name correctly on AIX. + Previously it would have always returned the 'EXIT' name. + [bug introduced in fileutils-4.1.9] + + ls now quotes symlink targets consistently. Previously it may not + have quoted the target name if the link name itself didn't need quoting. + [bug introduced in coreutils-8.26] + + split no longer exits when invocations of a --filter return EPIPE. + [bug introduced in coreutils-8.26] + + md5sum --check no longer incorrectly enables BSD reversed format mode when + ignoring some non checksum lines. This also affects sha*sum and b2sum. + [bug introduced in coreutils-8.14] + + tail -F 'dir/file' is now monitored even when 'dir' is replaced. + [bug introduced with inotify support added in coreutils-7.5] + + tail -f with --pid=PID now processes all inotify events. + Previously events may have been ignored completely upon PID death, + or ignored until future events on the monitored files. + [bug introduced with inotify support added in coreutils-7.5] + + tail -f /dev/tty is now supported by not using inotify when any + non regular files are specified, as inotify is ineffective with these. + [bug introduced with inotify support added in coreutils-7.5] + + uptime no longer outputs the AM/PM component of the current time, + as that's inconsistent with the 24 hour time format used. + [bug introduced in coreutils-7.0] + + expr now returns number of characters matched (instead of incorrect + number of bytes matched) with 'match'/':' operators on multibyte strings. + +** New features + + expand and unexpand now support specifying an offset for tab stops + by prefixing the last specified number like --tabs=1,+8 which is + useful for visualizing diff output for example. + + ls supports a new --hyperlink[=when] option to output file:// + format links to files, supported by some terminals. + + split supports a new --hex-suffixes[=from] option to create files with + lower case hexadecimal suffixes, similar to the --numeric-suffixes option. + + env now has a --chdir (-C) option to change the working directory before + executing the subsidiary program. + + expr supports multibyte strings for all string operations. + +** Changes in behavior + + tail -f now exits immediately if the output is piped and the reader of + the pipe terminates. That allows `tail -f file | grep -q foo` to return + responsively, but does make `tail -f file | :` exit immediately without + waiting for data. Instead one should now `tail -f file | grep -q .` + +** Improvements + + mv --verbose now distinguishes rename and copy operations. + + stat -f -c %l, used to output the max file name length on a file system, + is now supported on FreeBSD and OpenBSD. + + tail -f no longer erroneously warns about being ineffective + when following a single tty, as the simple blocking loop used + is effective in this case. + + +* Noteworthy changes in release 8.27 (2017-03-08) [stable] + +** Bug fixes + + cp --parents will now set an SELinux context for created directories, + as appropriate for the -a, --preseve=context, or -Z options. + [bug present since SELinux support added in coreutils-6.10] + + date again converts from a specified time zone. Previously output was + not converted to the local time zone, and remained in the specified one. + [bug introduced in coreutils-8.26] + + Commands like 'cp --no-dereference -l A B' are no longer quiet no-ops + when A is a regular file and B is a symbolic link that points to A. + [bug introduced in fileutils-4.0] + + factor no longer goes into an infinite loop for certain numbers like + 158909489063877810457 and 222087527029934481871. + [bug introduced in coreutils-8.20] + + tail no longer prints redundant file headers with interleaved inotify events, + which could be triggered especially when tail was suspended and resumed. + [bug introduced with inotify support added in coreutils-7.5] + + timeout no longer has a race that may terminate the wrong process. + The race is unlikely, as timeout(1) needs to receive a signal right + after the command being monitored finishes. Also the system needs + to have reallocated that command's pid in that short time window. + [bug introduced when timeout was added in coreutils-7.0] + + wc --bytes --files0-from now correctly reports byte counts. + Previously it may have returned values that were too large, + depending on the size of the first file processed. + [bug introduced in coreutils-8.24] + +** Improvements + + The new 'date' option --rfc-email is now the long form for -R. + The new option spelling is intended to avoid the need to track the + Internet RFC number for email dates (currently RFC 5322). The old + option spellings --rfc-2822 and --rfc-822 still work. + + date now outputs "-00" for a numeric time zone if the time is UTC + and the time zone abbreviation begins with "-", indicating that the + time zone is indeterminate. + + nproc now honors the OMP_THREAD_LIMIT environment variable to + set the maximum returned value. OMP_NUM_THREADS continues to + set the minimum returned value, but is updated to support the + nested level syntax allowed in this variable. + + stat and tail now know about the "rdt" file system, which is an interface + to Resource Director Technology. stat -f --format=%T now reports the + file system type, and tail -f uses inotify. + + stty now validates arguments before interacting with the device, + ensuring there are no side effects to specifying an invalid option. + + If the file B already exists, commands like 'ln -f A B' and + 'cp -fl A B' no longer remove B before creating the new link. + That is, there is no longer a brief moment when B does not exist. + +** New features + + expand and unexpand now support specifying a tab size to use + after explicitly specified tab stops, by prefixing the last + specified number like --tabs=2,4,/8. + + +* Noteworthy changes in release 8.26 (2016-11-30) [stable] + +** Bug fixes + + cp, mv, and install no longer run into undefined behavior when + handling ACLs on Cygwin and Solaris platforms. [bug introduced in + coreutils-8.24] + + cp --parents --no-preserve=mode, no longer copies permissions from source + directories, instead using default permissions for created directories. + [bug introduced in coreutils-5.93] + + chcon, chgrp, chmod, chown, du, and rm, or specifically utilities + using the FTS interface, now diagnose failures returned by readdir(). + [this bug was inherent in the use of fts: thus, for rm the bug was + introduced in coreutils-8.0. du, chmod, chgrp and chown started using + fts in 6.0. chcon was added in coreutils-6.9.91 with fts support. ] + + date, du, ls, and pr no longer mishandle time zone abbreviations on + System V style platforms where this information is available only + in the global variable 'tzname'. [bug introduced in coreutils-8.24] + + factor again outputs immediately when numbers are input interactively. + [bug introduced in coreutils-8.24] + + head no longer tries to process non-seekable input as seekable, + which resulted in failures on FreeBSD 11 at least. + [bug introduced in coreutils-8.24] + + install -DZ and mkdir -pZ now set default SELinux context correctly even if + two or more directories nested in each other are created and each of them + defaults to a different SELinux context. + + ls --time-style no longer mishandles '%%b' in formats. + [bug introduced in coreutils-7.2] + + md5sum --check --ignore-missing no longer treats files with checksums + starting with "00" as missing. This also affects sha*sum. + [bug introduced with the --ignore-missing feature in coreutils-8.25] + + nl now resets numbering for each page section rather than just for each page. + [This bug was present in "the beginning".] + + pr now handles specified separator strings containing tabs correctly. + Previously it would have output random data from memory. + [This bug was detected with ASAN and present in "the beginning".] + + sort -h -k now works even in locales that use blank as thousands separator. + + stty --help no longer outputs extraneous gettext header lines + for translated languages. [bug introduced in coreutils-8.24] + + stty "sane" again sets "susp" to ^z on Solaris, and leaves "swtch" undefined. + [This bug previously fixed only on some older Solaris systems] + + seq now immediately exits upon write errors. + [This bug was present in "the beginning".] + + tac no longer crashes when there are issues reading from non-seekable inputs. + [bug introduced in coreutils-8.15] + + tail -F now continues to process initially untailable files that are replaced + by a tailable file. This was handled correctly when inotify was available, + and is now handled correctly in all cases. + [bug introduced in fileutils-4.0h] + + tail -f - 'untailable file' will now terminate when there is no more data + to read from stdin. Previously it behaved as if --retry was specified. + [This bug was present in "the beginning".] + + tail -f 'remote file' will now avoid outputting repeated data on network + file systems that misreport file sizes through stale metadata. + [This bug was present in "the beginning" but exacerbated in coreutils-8.24] + + tail -f --retry 'missing file' will now process truncations of that file. + Previously truncation was ignored thus not outputting new data in the file. + [bug introduced in coreutils-5.3.0] + + tail -f will no longer continually try to open inaccessible files, + only doing so if --retry is specified. + [This bug was present in "the beginning".] + + yes now handles short writes, rather than assuming all writes complete. + [bug introduced in coreutils-8.24] + +** Changes in behavior + + rm no longer accepts shortened variants of the --no-preserve-root option. + + seq no longer accepts 0 value as increment, and now also rejects NaN + values for any argument. + + stat now outputs nanosecond information for timestamps even if + they are out of localtime range. + + sort, tail, and uniq now support traditional usage like 'sort +2' + and 'tail +10' on systems conforming to POSIX 1003.1-2008 and later. + The 2008 edition of POSIX dropped the requirement that arguments + like '+2' must be treated as file names. + +** Improvements + + dd now warns about counts specified with a 0x "prefix", since dd will + interpret those as a zero multiplier rather than a hex constant. + The warning suggests to use 00x if a zero multiplier is really intended. + + df now filters the system mount list more efficiently, with 20000 + mount entries now being processed in about 1.1s compared to 1.7s. + + du, shuf, sort, and uniq no longer fail to process a specified file + when their stdin is closed, which would have happened with glibc >= 2.14. + + install -Z now also sets the default SELinux context for created directories. + + ls is now fully responsive to signals until the first escape sequence is + written to a terminal. + + ls now aligns quoted items with non quoted items, which is easier to read, + and also better indicates that the quote is not part of the actual name. + + stat and tail now know about these file systems: + "balloon-kvm-fs" KVM dynamic RAM allocation support, + "cgroup2" Linux Control Groups V2 support, + "daxfs" Optical media file system, + "m1fs" A Plexistor file system, + "prl_fs" A parallels file system, + "smb2" Samba for SMB protocol V2, + "wslfs" Windows Subsystem for Linux, + "zsmalloc" Linux compressed swap support, + stat -f --format=%T now reports the file system type, and + tail -f uses polling for "prl_fs" and "smb2", and inotify for others. + + stat --format=%N for quoting file names now honors the + same QUOTING_STYLE environment variable values as ls. + +** New programs + + b2sum is added to support the BLAKE2 digest algorithm with + a similar interface to the existing md5sum and sha1sum, etc. commands. + +** New Features + + comm now accepts the --total option to output a summary at the end. + + date now accepts the --debug option, to annotate the parsed date string, + display timezone information, and warn about potential misuse. + + date now accepts the %q format to output the quarter of the year. + + +* Noteworthy changes in release 8.25 (2016-01-20) [stable] + +** Bug fixes + + cp now correctly copies files with a hole at the end of the file, + and extents allocated beyond the apparent size of the file. + That combination resulted in the trailing hole not being reproduced. + [bug introduced in coreutils-8.10] + + cut --fields no longer outputs extraneous characters on some uClibc configs. + [bug introduced in coreutils-6.11] + + install -D again copies relative file names when absolute file names + are also specified along with an absolute destination directory name. + [bug introduced in coreutils-6.2] + + ls no longer prematurely wraps lines when printing short file names. + [bug introduced in coreutils-5.1.0] + + mv no longer causes data loss due to removing a source directory specified + multiple times, when that directory is also specified as the destination. + [bug introduced in coreutils-8.24] + + shred again uses defined patterns for all iteration counts. + [bug introduced in coreutils-5.93] + + sort --debug -b now correctly marks the matching extents for keys + that specify an offset for the first field. + [bug introduced with the --debug feature in coreutils-8.6] + + tail -F now works with initially non existent files on a remote file system. + [bug introduced in coreutils-7.5] + +** New commands + + base32 is added to complement the existing base64 command, + and encodes and decodes printable text as per RFC 4648. + +** New features + + comm,cut,head,numfmt,paste,tail now have the -z,--zero-terminated option, and + tac --separator accepts an empty argument, to work with NUL delimited items. + + dd now summarizes sizes in --human-readable format too, not just --si. + E.g., "3441325000 bytes (3.4 GB, 3.2 GiB) copied". It omits the summaries + if they would not provide useful information, e.g., "3 bytes copied". + Its status=progress output now uses the same format as ordinary status, + perhaps with trailing spaces to erase previous progress output. + + md5sum now supports the --ignore-missing option to allow + verifying a subset of files given a larger list of checksums. + This also affects sha1sum, sha224sum, sha256sum, sha384sum and sha512sum. + + printf now supports the '%q' format to print arguments in a form that + is reusable by most shells, with non-printable characters escaped + with the POSIX proposed $'...' syntax. + + stty now supports the "[-]drain" setting to control whether to wait + for transmission of pending output before application of settings. + +** Changes in behavior + + base64 no longer supports hex or oct --wrap parameters, + thus better supporting decimals with leading zeros. + + date --iso-8601 now uses +00:00 timezone format rather than +0000. + The standard states to use this "extended" format throughout a timestamp. + + df now prefers sources towards the root of a device when + eliding duplicate bind mounted entries. + + ls now quotes file names unambiguously and appropriate for use in a shell, + when outputting to a terminal. + + join, sort, uniq with --zero-terminated, now treat '\n' as a field delimiter. + +** Improvements + + All utilities now quote user supplied arguments in error strings, + which avoids confusing error messages in the presence of '\r' chars etc. + + Utilities that traverse directories, like chmod, cp, and rm etc., will operate + more efficiently on XFS through the use of "leaf optimization". + + md5sum now ensures a single line per file for status on standard output, + by using a '\' at the start of the line, and replacing any newlines with '\n'. + This also affects sha1sum, sha224sum, sha256sum, sha384sum and sha512sum. + + dircolors now supports globbing of TERM entries in its database. + For example "TERM *256color*" is now supported. + + du no longer stats all mount points at startup, only doing so + upon detection of a directory cycle. + [issue introduced in coreutils-8.20] + + ls -w0 is now interpreted as no limit on the length of the outputted line. + + stat -f --format=%T now reports the file system type for new Linux + pseudo file systems "bpf_fs", "btrfs_test", "nsfs", "overlayfs" + and "tracefs", and remote file system "acfs". + + wc now ensures a single line per file for counts on standard output, + by quoting names containing '\n' characters; appropriate for use in a shell. + + +* Noteworthy changes in release 8.24 (2015-07-03) [stable] + +** Bug fixes + + dd supports more robust SIGINFO/SIGUSR1 handling for outputting statistics. + Previously those signals may have inadvertently terminated the process. + + df --local no longer hangs with inaccessible remote mounts. + [bug introduced in coreutils-8.21] + + du now silently ignores all directory cycles due to bind mounts. + Previously it would issue a warning and exit with a failure status. + [bug introduced in coreutils-8.1 and partially fixed in coreutils-8.23] + + chroot again calls chroot(DIR) and chdir("/"), even if DIR is "/". + This handles separate bind mounted "/" trees, and environments + depending on the implicit chdir("/"). + [bugs introduced in coreutils-8.23] + + cp no longer issues an incorrect warning about directory hardlinks when a + source directory is specified multiple times. Now, consistent with other + file types, a warning is issued for source directories with duplicate names, + or with -H the directory is copied again using the symlink name. + + factor avoids writing partial lines, thus supporting parallel operation. + [the bug dates back to the initial implementation] + + head, od, split, tac, tail, and wc no longer mishandle input from files in + /proc and /sys file systems that report somewhat-incorrect file sizes. + + mkdir --parents -Z now correctly sets the context for the last component, + even if the parent directory exists and has a different default context. + [bug introduced with the -Z restorecon functionality in coreutils-8.22] + + numfmt no longer outputs incorrect overflowed values seen with certain + large numbers, or with numbers with increased precision. + [bug introduced when numfmt was added in coreutils-8.21] + + numfmt now handles leading zeros correctly, not counting them when + settings processing limits, and making them optional with floating point. + [bug introduced when numfmt was added in coreutils-8.21] + + paste no longer truncates output for large input files. This would happen + for example with files larger than 4GiB on 32 bit systems with a '\n' + character at the 4GiB position. + [the bug dates back to the initial implementation] + + rm indicates the correct number of arguments in its confirmation prompt, + on all platforms. [bug introduced in coreutils-8.22] + + shuf -i with a single redundant operand, would crash instead of issuing + a diagnostic. [bug introduced in coreutils-8.22] + + tail releases inotify resources when unused. Previously it could exhaust + resources with many files, or with -F if files were replaced many times. + [bug introduced in coreutils-7.5] + + tail -f again follows changes to a file after it's renamed. + [bug introduced in coreutils-7.5] + + tail --follow no longer misses changes to files if those files were + replaced before inotify watches were created. + [bug introduced in coreutils-7.5] + + tail --follow consistently outputs all data for a truncated file. + [bug introduced in the beginning] + + tail --follow=name correctly outputs headers for multiple files + when those files are being created or renamed. + [bug introduced in coreutils-7.5] + +** New features + + chroot accepts the new --skip-chdir option to not change the working directory + to "/" after changing into the chroot(2) jail, thus retaining the current wor- + king directory. The new option is only permitted if the new root directory is + the old "/", and therefore is useful with the --group and --userspec options. + + dd accepts a new status=progress level to print data transfer statistics + on stderr approximately every second. + + numfmt can now process multiple fields with field range specifications similar + to cut, and supports setting the output precision with the --format option. + + split accepts a new --separator option to select a record separator character + other than the default newline character. + + stty allows setting the "extproc" option where supported, which is + a useful setting with high latency links. + + sync no longer ignores arguments, and syncs each specified file, or with the + --file-system option, the file systems associated with each specified file. + + tee accepts a new --output-error option to control operation with pipes + and output errors in general. + +** Changes in behavior + + df no longer suppresses separate exports of the same remote device, as + these are generally explicitly mounted. The --total option does still + suppress duplicate remote file systems. + [suppression was introduced in coreutils-8.21] + + mv no longer supports moving a file to a hardlink, instead issuing an error. + The implementation was susceptible to races in the presence of multiple mv + instances, which could result in both hardlinks being deleted. Also on case + insensitive file systems like HFS, mv would just remove a hardlinked 'file' + if called like `mv file File`. The feature was added in coreutils-5.0.1. + + numfmt --from-unit and --to-unit options now interpret suffixes as SI units, + and IEC (power of 2) units are now specified by appending 'i'. + + tee will exit early if there are no more writable outputs. + + tee does not treat the file operand '-' as meaning standard output any longer, + for better conformance to POSIX. This feature was added in coreutils-5.3.0. + + timeout --foreground no longer sends SIGCONT to the monitored process, + which was seen to cause intermittent issues with GDB for example. + +** Improvements + + cp,install,mv will convert smaller runs of NULs in the input to holes, + and cp --sparse=always avoids speculative preallocation on XFS for example. + + cp will read sparse files more efficiently when the destination is a + non regular file. For example when copying a disk image to a device node. + + mv will try a reflink before falling back to a standard copy, which is + more efficient when moving files across BTRFS subvolume boundaries. + + stat and tail now know about IBRIX. stat -f --format=%T now reports the file + system type, and tail -f uses polling for files on IBRIX file systems. + + wc -l processes short lines much more efficiently. + + References from --help and the man pages of utilities have been corrected + in various cases, and more direct links to the corresponding online + documentation are provided. + + +* Noteworthy changes in release 8.23 (2014-07-18) [stable] + +** Bug fixes + + chmod -Rc no longer issues erroneous warnings for files with special bits set. + [bug introduced in coreutils-6.0] + + cp -a, mv, and install --preserve-context, once again set the correct SELinux + context for existing directories in the destination. Previously they set + the context of an existing directory to that of its last copied descendant. + [bug introduced in coreutils-8.22] + + cp -a, mv, and install --preserve-context, no longer seg fault when running + with SELinux enabled, when copying from file systems that return an error + when reading the SELinux context for a file. + [bug introduced in coreutils-8.22] + + cp -a and mv now preserve xattrs of symlinks copied across file systems. + [bug introduced with extended attribute preservation feature in coreutils-7.1] + + date could crash or go into an infinite loop when parsing a malformed TZ="". + [bug introduced with the --date='TZ="" ..' parsing feature in coreutils-5.3.0] + + dd's ASCII and EBCDIC conversions were incompatible with common practice and + with POSIX, and have been corrected as follows. First, conv=ascii now + implies conv=unblock, and conv=ebcdic and conv=ibm now imply conv=block. + Second, the translation tables for dd conv=ascii and conv=ebcdic have been + corrected as shown in the following table, where A is the ASCII value, W is + the old, wrong EBCDIC value, and E is the new, corrected EBCDIC value; all + values are in octal. + + A W E + 041 117 132 + 133 112 255 + 135 132 275 + 136 137 232 + 174 152 117 + 176 241 137 + 313 232 152 + 325 255 112 + 345 275 241 + + [These dd bugs were present in "the beginning".] + + df has more fixes related to the newer dynamic representation of file systems: + Duplicates are elided for virtual file systems like tmpfs. + Details for the correct device are output for points mounted multiple times. + Placeholder values are output for inaccessible file systems, rather than + than error messages or values for the wrong file system. + [These bugs were present in "the beginning".] + + df now outputs all appropriate entries in the presence of bind mounts. + On some systems, entries would have been incorrectly elided due to + them being considered "dummy" mounts. + [bug introduced in coreutils-8.22] + + du now silently ignores directory cycles introduced with bind mounts. + Previously it would issue a warning and exit with a failure status. + [bug introduced in coreutils-8.1] + + head --bytes=-N and --lines=-N now handles devices more + consistently, not ignoring data from virtual devices like /dev/zero, + or on BSD systems data from tty devices. + [bug introduced in coreutils-5.0.1] + + head --bytes=-N - no longer fails with a bogus diagnostic when stdin's + seek pointer is not at the beginning. + [bug introduced with the --bytes=-N feature in coreutils-5.0.1] + + head --lines=-0, when the input does not contain a trailing '\n', + now copies all input to stdout. Previously nothing was output in this case. + [bug introduced with the --lines=-N feature in coreutils-5.0.1] + + id, when invoked with no user name argument, now prints the correct group ID. + Previously, in the default output format, it would print the default group ID + in the password database, which may be neither real nor effective. For e.g., + when run set-GID, or when the database changes outside the current session. + [bug introduced in coreutils-8.1] + + ln -sf now replaces symbolic links whose targets can't exist. Previously + it would display an error, requiring --no-dereference to avoid the issue. + [bug introduced in coreutils-5.3.0] + + ln -sr '' F no longer segfaults. Now works as expected. + [bug introduced with the --relative feature in coreutils-8.16] + + numfmt now handles blanks correctly in all unibyte locales. Previously + in locales where character 0xA0 is a blank, numfmt would mishandle it. + [bug introduced when numfmt was added in coreutils-8.21] + + ptx --format long option parsing no longer falls through into the --help case. + [bug introduced in TEXTUTILS-1_22i] + + ptx now consistently trims whitespace when processing multiple files. + [This bug was present in "the beginning".] + + seq again generates correct output with start or end values = -0. + [bug introduced in coreutils-8.20.] + + shuf --repeat no longer dumps core if the input is empty. + [bug introduced with the --repeat feature in coreutils-8.22] + + sort when using multiple threads now avoids undefined behavior with mutex + destruction, which could cause deadlocks on some implementations. + [bug introduced in coreutils-8.6] + + tail -f now uses polling mode for VXFS to cater for its clustered mode. + [bug introduced with inotify support added in coreutils-7.5] + +** New features + + od accepts a new option: --endian=TYPE to handle inputs with different byte + orders, or to provide consistent output on systems with disparate endianness. + + configure accepts the new option --enable-single-binary to build all the + selected programs in a single binary called "coreutils". The selected + programs can still be called directly using symlinks to "coreutils" or + shebangs with the option --coreutils-prog= passed to this program. The + install behavior is determined by the option --enable-single-binary=symlinks + or --enable-single-binary=shebangs (the default). With the symlinks option, + you can't make a second symlink to any program because that will change the + name of the called program, which is used by coreutils to determine the + desired program. The shebangs option doesn't suffer from this problem, but + the /proc/$pid/cmdline file might not be updated on all the platforms. The + functionality of each program is not affected but this single binary will + depend on all the required dynamic libraries even to run simple programs. + If you desire to build some tools outside the single binary file, you can + pass the option --enable-single-binary-exceptions=PROG_LIST with the comma + separated list of programs you want to build separately. This flag + considerably reduces the overall size of the installed binaries which makes + it suitable for embedded system. + +** Changes in behavior + + chroot with an argument of "/" no longer implicitly changes the current + directory to "/", allowing changing only user credentials for a command. + + chroot --userspec will now unset supplemental groups associated with root, + and instead use the supplemental groups of the specified user. + + cut -d$'\n' again outputs lines identified in the --fields list, having + not done so in v8.21 and v8.22. Note using this non portable functionality + will result in the delayed output of lines. + + ls with none of LS_COLORS or COLORTERM environment variables set, + will now honor an empty or unknown TERM environment variable, + and not output colors even with --colors=always. + +** Improvements + + chroot has better --userspec and --group look-ups, with numeric IDs never + causing name look-up errors. Also look-ups are first done outside the chroot, + in case the look-up within the chroot fails due to library conflicts etc. + + install now allows the combination of the -D and -t options. + + numfmt supports zero padding of numbers using the standard printf + syntax of a leading zero, for example --format="%010f". + Also throughput was improved by up to 800% by avoiding redundant processing. + + shred now supports multiple passes on GNU/Linux tape devices by rewinding + the tape before each pass, avoids redundant writes to empty files, + uses direct I/O for all passes where possible, and attempts to clear + inode storage used for small files on some file systems. + + split avoids unnecessary input buffering, immediately writing input to output + which is significant with --filter or when writing to fifos or stdout etc. + + stat and tail work better with HFS+, HFSX, LogFS and ConfigFS. stat -f + --format=%T now reports the file system type, and tail -f now uses inotify, + rather than the default of issuing a warning and reverting to polling. + + +* Noteworthy changes in release 8.22 (2013-12-13) [stable] + +** Bug fixes + + df now processes the mount list correctly in the presence of unstatable + mount points. Previously it may have failed to output some mount points. + [bug introduced in coreutils-8.21] + + df now processes symbolic links and relative paths to special files containing + a mounted file system correctly. Previously df displayed the statistics about + the file system the file is stored on rather than the one inside. + [This bug was present in "the beginning".] + + df now processes disk device nodes correctly in the presence of bind mounts. + Now df shows the base mounted file system rather than the last one mounted. + [This bug was present in "the beginning".] + + install now removes the target file if the strip program failed for any + reason. Before, that file was left behind, sometimes even with wrong + permissions. + [This bug was present in "the beginning".] + + ln --relative now updates existing symlinks correctly. Previously it based + the relative link on the dereferenced path of an existing link. + [This bug was introduced when --relative was added in coreutils-8.16.] + + ls --recursive will no longer exit with "serious" exit code (2), if there + is an error reading a directory not specified on the command line. + [Bug introduced in coreutils-5.3.0] + + mkdir, mkfifo, and mknod now work better when creating a file in a directory + with a default ACL whose umask disagrees with the process's umask, on a + system such as GNU/Linux where directory ACL umasks override process umasks. + [bug introduced in coreutils-6.0] + + mv will now replace empty directories in the destination with directories + from the source, when copying across file systems. + [This bug was present in "the beginning".] + + od -wN with N larger than 64K on a system with 32-bit size_t would + print approximately 2*N bytes of extraneous padding. + [Bug introduced in coreutils-7.0] + + rm -I now prompts for confirmation before removing a write protected file. + [Bug introduced in coreutils-6.8] + + shred once again uses direct I/O on systems requiring aligned buffers. + Also direct I/O failures for odd sized writes at end of file are now handled. + [The "last write" bug was introduced in coreutils-5.3.0 but masked + by the alignment bug introduced in coreutils-6.0] + + tail --retry -f now waits for the files specified to appear. Before, tail + would immediately exit when such a file is initially inaccessible. + [This bug was introduced when inotify support was added in coreutils-7.5] + + tail -F has improved handling of symlinks. Previously tail didn't respond + to the symlink target (re)appearing after being (re)created. + [This bug was introduced when inotify support was added in coreutils-7.5] + +** New features + + cp, install, mkdir, mknod, mkfifo and mv now support "restorecon" + functionality through the -Z option, to set the SELinux context + appropriate for the new item location in the file system. + + csplit accepts a new option: --suppressed-matched, to elide the lines + used to identify the split points. + + df --output now accepts a 'file' field, to propagate a specified + command line argument through to the output. + + du accepts a new option: --inodes to show the number of inodes instead + of the blocks used. + + id accepts a new option: --zero (-z) to delimit the output entries by + a NUL instead of a white space character. + + id and ls with -Z report the SMACK security context where available. + mkdir, mkfifo and mknod with --context set the SMACK context where available. + + id can now lookup by user ID, in addition to the existing name lookup. + + join accepts a new option: --zero-terminated (-z). As with the sort,uniq + option of the same name, this makes join consume and produce NUL-terminated + lines rather than newline-terminated lines. + + uniq accepts a new option: --group to print all items, while separating + unique groups with empty lines. + + shred accepts new parameters to the --remove option to give greater + control over that operation, which can greatly reduce sync overhead. + + shuf accepts a new option: --repeat (-r), which can repeat items in + the output. + +** Changes in behavior + + cp --link now dereferences a symbolic link as source before creating the + hard link in the destination unless the -P,--no-deref option is specified. + Previously, it would create a hard link of the symbolic link, even when + the dereferencing options -L or -H were specified. + + cp, install, mkdir, mknod and mkfifo no longer accept an argument to the + short -Z option. The --context equivalent still takes an optional argument. + + dd status=none now suppresses all non fatal diagnostic messages, + not just the transfer counts. + + df no longer accepts the long-obsolescent --megabytes option. + + stdbuf now requires at least one buffering mode option to be specified, + as per the documented interface. + +** Improvements + + base64 encoding throughput for bulk data is increased by about 60%. + + md5sum can use libcrypto hash routines where allowed to potentially + get better performance through using more system specific logic. + sha1sum for example has improved throughput by 40% on an i3-2310M. + This also affects sha1sum, sha224sum, sha256sum, sha384sum and sha512sum. + + stat and tail work better with EFIVARFS, EXOFS, F2FS, HOSTFS, SMACKFS, SNFS + and UBIFS. stat -f --format=%T now reports the file system type, and tail -f + now uses inotify for files on all those except SNFS, rather than the default + (for unknown file system types) of issuing a warning and reverting to polling. + + shuf outputs subsets of large inputs much more efficiently. + Reservoir sampling is used to limit memory usage based on the number of + outputs, rather than the number of inputs. + + shred increases the default write block size from 12KiB to 64KiB + to align with other utilities and reduce the system call overhead. + + split --line-bytes=SIZE, now only allocates memory as needed rather + than allocating SIZE bytes at program start. + + stty now supports configuring "stick" (mark/space) parity where available. + +** Build-related + + factor now builds on aarch64 based systems [bug introduced in coreutils-8.20] + + +* Noteworthy changes in release 8.21 (2013-02-14) [stable] + +** New programs + + numfmt: reformat numbers + +** New features + + df now accepts the --output[=FIELD_LIST] option to define the list of columns + to include in the output, or all available columns if the FIELD_LIST is + omitted. Note this enables df to output both block and inode fields together. + + du now accepts the --threshold=SIZE option to restrict the output to entries + with such a minimum SIZE (or a maximum SIZE if it is negative). + du recognizes -t SIZE as equivalent, for compatibility with FreeBSD. + + timeout now accepts the --preserve-status option to always propagate the exit + status, useful for commands that can run for an indeterminate amount of time. + +** Bug fixes + + cp --no-preserve=mode now no longer exits non-zero. + [bug introduced in coreutils-8.20] + + cut with a range like "N-" no longer allocates N/8 bytes. That buffer + would never be used, and allocation failure could cause cut to fail. + [bug introduced in coreutils-8.10] + + cut no longer accepts the invalid range 0-, which made it print empty lines. + Instead, cut now fails and emits an appropriate diagnostic. + [This bug was present in "the beginning".] + + cut now handles overlapping to-EOL ranges properly. Before, it would + interpret "-b2-,3-" like "-b3-". Now it's treated like "-b2-". + [This bug was present in "the beginning".] + + cut no longer prints extraneous delimiters when a to-EOL range subsumes + another range. Before, "echo 123|cut --output-delim=: -b2-,3" would print + "2:3". Now it prints "23". [bug introduced in 5.3.0] + + cut -f no longer inspects input line N+1 before fully outputting line N, + which avoids delayed output for intermittent input. + [bug introduced in TEXTUTILS-1_8b] + + factor no longer loops infinitely on 32 bit powerpc or sparc systems. + [bug introduced in coreutils-8.20] + + install -m M SOURCE DEST no longer has a race condition where DEST's + permissions are temporarily derived from SOURCE instead of from M. + + pr -n no longer crashes when passed values >= 32. Also, line numbers are + consistently padded with spaces, rather than with zeros for certain widths. + [bug introduced in TEXTUTILS-1_22i] + + seq -w ensures that for numbers input in scientific notation, + the output numbers are properly aligned and of the correct width. + [This bug was present in "the beginning".] + + seq -w ensures correct alignment when the step value includes a precision + while the start value does not, and the number sequence narrows. + [This bug was present in "the beginning".] + + seq -s no longer prints an erroneous newline after the first number, and + outputs a newline after the last number rather than a trailing separator. + Also seq no longer ignores a specified step value when the end value is 1. + [bugs introduced in coreutils-8.20] + + timeout now ensures that blocking of ALRM signals is not inherited from + its parent, which would cause timeouts to be ignored. + [the bug dates back to the initial implementation] + +** Changes in behavior + + df --total now prints '-' into the target column (mount point) of the + summary line, accommodating the --output option where the target field + can be in any column. If there is no source column, then df prints + 'total' in the target column. + + df now properly outputs file system information with bind mounts present on + the system by skipping duplicate entries (identified by the device number). + Consequently, df also elides the early-boot pseudo file system type "rootfs". + + cut -d$'\n' no longer outputs lines identified in the --fields list, + to align with other implementations and to avoid delayed output of lines. + + nl no longer supports the --page-increment option, which has been + deprecated since coreutils-7.5. Use --line-increment instead. + +** Improvements + + readlink now supports multiple arguments, and a complementary + -z, --zero option to delimit output items with the NUL character. + + stat and tail now know about CEPH. stat -f --format=%T now reports the file + system type, and tail -f uses polling for files on CEPH file systems. + + stty now supports configuring DTR/DSR hardware flow control where available. + +** Build-related + + Perl is now more of a prerequisite. It has long been required in order + to run (not skip) a significant percentage of the tests. Now, it is + also required in order to generate proper man pages, via help2man. The + generated man/*.1 man pages are no longer distributed. Building without + perl, you would create stub man pages. Thus, while perl is not an + official prerequisite (build and "make check" will still succeed), any + resulting man pages would be inferior. In addition, this fixes a bug + in distributed (not from clone) Makefile.in that could cause parallel + build failure when building from modified sources, as is common practice + for a patched distribution package. + + factor now builds on x86_64 with x32 ABI, 32 bit MIPS, and all HPPA systems, + by avoiding incompatible asm. [bug introduced in coreutils-8.20] + + A root-only test predicate would always fail. Its job was to determine + whether our dummy user, $NON_ROOT_USERNAME, was able to run binaries from + the build directory. As a result, all dependent tests were always skipped. + Now, those tests may be run once again. [bug introduced in coreutils-8.20] + + +* Noteworthy changes in release 8.20 (2012-10-23) [stable] + +** New features + + dd now accepts 'status=none' to suppress all informational output. + + md5sum now accepts the --tag option to print BSD-style output with GNU + file name escaping. This also affects sha1sum, sha224sum, sha256sum, + sha384sum and sha512sum. + +** Bug fixes + + cp could read from freed memory and could even make corrupt copies. + This could happen with a very fragmented and sparse input file, + on GNU/Linux file systems supporting fiemap extent scanning. + This bug also affects mv when it resorts to copying, and install. + [bug introduced in coreutils-8.11] + + cp --no-preserve=mode now no longer preserves the original file's + permissions but correctly sets mode specified by 0666 & ~umask + + du no longer emits a "disk-corrupted"-style diagnostic when it detects + a directory cycle that is due to a bind-mounted directory. Instead, + it detects this precise type of cycle, diagnoses it as such and + eventually exits nonzero. + + factor (when using gmp) would mistakenly declare some composite numbers + to be prime, e.g., 465658903, 2242724851, 6635692801 and many more. + The fix makes factor somewhat slower (~25%) for ranges of consecutive + numbers, and up to 8 times slower for some worst-case individual numbers. + [bug introduced in coreutils-7.0, with GNU MP support] + + ls now correctly colors dangling symlinks when listing their containing + directories, with orphaned symlink coloring disabled in LS_COLORS. + [bug introduced in coreutils-8.14] + + rm -i -d now prompts the user then removes an empty directory, rather + than ignoring the -d option and failing with an 'Is a directory' error. + [bug introduced in coreutils-8.19, with the addition of --dir (-d)] + + rm -r S/ (where S is a symlink-to-directory) no longer gives the invalid + "Too many levels of symbolic links" diagnostic. + [bug introduced in coreutils-8.6] + + seq now handles arbitrarily long non-negative whole numbers when the + increment is 1 and when no format-changing option is specified. + Before, this would infloop: + b=100000000000000000000; seq $b $b + [the bug dates back to the initial implementation] + +** Changes in behavior + + nproc now diagnoses with an error, non option command line parameters. + +** Improvements + + factor's core has been rewritten for speed and increased range. + It can now factor numbers up to 2^128, even without GMP support. + Its speed is from a few times better (for small numbers) to over + 10,000 times better (just below 2^64). The new code also runs a + deterministic primality test for each prime factor, not just a + probabilistic test. + + seq is now up to 70 times faster than it was in coreutils-8.19 and prior, + but only with non-negative whole numbers, an increment of 1, and no + format-changing options. + + stat and tail know about ZFS, VZFS and VMHGFS. stat -f --format=%T now + reports the file system type, and tail -f now uses inotify for files on + ZFS and VZFS file systems, rather than the default (for unknown file + system types) of issuing a warning and reverting to polling. tail -f + still uses polling for files on VMHGFS file systems. + +** Build-related + + root-only tests now check for permissions of our dummy user, + $NON_ROOT_USERNAME, before trying to run binaries from the build directory. + Before, we would get hard-to-diagnose reports of failing root-only tests. + Now, those tests are skipped with a useful diagnostic when the root tests + are run without following the instructions in README. + + We now build most directories using non-recursive make rules. I.e., + rather than running make in man/, lib/, src/, tests/, instead, the top + level Makefile.am includes a $dir/local.mk that describes how to build + the targets in the corresponding directory. Two directories remain + unconverted: po/, gnulib-tests/. One nice side-effect is that the more + accurate dependencies have eliminated a nagging occasional failure that + was seen when running parallel "make syntax-check". + + +* Noteworthy changes in release 8.19 (2012-08-20) [stable] + +** Bug fixes + + df now fails when the list of mounted file systems (/etc/mtab) cannot + be read, yet the file system type information is needed to process + certain options like -a, -l, -t and -x. + [This bug was present in "the beginning".] + + sort -u could fail to output one or more result lines. + For example, this command would fail to print "1": + (yes 7 | head -11; echo 1) | sort --p=1 -S32b -u + [bug introduced in coreutils-8.6] + + sort -u could read freed memory. + For example, this evokes a read from freed memory: + perl -le 'print "a\n"."0"x900'|valgrind sort --p=1 -S32b -u>/dev/null + [bug introduced in coreutils-8.6] + +** New features + + rm now accepts the --dir (-d) option which makes it remove empty directories. + Since removing empty directories is relatively safe, this option can be + used as a part of the alias rm='rm --dir'. This improves compatibility + with Mac OS X and BSD systems which also honor the -d option. + + +* Noteworthy changes in release 8.18 (2012-08-12) [stable] + +** Bug fixes + + cksum now prints checksums atomically so that concurrent + processes will not intersperse their output. + [the bug dates back to the initial implementation] + + date -d "$(printf '\xb0')" would print 00:00:00 with today's date + rather than diagnosing the invalid input. Now it reports this: + date: invalid date '\260' + [This bug was present in "the beginning".] + + df no longer outputs control characters present in the mount point name. + Such characters are replaced with '?', so for example, scripts consuming + lines output by df, can work reliably. + [This bug was present in "the beginning".] + + df --total now exits with an appropriate diagnostic and error code, when + file system --type options do not lead to a processed file system. + [This bug dates back to when --total was added in coreutils-7.0] + + head --lines=-N (-n-N) now resets the read pointer of a seekable input file. + This means that "head -n-3" no longer consumes all of its input, and lines + not output by head may be processed by other programs. For example, this + command now prints the final line, 2, while before it would print nothing: + seq 2 > k; (head -n-1 > /dev/null; cat) < k + [This bug was present in "the beginning".] + + ls --color would mis-color relative-named symlinks in / + [bug introduced in coreutils-8.17] + + split now ensures it doesn't overwrite the input file with generated output. + [the bug dates back to the initial implementation] + + stat and df now report the correct file system usage, + in all situations on GNU/Linux, by correctly determining the block size. + [df bug since coreutils-5.0.91, stat bug since the initial implementation] + + tail -f no longer tries to use inotify on AUFS or PanFS file systems + [you might say this was introduced in coreutils-7.5, along with inotify + support, but even now, its magic number isn't in the usual place.] + +** New features + + stat -f recognizes the new remote file system types: aufs, panfs. + +** Changes in behavior + + su: this program has been removed. We stopped installing "su" by + default with the release of coreutils-6.9.90 on 2007-12-01. Now, + that the util-linux package has the union of the Suse and Fedora + patches as well as enough support to build on the Hurd, we no longer + have any reason to include it here. + +** Improvements + + sort avoids redundant processing in the presence of inaccessible inputs, + or unwritable output. Sort now diagnoses certain errors at start-up, + rather than after potentially expensive processing. + + sort now allocates no more than 75% of physical memory by default, + to better share system resources, and thus operate more efficiently. + [The default max memory usage changed from 50% to 100% in coreutils-8.16] + + +* Noteworthy changes in release 8.17 (2012-05-10) [stable] + +** Bug fixes + + id and groups, when invoked with no user name argument, would print + the default group ID listed in the password database, and sometimes + that ID would be neither real nor effective. For example, when run + set-GID, or in a session for which the default group has just been + changed, the new group ID would be listed, even though it is not + yet effective. [bug introduced in coreutils-8.1] + + cp S D is no longer subject to a race: if an existing D were removed + between the initial stat and subsequent open-without-O_CREATE, cp would + fail with a confusing diagnostic saying that the destination, D, was not + found. Now, in this unusual case, it retries the open (but with O_CREATE), + and hence usually succeeds. With NFS attribute caching, the condition + was particularly easy to trigger, since there, the removal of D could + precede the initial stat. [This bug was present in "the beginning".] + + split --number=C /dev/null no longer appears to infloop on GNU/Hurd + [bug introduced in coreutils-8.8] + + stat no longer reports a negative file size as a huge positive number. + [bug present since 'stat' was introduced in fileutils-4.1.9] + +** New features + + split and truncate now allow any seekable files in situations where + the file size is needed, instead of insisting on regular files. + + fmt now accepts the --goal=WIDTH (-g) option. + + stat -f recognizes new file system types: bdevfs, inodefs, qnx6 + +** Changes in behavior + + cp,mv,install,cat,split: now read and write a minimum of 64KiB at a time. + This was previously 32KiB and increasing to 64KiB was seen to increase + throughput by about 10% when reading cached files on 64 bit GNU/Linux. + + cp --attributes-only no longer truncates any existing destination file, + allowing for more general copying of attributes from one file to another. + + +* Noteworthy changes in release 8.16 (2012-03-26) [stable] + +** New features + + As a GNU extension, 'chmod', 'mkdir', and 'install' now accept operators + '-', '+', '=' followed by octal modes; for example, 'chmod +40 FOO' enables + and 'chmod -40 FOO' disables FOO's group-read permissions. Operator + numeric modes can be combined with symbolic modes by separating them with + commas; for example, =0,u+r clears all permissions except for enabling + user-read permissions. Unlike ordinary numeric modes, operator numeric + modes do not preserve directory setuid and setgid bits; for example, + 'chmod =0 FOO' clears all of FOO's permissions, including setuid and setgid. + + Also, ordinary numeric modes with five or more digits no longer preserve + setuid and setgid bits, so that 'chmod 00755 FOO' now clears FOO's setuid + and setgid bits. This allows scripts to be portable to other systems which + lack the GNU extension mentioned previously, and where ordinary numeric + modes do not preserve directory setuid and setgid bits. + + dd now accepts the count_bytes, skip_bytes iflags and the seek_bytes + oflag, to more easily allow processing portions of a file. + + dd now accepts the conv=sparse flag to attempt to create sparse + output, by seeking rather than writing to the output file. + + ln now accepts the --relative option, to generate a relative + symbolic link to a target, irrespective of how the target is specified. + + split now accepts an optional "from" argument to --numeric-suffixes, + which changes the start number from the default of 0. + + split now accepts the --additional-suffix option, to append an + additional static suffix to output file names. + + basename now supports the -a and -s options, which allow processing + of more than one argument at a time. Also the complementary + -z option was added to delimit output items with the NUL character. + + dirname now supports more than one argument. Also the complementary + -z option was added to delimit output items with the NUL character. + +** Bug fixes + + du --one-file-system (-x) would ignore any non-directory specified on + the command line. For example, "touch f; du -x f" would print nothing. + [bug introduced in coreutils-8.15] + + mv now lets you move a symlink onto a same-inode destination file that + has two or more hard links. Before, it would reject that, saying that + they are the same, implicitly warning you that the move would result in + data loss. In this unusual case, when not moving the symlink onto its + referent, there is no risk of data loss, since the symlink will + typically still point to one of the hard links. + + "mv A B" could succeed, yet A would remain. This would happen only when + both A and B were hard links to the same symlink, and with a kernel for + which rename("A","B") does nothing and returns 0 (POSIX mandates this + surprising rename no-op behavior). Now, mv handles this case by skipping + the usually-useless rename and simply unlinking A. + + realpath no longer mishandles a root directory. This was most + noticeable on platforms where // is a different directory than /, + but could also be observed with --relative-base=/ or + --relative-to=/. [bug since the beginning, in 8.15] + +** Improvements + + ls can be much more efficient, especially with large directories on file + systems for which getfilecon-, ACL-check- and XATTR-check-induced syscalls + fail with ENOTSUP or similar. + + 'realpath --relative-base=dir' in isolation now implies '--relative-to=dir' + instead of causing a usage failure. + + split now supports an unlimited number of split files as default behavior. + + +* Noteworthy changes in release 8.15 (2012-01-06) [stable] + +** New programs + + realpath: print resolved file names. + +** Bug fixes + + du -x no longer counts root directories of other file systems. + [bug introduced in coreutils-5.1.0] + + ls --color many-entry-directory was uninterruptible for too long + [bug introduced in coreutils-5.2.1] + + ls's -k option no longer affects how ls -l outputs file sizes. + It now affects only the per-directory block counts written by -l, + and the sizes written by -s. This is for compatibility with BSD + and with POSIX 2008. Because -k is no longer equivalent to + --block-size=1KiB, a new long option --kibibyte stands for -k. + [bug introduced in coreutils-4.5.4] + + ls -l would leak a little memory (security context string) for each + nonempty directory listed on the command line, when using SELinux. + [bug probably introduced in coreutils-6.10 with SELinux support] + + rm -rf DIR would fail with "Device or resource busy" on Cygwin with NWFS + and NcFsd file systems. This did not affect Unix/Linux-based kernels. + [bug introduced in coreutils-8.0, when rm began using fts] + + split -n 1/2 FILE no longer fails when operating on a growing file, or + (on some systems) when operating on a non-regular file like /dev/zero. + It would report "/dev/zero: No such file or directory" even though + the file obviously exists. Same for -n l/2. + [bug introduced in coreutils-8.8, with the addition of the -n option] + + stat -f now recognizes the FhGFS and PipeFS file system types. + + tac no longer fails to handle two or more non-seekable inputs + [bug introduced in coreutils-5.3.0] + + tail -f no longer tries to use inotify on GPFS or FhGFS file systems + [you might say this was introduced in coreutils-7.5, along with inotify + support, but the new magic numbers weren't in the usual places then.] + +** Changes in behavior + + df avoids long UUID-including file system names in the default listing. + With recent enough kernel/tools, these long names would be used, pushing + second and subsequent columns far to the right. Now, when a long name + refers to a symlink, and no file systems are specified, df prints the + usually-short referent instead. + + tail -f now uses polling (not inotify) when any of its file arguments + resides on a file system of unknown type. In addition, for each such + argument, tail -f prints a warning with the FS type magic number and a + request to report it to the bug-reporting address. + + +* Noteworthy changes in release 8.14 (2011-10-12) [stable] + +** Bug fixes + + ls --dereference no longer outputs erroneous "argetm" strings for + dangling symlinks when an 'ln=target' entry is in $LS_COLORS. + [bug introduced in fileutils-4.0] + + ls -lL symlink once again properly prints "+" when the referent has an ACL. + [bug introduced in coreutils-8.13] + + sort -g no longer infloops for certain inputs containing NaNs + [bug introduced in coreutils-8.5] + +** Improvements + + md5sum --check now supports the -r format from the corresponding BSD tool. + This also affects sha1sum, sha224sum, sha384sum and sha512sum. + + pwd now works also on systems without openat. On such systems, pwd + would fail when run from a directory whose absolute name contained + more than PATH_MAX / 3 components. The df, stat and readlink programs + are also affected due to their use of the canonicalize_* functions. + +** Changes in behavior + + timeout now only processes the first signal received from the set + it is handling (SIGTERM, SIGINT, ...). This is to support systems that + implicitly create threads for some timer functions (like GNU/kFreeBSD). + +** Build-related + + "make dist" no longer builds .tar.gz files. + xz is portable enough and in wide-enough use that distributing + only .tar.xz files is enough. + + +* Noteworthy changes in release 8.13 (2011-09-08) [stable] + +** Bug fixes + + chown and chgrp with the -v --from= options, now output the correct owner. + I.e., for skipped files, the original ownership is output, not the new one. + [bug introduced in sh-utils-2.0g] + + cp -r could mistakenly change the permissions of an existing destination + directory. [bug introduced in coreutils-6.8] + + cp -u -p would fail to preserve one hard link for each up-to-date copy + of a src-hard-linked name in the destination tree. I.e., if s/a and s/b + are hard-linked and dst/s/a is up to date, "cp -up s dst" would copy s/b + to dst/s/b rather than simply linking dst/s/b to dst/s/a. + [This bug appears to have been present in "the beginning".] + + fts-using tools (rm, du, chmod, chgrp, chown, chcon) no longer use memory + proportional to the number of entries in each directory they process. + Before, rm -rf 4-million-entry-directory would consume about 1GiB of memory. + Now, it uses less than 30MB, no matter how many entries there are. + [this bug was inherent in the use of fts: thus, for rm the bug was + introduced in coreutils-8.0. The prior implementation of rm did not use + as much memory. du, chmod, chgrp and chown started using fts in 6.0. + chcon was added in coreutils-6.9.91 with fts support. ] + + pr -T no longer ignores a specified LAST_PAGE to stop at. + [bug introduced in textutils-1.19q] + + printf '%d' '"' no longer accesses out-of-bounds memory in the diagnostic. + [bug introduced in sh-utils-1.16] + + split --number l/... no longer creates extraneous files in certain cases. + [bug introduced in coreutils-8.8] + + timeout now sends signals to commands that create their own process group. + timeout is no longer confused when starting off with a child process. + [bugs introduced in coreutils-7.0] + + unexpand -a now aligns correctly when there are spaces spanning a tabstop, + followed by a tab. In that case a space was dropped, causing misalignment. + We also now ensure that a space never precedes a tab. + [bug introduced in coreutils-5.3.0] + +** Changes in behavior + + chmod, chown and chgrp now output the original attributes in messages, + when -v or -c specified. + + cp -au (where --preserve=links is implicit) may now replace newer + files in the destination, to mirror hard links from the source. + +** New features + + date now accepts ISO 8601 date-time strings with "T" as the + separator. It has long parsed dates like "2004-02-29 16:21:42" + with a space between the date and time strings. Now it also parses + "2004-02-29T16:21:42" and fractional-second and time-zone-annotated + variants like "2004-02-29T16:21:42.333-07:00" + + md5sum accepts the new --strict option. With --check, it makes the + tool exit non-zero for any invalid input line, rather than just warning. + This also affects sha1sum, sha224sum, sha384sum and sha512sum. + + split accepts a new --filter=CMD option. With it, split filters output + through CMD. CMD may use the $FILE environment variable, which is set to + the nominal output file name for each invocation of CMD. For example, to + split a file into 3 approximately equal parts, which are then compressed: + split -n3 --filter='xz > $FILE.xz' big + Note the use of single quotes, not double quotes. + That creates files named xaa.xz, xab.xz and xac.xz. + + timeout accepts a new --foreground option, to support commands not started + directly from a shell prompt, where the command is interactive or needs to + receive signals initiated from the terminal. + +** Improvements + + cp -p now copies trivial NSFv4 ACLs on Solaris 10. Before, it would + mistakenly apply a non-trivial ACL to the destination file. + + cp and ls now support HP-UX 11.11's ACLs, thanks to improved support + in gnulib. + + df now supports disk partitions larger than 4 TiB on MacOS X 10.5 + or newer and on AIX 5.2 or newer. + + join --check-order now prints "join: FILE:LINE_NUMBER: bad_line" for an + unsorted input, rather than e.g., "join: file 1 is not in sorted order". + + shuf outputs small subsets of large permutations much more efficiently. + For example 'shuf -i1-$((2**32-1)) -n2' no longer exhausts memory. + + stat -f now recognizes the GPFS, MQUEUE and PSTOREFS file system types. + + timeout now supports sub-second timeouts. + +** Build-related + + Changes inherited from gnulib address a build failure on HP-UX 11.11 + when using /opt/ansic/bin/cc. + + Numerous portability and build improvements inherited via gnulib. + + +* Noteworthy changes in release 8.12 (2011-04-26) [stable] + +** Bug fixes + + tail's --follow=name option no longer implies --retry on systems + with inotify support. [bug introduced in coreutils-7.5] + +** Changes in behavior + + cp's extent-based (FIEMAP) copying code is more reliable in the face + of varying and undocumented file system semantics: + - it no longer treats unwritten extents specially + - a FIEMAP-based extent copy always uses the FIEMAP_FLAG_SYNC flag. + Before, it would incur the performance penalty of that sync only + for 2.6.38 and older kernels. We thought all problems would be + resolved for 2.6.39. + - it now attempts a FIEMAP copy only on a file that appears sparse. + Sparse files are relatively unusual, and the copying code incurs + the performance penalty of the now-mandatory sync only for them. + +** Portability + + dd once again compiles on AIX 5.1 and 5.2 + + +* Noteworthy changes in release 8.11 (2011-04-13) [stable] + +** Bug fixes + + cp -a --link would not create a hardlink to a symlink, instead + copying the symlink and then not preserving its timestamp. + [bug introduced in coreutils-8.0] + + cp now avoids FIEMAP issues with BTRFS before Linux 2.6.38, + which could result in corrupt copies of sparse files. + [bug introduced in coreutils-8.10] + + cut could segfault when invoked with a user-specified output + delimiter and an unbounded range like "-f1234567890-". + [bug introduced in coreutils-5.3.0] + + du would infloop when given --files0-from=DIR + [bug introduced in coreutils-7.1] + + sort no longer spawns 7 worker threads to sort 16 lines + [bug introduced in coreutils-8.6] + + touch built on Solaris 9 would segfault when run on Solaris 10 + [bug introduced in coreutils-8.8] + + wc would dereference a NULL pointer upon an early out-of-memory error + [bug introduced in coreutils-7.1] + +** New features + + dd now accepts the 'nocache' flag to the iflag and oflag options, + which will discard any cache associated with the files, or + processed portion thereof. + + dd now warns that 'iflag=fullblock' should be used, + in various cases where partial reads can cause issues. + +** Changes in behavior + + cp now avoids syncing files when possible, when doing a FIEMAP copy. + The sync is only needed on Linux kernels before 2.6.39. + [The sync was introduced in coreutils-8.10] + + cp now copies empty extents efficiently, when doing a FIEMAP copy. + It no longer reads the zero bytes from the input, and also can efficiently + create a hole in the output file when --sparse=always is specified. + + df now aligns columns consistently, and no longer wraps entries + with longer device identifiers, over two lines. + + install now rejects its long-deprecated --preserve_context option. + Use --preserve-context instead. + + test now accepts "==" as a synonym for "=" + + +* Noteworthy changes in release 8.10 (2011-02-04) [stable] + +** Bug fixes + + du would abort with a failed assertion when two conditions are met: + part of the hierarchy being traversed is moved to a higher level in the + directory tree, and there is at least one more command line directory + argument following the one containing the moved sub-tree. + [bug introduced in coreutils-5.1.0] + + join --header now skips the ordering check for the first line + even if the other file is empty. [bug introduced in coreutils-8.5] + + join -v2 now ensures the default output format prints the match field + at the start of the line when it is different to the match field for + the first file. [bug present in "the beginning".] + + rm -f no longer fails for EINVAL or EILSEQ on file systems that + reject file names invalid for that file system. + + uniq -f NUM no longer tries to process fields after end of line. + [bug introduced in coreutils-7.0] + +** New features + + cp now copies sparse files efficiently on file systems with FIEMAP + support (ext4, btrfs, xfs, ocfs2). Before, it had to read 2^20 bytes + when copying a 1MiB sparse file. Now, it copies bytes only for the + non-sparse sections of a file. Similarly, to induce a hole in the + output file, it had to detect a long sequence of zero bytes. Now, + it knows precisely where each hole in an input file is, and can + reproduce them efficiently in the output file. mv also benefits + when it resorts to copying, e.g., between file systems. + + join now supports -o 'auto' which will automatically infer the + output format from the first line in each file, to ensure + the same number of fields are output for each line. + +** Changes in behavior + + join no longer reports disorder when one of the files is empty. + This allows one to use join as a field extractor like: + join -a1 -o 1.3,1.1 - /dev/null + + +* Noteworthy changes in release 8.9 (2011-01-04) [stable] + +** Bug fixes + + split no longer creates files with a suffix length that + is dependent on the number of bytes or lines per file. + [bug introduced in coreutils-8.8] + + +* Noteworthy changes in release 8.8 (2010-12-22) [stable] + +** Bug fixes + + cp -u no longer does unnecessary copying merely because the source + has finer-grained timestamps than the destination. + + od now prints floating-point numbers without losing information, and + it no longer omits spaces between floating-point columns in some cases. + + sort -u with at least two threads could attempt to read through a + corrupted pointer. [bug introduced in coreutils-8.6] + + sort with at least two threads and with blocked output would busy-loop + (spinlock) all threads, often using 100% of available CPU cycles to + do no work. I.e., "sort < big-file | less" could waste a lot of power. + [bug introduced in coreutils-8.6] + + sort with at least two threads no longer segfaults due to use of pointers + into the stack of an expired thread. [bug introduced in coreutils-8.6] + + sort --compress no longer mishandles subprocesses' exit statuses, + no longer hangs indefinitely due to a bug in waiting for subprocesses, + and no longer generates many more than NMERGE subprocesses. + + sort -m -o f f ... f no longer dumps core when file descriptors are limited. + +** Changes in behavior + + sort will not create more than 8 threads by default due to diminishing + performance gains. Also the --parallel option is no longer restricted + to the number of available processors. + +** New features + + split accepts the --number/-n option to generate a specific number of + files, as well as the --elide-empty-files/-e and --unbuffered/-u + options to fine-tune the resulting output. + + +* Noteworthy changes in release 8.7 (2010-11-13) [stable] + +** Bug fixes + + cp, install, mv, and touch no longer crash when setting file times + on Solaris 10 Update 9 [Solaris PatchID 144488 and newer expose a + latent bug introduced in coreutils 8.1, and possibly a second latent + bug going at least as far back as coreutils 5.97] + + csplit no longer corrupts heap when writing more than 999 files, + nor does it leak memory for every chunk of input processed + [the bugs were present in the initial implementation] + + tail -F once again notices changes in a currently unavailable + remote directory [bug introduced in coreutils-7.5] + +** Changes in behavior + + cp --attributes-only now completely overrides --reflink. + Previously a reflink was needlessly attempted. + + stat's %X, %Y, and %Z directives once again print only the integer + part of seconds since the epoch. This reverts a change from + coreutils-8.6, that was deemed unnecessarily disruptive. + To obtain a nanosecond-precision timestamp for %X use %.X; + if you want (say) just 3 fractional digits, use %.3X. + Likewise for %Y and %Z. + + stat's new %W format directive would print floating point seconds. + However, with the above change to %X, %Y and %Z, we've made %W work + the same way as the others. + + stat gained support for several printf-style flags, such as %'s for + listing sizes with the current locale's thousands separator. + + +* Noteworthy changes in release 8.6 (2010-10-15) [stable] + +** Bug fixes + + du no longer multiply counts a file that is a directory or whose + link count is 1, even if the file is reached multiple times by + following symlinks or via multiple arguments. + + du -H and -L now consistently count pointed-to files instead of + symbolic links, and correctly diagnose dangling symlinks. + + du --ignore=D now ignores directory D even when that directory is + found to be part of a directory cycle. Before, du would issue a + "NOTIFY YOUR SYSTEM MANAGER" diagnostic and fail. + + split now diagnoses read errors rather than silently exiting. + [bug introduced in coreutils-4.5.8] + + tac would perform a double-free when given an input line longer than 16KiB. + [bug introduced in coreutils-8.3] + + tail -F once again notices changes in a currently unavailable directory, + and works around a Linux kernel bug where inotify runs out of resources. + [bugs introduced in coreutils-7.5] + + tr now consistently handles case conversion character classes. + In some locales, valid conversion specifications caused tr to abort, + while in all locales, some invalid specifications were undiagnosed. + [bugs introduced in coreutils 6.9.90 and 6.9.92] + +** New features + + cp now accepts the --attributes-only option to not copy file data, + which is useful for efficiently modifying files. + + du recognizes -d N as equivalent to --max-depth=N, for compatibility + with FreeBSD. + + sort now accepts the --debug option, to highlight the part of the + line significant in the sort, and warn about questionable options. + + sort now supports -d, -f, -i, -R, and -V in any combination. + + stat now accepts the %m format directive to output the mount point + for a file. It also accepts the %w and %W format directives for + outputting the birth time of a file, if one is available. + +** Changes in behavior + + df now consistently prints the device name for a bind mounted file, + rather than its aliased target. + + du now uses less than half as much memory when operating on trees + with many hard-linked files. With --count-links (-l), or when + operating on trees with no hard-linked files, there is no change. + + ls -l now uses the traditional three field time style rather than + the wider two field numeric ISO style, in locales where a style has + not been specified. The new approach has nicer behavior in some + locales, including English, which was judged to outweigh the disadvantage + of generating less-predictable and often worse output in poorly-configured + locales where there is an onus to specify appropriate non-default styles. + [The old behavior was introduced in coreutils-6.0 and had been removed + for English only using a different method since coreutils-8.1] + + rm's -d now evokes an error; before, it was silently ignored. + + sort -g now uses long doubles for greater range and precision. + + sort -h no longer rejects numbers with leading or trailing ".", and + no longer accepts numbers with multiple ".". It now considers all + zeros to be equal. + + sort now uses the number of available processors to parallelize + the sorting operation. The number of sorts run concurrently can be + limited with the --parallel option or with external process + control like taskset for example. + + stat now provides translated output when no format is specified. + + stat no longer accepts the --context (-Z) option. Initially it was + merely accepted and ignored, for compatibility. Starting two years + ago, with coreutils-7.0, its use evoked a warning. Printing the + SELinux context of a file can be done with the %C format directive, + and the default output when no format is specified now automatically + includes %C when context information is available. + + stat no longer accepts the %C directive when the --file-system + option is in effect, since security context is a file attribute + rather than a file system attribute. + + stat now outputs the full sub-second resolution for the atime, + mtime, and ctime values since the Epoch, when using the %X, %Y, and + %Z directives of the --format option. This matches the fact that + %x, %y, and %z were already doing so for the human-readable variant. + + touch's --file option is no longer recognized. Use --reference=F (-r) + instead. --file has not been documented for 15 years, and its use has + elicited a warning since coreutils-7.1. + + truncate now supports setting file sizes relative to a reference file. + Also errors are no longer suppressed for unsupported file types, and + relative sizes are restricted to supported file types. + + +* Noteworthy changes in release 8.5 (2010-04-23) [stable] + +** Bug fixes + + cp and mv once again support preserving extended attributes. + [bug introduced in coreutils-8.4] + + cp now preserves "capabilities" when also preserving file ownership. + + ls --color once again honors the 'NORMAL' dircolors directive. + [bug introduced in coreutils-6.11] + + sort -M now handles abbreviated months that are aligned using blanks + in the locale database. Also locales with 8 bit characters are + handled correctly, including multi byte locales with the caveat + that multi byte characters are matched case sensitively. + + sort again handles obsolescent key formats (+POS -POS) correctly. + Previously if -POS was specified, 1 field too many was used in the sort. + [bug introduced in coreutils-7.2] + +** New features + + join now accepts the --header option, to treat the first line of each + file as a header line to be joined and printed unconditionally. + + timeout now accepts the --kill-after option which sends a kill + signal to the monitored command if it's still running the specified + duration after the initial signal was sent. + + who: the "+/-" --mesg (-T) indicator of whether a user/tty is accepting + messages could be incorrectly listed as "+", when in fact, the user was + not accepting messages (mesg no). Before, who would examine only the + permission bits, and not consider the group of the TTY device file. + Thus, if a login tty's group would change somehow e.g., to "root", + that would make it unwritable (via write(1)) by normal users, in spite + of whatever the permission bits might imply. Now, when configured + using the --with-tty-group[=NAME] option, who also compares the group + of the TTY device with NAME (or "tty" if no group name is specified). + +** Changes in behavior + + ls --color no longer emits the final 3-byte color-resetting escape + sequence when it would be a no-op. + + join -t '' no longer emits an error and instead operates on + each line as a whole (even if they contain NUL characters). + + +* Noteworthy changes in release 8.4 (2010-01-13) [stable] + +** Bug fixes + + nproc --all is now guaranteed to be as large as the count + of available processors, which may not have been the case + on GNU/Linux systems with neither /proc nor /sys available. + [bug introduced in coreutils-8.1] + +** Build-related + + Work around a build failure when using buggy <sys/capability.h>. + Alternatively, configure with --disable-libcap. + + Compilation would fail on systems using glibc-2.7..2.9 due to changes in + gnulib's wchar.h that tickled a bug in at least those versions of glibc's + own <wchar.h> header. Now, gnulib works around the bug in those older + glibc <wchar.h> headers. + + Building would fail with a link error (cp/copy.o) when XATTR headers + were installed without the corresponding library. Now, configure + detects that and disables xattr support, as one would expect. + + +* Noteworthy changes in release 8.3 (2010-01-07) [stable] + +** Bug fixes + + cp -p, install -p, mv, and touch -c could trigger a spurious error + message when using new glibc coupled with an old kernel. + [bug introduced in coreutils-6.12]. + + ls -l --color no longer prints "argetm" in front of dangling + symlinks when the 'LINK target' directive was given to dircolors. + [bug introduced in fileutils-4.0] + + pr's page header was improperly formatted for long file names. + [bug introduced in coreutils-7.2] + + rm -r --one-file-system works once again. + The rewrite to make rm use fts introduced a regression whereby + a commmand of the above form would fail for all subdirectories. + [bug introduced in coreutils-8.0] + + stat -f recognizes more file system types: k-afs, fuseblk, gfs/gfs2, ocfs2, + and rpc_pipefs. Also Minix V3 is displayed correctly as minix3, not minux3. + [bug introduced in coreutils-8.1] + + tail -f (inotify-enabled) once again works with remote files. + The use of inotify with remote files meant that any changes to those + files that was not done from the local system would go unnoticed. + [bug introduced in coreutils-7.5] + + tail -F (inotify-enabled) would abort when a tailed file is repeatedly + renamed-aside and then recreated. + [bug introduced in coreutils-7.5] + + tail -F (inotify-enabled) could fail to follow renamed files. + E.g., given a "tail -F a b" process, running "mv a b" would + make tail stop tracking additions to "b". + [bug introduced in coreutils-7.5] + + touch -a and touch -m could trigger bugs in some file systems, such + as xfs or ntfs-3g, and fail to update timestamps. + [bug introduced in coreutils-8.1] + + wc now prints counts atomically so that concurrent + processes will not intersperse their output. + [the issue dates back to the initial implementation] + + +* Noteworthy changes in release 8.2 (2009-12-11) [stable] + +** Bug fixes + + id's use of mgetgroups no longer writes beyond the end of a malloc'd buffer + [bug introduced in coreutils-8.1] + + id no longer crashes on systems without supplementary group support. + [bug introduced in coreutils-8.1] + + rm once again handles zero-length arguments properly. + The rewrite to make rm use fts introduced a regression whereby + a command like "rm a '' b" would fail to remove "a" and "b", due to + the presence of the empty string argument. + [bug introduced in coreutils-8.0] + + sort is now immune to the signal handling of its parent. + Specifically sort now doesn't exit with an error message + if it uses helper processes for compression and its parent + ignores CHLD signals. [bug introduced in coreutils-6.9] + + tail without -f no longer accesses uninitialized memory + [bug introduced in coreutils-7.6] + + timeout is now immune to the signal handling of its parent. + Specifically timeout now doesn't exit with an error message + if its parent ignores CHLD signals. [bug introduced in coreutils-7.6] + + a user running "make distcheck" in the coreutils source directory, + with TMPDIR unset or set to the name of a world-writable directory, + and with a malicious user on the same system + was vulnerable to arbitrary code execution + [bug introduced in coreutils-5.0] + + +* Noteworthy changes in release 8.1 (2009-11-18) [stable] + +** Bug fixes + + chcon no longer exits immediately just because SELinux is disabled. + Even then, chcon may still be useful. + [bug introduced in coreutils-8.0] + + chcon, chgrp, chmod, chown and du now diagnose an ostensible directory cycle + and arrange to exit nonzero. Before, they would silently ignore the + offending directory and all "contents." + + env -u A=B now fails, rather than silently adding A to the + environment. Likewise, printenv A=B silently ignores the invalid + name. [the bugs date back to the initial implementation] + + ls --color now handles files with capabilities correctly. Previously + files with capabilities were often not colored, and also sometimes, files + without capabilites were colored in error. [bug introduced in coreutils-7.0] + + md5sum now prints checksums atomically so that concurrent + processes will not intersperse their output. + This also affected sum, sha1sum, sha224sum, sha384sum and sha512sum. + [the bug dates back to the initial implementation] + + mktemp no longer leaves a temporary file behind if it was unable to + output the name of the file to stdout. + [the bug dates back to the initial implementation] + + nice -n -1 PROGRAM now runs PROGRAM even when its internal setpriority + call fails with errno == EACCES. + [the bug dates back to the initial implementation] + + nice, nohup, and su now refuse to execute the subsidiary program if + they detect write failure in printing an otherwise non-fatal warning + message to stderr. + + stat -f recognizes more file system types: afs, cifs, anon-inode FS, + btrfs, cgroupfs, cramfs-wend, debugfs, futexfs, hfs, inotifyfs, minux3, + nilfs, securityfs, selinux, xenfs + + tail -f (inotify-enabled) now avoids a race condition. + Before, any data appended in the tiny interval between the initial + read-to-EOF and the inotify watch initialization would be ignored + initially (until more data was appended), or forever, if the file + were first renamed or unlinked or never modified. + [The race was introduced in coreutils-7.5] + + tail -F (inotify-enabled) now consistently tails a file that has been + replaced via renaming. That operation provokes either of two sequences + of inotify events. The less common sequence is now handled as well. + [The bug came with the implementation change in coreutils-7.5] + + timeout now doesn't exit unless the command it is monitoring does, + for any specified signal. [bug introduced in coreutils-7.0]. + +** Changes in behavior + + chroot, env, nice, and su fail with status 125, rather than 1, on + internal error such as failure to parse command line arguments; this + is for consistency with stdbuf and timeout, and avoids ambiguity + with the invoked command failing with status 1. Likewise, nohup + fails with status 125 instead of 127. + + du (due to a change in gnulib's fts) can now traverse NFSv4 automounted + directories in which the stat'd device number of the mount point differs + during a traversal. Before, it would fail, because such a mismatch would + usually represent a serious error or a subversion attempt. + + echo and printf now interpret \e as the Escape character (0x1B). + + rm -f /read-only-fs/nonexistent now succeeds and prints no diagnostic + on systems with an unlinkat syscall that sets errno to EROFS in that case. + Before, it would fail with a "Read-only file system" diagnostic. + Also, "rm /read-only-fs/nonexistent" now reports "file not found" rather + than the less precise "Read-only file system" error. + +** New programs + + nproc: Print the number of processing units available to a process. + +** New features + + env and printenv now accept the option --null (-0), as a means to + avoid ambiguity with newlines embedded in the environment. + + md5sum --check now also accepts openssl-style checksums. + So do sha1sum, sha224sum, sha384sum and sha512sum. + + mktemp now accepts the option --suffix to provide a known suffix + after the substitution in the template. Additionally, uses such as + "mktemp fileXXXXXX.txt" are able to infer an appropriate --suffix. + + touch now accepts the option --no-dereference (-h), as a means to + change symlink timestamps on platforms with enough support. + + +* Noteworthy changes in release 8.0 (2009-10-06) [beta] + +** Bug fixes + + cp --preserve=xattr and --archive now preserve extended attributes even + when the source file doesn't have write access. + [bug introduced in coreutils-7.1] + + touch -t [[CC]YY]MMDDhhmm[.ss] now accepts a timestamp string ending in .60, + to accommodate leap seconds. + [the bug dates back to the initial implementation] + + ls --color now reverts to the color of a base file type consistently + when the color of a more specific type is disabled. + [bug introduced in coreutils-5.90] + + ls -LR exits with status 2, not 0, when it encounters a cycle + + "ls -is" is now consistent with ls -lis in ignoring values returned + from a failed stat/lstat. For example ls -Lis now prints "?", not "0", + for the inode number and allocated size of a dereferenced dangling symlink. + + tail --follow --pid now avoids a race condition where data written + just before the process dies might not have been output by tail. + Also, tail no longer delays at all when the specified pid is not live. + [The race was introduced in coreutils-7.5, + and the unnecessary delay was present since textutils-1.22o] + +** Portability + + On Solaris 9, many commands would mistakenly treat file/ the same as + file. Now, even on such a system, path resolution obeys the POSIX + rules that a trailing slash ensures that the preceding name is a + directory or a symlink to a directory. + +** Changes in behavior + + id no longer prints SELinux " context=..." when the POSIXLY_CORRECT + environment variable is set. + + readlink -f now ignores a trailing slash when deciding if the + last component (possibly via a dangling symlink) can be created, + since mkdir will succeed in that case. + +** New features + + ln now accepts the options --logical (-L) and --physical (-P), + added by POSIX 2008. The default behavior is -P on systems like + GNU/Linux where link(2) creates hard links to symlinks, and -L on + BSD systems where link(2) follows symlinks. + + stat: without -f, a command-line argument of "-" now means standard input. + With --file-system (-f), an argument of "-" is now rejected. + If you really must operate on a file named "-", specify it as + "./-" or use "--" to separate options from arguments. + +** Improvements + + rm: rewrite to use gnulib's fts + This makes rm -rf significantly faster (400-500%) in some pathological + cases, and slightly slower (20%) in at least one pathological case. + + rm -r deletes deep hierarchies more efficiently. Before, execution time + was quadratic in the depth of the hierarchy, now it is merely linear. + However, this improvement is not as pronounced as might be expected for + very deep trees, because prior to this change, for any relative name + length longer than 8KiB, rm -r would sacrifice official conformance to + avoid the disproportionate quadratic performance penalty. Leading to + another improvement: + + rm -r is now slightly more standards-conformant when operating on + write-protected files with relative names longer than 8KiB. + + +* Noteworthy changes in release 7.6 (2009-09-11) [stable] + +** Bug fixes + + cp, mv now ignore failure to preserve a symlink timestamp, when it is + due to their running on a kernel older than what was implied by headers + and libraries tested at configure time. + [bug introduced in coreutils-7.5] + + cp --reflink --preserve now preserves attributes when cloning a file. + [bug introduced in coreutils-7.5] + + cp --preserve=xattr no longer leaks resources on each preservation failure. + [bug introduced in coreutils-7.1] + + dd now exits with non-zero status when it encounters a write error while + printing a summary to stderr. + [bug introduced in coreutils-6.11] + + dd cbs=N conv=unblock would fail to print a final newline when the size + of the input was not a multiple of N bytes. + [the non-conforming behavior dates back to the initial implementation] + + df no longer requires that each command-line argument be readable + [bug introduced in coreutils-7.3] + + ls -i now prints consistent inode numbers also for mount points. + This makes ls -i DIR less efficient on systems with dysfunctional readdir, + because ls must stat every file in order to obtain a guaranteed-valid + inode number. [bug introduced in coreutils-6.0] + + tail -f (inotify-enabled) now flushes any initial output before blocking. + Before, this would print nothing and wait: stdbuf -o 4K tail -f /etc/passwd + Note that this bug affects tail -f only when its standard output is buffered, + which is relatively unusual. + [bug introduced in coreutils-7.5] + + tail -f once again works with standard input. inotify-enabled tail -f + would fail when operating on a nameless stdin. I.e., tail -f < /etc/passwd + would say "tail: cannot watch `-': No such file or directory", yet the + relatively baroque tail -f /dev/stdin < /etc/passwd would work. Now, the + offending usage causes tail to revert to its conventional sleep-based + (i.e., not inotify-based) implementation. + [bug introduced in coreutils-7.5] + +** Portability + + ln, link: link f z/ would mistakenly succeed on Solaris 10, given an + existing file, f, and nothing named "z". ln -T f z/ has the same problem. + Each would mistakenly create "z" as a link to "f". Now, even on such a + system, each command reports the error, e.g., + link: cannot create link `z/' to `f': Not a directory + +** New features + + cp --reflink accepts a new "auto" parameter which falls back to + a standard copy if creating a copy-on-write clone is not possible. + +** Changes in behavior + + tail -f now ignores "-" when stdin is a pipe or FIFO. + tail-with-no-args now ignores -f unconditionally when stdin is a pipe or FIFO. + Before, it would ignore -f only when no file argument was specified, + and then only when POSIXLY_CORRECT was set. Now, :|tail -f - terminates + immediately. Before, it would block indefinitely. + + +* Noteworthy changes in release 7.5 (2009-08-20) [stable] + +** Bug fixes + + dd's oflag=direct option now works even when the size of the input + is not a multiple of e.g., 512 bytes. + + dd now handles signals consistently even when they're received + before data copying has started. + + install runs faster again with SELinux enabled + [introduced in coreutils-7.0] + + ls -1U (with two or more arguments, at least one a nonempty directory) + would print entry names *before* the name of the containing directory. + Also fixed incorrect output of ls -1RU and ls -1sU. + [introduced in coreutils-7.0] + + sort now correctly ignores fields whose ending position is specified + before the start position. Previously in numeric mode the remaining + part of the line after the start position was used as the sort key. + [This bug appears to have been present in "the beginning".] + + truncate -s failed to skip all whitespace in the option argument in + some locales. + +** New programs + + stdbuf: A new program to run a command with modified stdio buffering + for its standard streams. + +** Changes in behavior + + ls --color: files with multiple hard links are no longer colored differently + by default. That can be enabled by changing the LS_COLORS environment + variable. You can control that using the MULTIHARDLINK dircolors input + variable which corresponds to the 'mh' LS_COLORS item. Note these variables + were renamed from 'HARDLINK' and 'hl' which were available since + coreutils-7.1 when this feature was introduced. + +** Deprecated options + + nl --page-increment: deprecated in favor of --line-increment, the new option + maintains the previous semantics and the same short option, -i. + +** New features + + chroot now accepts the options --userspec and --groups. + + cp accepts a new option, --reflink: create a lightweight copy + using copy-on-write (COW). This is currently only supported within + a btrfs file system. + + cp now preserves timestamps on symbolic links, when possible + + sort accepts a new option, --human-numeric-sort (-h): sort numbers + while honoring human readable suffixes like KiB and MB etc. + + tail --follow now uses inotify when possible, to be more responsive + to file changes and more efficient when monitoring many files. + + +* Noteworthy changes in release 7.4 (2009-05-07) [stable] + +** Bug fixes + + date -d 'next mon', when run on a Monday, now prints the date + 7 days in the future rather than the current day. Same for any other + day-of-the-week name, when run on that same day of the week. + [This bug appears to have been present in "the beginning". ] + + date -d tuesday, when run on a Tuesday -- using date built from the 7.3 + release tarball, not from git -- would print the date 7 days in the future. + Now, it works properly and prints the current date. That was due to + human error (including not-committed changes in a release tarball) + and the fact that there is no check to detect when the gnulib/ git + submodule is dirty. + +** Build-related + + make check: two tests have been corrected + +** Portability + + There have been some ACL-related portability fixes for *BSD, + inherited from gnulib. + + +* Noteworthy changes in release 7.3 (2009-05-01) [stable] + +** Bug fixes + + cp now diagnoses failure to preserve selinux/xattr attributes when + --preserve=context,xattr is specified in combination with -a. + Also, cp no longer suppresses attribute-preservation diagnostics + when preserving SELinux context was explicitly requested. + + ls now aligns output correctly in the presence of abbreviated month + names from the locale database that have differing widths. + + ls -v and sort -V now order names like "#.b#" properly + + mv: do not print diagnostics when failing to preserve xattr's on file + systems without xattr support. + + sort -m no longer segfaults when its output file is also an input file. + E.g., with this, touch 1; sort -m -o 1 1, sort would segfault. + [introduced in coreutils-7.2] + +** Changes in behavior + + shred, sort, shuf: now use an internal pseudorandom generator by default. + This is mainly noticeable in shred where the 3 random passes it does by + default should proceed at the speed of the disk. Previously /dev/urandom + was used if available, which is relatively slow on GNU/Linux systems. + +** Improved robustness + + cp would exit successfully after copying less than the full contents + of a file larger than ~4000 bytes from a linux-/proc file system to a + destination file system with a fundamental block size of 4KiB or greater. + Reading into a 4KiB-or-larger buffer, cp's "read" syscall would return + a value smaller than 4096, and cp would interpret that as EOF (POSIX + allows this). This optimization, now removed, saved 50% of cp's read + syscalls when copying small files. Affected linux kernels: at least + 2.6.9 through 2.6.29. + [the optimization was introduced in coreutils-6.0] + +** Portability + + df now pre-mounts automountable directories even with automounters for + which stat-like syscalls no longer provoke mounting. Now, df uses open. + + 'id -G $USER' now works correctly even on Darwin and NetBSD. Previously it + would either truncate the group list to 10, or go into an infinite loop, + due to their non-standard getgrouplist implementations. + [truncation introduced in coreutils-6.11] + [infinite loop introduced in coreutils-7.1] + + +* Noteworthy changes in release 7.2 (2009-03-31) [stable] + +** New features + + pwd now accepts the options --logical (-L) and --physical (-P). For + compatibility with existing scripts, -P is the default behavior + unless POSIXLY_CORRECT is requested. + +** Bug fixes + + cat once again immediately outputs data it has processed. + Previously it would have been buffered and only output if enough + data was read, or on process exit. + [bug introduced in coreutils-6.0] + + comm's new --check-order option would fail to detect disorder on any pair + of lines where one was a prefix of the other. For example, this would + fail to report the disorder: printf 'Xb\nX\n'>k; comm --check-order k k + [bug introduced in coreutils-7.0] + + cp once again diagnoses the invalid "cp -rl dir dir" right away, + rather than after creating a very deep dir/dir/dir/... hierarchy. + The bug strikes only with both --recursive (-r, -R) and --link (-l). + [bug introduced in coreutils-7.1] + + ls --sort=version (-v) sorted names beginning with "." inconsistently. + Now, names that start with "." are always listed before those that don't. + + pr: fix the bug whereby --indent=N (-o) did not indent header lines + [bug introduced in coreutils-6.9.90] + + sort now handles specified key ends correctly. + Previously -k1,1b would have caused leading space from field 2 to be + included in the sort while -k2,3.0 would have not included field 3. + +** Changes in behavior + + cat,cp,install,mv,split: these programs now read and write a minimum + of 32KiB at a time. This was seen to double throughput when reading + cached files on GNU/Linux-based systems. + + cp -a now tries to preserve extended attributes (xattr), but does not + diagnose xattr-preservation failure. However, cp --preserve=all still does. + + ls --color: hard link highlighting can be now disabled by changing the + LS_COLORS environment variable. To disable it you can add something like + this to your profile: eval `dircolors | sed s/hl=[^:]*:/hl=:/` + + +* Noteworthy changes in release 7.1 (2009-02-21) [stable] + +** New features + + Add extended attribute support available on certain filesystems like ext2 + and XFS. + cp: Tries to copy xattrs when --preserve=xattr or --preserve=all specified + mv: Always tries to copy xattrs + install: Never copies xattrs + + cp and mv accept a new option, --no-clobber (-n): silently refrain + from overwriting any existing destination file + + dd accepts iflag=cio and oflag=cio to open the file in CIO (concurrent I/O) + mode where this feature is available. + + install accepts a new option, --compare (-C): compare each pair of source + and destination files, and if the destination has identical content and + any specified owner, group, permissions, and possibly SELinux context, then + do not modify the destination at all. + + ls --color now highlights hard linked files, too + + stat -f recognizes the Lustre file system type + +** Bug fixes + + chgrp, chmod, chown --silent (--quiet, -f) no longer print some diagnostics + [bug introduced in coreutils-5.1] + + cp uses much less memory in some situations + + cp -a now correctly tries to preserve SELinux context (announced in 6.9.90), + doesn't inform about failure, unlike with --preserve=all + + du --files0-from=FILE no longer reads all of FILE into RAM before + processing the first file name + + seq 9223372036854775807 9223372036854775808 now prints only two numbers + on systems with extended long double support and good library support. + Even with this patch, on some systems, it still produces invalid output, + from 3 to at least 1026 lines long. [bug introduced in coreutils-6.11] + + seq -w now accounts for a decimal point added to the last number + to correctly print all numbers to the same width. + + wc --files0-from=FILE no longer reads all of FILE into RAM, before + processing the first file name, unless the list of names is known + to be small enough. + +** Changes in behavior + + cp and mv: the --reply={yes,no,query} option has been removed. + Using it has elicited a warning for the last three years. + + dd: user specified offsets that are too big are handled better. + Previously, erroneous parameters to skip and seek could result + in redundant reading of the file with no warnings or errors. + + du: -H (initially equivalent to --si) is now equivalent to + --dereference-args, and thus works as POSIX requires + + shred: now does 3 overwrite passes by default rather than 25. + + ls -l now marks SELinux-only files with the less obtrusive '.', + rather than '+'. A file with any other combination of MAC and ACL + is still marked with a '+'. + + +* Noteworthy changes in release 7.0 (2008-10-05) [beta] + +** New programs + + timeout: Run a command with bounded time. + truncate: Set the size of a file to a specified size. + +** New features + + chgrp, chmod, chown, chcon, du, rm: now all display linear performance, + even when operating on million-entry directories on ext3 and ext4 file + systems. Before, they would exhibit O(N^2) performance, due to linear + per-entry seek time cost when operating on entries in readdir order. + Rm was improved directly, while the others inherit the improvement + from the newer version of fts in gnulib. + + comm now verifies that the inputs are in sorted order. This check can + be turned off with the --nocheck-order option. + + comm accepts new option, --output-delimiter=STR, that allows specification + of an output delimiter other than the default single TAB. + + cp and mv: the deprecated --reply=X option is now also undocumented. + + dd accepts iflag=fullblock to make it accumulate full input blocks. + With this new option, after a short read, dd repeatedly calls read, + until it fills the incomplete block, reaches EOF, or encounters an error. + + df accepts a new option --total, which produces a grand total of all + arguments after all arguments have been processed. + + If the GNU MP library is available at configure time, factor and + expr support arbitrarily large numbers. Pollard's rho algorithm is + used to factor large numbers. + + install accepts a new option --strip-program to specify the program used to + strip binaries. + + ls now colorizes files with capabilities if libcap is available + + ls -v now uses filevercmp function as sort predicate (instead of strverscmp) + + md5sum now accepts the new option, --quiet, to suppress the printing of + 'OK' messages. sha1sum, sha224sum, sha384sum, and sha512sum accept it, too. + + sort accepts a new option, --files0-from=F, that specifies a file + containing a null-separated list of files to sort. This list is used + instead of filenames passed on the command-line to avoid problems with + maximum command-line (argv) length. + + sort accepts a new option --batch-size=NMERGE, where NMERGE + represents the maximum number of inputs that will be merged at once. + When processing more than NMERGE inputs, sort uses temporary files. + + sort accepts a new option --version-sort (-V, --sort=version), + specifying that ordering is to be based on filevercmp. + +** Bug fixes + + chcon --verbose now prints a newline after each message + + od no longer suffers from platform bugs in printf(3). This is + probably most noticeable when using 'od -tfL' to print long doubles. + + seq -0.1 0.1 2 now prints 2,0 when locale's decimal point is ",". + Before, it would mistakenly omit the final number in that example. + + shuf honors the --zero-terminated (-z) option, even with --input-range=LO-HI + + shuf --head-count is now correctly documented. The documentation + previously claimed it was called --head-lines. + +** Improvements + + Improved support for access control lists (ACLs): On MacOS X, Solaris 7..10, + HP-UX 11, Tru64, AIX, IRIX 6.5, and Cygwin, "ls -l" now displays the presence + of an ACL on a file via a '+' sign after the mode, and "cp -p" copies ACLs. + + join has significantly better performance due to better memory management + + ls now uses constant memory when not sorting and using one_per_line format, + no matter how many files are in a given directory. I.e., to list a directory + with very many files, ls -1U is much more efficient. + + od now aligns fields across lines when printing multiple -t + specifiers, and no longer prints fields that resulted entirely from + padding the input out to the least common multiple width. + +** Changes in behavior + + stat's --context (-Z) option has always been a no-op. + Now it evokes a warning that it is obsolete and will be removed. + + +* Noteworthy changes in release 6.12 (2008-05-31) [stable] + +** New features + + cp, install, mv, and touch now preserve nanosecond resolution on + file timestamps, on platforms that have the 'utimensat' and + 'futimens' system calls. + +** Bug fixes + + chcon, runcon: --help output now includes the bug-reporting address + + cp -p copies permissions more portably. For example, on MacOS X 10.5, + "cp -p some-fifo some-file" no longer fails while trying to copy the + permissions from the some-fifo argument. + + id with no options now prints the SELinux context only when invoked + with no USERNAME argument. + + id and groups once again print the AFS-specific nameless group-ID (PAG). + Printing of such large-numbered, kernel-only (not in /etc/group) group-IDs + was suppressed in 6.11 due to ignorance that they are useful. + + uniq: avoid subtle field-skipping malfunction due to isblank misuse. + In some locales on some systems, isblank(240) (aka  ) is nonzero. + On such systems, uniq --skip-fields=N would fail to skip the proper + number of fields for some inputs. + + tac: avoid segfault with --regex (-r) and multiple files, e.g., + "echo > x; tac -r x x". [bug present at least in textutils-1.8b, from 1992] + +** Changes in behavior + + install once again sets SELinux context, when possible + [it was deliberately disabled in 6.9.90] + + +* Noteworthy changes in release 6.11 (2008-04-19) [stable] + +** Bug fixes + + configure --enable-no-install-program=groups now works. + + "cp -fR fifo E" now succeeds with an existing E. Before this fix, using + -fR to copy a fifo or "special" file onto an existing file would fail + with EEXIST. Now, it once again unlinks the destination before trying + to create the destination file. [bug introduced in coreutils-5.90] + + dd once again works with unnecessary options like if=/dev/stdin and + of=/dev/stdout. [bug introduced in fileutils-4.0h] + + id now uses getgrouplist, when possible. This results in + much better performance when there are many users and/or groups. + + ls no longer segfaults on files in /proc when linked with an older version + of libselinux. E.g., ls -l /proc/sys would dereference a NULL pointer. + + md5sum would segfault for invalid BSD-style input, e.g., + echo 'MD5 (' | md5sum -c - Now, md5sum ignores that line. + sha1sum, sha224sum, sha384sum, and sha512sum are affected, too. + [bug introduced in coreutils-5.1.0] + + md5sum -c would accept a NUL-containing checksum string like "abcd\0..." + and would unnecessarily read and compute the checksum of the named file, + and then compare that checksum to the invalid one: guaranteed to fail. + Now, it recognizes that the line is not valid and skips it. + sha1sum, sha224sum, sha384sum, and sha512sum are affected, too. + [bug present in the original version, in coreutils-4.5.1, 1995] + + "mkdir -Z x dir" no longer segfaults when diagnosing invalid context "x" + mkfifo and mknod would fail similarly. Now they're fixed. + + mv would mistakenly unlink a destination file before calling rename, + when the destination had two or more hard links. It no longer does that. + [bug introduced in coreutils-5.3.0] + + "paste -d'\' file" no longer overruns memory (heap since coreutils-5.1.2, + stack before then) [bug present in the original version, in 1992] + + "pr -e" with a mix of backspaces and TABs no longer corrupts the heap + [bug present in the original version, in 1992] + + "ptx -F'\' long-file-name" would overrun a malloc'd buffer and corrupt + the heap. That was triggered by a lone backslash (or odd number of them) + at the end of the option argument to --flag-truncation=STRING (-F), + --word-regexp=REGEXP (-W), or --sentence-regexp=REGEXP (-S). + + "rm -r DIR" would mistakenly declare to be "write protected" -- and + prompt about -- full DIR-relative names longer than MIN (PATH_MAX, 8192). + + "rmdir --ignore-fail-on-non-empty" detects and ignores the failure + in more cases when a directory is empty. + + "seq -f % 1" would issue the erroneous diagnostic "seq: memory exhausted" + rather than reporting the invalid string format. + [bug introduced in coreutils-6.0] + +** New features + + join now verifies that the inputs are in sorted order. This check can + be turned off with the --nocheck-order option. + + sort accepts the new option --sort=WORD, where WORD can be one of + general-numeric, month, numeric or random. These are equivalent to the + options --general-numeric-sort/-g, --month-sort/-M, --numeric-sort/-n + and --random-sort/-R, resp. + +** Improvements + + id and groups work around an AFS-related bug whereby those programs + would print an invalid group number, when given no user-name argument. + + ls --color no longer outputs unnecessary escape sequences + + seq gives better diagnostics for invalid formats. + +** Portability + + rm now works properly even on systems like BeOS and Haiku, + which have negative errno values. + +** Consistency + + install, mkdir, rmdir and split now write --verbose output to stdout, + not to stderr. + + +* Noteworthy changes in release 6.10 (2008-01-22) [stable] + +** Bug fixes + + Fix a non-portable use of sed in configure.ac. + [bug introduced in coreutils-6.9.92] + + +* Noteworthy changes in release 6.9.92 (2008-01-12) [beta] + +** Bug fixes + + cp --parents no longer uses uninitialized memory when restoring the + permissions of a just-created destination directory. + [bug introduced in coreutils-6.9.90] + + tr's case conversion would fail in a locale with differing numbers + of lower case and upper case characters. E.g., this would fail: + env LC_CTYPE=en_US.ISO-8859-1 tr '[:upper:]' '[:lower:]' + [bug introduced in coreutils-6.9.90] + +** Improvements + + "touch -d now writable-but-owned-by-someone-else" now succeeds + whenever that same command would succeed without "-d now". + Before, it would work fine with no -d option, yet it would + fail with the ostensibly-equivalent "-d now". + + +* Noteworthy changes in release 6.9.91 (2007-12-15) [beta] + +** Bug fixes + + "ls -l" would not output "+" on SELinux hosts unless -Z was also given. + + "rm" would fail to unlink a non-directory when run in an environment + in which the user running rm is capable of unlinking a directory. + [bug introduced in coreutils-6.9] + + +* Noteworthy changes in release 6.9.90 (2007-12-01) [beta] + +** New programs + + arch: equivalent to uname -m, not installed by default + But don't install this program on Solaris systems. + + chcon: change the SELinux security context of a file + + mktemp: create a temporary file or directory (or names) + + runcon: run a program in a different SELinux security context + +** Programs no longer installed by default + + hostname, su + +** Changes in behavior + + cp, by default, refuses to copy through a dangling destination symlink + Set POSIXLY_CORRECT if you require the old, risk-prone behavior. + + pr -F no longer suppresses the footer or the first two blank lines in + the header. This is for compatibility with BSD and POSIX. + + tr now warns about an unescaped backslash at end of string. + The tr from coreutils-5.2.1 and earlier would fail for such usage, + and Solaris' tr ignores that final byte. + +** New features + + Add SELinux support, based on the patch from Fedora: + * cp accepts new --preserve=context option. + * "cp -a" works with SELinux: + Now, cp -a attempts to preserve context, but failure to do so does + not change cp's exit status. However "cp --preserve=context" is + similar, but failure *does* cause cp to exit with nonzero status. + * install accepts new "-Z, --context=C" option. + * id accepts new "-Z" option. + * stat honors the new %C format directive: SELinux security context string + * ls accepts a slightly modified -Z option. + * ls: contrary to Fedora version, does not accept --lcontext and --scontext + + The following commands and options now support the standard size + suffixes kB, M, MB, G, GB, and so on for T, P, Y, Z, and Y: + head -c, head -n, od -j, od -N, od -S, split -b, split -C, + tail -c, tail -n. + + cp -p tries to preserve the GID of a file even if preserving the UID + is not possible. + + uniq accepts a new option: --zero-terminated (-z). As with the sort + option of the same name, this makes uniq consume and produce + NUL-terminated lines rather than newline-terminated lines. + + wc no longer warns about character decoding errors in multibyte locales. + This means for example that "wc /bin/sh" now produces normal output + (though the word count will have no real meaning) rather than many + error messages. + +** New build options + + By default, "make install" no longer attempts to install (or even build) su. + To change that, use ./configure --enable-install-program=su. + If you also want to install the new "arch" program, do this: + ./configure --enable-install-program=arch,su. + + You can inhibit the compilation and installation of selected programs + at configure time. For example, to avoid installing "hostname" and + "uptime", use ./configure --enable-no-install-program=hostname,uptime + Note: currently, "make check" passes, even when arch and su are not + built (that's the new default). However, if you inhibit the building + and installation of other programs, don't be surprised if some parts + of "make check" fail. + +** Remove deprecated options + + df no longer accepts the --kilobytes option. + du no longer accepts the --kilobytes or --megabytes options. + ls no longer accepts the --kilobytes option. + ptx longer accepts the --copyright option. + who no longer accepts -i or --idle. + +** Improved robustness + + ln -f can no longer silently clobber a just-created hard link. + In some cases, ln could be seen as being responsible for data loss. + For example, given directories a, b, c, and files a/f and b/f, we + should be able to do this safely: ln -f a/f b/f c && rm -f a/f b/f + However, before this change, ln would succeed, and thus cause the + loss of the contents of a/f. + + stty no longer silently accepts certain invalid hex values + in its 35-colon command-line argument + +** Bug fixes + + chmod no longer ignores a dangling symlink. Now, chmod fails + with a diagnostic saying that it cannot operate on such a file. + [bug introduced in coreutils-5.1.0] + + cp attempts to read a regular file, even if stat says it is empty. + Before, "cp /proc/cpuinfo c" would create an empty file when the kernel + reports stat.st_size == 0, while "cat /proc/cpuinfo > c" would "work", + and create a nonempty one. [bug introduced in coreutils-6.0] + + cp --parents no longer mishandles symlinks to directories in file + name components in the source, e.g., "cp --parents symlink/a/b d" + no longer fails. Also, 'cp' no longer considers a destination + symlink to be the same as the referenced file when copying links + or making backups. For example, if SYM is a symlink to FILE, + "cp -l FILE SYM" now reports an error instead of silently doing + nothing. The behavior of 'cp' is now better documented when the + destination is a symlink. + + "cp -i --update older newer" no longer prompts; same for mv + + "cp -i" now detects read errors on standard input, and no longer consumes + too much seekable input; same for ln, install, mv, and rm. + + cut now diagnoses a range starting with zero (e.g., -f 0-2) as invalid; + before, it would treat it as if it started with 1 (-f 1-2). + + "cut -f 2-0" now fails; before, it was equivalent to "cut -f 2-" + + cut now diagnoses the '-' in "cut -f -" as an invalid range, rather + than interpreting it as the unlimited range, "1-". + + date -d now accepts strings of the form e.g., 'YYYYMMDD +N days', + in addition to the usual 'YYYYMMDD N days'. + + du -s now includes the size of any stat'able-but-inaccessible directory + in the total size. + + du (without -s) prints whatever it knows of the size of an inaccessible + directory. Before, du would print nothing for such a directory. + + ls -x DIR would sometimes output the wrong string in place of the + first entry. [introduced in coreutils-6.8] + + ls --color would mistakenly color a dangling symlink as if it were + a regular symlink. This would happen only when the dangling symlink + was not a command-line argument and in a directory with d_type support. + [introduced in coreutils-6.0] + + ls --color, (with a custom LS_COLORS envvar value including the + ln=target attribute) would mistakenly output the string "target" + before the name of each symlink. [introduced in coreutils-6.0] + + od's --skip (-j) option now works even when the kernel says that a + nonempty regular file has stat.st_size = 0. This happens at least + with files in /proc and linux-2.6.22. + + "od -j L FILE" had a bug: when the number of bytes to skip, L, is exactly + the same as the length of FILE, od would skip *no* bytes. When the number + of bytes to skip is exactly the sum of the lengths of the first N files, + od would skip only the first N-1 files. [introduced in textutils-2.0.9] + + ./printf %.10000000f 1 could get an internal ENOMEM error and generate + no output, yet erroneously exit with status 0. Now it diagnoses the error + and exits with nonzero status. [present in initial implementation] + + seq no longer mishandles obvious cases like "seq 0 0.000001 0.000003", + so workarounds like "seq 0 0.000001 0.0000031" are no longer needed. + + seq would mistakenly reject some valid format strings containing %%, + and would mistakenly accept some invalid ones. e.g., %g%% and %%g, resp. + + "seq .1 .1" would mistakenly generate no output on some systems + + Obsolete sort usage with an invalid ordering-option character, e.g., + "env _POSIX2_VERSION=199209 sort +1x" no longer makes sort free an + invalid pointer [introduced in coreutils-6.5] + + sorting very long lines (relative to the amount of available memory) + no longer provokes unaligned memory access + + split --line-bytes=N (-C N) no longer creates an empty file + [this bug is present at least as far back as textutils-1.22 (Jan, 1997)] + + tr -c no longer aborts when translating with Set2 larger than the + complement of Set1. [present in the original version, in 1992] + + tr no longer rejects an unmatched [:lower:] or [:upper:] in SET1. + [present in the original version] + + +* Noteworthy changes in release 6.9 (2007-03-22) [stable] + +** Bug fixes + + cp -x (--one-file-system) would fail to set mount point permissions + + The default block size and output format for df -P are now unaffected by + the DF_BLOCK_SIZE, BLOCK_SIZE, and BLOCKSIZE environment variables. It + is still affected by POSIXLY_CORRECT, though. + + Using pr -m -s (i.e., merging files, with TAB as the output separator) + no longer inserts extraneous spaces between output columns. + +* Noteworthy changes in release 6.8 (2007-02-24) [not-unstable] + +** Bug fixes + + chgrp, chmod, and chown now honor the --preserve-root option. + Before, they would warn, yet continuing traversing and operating on /. + + chmod no longer fails in an environment (e.g., a chroot) with openat + support but with insufficient /proc support. + + "cp --parents F/G D" no longer creates a directory D/F when F is not + a directory (and F/G is therefore invalid). + + "cp --preserve=mode" would create directories that briefly had + too-generous permissions in some cases. For example, when copying a + directory with permissions 777 the destination directory might + temporarily be setgid on some file systems, which would allow other + users to create subfiles with the same group as the directory. Fix + similar problems with 'install' and 'mv'. + + cut no longer dumps core for usage like "cut -f2- f1 f2" with two or + more file arguments. This was due to a double-free bug, introduced + in coreutils-5.3.0. + + dd bs= operands now silently override any later ibs= and obs= + operands, as POSIX and tradition require. + + "ls -FRL" always follows symbolic links on Linux. Introduced in + coreutils-6.0. + + A cross-partition "mv /etc/passwd ~" (by non-root) now prints + a reasonable diagnostic. Before, it would print this: + "mv: cannot remove `/etc/passwd': Not a directory". + + pwd and "readlink -e ." no longer fail unnecessarily when a parent + directory is unreadable. + + rm (without -f) could prompt when it shouldn't, or fail to prompt + when it should, when operating on a full name longer than 511 bytes + and getting an ENOMEM error while trying to form the long name. + + rm could mistakenly traverse into the wrong directory under unusual + conditions: when a full name longer than 511 bytes specifies a search-only + directory, and when forming that name fails with ENOMEM, rm would attempt + to open a truncated-to-511-byte name with the first five bytes replaced + with "[...]". If such a directory were to actually exist, rm would attempt + to remove it. + + "rm -rf /etc/passwd" (run by non-root) now prints a diagnostic. + Before it would print nothing. + + "rm --interactive=never F" no longer prompts for an unwritable F + + "rm -rf D" would emit a misleading diagnostic when failing to + remove a symbolic link within the unwritable directory, D. + Introduced in coreutils-6.0. Similarly, when a cross-partition + "mv" fails because the source directory is unwritable, it now gives + a reasonable diagnostic. Before, this would print + $ mkdir /tmp/x; touch /tmp/x/y; chmod -w /tmp/x; + $ test $(stat -c %d /tmp/x) -ne $(stat -c %d .) && mv /tmp/x/y . + mv: cannot remove `/tmp/x/y': Not a directory + Now it prints this: + mv: cannot remove `/tmp/x/y': Permission denied. + +** New features + + sort's new --compress-program=PROG option specifies a compression + program to use when writing and reading temporary files. + This can help save both time and disk space when sorting large inputs. + + sort accepts the new option -C, which acts like -c except no diagnostic + is printed. Its --check option now accepts an optional argument, and + --check=quiet and --check=silent are now aliases for -C, while + --check=diagnose-first is an alias for -c or plain --check. + + +* Noteworthy changes in release 6.7 (2006-12-08) [stable] + +** Bug fixes + + When cp -p copied a file with special mode bits set, the same bits + were set on the copy even when ownership could not be preserved. + This could result in files that were setuid to the wrong user. + To fix this, special mode bits are now set in the copy only if its + ownership is successfully preserved. Similar problems were fixed + with mv when copying across file system boundaries. This problem + affects all versions of coreutils through 6.6. + + cp --preserve=ownership would create output files that temporarily + had too-generous permissions in some cases. For example, when + copying a file with group A and mode 644 into a group-B sticky + directory, the output file was briefly readable by group B. + Fix similar problems with cp options like -p that imply + --preserve=ownership, with install -d when combined with either -o + or -g, and with mv when copying across file system boundaries. + This bug affects all versions of coreutils through 6.6. + + du --one-file-system (-x) would skip subdirectories of any directory + listed as second or subsequent command line argument. This bug affects + coreutils-6.4, 6.5 and 6.6. + + +* Noteworthy changes in release 6.6 (2006-11-22) [stable] + +** Bug fixes + + ls would segfault (dereference a NULL pointer) for a file with a + nameless group or owner. This bug was introduced in coreutils-6.5. + + A bug in the latest official m4/gettext.m4 (from gettext-0.15) + made configure fail to detect gettext support, due to the unusual + way in which coreutils uses AM_GNU_GETTEXT. + +** Improved robustness + + Now, du (and the other fts clients: chmod, chgrp, chown) honor a + trailing slash in the name of a symlink-to-directory even on + Solaris 9, by working around its buggy fstatat implementation. + + +* Major changes in release 6.5 (2006-11-19) [stable] + +** Bug fixes + + du (and the other fts clients: chmod, chgrp, chown) would exit early + when encountering an inaccessible directory on a system with native + openat support (i.e., linux-2.6.16 or newer along with glibc-2.4 + or newer). This bug was introduced with the switch to gnulib's + openat-based variant of fts, for coreutils-6.0. + + "ln --backup f f" now produces a sensible diagnostic + +** New features + + rm accepts a new option: --one-file-system + + +* Major changes in release 6.4 (2006-10-22) [stable] + +** Bug fixes + + chgrp and chown would malfunction when invoked with both -R and -H and + with one or more of the following: --preserve-root, --verbose, --changes, + --from=o:g (chown only). This bug was introduced with the switch to + gnulib's openat-based variant of fts, for coreutils-6.0. + + cp --backup dir1 dir2, would rename an existing dir2/dir1 to dir2/dir1~. + This bug was introduced in coreutils-6.0. + + With --force (-f), rm no longer fails for ENOTDIR. + For example, "rm -f existing-non-directory/anything" now exits + successfully, ignoring the error about a nonexistent file. + + +* Major changes in release 6.3 (2006-09-30) [stable] + +** Improved robustness + + pinky no longer segfaults on Darwin 7.9.0 (MacOS X 10.3.9) due to a + buggy native getaddrinfo function. + + rm works around a bug in Darwin 7.9.0 (MacOS X 10.3.9) that would + sometimes keep it from removing all entries in a directory on an HFS+ + or NFS-mounted partition. + + sort would fail to handle very large input (around 40GB) on systems with a + mkstemp function that returns a file descriptor limited to 32-bit offsets. + +** Bug fixes + + chmod would fail unnecessarily in an unusual case: when an initially- + inaccessible argument is rendered accessible by chmod's action on a + preceding command line argument. This bug also affects chgrp, but + it is harder to demonstrate. It does not affect chown. The bug was + introduced with the switch from explicit recursion to the use of fts + in coreutils-5.1.0 (2003-10-15). + + cp -i and mv -i occasionally neglected to prompt when the copy or move + action was bound to fail. This bug dates back to before fileutils-4.0. + + With --verbose (-v), cp and mv would sometimes generate no output, + or neglect to report file removal. + + For the "groups" command: + + "groups" no longer prefixes the output with "user :" unless more + than one user is specified; this is for compatibility with BSD. + + "groups user" now exits nonzero when it gets a write error. + + "groups" now processes options like --help more compatibly. + + shuf would infloop, given 8KB or more of piped input + +** Portability + + Versions of chmod, chown, chgrp, du, and rm (tools that use openat etc.) + compiled for Solaris 8 now also work when run on Solaris 10. + + +* Major changes in release 6.2 (2006-09-18) [stable candidate] + +** Changes in behavior + + mkdir -p and install -d (or -D) now use a method that forks a child + process if the working directory is unreadable and a later argument + uses a relative file name. This avoids some race conditions, but it + means you may need to kill two processes to stop these programs. + + rm now rejects attempts to remove the root directory, e.g., 'rm -fr /' + now fails without removing anything. Likewise for any file name with + a final './' or '../' component. + + tail now ignores the -f option if POSIXLY_CORRECT is set, no file + operand is given, and standard input is any FIFO; formerly it did + this only for pipes. + +** Infrastructure changes + + Coreutils now uses gnulib via the gnulib-tool script. + If you check the source out from CVS, then follow the instructions + in README-cvs. Although this represents a large change to the + infrastructure, it should cause no change in how the tools work. + +** Bug fixes + + cp --backup no longer fails when the last component of a source file + name is "." or "..". + + "ls --color" would highlight other-writable and sticky directories + no differently than regular directories on a file system with + dirent.d_type support. + + "mv -T --verbose --backup=t A B" now prints the " (backup: B.~1~)" + suffix when A and B are directories as well as when they are not. + + mv and "cp -r" no longer fail when invoked with two arguments + where the first one names a directory and the second name ends in + a slash and doesn't exist. E.g., "mv dir B/", for nonexistent B, + now succeeds, once more. This bug was introduced in coreutils-5.3.0. + + +* Major changes in release 6.1 (2006-08-19) [unstable] + +** Changes in behavior + + df now considers BSD "kernfs" file systems to be dummies + +** New features + + printf now supports the 'I' flag on hosts whose underlying printf + implementations support 'I', e.g., "printf %Id 2". + +** Bug fixes + + cp --sparse preserves sparseness at the end of a file, even when + the file's apparent size is not a multiple of its block size. + [introduced with the original design, in fileutils-4.0r, 2000-04-29] + + df (with a command line argument) once again prints its header + [introduced in coreutils-6.0] + + ls -CF would misalign columns in some cases involving non-stat'able files + [introduced in coreutils-6.0] + +* Major changes in release 6.0 (2006-08-15) [unstable] + +** Improved robustness + + df: if the file system claims to have more available than total blocks, + report the number of used blocks as being "total - available" + (a negative number) rather than as garbage. + + dircolors: a new autoconf run-test for AIX's buggy strndup function + prevents malfunction on that system; may also affect cut, expand, + and unexpand. + + fts no longer changes the current working directory, so its clients + (chmod, chown, chgrp, du) no longer malfunction under extreme conditions. + + pwd and other programs using lib/getcwd.c work even on file systems + where dirent.d_ino values are inconsistent with those from stat.st_ino. + + rm's core is now reentrant: rm --recursive (-r) now processes + hierarchies without changing the working directory at all. + +** Changes in behavior + + basename and dirname now treat // as different from / on platforms + where the two are distinct. + + chmod, install, and mkdir now preserve a directory's set-user-ID and + set-group-ID bits unless you explicitly request otherwise. E.g., + 'chmod 755 DIR' and 'chmod u=rwx,go=rx DIR' now preserve DIR's + set-user-ID and set-group-ID bits instead of clearing them, and + similarly for 'mkdir -m 755 DIR' and 'mkdir -m u=rwx,go=rx DIR'. To + clear the bits, mention them explicitly in a symbolic mode, e.g., + 'mkdir -m u=rwx,go=rx,-s DIR'. To set them, mention them explicitly + in either a symbolic or a numeric mode, e.g., 'mkdir -m 2755 DIR', + 'mkdir -m u=rwx,go=rx,g+s' DIR. This change is for convenience on + systems where these bits inherit from parents. Unfortunately other + operating systems are not consistent here, and portable scripts + cannot assume the bits are set, cleared, or preserved, even when the + bits are explicitly mentioned. For example, OpenBSD 3.9 'mkdir -m + 777 D' preserves D's setgid bit but 'chmod 777 D' clears it. + Conversely, Solaris 10 'mkdir -m 777 D', 'mkdir -m g-s D', and + 'chmod 0777 D' all preserve D's setgid bit, and you must use + something like 'chmod g-s D' to clear it. + + 'cp --link --no-dereference' now works also on systems where the + link system call cannot create a hard link to a symbolic link. + This change has no effect on systems with a Linux-based kernel. + + csplit and nl now use POSIX syntax for regular expressions, not + Emacs syntax. As a result, character classes like [[:print:]] and + interval expressions like A\{1,9\} now have their usual meaning, + . no longer matches the null character, and \ must precede the + and + ? operators. + + date: a command like date -d '2006-04-23 21 days ago' would print + the wrong date in some time zones. (see the test for an example) + + df changes: + + df now considers "none" and "proc" file systems to be dummies and + therefore does not normally display them. Also, inaccessible file + systems (which can be caused by shadowed mount points or by + chrooted bind mounts) are now dummies, too. + + df now fails if it generates no output, so you can inspect the + exit status of a command like "df -t ext3 -t reiserfs DIR" to test + whether DIR is on a file system of type "ext3" or "reiserfs". + + expr no longer complains about leading ^ in a regular expression + (the anchor is ignored), or about regular expressions like A** (the + second "*" is ignored). expr now exits with status 2 (not 3) for + errors it detects in the expression's values; exit status 3 is now + used only for internal errors (such as integer overflow, which expr + now checks for). + + install and mkdir now implement the X permission symbol correctly, + e.g., 'mkdir -m a+X dir'; previously the X was ignored. + + install now creates parent directories with mode u=rwx,go=rx (755) + instead of using the mode specified by the -m option; and it does + not change the owner or group of parent directories. This is for + compatibility with BSD and closes some race conditions. + + ln now uses different (and we hope clearer) diagnostics when it fails. + ln -v now acts more like FreeBSD, so it generates output only when + successful and the output is easier to parse. + + ls now defaults to --time-style='locale', not --time-style='posix-long-iso'. + However, the 'locale' time style now behaves like 'posix-long-iso' + if your locale settings appear to be messed up. This change + attempts to have the default be the best of both worlds. + + mkfifo and mknod no longer set special mode bits (setuid, setgid, + and sticky) with the -m option. + + nohup's usual diagnostic now more precisely specifies the I/O + redirections, e.g., "ignoring input and appending output to + nohup.out". Also, nohup now redirects stderr to nohup.out (or + $HOME/nohup.out) if stdout is closed and stderr is a tty; this is in + response to Open Group XCU ERN 71. + + rm --interactive now takes an optional argument, although the + default of using no argument still acts like -i. + + rm no longer fails to remove an empty, unreadable directory + + seq changes: + + seq defaults to a minimal fixed point format that does not lose + information if seq's operands are all fixed point decimal numbers. + You no longer need the '-f%.f' in 'seq -f%.f 1048575 1024 1050623', + for example, since the default format now has the same effect. + + seq now lets you use %a, %A, %E, %F, and %G formats. + + seq now uses long double internally rather than double. + + sort now reports incompatible options (e.g., -i and -n) rather than + silently ignoring one of them. + + stat's --format=FMT option now works the way it did before 5.3.0: + FMT is automatically newline terminated. The first stable release + containing this change was 5.92. + + stat accepts the new option --printf=FMT, where FMT is *not* + automatically newline terminated. + + stat: backslash escapes are interpreted in a format string specified + via --printf=FMT, but not one specified via --format=FMT. That includes + octal (\ooo, at most three octal digits), hexadecimal (\xhh, one or + two hex digits), and the standard sequences (\a, \b, \f, \n, \r, \t, + \v, \", \\). + + With no operand, 'tail -f' now silently ignores the '-f' only if + standard input is a FIFO or pipe and POSIXLY_CORRECT is set. + Formerly, it ignored the '-f' when standard input was a FIFO, pipe, + or socket. + +** Scheduled for removal + + ptx's --copyright (-C) option is scheduled for removal in 2007, and + now evokes a warning. Use --version instead. + + rm's --directory (-d) option is scheduled for removal in 2006. This + option has been silently ignored since coreutils 5.0. On systems + that support unlinking of directories, you can use the "unlink" + command to unlink a directory. + + Similarly, we are considering the removal of ln's --directory (-d, + -F) option in 2006. Please write to <bug-coreutils@gnu.org> if this + would cause a problem for you. On systems that support hard links + to directories, you can use the "link" command to create one. + +** New programs + + base64: base64 encoding and decoding (RFC 3548) functionality. + sha224sum: print or check a SHA224 (224-bit) checksum + sha256sum: print or check a SHA256 (256-bit) checksum + sha384sum: print or check a SHA384 (384-bit) checksum + sha512sum: print or check a SHA512 (512-bit) checksum + shuf: Shuffle lines of text. + +** New features + + chgrp now supports --preserve-root, --no-preserve-root (default), + as it was documented to do, and just as chmod, chown, and rm do. + + New dd iflag= and oflag= flags: + + 'directory' causes dd to fail unless the file is a directory, on + hosts that support this (e.g., Linux kernels, version 2.1.126 and + later). This has limited utility but is present for completeness. + + 'noatime' causes dd to read a file without updating its access + time, on hosts that support this (e.g., Linux kernels, version + 2.6.8 and later). + + 'nolinks' causes dd to fail if the file has multiple hard links, + on hosts that support this (e.g., Solaris 10 and later). + + ls accepts the new option --group-directories-first, to make it + list directories before files. + + rm now accepts the -I (--interactive=once) option. This new option + prompts once if rm is invoked recursively or if more than three + files are being deleted, which is less intrusive than -i prompting + for every file, but provides almost the same level of protection + against mistakes. + + shred and sort now accept the --random-source option. + + sort now accepts the --random-sort (-R) option and 'R' ordering option. + + sort now supports obsolete usages like "sort +1 -2" unless + POSIXLY_CORRECT is set. However, when conforming to POSIX + 1003.1-2001 "sort +1" still sorts the file named "+1". + + wc accepts a new option --files0-from=FILE, where FILE contains a + list of NUL-terminated file names. + +** Bug fixes + + cat with any of the options, -A -v -e -E -T, when applied to a + file in /proc or /sys (linux-specific), would truncate its output, + usually printing nothing. + + cp -p would fail in a /proc-less chroot, on some systems + + When 'cp -RL' encounters the same directory more than once in the + hierarchy beneath a single command-line argument, it no longer confuses + them with hard-linked directories. + + fts-using tools (chmod, chown, chgrp, du) no longer fail due to + a double-free bug -- it could be triggered by making a directory + inaccessible while e.g., du is traversing the hierarchy under it. + + fts-using tools (chmod, chown, chgrp, du) no longer misinterpret + a very long symlink chain as a dangling symlink. Before, such a + misinterpretation would cause these tools not to diagnose an ELOOP error. + + ls --indicator-style=file-type would sometimes stat a symlink + unnecessarily. + + ls --file-type worked like --indicator-style=slash (-p), + rather than like --indicator-style=file-type. + + mv: moving a symlink into the place of an existing non-directory is + now done atomically; before, mv would first unlink the destination. + + mv -T DIR EMPTY_DIR no longer fails unconditionally. Also, mv can + now remove an empty destination directory: mkdir -p a b/a; mv a b + + rm (on systems with openat) can no longer exit before processing + all command-line arguments. + + rm is no longer susceptible to a few low-probability memory leaks. + + rm -r no longer fails to remove an inaccessible and empty directory + + rm -r's cycle detection code can no longer be tricked into reporting + a false positive (introduced in fileutils-4.1.9). + + shred --remove FILE no longer segfaults on Gentoo systems + + sort would fail for large inputs (~50MB) on systems with a buggy + mkstemp function. sort and tac now use the replacement mkstemp + function, and hence are no longer subject to limitations (of 26 or 32, + on the maximum number of files from a given template) on HP-UX 10.20, + SunOS 4.1.4, Solaris 2.5.1 and OSF1/Tru64 V4.0F&V5.1. + + tail -f once again works on a file with the append-only + attribute (affects at least Linux ext2, ext3, xfs file systems) + +* Major changes in release 5.97 (2006-06-24) [stable] +* Major changes in release 5.96 (2006-05-22) [stable] +* Major changes in release 5.95 (2006-05-12) [stable] +* Major changes in release 5.94 (2006-02-13) [stable] + +[see the b5_9x branch for details] + +* Major changes in release 5.93 (2005-11-06) [stable] + +** Bug fixes + + dircolors no longer segfaults upon an attempt to use the new + STICKY_OTHER_WRITABLE (OWT) attribute. + + du no longer overflows a counter when processing a file larger than + 2^31-1 on some 32-bit systems (at least some AIX 5.1 configurations). + + md5sum once again defaults to using the ' ' non-binary marker + (rather than the '*' binary marker) by default on Unix-like systems. + + mkdir -p and install -d no longer exit nonzero when asked to create + a directory like 'nonexistent/.' + + rm emits a better diagnostic when (without -r) it fails to remove + a directory on e.g., Solaris 9/10 systems. + + tac now works when stdin is a tty, even on non-Linux systems. + + "tail -c 2 FILE" and "touch 0101000000" now operate as POSIX + 1003.1-2001 requires, even when coreutils is conforming to older + POSIX standards, as the newly-required behavior is upward-compatible + with the old. + + The documentation no longer mentions rm's --directory (-d) option. + +** Build-related bug fixes + + installing .mo files would fail + + +* Major changes in release 5.92 (2005-10-22) [stable] + +** Bug fixes + + chmod now diagnoses an invalid mode string starting with an octal digit + + dircolors now properly quotes single-quote characters + + +* Major changes in release 5.91 (2005-10-17) [stable candidate] + +** Bug fixes + + "mkdir -p /a/b/c" no longer fails merely because a leading prefix + directory (e.g., /a or /a/b) exists on a read-only file system. + +** Removed options + + tail's --allow-missing option has been removed. Use --retry instead. + + stat's --link and -l options have been removed. + Use --dereference (-L) instead. + +** Deprecated options + + Using ls, du, or df with the --kilobytes option now evokes a warning + that the long-named option is deprecated. Use '-k' instead. + + du's long-named --megabytes option now evokes a warning. + Use -m instead. + + +* Major changes in release 5.90 (2005-09-29) [unstable] + +** Bring back support for 'head -NUM', 'tail -NUM', etc. even when + conforming to POSIX 1003.1-2001. The following changes apply only + when conforming to POSIX 1003.1-2001; there is no effect when + conforming to older POSIX versions. + + The following usages now behave just as when conforming to older POSIX: + + date -I + expand -TAB1[,TAB2,...] + fold -WIDTH + head -NUM + join -j FIELD + join -j1 FIELD + join -j2 FIELD + join -o FIELD_NAME1 FIELD_NAME2... + nice -NUM + od -w + pr -S + split -NUM + tail -[NUM][bcl][f] [FILE] + + The following usages no longer work, due to the above changes: + + date -I TIMESPEC (use 'date -ITIMESPEC' instead) + od -w WIDTH (use 'od -wWIDTH' instead) + pr -S STRING (use 'pr -SSTRING' instead) + + A few usages still have behavior that depends on which POSIX standard is + being conformed to, and portable applications should beware these + problematic usages. These include: + + Problematic Standard-conforming replacement, depending on + usage whether you prefer the behavior of: + POSIX 1003.2-1992 POSIX 1003.1-2001 + sort +4 sort -k 5 sort ./+4 + tail +4 tail -n +4 tail ./+4 + tail - f tail f [see (*) below] + tail -c 4 tail -c 10 ./4 tail -c4 + touch 12312359 f touch -t 12312359 f touch ./12312359 f + uniq +4 uniq -s 4 uniq ./+4 + + (*) "tail - f" does not conform to POSIX 1003.1-2001; to read + standard input and then "f", use the command "tail -- - f". + + These changes are in response to decisions taken in the January 2005 + Austin Group standardization meeting. For more details, please see + "Utility Syntax Guidelines" in the Minutes of the January 2005 + Meeting <https://www.opengroup.org/austin/docs/austin_239.html>. + +** Binary input and output are now implemented more consistently. + These changes affect only platforms like MS-DOS that distinguish + between binary and text files. + + The following programs now always use text input/output: + + expand unexpand + + The following programs now always use binary input/output to copy data: + + cp install mv shred + + The following programs now always use binary input/output to copy + data, except for stdin and stdout when it is a terminal. + + head tac tail tee tr + (cat behaves similarly, unless one of the options -bensAE is used.) + + cat's --binary or -B option has been removed. It existed only on + MS-DOS-like platforms, and didn't work as documented there. + + md5sum and sha1sum now obey the -b or --binary option, even if + standard input is a terminal, and they no longer report files to be + binary if they actually read them in text mode. + +** Changes for better conformance to POSIX + + cp, ln, mv, rm changes: + + Leading white space is now significant in responses to yes-or-no questions. + For example, if "rm" asks "remove regular file `foo'?" and you respond + with " y" (i.e., space before "y"), it counts as "no". + + dd changes: + + On a QUIT or PIPE signal, dd now exits without printing statistics. + + On hosts lacking the INFO signal, dd no longer treats the USR1 + signal as if it were INFO when POSIXLY_CORRECT is set. + + If the file F is non-seekable and contains fewer than N blocks, + then before copying "dd seek=N of=F" now extends F with zeroed + blocks until F contains N blocks. + + fold changes: + + When POSIXLY_CORRECT is set, "fold file -3" is now equivalent to + "fold file ./-3", not the obviously-erroneous "fold file ./-w3". + + ls changes: + + -p now marks only directories; it is equivalent to the new option + --indicator-style=slash. Use --file-type or + --indicator-style=file-type to get -p's old behavior. + + nice changes: + + Documentation and diagnostics now refer to "nicenesses" (commonly + in the range -20...19) rather than "nice values" (commonly 0...39). + + nohup changes: + + nohup now ignores the umask when creating nohup.out. + + nohup now closes stderr if it is a terminal and stdout is closed. + + nohup now exits with status 127 (not 1) when given an invalid option. + + pathchk changes: + + It now rejects the empty name in the normal case. That is, + "pathchk -p ''" now fails, and "pathchk ''" fails unless the + current host (contra POSIX) allows empty file names. + + The new -P option checks whether a file name component has leading "-", + as suggested in interpretation "Austin-039:XCU:pathchk:pathchk -p" + <https://collaboration.opengroup.org/austin/interps/documents.php?action=show&gdid=6232>. + It also rejects the empty name even if the current host accepts it; see + <https://collaboration.opengroup.org/austin/interps/documents.php?action=show&gdid=6233>. + + The --portability option is now equivalent to -p -P. + +** Bug fixes + + chmod, mkdir, mkfifo, and mknod formerly mishandled rarely-used symbolic + permissions like =xX and =u, and did not properly diagnose some invalid + strings like g+gr, ug,+x, and +1. These bugs have been fixed. + + csplit could produce corrupt output, given input lines longer than 8KB + + dd now computes statistics using a realtime clock (if available) + rather than the time-of-day clock, to avoid glitches if the + time-of-day is changed while dd is running. Also, it avoids + using unsafe code in signal handlers; this fixes some core dumps. + + expr and test now correctly compare integers of unlimited magnitude. + + expr now detects integer overflow when converting strings to integers, + rather than silently wrapping around. + + ls now refuses to generate timestamps containing more than 1000 bytes, to + foil potential denial-of-service attacks on hosts with very large stacks. + + "mkdir -m =+x dir" no longer ignores the umask when evaluating "+x", + and similarly for mkfifo and mknod. + + "mkdir -p /tmp/a/b dir" no longer attempts to create the '.'-relative + directory, dir (in /tmp/a), when, after creating /tmp/a/b, it is unable + to return to its initial working directory. Similarly for "install -D + file /tmp/a/b/file". + + "pr -D FORMAT" now accepts the same formats that "date +FORMAT" does. + + stat now exits nonzero if a file operand does not exist + +** Improved robustness + + Date no longer needs to allocate virtual memory to do its job, + so it can no longer fail due to an out-of-memory condition, + no matter how large the result. + +** Improved portability + + hostid now prints exactly 8 hexadecimal digits, possibly with leading zeros, + and without any spurious leading "fff..." on 64-bit hosts. + + nice now works on Darwin 7.7.0 in spite of its invalid definition of NZERO. + + 'rm -r' can remove all entries in a directory even when it is on a + file system for which readdir is buggy and that was not checked by + coreutils' old configure-time run-test. + + sleep no longer fails when resumed after being suspended on linux-2.6.8.1, + in spite of that kernel's buggy nanosleep implementation. + +** New features + + chmod -w now complains if its behavior differs from what chmod a-w + would do, and similarly for chmod -r, chmod -x, etc. + + cp and mv: the --reply=X option is deprecated + + date accepts the new option --rfc-3339=TIMESPEC. The old --iso-8601 (-I) + option is deprecated; it still works, but new applications should avoid it. + date, du, ls, and pr's time formats now support new %:z, %::z, %:::z + specifiers for numeric time zone offsets like -07:00, -07:00:00, and -07. + + dd has new iflag= and oflag= flags "binary" and "text", which have an + effect only on nonstandard platforms that distinguish text from binary I/O. + + dircolors now supports SETUID, SETGID, STICKY_OTHER_WRITABLE, + OTHER_WRITABLE, and STICKY, with ls providing default colors for these + categories if not specified by dircolors. + + du accepts new options: --time[=TYPE] and --time-style=STYLE + + join now supports a NUL field separator, e.g., "join -t '\0'". + join now detects and reports incompatible options, e.g., "join -t x -t y", + + ls no longer outputs an extra space between the mode and the link count + when none of the listed files has an ACL. + + md5sum --check now accepts multiple input files, and similarly for sha1sum. + + If stdin is a terminal, nohup now redirects it from /dev/null to + prevent the command from tying up an OpenSSH session after you logout. + + "rm -FOO" now suggests "rm ./-FOO" if the file "-FOO" exists and + "-FOO" is not a valid option. + + stat -f -c %S outputs the fundamental block size (used for block counts). + stat -f's default output format has been changed to output this size as well. + stat -f recognizes file systems of type XFS and JFS + + "touch -" now touches standard output, not a file named "-". + + uname -a no longer generates the -p and -i outputs if they are unknown. + +* Major changes in release 5.3.0 (2005-01-08) [unstable] + +** Bug fixes + + Several fixes to chgrp and chown for compatibility with POSIX and BSD: + + Do not affect symbolic links by default. + Now, operate on whatever a symbolic link points to, instead. + To get the old behavior, use --no-dereference (-h). + + --dereference now works, even when the specified owner + and/or group match those of an affected symlink. + + Check for incompatible options. When -R and --dereference are + both used, then either -H or -L must also be used. When -R and -h + are both used, then -P must be in effect. + + -H, -L, and -P have no effect unless -R is also specified. + If -P and -R are both specified, -h is assumed. + + Do not optimize away the chown() system call when the file's owner + and group already have the desired value. This optimization was + incorrect, as it failed to update the last-changed time and reset + special permission bits, as POSIX requires. + + "chown : file", "chown '' file", and "chgrp '' file" now succeed + without changing the uid or gid, instead of reporting an error. + + Do not report an error if the owner or group of a + recursively-encountered symbolic link cannot be updated because + the file system does not support it. + + chmod now accepts multiple mode-like options, e.g., "chmod -r -w f". + + chown is no longer subject to a race condition vulnerability, when + used with --from=O:G and without the (-h) --no-dereference option. + + cut's --output-delimiter=D option works with abutting byte ranges. + + dircolors's documentation now recommends that shell scripts eval + "`dircolors`" rather than `dircolors`, to avoid shell expansion pitfalls. + + du no longer segfaults when a subdirectory of an operand + directory is removed while du is traversing that subdirectory. + Since the bug was in the underlying fts.c module, it also affected + chown, chmod, and chgrp. + + du's --exclude-from=FILE and --exclude=P options now compare patterns + against the entire name of each file, rather than against just the + final component. + + echo now conforms to POSIX better. It supports the \0ooo syntax for + octal escapes, and \c now terminates printing immediately. If + POSIXLY_CORRECT is set and the first argument is not "-n", echo now + outputs all option-like arguments instead of treating them as options. + + expand and unexpand now conform to POSIX better. They check for + blanks (which can include characters other than space and tab in + non-POSIX locales) instead of spaces and tabs. Unexpand now + preserves some blanks instead of converting them to tabs or spaces. + + "ln x d/" now reports an error if d/x is a directory and x a file, + instead of incorrectly creating a link to d/x/x. + + ls no longer segfaults on systems for which SIZE_MAX != (size_t) -1. + + md5sum and sha1sum now report an error when given so many input + lines that their line counter overflows, instead of silently + reporting incorrect results. + + Fixes for "nice": + + If it fails to lower the niceness due to lack of permissions, + it goes ahead and runs the command anyway, as POSIX requires. + + It no longer incorrectly reports an error if the current niceness + happens to be -1. + + It no longer assumes that nicenesses range from -20 through 19. + + It now consistently adjusts out-of-range nicenesses to the + closest values in range; formerly it sometimes reported an error. + + pathchk no longer accepts trailing options, e.g., "pathchk -p foo -b" + now treats -b as a file name to check, not as an invalid option. + + 'pr --columns=N' was not equivalent to 'pr -N' when also using + either -s or -w. + + pr now supports page numbers up to 2**64 on most hosts, and it + detects page number overflow instead of silently wrapping around. + pr now accepts file names that begin with "+" so long as the rest of + the file name does not look like a page range. + + printf has several changes: + + It now uses 'intmax_t' (not 'long int') to format integers, so it + can now format 64-bit integers on most modern hosts. + + On modern hosts it now supports the C99-inspired %a, %A, %F conversion + specs, the "'" and "0" flags, and the ll, j, t, and z length modifiers + (this is compatible with recent Bash versions). + + The printf command now rejects invalid conversion specifications + like %#d, instead of relying on undefined behavior in the underlying + printf function. + + ptx now diagnoses invalid values for its --width=N (-w) + and --gap-size=N (-g) options. + + mv (when moving between partitions) no longer fails when + operating on too many command-line-specified nonempty directories. + + "readlink -f" is more compatible with prior implementations + + rm (without -f) no longer hangs when attempting to remove a symlink + to a file on an off-line NFS-mounted partition. + + rm no longer gets a failed assertion under some unusual conditions. + + rm no longer requires read access to the current directory. + + "rm -r" would mistakenly fail to remove files under a directory + for some types of errors (e.g., read-only file system, I/O error) + when first encountering the directory. + + "sort" fixes: + + "sort -o -" now writes to a file named "-" instead of to standard + output; POSIX requires this. + + An unlikely race condition has been fixed where "sort" could have + mistakenly removed a temporary file belonging to some other process. + + "sort" no longer has O(N**2) behavior when it creates many temporary files. + + tac can now handle regular, nonseekable files like Linux's + /proc/modules. Before, it would produce no output for such a file. + + tac would exit immediately upon I/O or temp-file creation failure. + Now it continues on, processing any remaining command line arguments. + + "tail -f" no longer mishandles pipes and fifos. With no operands, + tail now ignores -f if standard input is a pipe, as POSIX requires. + When conforming to POSIX 1003.2-1992, tail now supports the SUSv2 b + modifier (e.g., "tail -10b file") and it handles some obscure cases + more correctly, e.g., "tail +cl" now reads the file "+cl" rather + than reporting an error, "tail -c file" no longer reports an error, + and "tail - file" no longer reads standard input. + + tee now exits when it gets a SIGPIPE signal, as POSIX requires. + To get tee's old behavior, use the shell command "(trap '' PIPE; tee)". + Also, "tee -" now writes to standard output instead of to a file named "-". + + "touch -- MMDDhhmm[yy] file" is now equivalent to + "touch MMDDhhmm[yy] file" even when conforming to pre-2001 POSIX. + + tr no longer mishandles a second operand with leading "-". + + who now prints user names in full instead of truncating them after 8 bytes. + + The following commands now reject unknown options instead of + accepting them as operands, so that users are properly warned that + options may be added later. Formerly they accepted unknown options + as operands; e.g., "basename -a a" acted like "basename -- -a a". + + basename dirname factor hostname link nohup sync unlink yes + +** New features + + For efficiency, 'sort -m' no longer copies input to a temporary file + merely because the input happens to come from a pipe. As a result, + some relatively-contrived examples like 'cat F | sort -m -o F - G' + are no longer safe, as 'sort' might start writing F before 'cat' is + done reading it. This problem cannot occur unless '-m' is used. + + When outside the default POSIX locale, the 'who' and 'pinky' + commands now output timestamps like "2004-06-21 13:09" instead of + the traditional "Jun 21 13:09". + + pwd now works even when run from a working directory whose name + is longer than PATH_MAX. + + cp, install, ln, and mv have a new --no-target-directory (-T) option, + and -t is now a short name for their --target-directory option. + + cp -pu and mv -u (when copying) now don't bother to update the + destination if the resulting timestamp would be no newer than the + preexisting timestamp. This saves work in the common case when + copying or moving multiple times to the same destination in a file + system with a coarse timestamp resolution. + + cut accepts a new option, --complement, to complement the set of + selected bytes, characters, or fields. + + dd now also prints the number of bytes transferred, the time, and the + transfer rate. The new "status=noxfer" operand suppresses this change. + + dd has new conversions for the conv= option: + + nocreat do not create the output file + excl fail if the output file already exists + fdatasync physically write output file data before finishing + fsync likewise, but also write metadata + + dd has new iflag= and oflag= options with the following flags: + + append append mode (makes sense for output file only) + direct use direct I/O for data + dsync use synchronized I/O for data + sync likewise, but also for metadata + nonblock use non-blocking I/O + nofollow do not follow symlinks + noctty do not assign controlling terminal from file + + stty now provides support (iutf8) for setting UTF-8 input mode. + + With stat, a specified format is no longer automatically newline terminated. + If you want a newline at the end of your output, append '\n' to the format + string. + + 'df', 'du', and 'ls' now take the default block size from the + BLOCKSIZE environment variable if the BLOCK_SIZE, DF_BLOCK_SIZE, + DU_BLOCK_SIZE, and LS_BLOCK_SIZE environment variables are not set. + Unlike the other variables, though, BLOCKSIZE does not affect + values like 'ls -l' sizes that are normally displayed as bytes. + This new behavior is for compatibility with BSD. + + du accepts a new option --files0-from=FILE, where FILE contains a + list of NUL-terminated file names. + + Date syntax as used by date -d, date -f, and touch -d has been + changed as follows: + + Dates like 'January 32' with out-of-range components are now rejected. + + Dates can have fractional timestamps like 2004-02-27 14:19:13.489392193. + + Dates can be entered via integer counts of seconds since 1970 when + prefixed by '@'. For example, '@321' represents 1970-01-01 00:05:21 UTC. + + Time zone corrections can now separate hours and minutes with a colon, + and can follow standard abbreviations like "UTC". For example, + "UTC +0530" and "+05:30" are supported, and are both equivalent to "+0530". + + Date values can now have leading TZ="..." assignments that override + the environment only while that date is being processed. For example, + the following shell command converts from Paris to New York time: + + TZ="America/New_York" date --date='TZ="Europe/Paris" 2004-10-31 06:30' + + 'date' has a new option --iso-8601=ns that outputs + nanosecond-resolution timestamps. + + echo -e '\xHH' now outputs a byte whose hexadecimal value is HH, + for compatibility with bash. + + ls now exits with status 1 on minor problems, 2 if serious trouble. + + ls has a new --hide=PATTERN option that behaves like + --ignore=PATTERN, except that it is overridden by -a or -A. + This can be useful for aliases, e.g., if lh is an alias for + "ls --hide='*~'", then "lh -A" lists the file "README~". + + In the following cases POSIX allows the default GNU behavior, + so when POSIXLY_CORRECT is set: + + false, printf, true, unlink, and yes all support --help and --option. + ls supports TABSIZE. + pr no longer depends on LC_TIME for the date format in non-POSIX locales. + printf supports \u, \U, \x. + tail supports two or more files when using the obsolete option syntax. + + The usual '--' operand is now supported by chroot, hostid, hostname, + pwd, sync, and yes. + + 'od' now conforms to POSIX better, and is more compatible with BSD: + + The older syntax "od [-abcdfilosx]... [FILE] [[+]OFFSET[.][b]]" now works + even without --traditional. This is a change in behavior if there + are one or two operands and the last one begins with +, or if + there are two operands and the latter one begins with a digit. + For example, "od foo 10" and "od +10" now treat the last operand as + an offset, not as a file name. + + -h is no longer documented, and may be withdrawn in future versions. + Use -x or -t x2 instead. + + -i is now equivalent to -t dI (not -t d2), and + -l is now equivalent to -t dL (not -t d4). + + -s is now equivalent to -t d2. The old "-s[NUM]" or "-s NUM" + option has been renamed to "-S NUM". + + The default output format is now -t oS, not -t o2, i.e., short int + rather than two-byte int. This makes a difference only on hosts like + Cray systems where the C short int type requires more than two bytes. + + readlink accepts new options: --canonicalize-existing (-e) + and --canonicalize-missing (-m). + + The stat option --filesystem has been renamed to --file-system, for + consistency with POSIX "file system" and with cp and du --one-file-system. + +** Removed features + + md5sum and sha1sum's undocumented --string option has been removed. + + tail's undocumented --max-consecutive-size-changes option has been removed. + +* Major changes in release 5.2.1 (2004-03-12) [stable] + +** Bug fixes + + mv could mistakenly fail to preserve hard links when moving two + or more arguments between partitions. + + 'cp --sparse=always F /dev/hdx' no longer tries to use lseek to create + holes in the destination. + + nohup now sets the close-on-exec flag for its copy of the stderr file + descriptor. This avoids some nohup-induced hangs. For example, before + this change, if you ran 'ssh localhost', then 'nohup sleep 600 </dev/null &', + and then exited that remote shell, the ssh session would hang until the + 10-minute sleep terminated. With the fixed nohup, the ssh session + terminates immediately. + + 'expr' now conforms to POSIX better: + + Integers like -0 and 00 are now treated as zero. + + The '|' operator now returns 0, not its first argument, if both + arguments are null or zero. E.g., 'expr "" \| ""' now returns 0, + not the empty string. + + The '|' and '&' operators now use short-circuit evaluation, e.g., + 'expr 1 \| 1 / 0' no longer reports a division by zero. + +** New features + + 'chown user.group file' now has its traditional meaning even when + conforming to POSIX 1003.1-2001, so long as no user has a name + containing '.' that happens to equal 'user.group'. + + +* Major changes in release 5.2.0 (2004-02-19) [stable] + +** Bug fixes + + none + + +* Major changes in release 5.1.3 (2004-02-08): candidate to become stable 5.2.0 + +** Bug fixes + + 'cp -d' now works as required even on systems like OSF V5.1 that + declare stat and lstat as 'static inline' functions. + + timestamps output by stat now include actual fractional seconds, + when available -- or .0000000 for files without that information. + + seq no longer infloops when printing 2^31 or more numbers. + For reference, seq `echo 2^31|bc` > /dev/null takes about one hour + on a 1.6 GHz Athlon 2000 XP. Now it can output 2^53-1 numbers before + misbehaving. + +* Major changes in release 5.1.2 (2004-01-25): + +** Bug fixes + + rmdir -p exits with status 1 on error; formerly it sometimes exited + with status 0 when given more than one argument. + + nohup now always exits with status 127 when it finds an error, + as POSIX requires; formerly it sometimes exited with status 1. + + Several programs (including cut, date, dd, env, hostname, nl, pr, + stty, and tr) now always exit with status 1 when they find an error; + formerly they sometimes exited with status 2. + + factor no longer reports a usage error if stdin has the wrong format. + + paste no longer infloops on ppc systems (bug introduced in 5.1.1) + + +* Major changes in release 5.1.1 (2004-01-17): + +** Configuration option + + You can select the default level of POSIX conformance at configure-time, + e.g., by ./configure DEFAULT_POSIX2_VERSION=199209 + +** Bug fixes + + fold -s works once again on systems with differing sizes for int + and size_t (bug introduced in 5.1.0) + +** New features + + touch -r now specifies the origin for any relative times in the -d + operand, if both options are given. For example, "touch -r FOO -d + '-5 seconds' BAR" sets BAR's modification time to be five seconds + before FOO's. + + join: The obsolete options "-j1 FIELD", "-j2 FIELD", and + "-o LIST1 LIST2..." are no longer supported on POSIX 1003.1-2001 systems. + Portable scripts should use "-1 FIELD", "-2 FIELD", and + "-o LIST1,LIST2..." respectively. If join was compiled on a + POSIX 1003.1-2001 system, you may enable the old behavior + by setting _POSIX2_VERSION=199209 in your environment. + [This change was reverted in coreutils 5.3.1.] + + +* Major changes in release 5.1.0 (2003-12-21): + +** New features + + chgrp, chmod, and chown can now process (with -R) hierarchies of virtually + unlimited depth. Before, they would fail to operate on any file they + encountered with a relative name of length PATH_MAX (often 4096) or longer. + + chgrp, chmod, chown, and rm accept the new options: + --preserve-root, --no-preserve-root (default) + + chgrp and chown now accept POSIX-mandated -L, -H, and -P options + + du can now process hierarchies of virtually unlimited depth. + Before, du was limited by the user's stack size and it would get a + stack overflow error (often a segmentation fault) when applied to + a hierarchy of depth around 30,000 or larger. + + du works even when run from an inaccessible directory + + du -D now dereferences all symlinks specified on the command line, + not just the ones that reference directories + + du now accepts -P (--no-dereference), for compatibility with du + of NetBSD and for consistency with e.g., chown and chgrp + + du's -H option will soon have the meaning required by POSIX + (--dereference-args, aka -D) rather then the current meaning of --si. + Now, using -H elicits a warning to that effect. + + When given -l and similar options, ls now adjusts the output column + widths to fit the data, so that output lines are shorter and have + columns that line up better. This may adversely affect shell + scripts that expect fixed-width columns, but such shell scripts were + not portable anyway, even with old GNU ls where the columns became + ragged when a datum was too wide. + + du accepts a new option, -0/--null, to make it produce NUL-terminated + output lines + +** Bug fixes + + printf, seq, tail, and sleep now parse floating-point operands + and options in the C locale. POSIX requires this for printf. + + od -c -w9999999 no longer segfaults + + csplit no longer reads from freed memory (dumping core on some systems) + + csplit would mistakenly exhaust virtual memory in some cases + + ls --width=N (for very large N) is no longer subject to an address + arithmetic bug that could result in bounds violations. + + ls --width=N (with -x or -C) no longer allocates more space + (potentially much more) than necessary for a given directory. + + dd 'unblock' and 'sync' may now be combined (e.g., dd conv=unblock,sync) + +* Major changes in release 5.0.91 (2003-09-08): + +** New features + + date accepts a new option --rfc-2822, an alias for --rfc-822. + + split accepts a new option -d or --numeric-suffixes. + + cp, install, mv, and touch now preserve microsecond resolution on + file timestamps, on platforms that have the 'utimes' system call. + Unfortunately there is no system call yet to preserve file + timestamps to their full nanosecond resolution; microsecond + resolution is the best we can do right now. + + sort now supports the zero byte (NUL) as a field separator; use -t '\0'. + The -t '' option, which formerly had no effect, is now an error. + + sort option order no longer matters for the options -S, -d, -i, -o, and -t. + Stronger options override weaker, and incompatible options are diagnosed. + + 'sha1sum --check' now accepts the BSD format for SHA1 message digests + in addition to the BSD format for MD5 ones. + + who -l now means 'who --login', not 'who --lookup', per POSIX. + who's -l option has been eliciting an unconditional warning about + this impending change since sh-utils-2.0.12 (April 2002). + +** Bug fixes + + Mistakenly renaming a file onto itself, e.g., via 'mv B b' when 'B' is + the same directory entry as 'b' no longer destroys the directory entry + referenced by both 'b' and 'B'. Note that this would happen only on + file systems like VFAT where two different names may refer to the same + directory entry, usually due to lower->upper case mapping of file names. + Now, the above can happen only on file systems that perform name mapping and + that support hard links (stat.st_nlink > 1). This mitigates the problem + in two ways: few file systems appear to be affected (hpfs and ntfs are), + when the bug is triggered, mv no longer removes the last hard link to a file. + *** ATTENTION ***: if you know how to distinguish the following two cases + without writing to the file system in question, please let me know: + 1) B and b refer to the same directory entry on a file system like NTFS + (B may well have a link count larger than 1) + 2) B and b are hard links to the same file + + stat no longer overruns a buffer for format strings ending in '%' + + fold -s -wN would infloop for N < 8 with TABs in the input. + E.g., this would not terminate: printf 'a\t' | fold -w2 -s + + 'split -a0', although of questionable utility, is accepted once again. + + 'df DIR' used to hang under some conditions on OSF/1 5.1. Now it doesn't. + + seq's --width (-w) option now works properly even when the endpoint + requiring the larger width is negative and smaller than the other endpoint. + + seq's default step is 1, even if LAST < FIRST. + + paste no longer mistakenly outputs 0xFF bytes for a nonempty input file + without a trailing newline. + + 'tail -n0 -f FILE' and 'tail -c0 -f FILE' no longer perform what amounted + to a busy wait, rather than sleeping between iterations. + + tail's long-undocumented --allow-missing option now elicits a warning + + +* Major changes in release 5.0.90 (2003-07-29): + +** New features + + sort is now up to 30% more CPU-efficient in some cases + + 'test' is now more compatible with Bash and POSIX: + + 'test -t', 'test --help', and 'test --version' now silently exit + with status 0. To test whether standard output is a terminal, use + 'test -t 1'. To get help and version info for 'test', use + '[ --help' and '[ --version'. + + 'test' now exits with status 2 (not 1) if there is an error. + + wc count field widths now are heuristically adjusted depending on the input + size, if known. If only one count is printed, it is guaranteed to + be printed without leading spaces. + + Previously, wc did not align the count fields if POSIXLY_CORRECT was set, + but POSIX did not actually require this undesirable behavior, so it + has been removed. + +** Bug fixes + + kill no longer tries to operate on argv[0] (introduced in 5.0.1) + Why wasn't this noticed? Although many tests use kill, none of + them made an effort to avoid using the shell's built-in kill. + + '[' invoked with no arguments no longer evokes a segfault + + rm without --recursive (aka -r or -R) no longer prompts regarding + unwritable directories, as required by POSIX. + + uniq -c now uses a SPACE, not a TAB between the count and the + corresponding line, as required by POSIX. + + expr now exits with status 2 if the expression is syntactically valid, + and with status 3 if an error occurred. POSIX requires this. + + expr now reports trouble if string comparison fails due to a collation error. + + split now generates suffixes properly on EBCDIC hosts. + + split -a0 now works, as POSIX requires. + + 'sort --version' and 'sort --help' fail, as they should + when their output is redirected to /dev/full. + + 'su --version > /dev/full' now fails, as it should. + +** Fewer arbitrary limitations + + cut requires 97% less memory when very large field numbers or + byte offsets are specified. + + +* Major changes in release 5.0.1 (2003-07-15): + +** New programs +- new program: '[' (much like 'test') + +** New features +- head now accepts --lines=-N (--bytes=-N) to print all but the + N lines (bytes) at the end of the file +- md5sum --check now accepts the output of the BSD md5sum program, e.g., + MD5 (f) = d41d8cd98f00b204e9800998ecf8427e +- date -d DATE can now parse a DATE string like May-23-2003 +- chown: '.' is no longer recognized as a separator in the OWNER:GROUP + specifier on POSIX 1003.1-2001 systems. If chown *was not* compiled + on such a system, then it still accepts '.', by default. If chown + was compiled on a POSIX 1003.1-2001 system, then you may enable the + old behavior by setting _POSIX2_VERSION=199209 in your environment. +- chown no longer tries to preserve set-user-ID and set-group-ID bits; + on some systems, the chown syscall resets those bits, and previous + versions of the chown command would call chmod to restore the original, + pre-chown(2) settings, but that behavior is problematic. + 1) There was a window whereby a malicious user, M, could subvert a + chown command run by some other user and operating on files in a + directory where M has write access. + 2) Before (and even now, on systems with chown(2) that doesn't reset + those bits), an unwary admin. could use chown unwittingly to create e.g., + a set-user-ID root copy of /bin/sh. + +** Bug fixes +- chown --dereference no longer leaks a file descriptor per symlink processed +- 'du /' once again prints the '/' on the last line +- split's --verbose option works once again [broken in 4.5.10 and 5.0] +- tail -f is no longer subject to a race condition that could make it + delay displaying the last part of a file that had stopped growing. That + bug could also make tail -f give an unwarranted 'file truncated' warning. +- du no longer runs out of file descriptors unnecessarily +- df and 'readlink --canonicalize' no longer corrupt the heap on + non-glibc, non-solaris systems +- 'env -u UNSET_VARIABLE' no longer dumps core on non-glibc systems +- readlink's --canonicalize option now works on systems like Solaris that + lack the canonicalize_file_name function but do have resolvepath. +- mv now removes 'a' in this example on all systems: touch a; ln a b; mv a b + This behavior is contrary to POSIX (which requires that the mv command do + nothing and exit successfully), but I suspect POSIX will change. +- date's %r format directive now honors locale settings +- date's '-' (no-pad) format flag now affects the space-padded-by-default + conversion specifiers, %e, %k, %l +- fmt now diagnoses invalid obsolescent width specifications like '-72x' +- fmt now exits nonzero when unable to open an input file +- tsort now fails when given an odd number of input tokens, + as required by POSIX. Before, it would act as if the final token + appeared one additional time. + +** Fewer arbitrary limitations +- tail's byte and line counts are no longer limited to OFF_T_MAX. + Now the limit is UINTMAX_MAX (usually 2^64). +- split can now handle --bytes=N and --lines=N with N=2^31 or more. + +** Portability +- 'kill -t' now prints signal descriptions (rather than '?') on systems + like Tru64 with __sys_siglist but no strsignal function. +- stat.c now compiles on Ultrix systems +- sleep now works on AIX systems that lack support for clock_gettime +- rm now works around Darwin6.5's broken readdir function + Before 'rm -rf DIR' would fail to remove all files in DIR + if there were more than 338. + +* Major changes in release 5.0 (2003-04-02): +- false --help now exits nonzero + +[4.5.12] +* printf no longer treats \x specially when POSIXLY_CORRECT is set +* printf avoids buffer overrun with format ending in a backslash and +* printf avoids buffer overrun with incomplete conversion specifier +* printf accepts multiple flags in a single conversion specifier + +[4.5.11] +* seq no longer requires that a field width be specified +* seq no longer fails when given a field width of '0' +* seq now accepts " " and "'" as valid format flag characters +* df now shows a HOSTNAME: prefix for each remote-mounted file system on AIX 5.1 +* portability tweaks for HP-UX, AIX 5.1, DJGPP + +[4.5.10] +* printf no longer segfaults for a negative field width or precision +* shred now always enables --exact for non-regular files +* du no longer lists hard-linked files more than once +* du no longer dumps core on some systems due to "infinite" recursion + via nftw's use of the buggy replacement function in getcwd.c +* portability patches for a few vendor compilers and 64-bit systems +* du -S *really* now works like it did before the change in 4.5.5 + +[4.5.9] +* du no longer truncates file sizes or sums to fit in 32-bit size_t +* work around Linux kernel bug in getcwd (fixed in 2.4.21-pre4), so that pwd + now fails if the name of the working directory is so long that getcwd + truncates it. Before it would print the truncated name and exit successfully. +* 'df /some/mount-point' no longer hangs on a GNU libc system when another + hard-mounted NFS file system (preceding /some/mount-point in /proc/mounts) + is inaccessible. +* rm -rf now gives an accurate diagnostic when failing to remove a file + under certain unusual conditions +* mv and 'cp --preserve=links' now preserve multiple hard links even under + certain unusual conditions where they used to fail + +[4.5.8] +* du -S once again works like it did before the change in 4.5.5 +* stat accepts a new file format, %B, for the size of each block reported by %b +* du accepts new option: --apparent-size +* du --bytes (-b) works the same way it did in fileutils-3.16 and before +* du reports proper sizes for directories (not zero) (broken in 4.5.6 or 4.5.7) +* df now always displays under 'Filesystem', the device file name + corresponding to the listed mount point. Before, for a block- or character- + special file command line argument, df would display that argument. E.g., + 'df /dev/hda' would list '/dev/hda' as the 'Filesystem', rather than say + /dev/hda3 (the device on which '/' is mounted), as it does now. +* test now works properly when invoked from a set user ID or set group ID + context and when testing access to files subject to alternate protection + mechanisms. For example, without this change, a set-UID program that invoked + 'test -w F' (to see if F is writable) could mistakenly report that it *was* + writable, even though F was on a read-only file system, or F had an ACL + prohibiting write access, or F was marked as immutable. + +[4.5.7] +* du would fail with more than one DIR argument when any but the last did not + contain a slash (due to a bug in ftw.c) + +[4.5.6] +* du no longer segfaults on Solaris systems (fixed heap-corrupting bug in ftw.c) +* du --exclude=FILE works once again (this was broken by the rewrite for 4.5.5) +* du no longer gets a failed assertion for certain hierarchy lay-outs + involving hard-linked directories +* 'who -r' no longer segfaults when using non-C-locale messages +* df now displays a mount point (usually '/') for non-mounted + character-special and block files + +[4.5.5] +* ls --dired produces correct byte offset for file names containing + nonprintable characters in a multibyte locale +* du has been rewritten to use a variant of GNU libc's ftw.c +* du now counts the space associated with a directory's directory entry, + even if it cannot list or chdir into that subdirectory. +* du -S now includes the st_size of each entry corresponding to a subdirectory +* rm on FreeBSD can once again remove directories from NFS-mounted file systems +* ls has a new option --dereference-command-line-symlink-to-dir, which + corresponds to the new default behavior when none of -d, -l -F, -H, -L + has been specified. +* ls dangling-symlink now prints 'dangling-symlink'. + Before, it would fail with 'no such file or directory'. +* ls -s symlink-to-non-dir and ls -i symlink-to-non-dir now print + attributes of 'symlink', rather than attributes of their referents. +* Fix a bug introduced in 4.5.4 that made it so that ls --color would no + longer highlight the names of files with the execute bit set when not + specified on the command line. +* shred's --zero (-z) option no longer gobbles up any following argument. + Before, 'shred --zero file' would produce 'shred: missing file argument', + and worse, 'shred --zero f1 f2 ...' would appear to work, but would leave + the first file untouched. +* readlink: new program +* cut: new feature: when used to select ranges of byte offsets (as opposed + to ranges of fields) and when --output-delimiter=STRING is specified, + output STRING between ranges of selected bytes. +* rm -r can no longer be tricked into mistakenly reporting a cycle. +* when rm detects a directory cycle, it no longer aborts the entire command, + but rather merely stops processing the affected command line argument. + +[4.5.4] +* cp no longer fails to parse options like this: --preserve=mode,ownership +* 'ls --color -F symlink-to-dir' works properly +* ls is much more efficient on directories with valid dirent.d_type. +* stty supports all baud rates defined in linux-2.4.19. +* 'du symlink-to-dir/' would improperly remove the trailing slash +* 'du ""' would evoke a bounds violation. +* In the unlikely event that running 'du /' resulted in 'stat ("/", ...)' + failing, du would give a diagnostic about '' (empty string) rather than '/'. +* printf: a hexadecimal escape sequence has at most two hex. digits, not three. +* The following features have been added to the --block-size option + and similar environment variables of df, du, and ls. + - A leading "'" generates numbers with thousands separators. + For example: + $ ls -l --block-size="'1" file + -rw-rw-r-- 1 eggert src 47,483,707 Sep 24 23:40 file + - A size suffix without a leading integer generates a suffix in the output. + For example: + $ ls -l --block-size="K" + -rw-rw-r-- 1 eggert src 46371K Sep 24 23:40 file +* ls's --block-size option now affects file sizes in all cases, not + just for --block-size=human-readable and --block-size=si. Fractional + sizes are now always rounded up, for consistency with df and du. +* df now displays the block size using powers of 1000 if the requested + block size seems to be a multiple of a power of 1000. +* nl no longer gets a segfault when run like this 'yes|nl -s%n' + +[4.5.3] +* du --dereference-args (-D) no longer fails in certain cases +* 'ln --target-dir=DIR' no longer fails when given a single argument + +[4.5.2] +* 'rm -i dir' (without --recursive (-r)) no longer recurses into dir +* 'tail -c N FILE' now works with files of size >= 4GB +* 'mkdir -p' can now create very deep (e.g. 40,000-component) directories +* rmdir -p dir-with-trailing-slash/ no longer fails +* printf now honors the '--' command line delimiter +* od's 8-byte formats x8, o8, and u8 now work +* tail now accepts fractional seconds for its --sleep-interval=S (-s) option + +[4.5.1] +* du and ls now report sizes of symbolic links (before they'd always report 0) +* uniq now obeys the LC_COLLATE locale, as per POSIX 1003.1-2001 TC1. + +======================================================================== +Here are the NEWS entries made from fileutils-4.1 until the +point at which the packages merged to form the coreutils: + +[4.1.11] +* 'rm symlink-to-unwritable' doesn't prompt [introduced in 4.1.10] +[4.1.10] +* rm once again gives a reasonable diagnostic when failing to remove a file + owned by someone else in a sticky directory [introduced in 4.1.9] +* df now rounds all quantities up, as per POSIX. +* New ls time style: long-iso, which generates YYYY-MM-DD HH:MM. +* Any time style can be preceded by "posix-"; this causes "ls" to + use traditional timestamp format when in the POSIX locale. +* The default time style is now posix-long-iso instead of posix-iso. + Set TIME_STYLE="posix-iso" to revert to the behavior of 4.1.1 through 4.1.9. +* 'rm dangling-symlink' doesn't prompt [introduced in 4.1.9] +* stat: remove support for --secure/-s option and related %S and %C format specs +* stat: rename --link/-l to --dereference/-L. + The old options will continue to work for a while. +[4.1.9] +* rm can now remove very deep hierarchies, in spite of any limit on stack size +* new programs: link, unlink, and stat +* New ls option: --author (for the Hurd). +* 'touch -c no-such-file' no longer fails, per POSIX +[4.1.8] +* mv no longer mistakenly creates links to preexisting destination files + that aren't moved +[4.1.7] +* rm: close a hole that would allow a running rm process to be subverted +[4.1.6] +* New cp option: --copy-contents. +* cp -r is now equivalent to cp -R. Use cp -R -L --copy-contents to get the + traditional (and rarely desirable) cp -r behavior. +* ls now accepts --time-style=+FORMAT, where +FORMAT works like date's format +* The obsolete usage 'touch [-acm] MMDDhhmm[YY] FILE...' is no longer + supported on systems conforming to POSIX 1003.1-2001. Use touch -t instead. +* cp and inter-partition mv no longer give a misleading diagnostic in some + unusual cases +[4.1.5] +* cp -r no longer preserves symlinks +* The block size notation is now compatible with SI and with IEC 60027-2. + For example, --block-size=1MB now means --block-size=1000000, + whereas --block-size=1MiB now means --block-size=1048576. + A missing 'B' (e.g. '1M') has the same meaning as before. + A trailing 'B' now means decimal, not binary; this is a silent change. + The nonstandard 'D' suffix (e.g. '1MD') is now obsolescent. +* -H or --si now outputs the trailing 'B', for consistency with the above. +* Programs now output trailing 'K' (not 'k') to mean 1024, as per IEC 60027-2. +* New df, du short option -B is short for --block-size. +* You can omit an integer '1' before a block size suffix, + e.g. 'df -BG' is equivalent to 'df -B 1G' and to 'df --block-size=1G'. +* The following options are now obsolescent, as their names are + incompatible with IEC 60027-2: + df, du: -m or --megabytes (use -BM or --block-size=1M) + df, du, ls: --kilobytes (use --block-size=1K) +[4.1.4] +* df --local no longer lists smbfs file systems whose name starts with // +* dd now detects the Linux/tape/lseek bug at run time and warns about it. +[4.1.3] +* ls -R once again outputs a blank line between per-directory groups of files. + This was broken by the cycle-detection change in 4.1.1. +* dd once again uses 'lseek' on character devices like /dev/mem and /dev/kmem. + On systems with the linux kernel (at least up to 2.4.16), dd must still + resort to emulating 'skip=N' behavior using reads on tape devices, because + lseek has no effect, yet appears to succeed. This may be a kernel bug. +[4.1.2] +* cp no longer fails when two or more source files are the same; + now it just gives a warning and doesn't copy the file the second time. + E.g., cp a a d/ produces this: + cp: warning: source file `a' specified more than once +* chmod would set the wrong bit when given symbolic mode strings like + these: g=o, o=g, o=u. E.g., 'chmod a=,o=w,ug=o f' would give a mode + of --w-r---w- rather than --w--w--w-. +[4.1.1] +* mv (likewise for cp), now fails rather than silently clobbering one of + the source files in the following example: + rm -rf a b c; mkdir a b c; touch a/f b/f; mv a/f b/f c +* ls -R detects directory cycles, per POSIX. It warns and doesn't infloop. +* cp's -P option now means the same as --no-dereference, per POSIX. + Use --parents to get the old meaning. +* When copying with the -H and -L options, cp can preserve logical + links between source files with --preserve=links +* cp accepts new options: + --preserve[={mode,ownership,timestamps,links,all}] + --no-preserve={mode,ownership,timestamps,links,all} +* cp's -p and --preserve options remain unchanged and are equivalent + to '--preserve=mode,ownership,timestamps' +* mv and cp accept a new option: --reply={yes,no,query}; provides a consistent + mechanism to control whether one is prompted about certain existing + destination files. Note that cp's and mv's -f options don't have the + same meaning: cp's -f option no longer merely turns off '-i'. +* remove portability limitations (e.g., PATH_MAX on the Hurd, fixes for + 64-bit systems) +* mv now prompts before overwriting an existing, unwritable destination file + when stdin is a tty, unless --force (-f) is specified, as per POSIX. +* mv: fix the bug whereby 'mv -uf source dest' would delete source, + even though it's older than dest. +* chown's --from=CURRENT_OWNER:CURRENT_GROUP option now works +* cp now ensures that the set-user-ID and set-group-ID bits are cleared for + the destination file when when copying and not preserving permissions. +* 'ln -f --backup k k' gives a clearer diagnostic +* ls no longer truncates user names or group names that are longer + than 8 characters. +* ls's new --dereference-command-line option causes it to dereference + symbolic links on the command-line only. It is the default unless + one of the -d, -F, or -l options are given. +* ls -H now means the same as ls --dereference-command-line, as per POSIX. +* ls -g now acts like ls -l, except it does not display owner, as per POSIX. +* ls -n now implies -l, as per POSIX. +* ls can now display dates and times in one of four time styles: + + - The 'full-iso' time style gives full ISO-style timestamps like + '2001-05-14 23:45:56.477817180 -0700'. + - The 'iso' time style gives ISO-style timestamps like '2001-05-14 ' + and '05-14 23:45'. + - The 'locale' time style gives locale-dependent timestamps like + 'touko 14 2001' and 'touko 14 23:45' (in a Finnish locale). + - The 'posix-iso' time style gives traditional POSIX-locale + timestamps like 'May 14 2001' and 'May 14 23:45' unless the user + specifies a non-POSIX locale, in which case it uses ISO-style dates. + This is the default. + + You can specify a time style with an option like --time-style='iso' + or with an environment variable like TIME_STYLE='iso'. GNU Emacs 21 + and later can parse ISO dates, but older Emacs versions cannot, so + if you are using an older version of Emacs outside the default POSIX + locale, you may need to set TIME_STYLE="locale". + +* --full-time is now an alias for "-l --time-style=full-iso". + + +======================================================================== +Here are the NEWS entries made from sh-utils-2.0 until the +point at which the packages merged to form the coreutils: + + [2.0.15] +* date no longer accepts e.g., September 31 in the MMDDhhmm syntax +* fix a bug in this package's .m4 files and in configure.ac + [2.0.14] +* nohup's behavior is changed as follows, to conform to POSIX 1003.1-2001: + - nohup no longer adjusts scheduling priority; use "nice" for that. + - nohup now redirects stderr to stdout, if stderr is not a terminal. + - nohup exit status is now 126 if command was found but not invoked, + 127 if nohup failed or if command was not found. + [2.0.13] +* uname and uptime work better on *BSD systems +* pathchk now exits nonzero for a path with a directory component + that specifies a non-directory + [2.0.12] +* kill: new program +* who accepts new options: --all (-a), --boot (-b), --dead (-d), --login, + --process (-p), --runlevel (-r), --short (-s), --time (-t), --users (-u). + The -u option now produces POSIX-specified results and is the same as + the long option '--users'. --idle is no longer the same as -u. +* The following changes apply on systems conforming to POSIX 1003.1-2001: + - 'date -I' is no longer supported. Instead, use 'date --iso-8601'. + - 'nice -NUM' is no longer supported. Instead, use 'nice -n NUM'. + [This change was reverted in coreutils 5.3.1.] +* New 'uname' options -i or --hardware-platform, and -o or --operating-system. + 'uname -a' now outputs -i and -o information at the end. + New uname option --kernel-version is an alias for -v. + Uname option --release has been renamed to --kernel-release, + and --sysname has been renamed to --kernel-name; + the old options will work for a while, but are no longer documented. +* 'expr' now uses the LC_COLLATE locale for string comparison, as per POSIX. +* 'expr' now requires '+' rather than 'quote' to quote tokens; + this removes an incompatibility with POSIX. +* date -d 'last friday' would print a date/time that was one hour off + (e.g., 23:00 on *thursday* rather than 00:00 of the preceding friday) + when run such that the current time and the target date/time fall on + opposite sides of a daylight savings time transition. + This problem arose only with relative date strings like 'last monday'. + It was not a problem with strings that include absolute dates. +* factor is twice as fast, for large numbers + [2.0.11] +* setting the date now works properly, even when using -u +* 'date -f - < /dev/null' no longer dumps core +* some DOS/Windows portability changes + [2.0j] +* 'date -d DATE' now parses certain relative DATEs correctly + [2.0i] +* fixed a bug introduced in 2.0h that made many programs fail with a + 'write error' when invoked with the --version option + [2.0h] +* all programs fail when printing --help or --version output to a full device +* printf exits nonzero upon write failure +* yes now detects and terminates upon write failure +* date --rfc-822 now always emits day and month names from the 'C' locale +* portability tweaks for Solaris8, Ultrix, and DOS + [2.0g] +* date now handles two-digit years with leading zeros correctly. +* printf interprets unicode, \uNNNN \UNNNNNNNN, on systems with the + required support; from Bruno Haible. +* stty's rprnt attribute now works on HPUX 10.20 +* seq's --equal-width option works more portably + [2.0f] +* fix build problems with ut_name vs. ut_user + [2.0e] +* stty: fix long-standing bug that caused test failures on at least HPUX + systems when COLUMNS was set to zero +* still more portability fixes +* unified lib/: now that directory and most of the configuration framework + is common between fileutils, textutils, and sh-utils + [2.0d] +* fix portability problem with sleep vs lib/strtod.c's requirement for -lm + [2.0c] +* fix portability problems with nanosleep.c and with the new code in sleep.c + [2.0b] +* Regenerate lib/Makefile.in so that nanosleep.c is distributed. + [2.0a] +* sleep accepts floating point arguments on command line +* sleep's clock continues counting down when sleep is suspended +* when a suspended sleep process is resumed, it continues sleeping if + there is any time remaining +* who once again prints whatever host information it has, even without --lookup + +======================================================================== +For older NEWS entries for the fileutils, textutils, and sh-utils +packages, see ./old/*/NEWS. + + This package began as the union of the following: + textutils-2.1, fileutils-4.1.11, sh-utils-2.0.15. + +======================================================================== + +Copyright (C) 2001-2020 Free Software Foundation, Inc. + +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.3 or +any later version published by the Free Software Foundation; with no +Invariant Sections, with no Front-Cover Texts, and with no Back-Cover +Texts. A copy of the license is included in the "GNU Free +Documentation License" file as part of this distribution. |