This is to announce coreutils-9.2, a stable release. See the NEWS below for a summary of changes.
There have been 209 commits by 14 people in the 48 weeks since 9.1. Thanks to everyone who has contributed! The following people contributed changes to this release: Arsen Arsenović (1) Jim Meyering (7) Bernhard Voelker (3) Paul Eggert (90) Bruno Haible (1) Pierre Marsais (1) Carl Edquist (2) Pádraig Brady (98) ChuanGang Jiang (2) Rasmus Villemoes (1) Dennis Williamson (1) Stefan Kangas (1) Ivan Radić (1) Álvar Ibeas (1) Pádraig [on behalf of the coreutils maintainers] ================================================================== Here is the GNU coreutils home page: http://gnu.org/s/coreutils/ For a summary of changes and contributors, see: http://git.sv.gnu.org/gitweb/?p=coreutils.git;a=shortlog;h=v9.2 or run this command from a git-cloned coreutils directory: git shortlog v9.1..v9.2 To summarize the 665 gnulib-related changes, run these commands from a git-cloned coreutils directory: git checkout v9.2 git submodule summary v9.1 ================================================================== Here are the compressed sources: https://ftp.gnu.org/gnu/coreutils/coreutils-9.2.tar.gz (14MB) https://ftp.gnu.org/gnu/coreutils/coreutils-9.2.tar.xz (5.6MB) Here are the GPG detached signatures: https://ftp.gnu.org/gnu/coreutils/coreutils-9.2.tar.gz.sig https://ftp.gnu.org/gnu/coreutils/coreutils-9.2.tar.xz.sig Use a mirror for higher download bandwidth: https://www.gnu.org/order/ftp.html Here are the SHA1 and SHA256 checksums: 6afa9ce3729afc82965a33d02ad585d1571cdeef coreutils-9.2.tar.gz ebWNqhmcY84g95GRF3NLISOUnJLReVZPkI4yiQFZzUg= coreutils-9.2.tar.gz 3769071b357890dc36d820c597c1c626a1073fcb coreutils-9.2.tar.xz aIX/R7nNshHeR9NowXhT9Abar5ixSKrs3xDeKcwEsLM= coreutils-9.2.tar.xz Verify the base64 SHA256 checksum with cksum -a sha256 --check from coreutils-9.2 or OpenBSD's cksum since 2007. Use a .sig file to verify that the corresponding file (without the .sig suffix) is intact. First, be sure to download both the .sig file and the corresponding tarball. Then, run a command like this: gpg --verify coreutils-9.2.tar.xz.sig The signature should match the fingerprint of the following key: pub rsa4096 2011-09-23 [SC] 6C37 DC12 121A 5006 BC1D B804 DF6F D971 3060 37D9 uid [ unknown] Pádraig Brady <p...@draigbrady.com> uid [ unknown] Pádraig Brady <pixelb...@gnu.org> If that command fails because you don't have the required public key, or that public key has expired, try the following commands to retrieve or refresh it, and then rerun the 'gpg --verify' command. gpg --locate-external-key p...@draigbrady.com gpg --recv-keys DF6FD971306037D9 wget -q -O- 'https://savannah.gnu.org/project/release-gpgkeys.php?group=coreutils&download=1' | gpg --import - As a last resort to find the key, you can try the official GNU keyring: wget -q https://ftp.gnu.org/gnu/gnu-keyring.gpg gpg --keyring gnu-keyring.gpg --verify coreutils-9.2.tar.gz.sig This release was bootstrapped with the following tools: Autoconf 2.71 Automake 1.16.5 Gnulib v0.1-5857-gf17d397771 Bison 3.8.2 ================================================================== NEWS * Noteworthy changes in release 9.2 (2023-03-20) [stable] ** Bug fixes 'comm --output-delimiter="" --total' now delimits columns in the total line with the NUL character, consistent with NUL column delimiters in the rest of the output. Previously no delimiters were used for the total line in this case. [bug introduced with the --total option in coreutils-8.26] 'cp -p' no longer has a security hole when cloning into a dangling symbolic link on macOS 10.12 and later. [bug introduced in coreutils-9.1] 'cp -rx / /mnt' no longer complains "cannot create directory /mnt/". [bug introduced in coreutils-9.1] cp, mv, and install avoid allocating too much memory, and possibly triggering "memory exhausted" failures, on file systems like ZFS, which can return varied file system I/O block size values for files. [bug introduced in coreutils-6.0] cp, mv, and install now immediately acknowledge transient errors when creating copy-on-write or cloned reflink files, on supporting file systems like XFS, BTRFS, APFS, etc. Previously they would have tried again with other copy methods which may have resulted in data corruption. [bug introduced in coreutils-7.5 and enabled by default in coreutils-9.0] cp, mv, and install now handle ENOENT failures across CIFS file systems, falling back from copy_file_range to a better supported standard copy. [issue introduced in coreutils-9.0] 'mv --backup=simple f d/' no longer mistakenly backs up d/f to f~. [bug introduced in coreutils-9.1] rm now fails gracefully when memory is exhausted. Previously it may have aborted with a failed assertion in some cases. [This bug was present in "the beginning".] rm -d (--dir) now properly handles unreadable empty directories. E.g., before, this would fail to remove d: mkdir -m0 d; src/rm -d d [bug introduced in v8.19 with the addition of this option] runcon --compute no longer looks up the specified command in the $PATH so that there is no mismatch between the inspected and executed file. [bug introduced when runcon was introduced in coreutils-6.9.90] 'sort -g' no longer infloops when given multiple NaNs on platforms like x86_64 where 'long double' has padding bits in memory. Although the fix alters sort -g's NaN ordering, that ordering has long been documented to be platform-dependent. [bug introduced 1999-05-02 and only partly fixed in coreutils-8.14] stty ispeed and ospeed options no longer accept and silently ignore invalid speed arguments, or give false warnings for valid speeds. Now they're validated against both the general accepted set, and the system supported set of valid speeds. [This bug was present in "the beginning".] stty now wraps output appropriately for the terminal width. Previously it may have output 1 character too wide for certain widths. [bug introduced in coreutils-5.3] tail --follow=name works again with non seekable files. Previously it exited with an "Illegal seek" error when such a file was replaced. [bug introduced in fileutils-4.1.6] 'wc -c' will again efficiently determine the size of large files on all systems. It no longer redundantly reads data from certain sized files larger than SIZE_MAX. [bug introduced in coreutils-8.24] ** Changes in behavior Programs now support the new Ronna (R), and Quetta (Q) SI prefixes, corresponding to 10^27 and 10^30 respectively, along with their binary counterparts Ri (2^90) and Qi (2^100). In some cases (e.g., 'sort -h') these new prefixes simply work; in others, where they exceed integer width limits, they now elicit the same integer overflow diagnostics as other large prefixes. 'cp --reflink=always A B' no longer leaves behind a newly created empty file B merely because copy-on-write clones are not supported. 'cp -n' and 'mv -n' now exit with nonzero status if they skip their action because the destination exists, and likewise for 'cp -i', 'ln -i', and 'mv -i' when the user declines. (POSIX specifies this for 'cp -i' and 'mv -i'.) cp, mv, and install again read in multiples of the reported block size, to support unusual devices that may have this constraint. [behavior inadvertently changed in coreutils-7.2] du --apparent now counts apparent sizes only of regular files and symbolic links. POSIX does not specify the meaning of apparent sizes (i.e., st_size) for other file types, and counting those sizes could cause confusing and unwanted size mismatches. 'ls -v' and 'sort -V' go back to sorting ".0" before ".A", reverting to the behavior in coreutils-9.0 and earlier. This behavior is now documented. ls --color now matches a file extension case sensitively if there are different sequences defined for separate cases. printf unicode \uNNNN, \UNNNNNNNN syntax, now supports all valid unicode code points. Previously is was restricted to the C universal character subset, which restricted most points <= 0x9F. runcon now exits with status 125 for internal errors. Previously upon internal errors it would exit with status 1, which was less distinguishable from errors from the invoked command. 'split -n N' now splits more evenly when the input size is not a multiple of N, by creating N output files whose sizes differ by at most 1 byte. Formerly, it did this only when the input size was less than N. 'stat -c %s' now prints sizes as unsigned, consistent with 'ls'. ** New Features cksum now accepts the --base64 (-b) option to print base64-encoded checksums. It also accepts/checks such checksums. cksum now accepts the --raw option to output a raw binary checksum. No file name or other information is output in this mode. cp, mv, and install now accept the --debug option to print details on how a file is being copied. factor now accepts the --exponents (-h) option to print factors in the form p^e, rather than repeating the prime p, e times. ls now supports the --time=modification option, to explicitly select the default mtime timestamp for display and sorting. mv now supports the --no-copy option, which causes it to fail when asked to move a file to a different file system. split now accepts options like '-n SIZE' that exceed machine integer range, when they can be implemented as if they were infinity. split -n now accepts piped input even when not in round-robin mode, by first copying input to a temporary file to determine its size. wc now accepts the --total={auto,never,always,only} option to give explicit control over when the total is output. ** Improvements cp --sparse=auto (the default), mv, and install, will use the copy_file_range syscall now also with sparse files. This may be more efficient, by avoiding user space copies, and possibly employing copy offloading or reflinking, for the non sparse portion of such sparse files. On macOS, cp creates a copy-on-write clone in more cases. Previously cp would only do this when preserving mode and timestamps. date --debug now diagnoses if multiple --date or --set options are specified, as only the last specified is significant in that case. rm outputs more accurate diagnostics in the presence of errors when removing directories. For example EIO will be faithfully diagnosed, rather than being conflated with ENOTEMPTY. tail --follow=name now works with single non regular files even when their modification time doesn't change when new data is available. Previously tail would not show any new data in this case. tee -p detects when all remaining outputs have become broken pipes, and exits, rather than waiting for more input to induce an exit when written. tee now handles non blocking outputs, which can be seen for example with telnet or mpirun piping through tee to a terminal. Previously tee could truncate data written to such an output and fail, and also potentially output a "Resource temporarily unavailable" error. - Also posted at https://savannah.gnu.org/forum/forum.php?forum_id=10367