| GNU coreutils NEWS -*- outline -*- |
|
|
| * Noteworthy changes in release ?.? (????-??-??) [?] |
|
|
| ** Bug fixes |
|
|
| `basenc |
| [bug introduced with |
|
|
| 'cksum --check' now supports base64 encoded input in untagged format: |
| - for all length adjustable algorithms (blake2b, sha2, sha3), |
| - if that base64 input starts with a tag like "SHA1" etc. |
| Previously an error was given, about invalid input format. |
| [bug introduced in coreutils-9.2] |
|
|
| 'cksum --check -a sha2' has better support for tagged format. Previously |
| an unneeded but explicit '-a sha2' did not match standard tags like SHA256. |
| Also non standard SHA2 tags with a bad length resulted in undefined behavior. |
| [bug introduced in coreutils-9.8] |
|
|
| 'numfmt' no longer reads out-of-bounds memory with trailing blanks in input. |
| [bug introduced with numfmt in coreutils-8.21] |
|
|
| 'numfmt' no longer outputs invalid characters with multi-byte blanks in input. |
| [bug introduced in coreutils-9.5] |
|
|
| 'rm -d DIR' no longer fails on Ceph snapshot directories. |
| Although these directories are nonempty, 'rmdir DIR' succeeds on them. |
| [bug introduced in coreutils-8.16] |
|
|
| 'tail' outputs the correct number of lines again for non-small -n values. |
| Previously it may have output too few lines. |
| [bug introduced in coreutils-9.8] |
|
|
| 'unexpand' no longer triggers a heap buffer overflow with |
| that use the GNU extension /NUM or +NUM formats. |
| [bug introduced in coreutils-8.28] |
|
|
| ** Changes in behavior |
|
|
| 'sort' will continue without compressing temporary files if the |
| program specified by |
|
|
| ** New Features |
|
|
| 'numfmt' now accepts the |
| a separator between the number and unit. For e.g. "1234 M". |
|
|
| ** Improvements |
|
|
| 'fmt', 'nl', and 'pr' will now exit promptly upon receiving a write error, |
| which is significant when reading large / unbounded inputs. |
|
|
| 'install' now uses posix_spawn() to invoke the strip program more efficiently. |
|
|
| 'numfmt': |
| - parses numbers with a non-breaking space character before a unit |
| - parses numbers containing grouping characters from the current locale |
| - supports a multi-byte |
| - no longer processes input indefinitely in the presence of write errors |
|
|
| 'sort' now uses posix_spawn() to invoke |
| and more independently from sort's memory usage. |
| |
| 'split' now uses posix_spawn() to invoke the shell command specified by |
| --filter more efficiently. |
| |
| wc -l now operates 10% faster on hosts that support AVX512 instructions. |
| |
| ** Build-related |
| |
| chcon and runcon are not built by default if selinux headers are not present, |
| or if the --without-selinux configure option is specified. |
| This can be overridden with the --with-selinux configure option. |
| |
| |
| * Noteworthy changes in release 9.8 (2025-09-22) [stable] |
| |
| ** Bug fixes |
| |
| 'b2sum' will diagnose --length values that are too big. |
| Previously it would have silently assumed 512 for any larger values. |
| [bug introduced in coreutils-9.6] |
| |
| 'base32' and 'base64' when decoding will again diagnose partially |
| padded data that ends with a newline. |
| [bug introduced in coreutils-9.5] |
| |
| 'basenc -d -i' will now strip '=' characters from the input |
| in encodings where padding characters are not valid. |
| [bug introduced with the basenc program in coreutils-8.31] |
| |
| 'cp -p' had spurious "Operation not supported" failures when |
| copying to non-NFS files from NFSv4 files with trivial ACLs. |
| [bug introduced in coreutils-9.6] |
| |
| 'cp |
| That is, although the copies had the correct data, sometimes |
| data zeros used extents rather than holes. |
| [This bug was present in "the beginning".] |
|
|
| cp missed opportunities to create holes when copying from file |
| systems like squashfs that support SEEK_HOLE only trivially. |
| [bug introduced in coreutils-9.0] |
|
|
| cp, install, and mv now avoid possible data corruption on |
| glibc 2.41 and 2.42 systems when copy_file_range is used with ranges > 2GiB, |
| avoiding https://sourceware.org/PR33245 |
| [bug triggered since coreutils-9.0] |
|
|
| 'date' supports specifying multiple named formats with the last taking |
| precedence. Previously multiple specifications would induce an error. |
| [bug introduced in coreutils-5.90] |
|
|
| 'dd oflag=seek_bytes' no longer mistakenly reports errors when the |
| output file exists on GNU/Hurd. |
| [bug introduced in coreutils-8.16] |
|
|
| 'fold' no longer exhausts memory when processing large inputs |
| with a very large |
| [This bug was present in "the beginning".] |
|
|
| 'install -d' now produces the correct diagnostic upon failure |
| to create a directory. Previously it would have produced |
| a confusing error about changing permissions. |
| [This bug was present in "the beginning".] |
|
|
| "ls --size --block-size=\'k" could misalign output in locales |
| with multi-byte thousands grouping characters. |
| [This bug was present in "the beginning".] |
|
|
| 'nohup' avoids implementation defined behavior setting umask, |
| avoiding a FORTIFY runtime failure on Bionic libc. |
| [This bug was present in "the beginning".] |
|
|
| 'od --strings' with '-N' now works correctly. Previously od might |
| write a NUL byte after a heap buffer, or output invalid addresses. |
| [These bugs were present in "the beginning".] |
|
|
| 'od -w0' will now issue a diagnostic and exit gracefully. |
| Previously it would have aborted. |
| [bug introduced in coreutils-9.3] |
|
|
| 'od -w' no longer silently mishandles enormous widths like 3037000500. |
| Instead, it either outputs correctly or diagnoses a too-large width. |
| [This bug was present in "the beginning".] |
|
|
| 'od +N.' (where N is a decimal number) works again as per POSIX. |
| [bug introduced in textutils-2.0] |
|
|
| 'od /dev/null ++0' no longer mistakenly treats the ++0 as an offset. |
| [This bug was present in "the beginning".] |
|
|
| 'sort' with key character offsets of SIZE_MAX, could induce |
| a read of 1 byte before an allocated heap buffer. For example: |
| 'sort +0.18446744073709551615R input' on 64 bit systems. |
| [bug introduced in coreutils-7.2] |
|
|
| stdbuf now works on AIX. Previously it would have been ineffective. |
| [bug introduced with the stdbuf program in coreutils-7.5] |
|
|
| 'tail -n NUM' no longer can output more than NUM lines if stdin |
| is a largish regular file with a nonzero initial offset, and grows |
| while 'tail' is reading it. |
| [This bug was present in "the beginning".] |
|
|
| 'tail -f -n +NUM' no longer mishandles NUM values >= UINTMAX_MAX |
| when the input is seekable. |
| [bug introduced in coreutils-9.6] |
|
|
| 'tail --pid' avoids some unlikely races if the kernel reuses PIDs. |
| [bug introduced in coreutils-9.5] |
|
|
| 'tty' now exits with status 4 with a special diagnostic if ttyname |
| fails even though standard input is a tty. Formerly it quietly |
| pretended that standard input was not a tty. |
| [This bug was present in "the beginning".] |
|
|
| ** New Features |
|
|
| basenc supports the |
| the visually unambiguous Base58 encoding. |
|
|
| 'cksum -a' now supports the 'sha3' argument, to use the SHA3-224, |
| SHA3-256, SHA3-384, SHA3-512 message digest algorithms depending on |
| the argument passed to the required |
|
|
| 'cksum -a' now supports the 'sha2' argument, as a more consistent |
| interface than the existing 'sha224', 'sha256', 'sha384', 'sha512' |
| arguments, which are now selected with the |
|
|
| 'date' now outputs dates in the country's native calendar for the |
| Iranian locale (fa_IR) and for the Ethiopian locale (am_ET), and also |
| does so more consistently for the Thailand locale (th_TH.UTF-8). |
| |
| fold now supports multi-byte characters, honoring their column width. |
| Also the --characters (-c) option was added to wrap at a certain |
| number of characters, similarly to --bytes in uni-byte locales. |
| |
| nproc now honors any cgroup v2 configured CPU quotas, |
| which may reduce the effective number of processors available. |
| |
| stty supports setting arbitrary baud rates on supported systems, |
| like Hurd, Linux with glibc >= 2.42, and some BSDs. |
| Also on other systems the full set of supported baud rates |
| is determined at build time if possible. |
| |
| Commands that support hardware acceleration like cksum and wc |
| can now disable this acceleration at runtime through the |
| commonly used GLIBC_TUNABLES environment variable. For example |
| to disable the use of AVX512 instructions in cksum, you can: |
| export GLIBC_TUNABLES='glibc.cpu.hwcaps=-AVX512F' |
| |
| ** Changes to conform better to POSIX.1-2024 |
| |
| readlink now defaults to being verbose if the POSIXLY_CORRECT |
| environment variable is set. |
| |
| realpath now supports -E, which specifies the default behavior. |
| The corresponding long option is --canonicalize. |
| |
| tsort now accepts and ignores -w. |
| |
| ** Improvements |
| |
| 'factor' is now much faster at identifying large prime numbers, |
| and significantly faster on composite numbers greater than 2^128. |
| |
| fold now exits immediately upon receiving a write error, |
| which is significant when reading large / unbounded inputs. |
| |
| 'seq' is more accurate with large integer start values. |
| Previously 'seq 18446744073709551617 inf | head -n1' would |
| output the number before the user specified start value. |
| |
| ** Build-related |
| |
| cksum was not compilable by Apple LLVM 10.0.0 x86-64, which |
| lacks support for checking for the VPCLMULQDQ instruction. |
| [bug introduced in coreutils-9.6] |
| |
| |
| * Noteworthy changes in release 9.7 (2025-04-09) [stable] |
| |
| ** Bug fixes |
| |
| 'cat' would fail with "input file is output file" if input and |
| output are the same terminal device and the output is append-only. |
| [bug introduced in coreutils-9.6] |
| |
| 'cksum -a crc' misbehaved on aarch64 with 32-bit uint_fast32_t. |
| [bug introduced in coreutils-9.6] |
| |
| dd with the 'nocache' flag will now detect all failures to drop the |
| cache for the whole file. Previously it may have erroneously succeeded. |
| [bug introduced with the "nocache" feature in coreutils-8.11] |
| |
| 'ls -Z dir' would crash on all systems, and 'ls -l' could crash |
| on systems like Android with SELinux but without xattr support. |
| [bug introduced in coreutils-9.6] |
| |
| `ls -l` could output spurious "Not supported" errors in certain cases, |
| like with dangling symlinks on cygwin. |
| [bug introduced in coreutils-9.6] |
| |
| timeout would fail to timeout commands with infinitesimal timeouts. |
| For example `timeout 1e-5000 sleep inf` would never timeout. |
| [bug introduced with timeout in coreutils-7.0] |
| |
| sleep, tail, and timeout would sometimes sleep for slightly less |
| time than requested. |
| [bug introduced in coreutils-5.0] |
| |
| 'who -m' now outputs entries for remote logins. Previously login |
| entries prefixed with the service (like "sshd") were not matched. |
| [bug introduced in coreutils-9.4] |
| |
| ** Improvements |
| |
| 'logname' correctly returns the user who logged in the session, |
| on more systems. Previously on musl or uclibc it would have merely |
| output the LOGNAME environment variable. |
| |
| |
| * Noteworthy changes in release 9.6 (2025-01-17) [stable] |
| |
| ** Bug fixes |
| |
| cp fixes support for --update=none-fail, which would have been |
| rejected as an invalid option. |
| [bug introduced in coreutils-9.5] |
| |
| cp,mv --update no longer overrides --interactive or --force. |
| [bug introduced in coreutils-9.3] |
| |
| csplit no longer creates empty files given empty input. |
| [This bug was present in "the beginning".] |
| |
| ls and printf fix shell quoted output in the edge case of escaped |
| first and last characters, and single quotes in the string. |
| [bug introduced in coreutils-8.26] |
| |
| ls -l no longer outputs "Permission denied" errors on NFS |
| which may happen with files without read permission, and which resulted |
| in inaccurate indication of ACLs (missing '+' flag after mode). |
| [bug introduced in coreutils-9.4] |
| |
| ls -l no longer outputs "Not supported" errors on virtiofs. |
| [bug introduced in coreutils-9.4] |
| |
| mv works again with macFUSE file systems. Previously it would |
| have exited with a "Function not implemented" error. |
| [bug introduced in coreutils-8.28] |
| |
| nproc gives more consistent results on systems with more than 1024 CPUs. |
| Previously it would have ignored the affinity mask on such systems. |
| [bug introduced with nproc in coreutils-8.1] |
| |
| numfmt --from=iec-i now works with numbers without a suffix. |
| Previously such numbers were rejected with an error. |
| [bug introduced with numfmt in coreutils-8.21] |
| |
| printf now diagnoses attempts to treat empty strings as numbers, |
| as per POSIX. For example, "printf '%d' ''" now issues a diagnostic |
| and fails instead of silently succeeding. |
| [This bug was present in "the beginning".] |
| |
| pwd no longer outputs an erroneous double slash on systems |
| where the system getcwd() was completely replaced. |
| [bug introduced in coreutils-9.2] |
| |
| 'shuf' generates more-random output when the output is small. |
| [bug introduced in coreutils-8.6] |
| |
| `tail --follow=name` no longer waits indefinitely for watched |
| file names that are moved elsewhere within the same file system. |
| [bug introduced in coreutils-8.24] |
| |
| `tail --follow` without --retry, will consistently exit with failure status |
| where inotify is not used, when all followed files become inaccessible. |
| [This bug was present in "the beginning".] |
| |
| `tail --follow --pid=PID` will now exit when the PID dies, |
| even in the presence of blocking inputs like unopened fifos. |
| [This bug was present in "the beginning".] |
| |
| 'tail -c 4096 /dev/zero' no longer loops forever. |
| [This bug was present in "the beginning".] |
| |
| ** Changes in behavior |
| |
| 'factor' now buffers output more efficiently in some cases. |
| |
| install -C now dereferences symlink sources when comparing, |
| rather than always treating as different and performing the copy. |
| |
| kill -l and -t now list signal 0, as it's a valid signal to send. |
|
|
| ls's -f option now simply acts like -aU, instead of also ignoring |
| some earlier options. For example 'ls -fl' and 'ls -lf' are now |
| equivalent because -f no longer ignores an earlier -l. The new |
| behavior is more orthogonal and is compatible with FreeBSD. |
| |
| stat -f -c%T now reports the "fuseblk" file system type as "fuse", |
| given that there is no longer a distinct "ctl" fuse variant file system. |
| |
| ** New Features |
| |
| cksum -a now supports the "crc32b" option, which calculates the CRC |
| of the input as defined by ITU V.42, as used by gzip for example. |
| For performance pclmul instructions are used where supported. |
| |
| ls now supports the --sort=name option, |
| to explicitly select the default operation of sorting by file name. |
| |
| printf now supports indexed arguments, using the POSIX:2024 specified |
| %<i>$ format, where '<i>' is an integer referencing a particular argument, |
| thus allowing repetition or reordering of printf arguments. |
| |
| test supports the POSIX:2024 specified '<' and '>' operators with strings, |
| to compare the string locale collating order. |
| |
| timeout now supports the POSIX:2024 specified -f, and -p short options, |
| corresponding to --foreground, and --preserve-status respectively. |
| |
| ** Improvements |
| |
| cksum -a crc, makes use of AVX2, AVX512, and ARMv8 SIMD extensions |
| for time reductions of up to 40%, 60%, and 80% respectively. |
| |
| 'head -c NUM', 'head -n NUM', 'nl -l NUM', 'nproc |
| 'tail -c NUM', 'tail -n NUM', and 'tail --max-unchanged-stats NUM' |
| no longer fail merely because NUM stands for 2**64 or more. |
|
|
| sort operates more efficiently when used on pseudo files with |
| an apparent size of 0, like those in /proc. |
|
|
| stat and tail now know about the "bcachefs", and "pidfs" file system types. |
| stat -f -c%T now reports the file system type, |
| and tail -f uses inotify for these file systems. |
|
|
| wc now reads a minimum of 256KiB at a time. |
| This was previously 16KiB and increasing to 256KiB was seen to increase |
| wc -l performance by about 10% when reading cached files on modern systems. |
|
|
|
|
| * Noteworthy changes in release 9.5 (2024-03-28) [stable] |
|
|
| ** Bug fixes |
|
|
| chmod -R now avoids a race where an attacker may replace a traversed file |
| with a symlink, causing chmod to operate on an unintended file. |
| [This bug was present in "the beginning".] |
|
|
| cp, mv, and install no longer issue spurious diagnostics like "failed |
| to preserve ownership" when copying to GNU/Linux CIFS file systems. |
| They do this by working around some Linux CIFS bugs. |
|
|
| cp |
| for created directories. Previously on systems that didn't support ACLs, |
| cp would have reset the set-group-ID bit on created directories. |
| [bug introduced in coreutils-8.20] |
| |
| join and uniq now support multi-byte characters better. |
| For example, 'join -tX' now works even if X is a multi-byte character, |
| and both programs now treat multi-byte characters like U+3000 |
| IDEOGRAPHIC SPACE as blanks if the current locale treats them so. |
| |
| numfmt options like --suffix no longer have an arbitrary 127-byte limit. |
| [bug introduced with numfmt in coreutils-8.21] |
| |
| mktemp with --suffix now better diagnoses templates with too few X's. |
| Previously it conflated the insignificant |
| [bug introduced in coreutils-8.1] |
|
|
| sort again handles thousands grouping characters in single-byte locales |
| where the grouping character is greater than CHAR_MAX. For e.g. signed |
| character platforms with a 0xA0 (aka  ) grouping character. |
| [bug introduced in coreutils-9.1] |
|
|
| split |
| no longer overwrites the heap (CVE-2024-0684). |
| [bug introduced in coreutils-9.2] |
|
|
| tail no longer mishandles input from files in /proc and /sys file systems, |
| on systems with a page size larger than the stdio BUFSIZ. |
| [This bug was present in "the beginning".] |
|
|
| timeout avoids a narrow race condition, where it might kill arbitrary |
| processes after a failed process fork. |
| [bug introduced with timeout in coreutils-7.0] |
|
|
| timeout avoids a narrow race condition, where it might fail to |
| kill monitored processes immediately after forking them. |
| [bug introduced with timeout in coreutils-7.0] |
|
|
| wc no longer fails to count unprintable characters as parts of words. |
| [bug introduced in textutils-2.1] |
|
|
| ** Changes in behavior |
|
|
| base32 and base64 no longer require padding when decoding. |
| Previously an error was given for non padded encoded data. |
|
|
| base32 and base64 have improved detection of corrupted encodings. |
| Previously encodings with non zero padding bits were accepted. |
|
|
| basenc |
| Previously an error was given for lower case hex digits. |
|
|
| cp |
| existing files are encountered in the destination. Instead they revert |
| to the behavior from before v9.2, silently skipping existing files. |
|
|
| ls |
| and will take precedence over previously specified formats or hyperlink mode. |
|
|
| numfmt will accept lowercase 'k' to indicate Kilo or Kibi units on input, |
| and uses lowercase 'k' when outputting such units in '--to=si' mode. |
|
|
| pinky no longer tries to canonicalize the user's login location by default, |
| rather requiring the new --lookup option to enable this often slow feature. |
| |
| wc no longer ignores encoding errors when counting words. |
| Instead, it treats them as non white space. |
| |
| ** New features |
| |
| chgrp now accepts the --from=OWNER:GROUP option to restrict changes to files |
| with matching current OWNER and/or GROUP, as already supported by chown(1). |
| |
| chmod adds support for -h, -H,-L,-P, and --dereference options, providing |
| more control over symlink handling. This supports more secure handling of |
| CLI arguments, and is more consistent with chown, and chmod on other systems. |
| |
| cp now accepts the --keep-directory-symlink option (like tar), to preserve |
| and follow existing symlinks to directories in the destination. |
| |
| cp and mv now accept the --update=none-fail option, which is similar |
| to the --no-clobber option, except that existing files are diagnosed, |
| and the command exits with failure status if existing files. |
| The -n,--no-clobber option is best avoided due to platform differences. |
| |
| env now accepts the -a,--argv0 option to override the zeroth argument |
| of the command being executed. |
| |
| mv now accepts an --exchange option, which causes the source and |
| destination to be exchanged. It should be combined with |
| --no-target-directory (-T) if the destination is a directory. |
| The exchange is atomic if source and destination are on a single |
| file system that supports atomic exchange; --exchange is not yet |
| supported in other situations. |
| |
| od now supports printing IEEE half precision floating point with -t fH, |
| or brain 16 bit floating point with -t fB, where supported by the compiler. |
| |
| tail now supports following multiple processes, with repeated --pid options. |
| |
| ** Improvements |
| |
| cp,mv,install,cat,split now read and write a minimum of 256KiB at a time. |
| This was previously 128KiB and increasing to 256KiB was seen to increase |
| throughput by 10-20% when reading cached files on modern systems. |
| |
| env,kill,timeout now support unnamed signals. kill(1) for example now |
| supports sending such signals, and env(1) will list them appropriately. |
| |
| SELinux operations in file copy operations are now more efficient, |
| avoiding unneeded MCS/MLS label translation. |
| |
| sort no longer dynamically links to libcrypto unless -R is used. |
| This decreases startup overhead in the typical case. |
| |
| wc is now much faster in single-byte locales and somewhat faster in |
| multi-byte locales. |
| |
| |
| * Noteworthy changes in release 9.4 (2023-08-29) [stable] |
| |
| ** Bug fixes |
| |
| On GNU/Linux s390x and alpha, programs like 'cp' and 'ls' no longer |
| fail on files with inode numbers that do not fit into 32 bits. |
| [This bug was present in "the beginning".] |
| |
| 'b2sum |
| presented with malformed checksum lines. |
| [bug introduced in coreutils-9.2] |
|
|
| 'cp --parents' again succeeds when preserving mode for absolute directories. |
| Previously it would have failed with a "No such file or directory" error. |
| [bug introduced in coreutils-9.1] |
|
|
| 'cp --sparse=never' will avoid copy-on-write (reflinking) and copy offloading, |
| to ensure no holes present in the destination copy. |
| [bug introduced in coreutils-9.0] |
|
|
| cksum again diagnoses read errors in its default CRC32 mode. |
| [bug introduced in coreutils-9.0] |
|
|
| 'cksum --check' now ensures filenames with a leading backslash character |
| are escaped appropriately in the status output. |
| This also applies to the standalone checksumming utilities. |
| [bug introduced in coreutils-8.25] |
|
|
| dd again supports more than two multipliers for numbers. |
| Previously numbers of the form '1024x1024x32' gave "invalid number" errors. |
| [bug introduced in coreutils-9.1] |
|
|
| factor, numfmt, and tsort now diagnose read errors on the input. |
| [This bug was present in "the beginning".] |
|
|
| 'install --strip' now supports installing to files with a leading hyphen. |
| Previously such file names would have caused the strip process to fail. |
| [This bug was present in "the beginning".] |
|
|
| ls now shows symlinks specified on the command line that can't be traversed. |
| Previously a "Too many levels of symbolic links" diagnostic was given. |
| [This bug was present in "the beginning".] |
| |
| pinky, uptime, users, and who no longer misbehave on 32-bit GNU/Linux |
| platforms like x86 and ARM where time_t was historically 32 bits. |
| Also see the new --enable-systemd option mentioned below. |
| [bug introduced in coreutils-9.0] |
| |
| 'pr --length=1 --double-space' no longer enters an infinite loop. |
| [This bug was present in "the beginning".] |
| |
| shred again operates on Solaris when built for 64 bits. |
| Previously it would have exited with a "getrandom: Invalid argument" error. |
| [bug introduced in coreutils-9.0] |
| |
| tac now handles short reads on its input. Previously it may have exited |
| erroneously, especially with large input files with no separators. |
| [This bug was present in "the beginning".] |
| |
| 'uptime' no longer incorrectly prints "0 users" on OpenBSD, |
| and is being built again on FreeBSD and Haiku. |
| [bugs introduced in coreutils-9.2] |
| |
| 'wc -l' and 'cksum' no longer crash with an "Illegal instruction" error |
| on x86 Linux kernels that disable XSAVE YMM. This was seen on Xen VMs. |
| [bug introduced in coreutils-9.0] |
| |
| ** Changes in behavior |
| |
| 'cp -v' and 'mv -v' will no longer output a message for each file skipped |
| due to -i, or -u. Instead they only output this information with --debug. |
| I.e., 'cp -u -v' etc. will have the same verbosity as before coreutils-9.3. |
| |
| 'cksum -b' no longer prints base64-encoded checksums. Rather that |
| short option is reserved to better support emulation of the standalone |
| checksum utilities with cksum. |
| |
| 'mv dir x' now complains differently if x/dir is a nonempty directory. |
| Previously it said "mv: cannot move 'dir' to 'x/dir': Directory not empty", |
| where it was unclear whether 'dir' or 'x/dir' was the problem. |
| Now it says "mv: cannot overwrite 'x/dir': Directory not empty". |
| Similarly for other renames where the destination must be the problem. |
| [problem introduced in coreutils-6.0] |
| |
| ** Improvements |
| |
| cp, mv, and install now avoid copy_file_range on linux kernels before 5.3 |
| irrespective of which kernel version coreutils is built against, |
| reinstating that behavior from coreutils-9.0. |
| |
| comm, cut, join, od, and uniq will now exit immediately upon receiving a |
| write error, which is significant when reading large / unbounded inputs. |
| |
| split now uses more tuned access patterns for its potentially large input. |
| This was seen to improve throughput by 5% when reading from SSD. |
| |
| split now supports a configurable $TMPDIR for handling any temporary files. |
| |
| tac now falls back to '/tmp' if a configured $TMPDIR is unavailable. |
| |
| 'who -a' now displays the boot time on Alpine Linux, OpenBSD, |
| Cygwin, Haiku, and some Android distributions |
| |
| 'uptime' now succeeds on some Android distributions, and now counts |
| VM saved/sleep time on GNU (Linux, Hurd, kFreeBSD), NetBSD, OpenBSD, |
| Minix, and Cygwin. |
| |
| On GNU/Linux platforms where utmp-format files have 32-bit timestamps, |
| pinky, uptime, and who can now work for times after the year 2038, |
| so long as systemd is installed, you configure with a new, experimental |
| option --enable-systemd, and you use the programs without file arguments. |
| (For example, with systemd 'who /var/log/wtmp' does not work because |
| systemd does not support the equivalent of /var/log/wtmp.) |
| |
| |
| * Noteworthy changes in release 9.3 (2023-04-18) [stable] |
| |
| ** Bug fixes |
| |
| cp --reflink=auto (the default), mv, and install |
| will again fall back to a standard copy in more cases. |
| Previously copies could fail with permission errors on |
| more restricted systems like android or containers etc. |
| [bug introduced in coreutils-9.2] |
| |
| cp --recursive --backup will again operate correctly. |
| Previously it may have issued "File exists" errors when |
| it failed to appropriately rename files being replaced. |
| [bug introduced in coreutils-9.2] |
| |
| date --file and dircolors will now diagnose a failure to read a file. |
| Previously they would have silently ignored the failure. |
| [This bug was present in "the beginning".] |
| |
| md5sum --check again correctly prints the status of each file checked. |
| Previously the status for files was printed as 'OK' once any file had passed. |
| This also applies to cksum, sha*sum, and b2sum. |
| [bug introduced in coreutils-9.2] |
| |
| wc will now diagnose if any total counts have overflowed. |
| [This bug was present in "the beginning".] |
| |
| `wc -c` will again correctly update the read offset of inputs. |
| Previously it deduced the size of inputs while leaving the offset unchanged. |
| [bug introduced in coreutils-8.27] |
| |
| Coreutils programs no longer fail for timestamps past the year 2038 |
| on obsolete configurations with 32-bit signed time_t, because the |
| build procedure now rejects these configurations. |
| [This bug was present in "the beginning".] |
| |
| ** Changes in behavior |
| |
| 'cp -n' and 'mv -n' now issue an error diagnostic if skipping a file, |
| to correspond with -n inducing a nonzero exit status as of coreutils 9.2. |
| Similarly 'cp -v' and 'mv -v' will output a message for each file skipped |
| due to -n, -i, or -u. |
| |
| ** New features |
| |
| cp and mv now support --update=none to always skip existing files |
| in the destination, while not affecting the exit status. |
| This is equivalent to the --no-clobber behavior from before v9.2. |
| |
| |
| * 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 |
| 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 |
| 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 |
| 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 |
| checksums. It also accepts/checks such checksums. |
|
|
| cksum now accepts the |
| No file name or other information is output in this mode. |
|
|
| cp, mv, and install now accept the |
| print details on how a file is being copied. |
|
|
| factor now accepts the |
| in the form p^e, rather than repeating the prime p, e times. |
|
|
| ls now supports the |
| select the default mtime timestamp for display and sorting. |
|
|
| mv now supports the |
| 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 |
| to give explicit control over when the total is output. |
|
|
| ** Improvements |
|
|
| cp |
| 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 |
| 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 |
| 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. |
| |
| |
| * Noteworthy changes in release 9.1 (2022-04-15) [stable] |
| |
| ** Bug fixes |
| |
| chmod -R no longer exits with error status when encountering symlinks. |
| All files would be processed correctly, but the exit status was incorrect. |
| [bug introduced in coreutils-9.0] |
| |
| If 'cp -Z A B' checks B's status and some other process then removes B, |
| cp no longer creates B with a too-generous SELinux security context |
| before adjusting it to the correct value. |
| [bug introduced in coreutils-8.17] |
|
|
| 'cp --preserve=ownership A B' no longer ignores the umask when creating B. |
| Also, 'cp --preserve-xattr A B' is less likely to temporarily chmod u+w B. |
| [bug introduced in coreutils-6.7] |
|
|
| On macOS, 'cp A B' no longer miscopies when A is in an APFS file system |
| and B is in some other file system. |
| [bug introduced in coreutils-9.0] |
|
|
| On macOS, fmt no longer corrupts multi-byte characters |
| by misdetecting their component bytes as spaces. |
| [This bug was present in "the beginning".] |
|
|
| 'id xyz' now uses the name 'xyz' to determine groups, instead of xyz's uid. |
| [bug introduced in coreutils-8.22] |
| |
| 'ls -v' and 'sort -V' no longer mishandle corner cases like "a..a" vs "a.+" |
| or lines containing NULs. Their behavior now matches the documentation |
| for file names like ".m4" that consist entirely of an extension, |
| and the documentation has been clarified for unusual cases. |
| [bug introduced in coreutils-7.0] |
| |
| On macOS, 'mv A B' no longer fails with "Operation not supported" |
| when A and B are in the same tmpfs file system. |
| [bug introduced in coreutils-9.0] |
| |
| 'mv -T |
| for B when A is a directory, possibly inflooping. |
| [bug introduced in coreutils-6.3] |
|
|
| ** Changes in behavior |
|
|
| cat now uses the copy_file_range syscall if available, when doing |
| simple copies between regular files. This may be more efficient, by avoiding |
| user space copies, and possibly employing copy offloading or reflinking. |
|
|
| chown and chroot now warn about usages like "chown root.root f", |
| which have the nonstandard and long-obsolete "." separator that |
| causes problems on platforms where user names contain ".". |
| Applications should use ":" instead of ".". |
|
|
| cksum no longer allows abbreviated algorithm names, |
| so that forward compatibility and robustness is improved. |
|
|
| date +'%-N' now suppresses excess trailing digits, instead of always |
| padding them with zeros to 9 digits. It uses clock_getres and |
| clock_gettime to infer the clock resolution. |
|
|
| dd conv=fsync now synchronizes output even after a write error, |
| and similarly for dd conv=fdatasync. |
|
|
| dd now counts bytes instead of blocks if a block count ends in "B". |
| For example, 'dd count=100KiB' now copies 100 KiB of data, not |
| 102,400 blocks of data. The flags count_bytes, skip_bytes and |
| seek_bytes are therefore obsolescent and are no longer documented, |
| though they still work. |
|
|
| ls no longer colors files with capabilities by default, as file-based |
| capabilities are rarely used, and lookup increases processing per file by |
| about 30%. It's best to use getcap [-r] to identify files with capabilities. |
| |
| ls no longer tries to automount files, reverting to the behavior |
| before the statx() call was introduced in coreutils-8.32. |
| |
| stat no longer tries to automount files by default, reverting to the |
| behavior before the statx() call was introduced in coreutils-8.32. |
| Only `stat --cached=never` will continue to automount files. |
| |
| timeout --foreground --kill-after=... will now exit with status 137 |
| if the kill signal was sent, which is consistent with the behavior |
| when the --foreground option is not specified. This allows users to |
| distinguish if the command was more forcefully terminated. |
| |
| ** New Features |
| |
| dd now supports the aliases iseek=N for skip=N, and oseek=N for seek=N, |
| like FreeBSD and other operating systems. |
| |
| dircolors takes a new --print-ls-colors option to display LS_COLORS |
| entries, on separate lines, colored according to the entry color code. |
| |
| dircolors will now also match COLORTERM in addition to TERM environment |
| variables. The default config will apply colors with any COLORTERM set. |
| |
| ** Improvements |
| |
| cp, mv, and install now use openat-like syscalls when copying to a directory. |
| This avoids some race conditions and should be more efficient. |
| |
| On macOS, cp creates a copy-on-write clone if source and destination |
| are regular files on the same APFS file system, the destination does |
| not already exist, and cp is preserving mode and timestamps (e.g., |
| 'cp -p', 'cp -a'). |
| |
| The new 'date' option --resolution outputs the timestamp resolution. |
| |
| With conv=fdatasync or conv=fsync, dd status=progress now reports |
| any extra final progress just before synchronizing output data, |
| since synchronizing can take a long time. |
| |
| printf now supports printing the numeric value of multi-byte characters. |
| |
| sort --debug now diagnoses issues with --field-separator characters |
| that conflict with characters possibly used in numbers. |
| |
| 'tail -f file | filter' now exits on Solaris when filter exits. |
| |
| root invoked coreutils, that are built and run in single binary mode, |
| now adjust /proc/$pid/cmdline to be more specific to the utility |
| being run, rather than using the general "coreutils" binary name. |
| |
| ** Build-related |
| |
| AIX builds no longer fail because some library functions are not found. |
| [bug introduced in coreutils-8.32] |
| |
| |
| * Noteworthy changes in release 9.0 (2021-09-24) [stable] |
| |
| ** Bug fixes |
| |
| chmod -v no longer misreports modes of dangling symlinks. |
| [bug introduced in coreutils-5.3.0] |
| |
| cp -a --attributes-only now never removes destination files, |
| even if the destination files are hardlinked, or the source |
| is a non regular file. |
| [bug introduced in coreutils-8.6] |
| |
| csplit --suppress-matched now elides the last matched line |
| when a specific number of pattern matches are performed. |
| [bug introduced with the --suppress-matched feature in coreutils-8.22] |
| |
| df no longer outputs duplicate remote mounts in the presence of bind mounts. |
| [bug introduced in coreutils-8.26] |
| |
| df no longer mishandles command-line args that it pre-mounts |
| [bug introduced in coreutils-8.29] |
| |
| du no longer crashes on XFS file systems when the directory hierarchy is |
| heavily changed during the run. |
| [bug introduced in coreutils-8.25] |
| |
| env -S no longer crashes when given unusual whitespace characters |
| [bug introduced in coreutils-8.30] |
| |
| expr no longer mishandles unmatched \(...\) in regular expressions. |
| [bug introduced in coreutils-6.0] |
| |
| ls no longer crashes when printing the SELinux context for unstattable files. |
| [bug introduced in coreutils-6.9.91] |
| |
| mkdir -m no longer mishandles modes more generous than the umask. |
| [bug introduced in coreutils-8.22] |
| |
| nl now handles single character --section-delimiter arguments, |
| by assuming a second ':' character has been specified, as specified by POSIX. |
| [This bug was present in "the beginning".] |
| |
| pr again adjusts tabs in input, to maintain alignment in multi column output. |
| [bug introduced in coreutils-6.9] |
| |
| rm no longer skips an extra file when the removal of an empty directory fails. |
| [bug introduced by the rewrite to use fts in coreutils-8.0] |
| |
| split --number=K/N will again correctly split chunk K of N to stdout. |
| Previously a chunk starting after 128KiB, output the wrong part of the file. |
| [bug introduced in coreutils-8.26] |
| |
| tail -f no longer overruns a stack buffer when given too many files |
| to follow and ulimit -n exceeds 1024. |
| [bug introduced in coreutils-7.5] |
| |
| tr no longer crashes when using --complement with certain |
| invalid combinations of case character classes. |
| [bug introduced in coreutils-8.6] |
| |
| basenc --base64 --decode no longer silently discards decoded characters |
| on (1024*5) buffer boundaries |
| [bug introduced in coreutils-8.31] |
| |
| ** Changes in behavior |
| |
| cp and install now default to copy-on-write (COW) if available. |
| I.e., cp now uses --reflink=auto mode by default. |
| |
| cp, install and mv now use the copy_file_range syscall if available. |
| Also, they use lseek+SEEK_HOLE rather than ioctl+FS_IOC_FIEMAP on sparse |
| files, as lseek is simpler and more portable. |
| |
| On GNU/Linux systems, ls no longer issues an error message on a |
| directory merely because it was removed. This reverts a change |
| that was made in release 8.32. |
| |
| ptx -T no longer attempts to substitute old-fashioned TeX escapes |
| for 8-bit non-ASCII alphabetic characters. TeX indexes should |
| instead use '\usepackage[latin1]{inputenc}' or equivalent. |
| |
| stat will use decomposed (major,minor) device numbers in its default format. |
| This is less ambiguous, and more consistent with ls. |
| |
| sum [-r] will output a file name, even if only a single name is passed. |
| This is consistent with sum -s, cksum, and other sum(1) implementations. |
| |
| ** New Features |
| |
| cksum now supports the -a (--algorithm) option to select any |
| of the existing sum, md5sum, b2sum, sha*sum implementations etc. |
| cksum now subsumes all of these programs, and coreutils |
| will introduce no future standalone checksum utility. |
| |
| cksum -a now supports the 'sm3' argument, to use the SM3 digest algorithm. |
| |
| cksum --check now supports auto detecting the digest type to use, |
| when verifying tagged format checksums. |
| |
| expr and factor now support bignums on all platforms. |
| |
| ls --classify now supports the "always", "auto", or "never" flags, |
| to support only outputting classifier characters if connected to a tty. |
| |
| ls now accepts the --sort=width option, to sort by file name width. |
| This is useful to more compactly organize the default vertical column output. |
| |
| ls now accepts the --zero option, to terminate each output line with |
| NUL instead of newline. |
| |
| nl --line-increment can now take a negative number to decrement the count. |
| |
| stat supports more formats for representing decomposed device numbers. |
| %Hd,%Ld and %Hr,%Lr will output major,minor device numbers and device types |
| respectively. %d corresponds to st_dev and %r to std_rdev. |
| |
| ** Improvements |
| |
| cat --show-ends will now show \r\n as ^M$. Previously the \r was taken |
| literally, thus overwriting the first character in the line with '$'. |
| |
| cksum [-a crc] is now up to 4 times faster by using a slice by 8 algorithm, |
| and at least 8 times faster where pclmul instructions are supported. |
| A new --debug option will indicate if pclmul is being used. |
| |
| md5sum --check now supports checksum files with CRLF line endings. |
| This also applies to cksum, sha*sum, and b2sum. |
| |
| df now recognizes these file systems as remote: |
| acfs, coda, fhgfs, gpfs, ibrix, ocfs2, and vxfs. |
| |
| rmdir now clarifies the error if a symlink_to_dir/ has not been traversed. |
| This is the case on GNU/Linux systems, where the trailing slash is ignored. |
| |
| stat and tail now know about the "devmem", "exfat", "secretmem", "vboxsf", |
| and "zonefs" file system types. stat -f -c%T now reports the file system |
| type, and tail -f uses polling for "vboxsf" and inotify for the others. |
| |
| timeout now supports sub-second timeouts on macOS. |
| |
| wc is up to 5 times faster when counting only new line characters, |
| where avx2 instructions are supported. |
| A new --debug option will indicate if avx2 is being used. |
| |
| |
| * 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.] |
|
|
| date now pads nanoseconds on the right, not the left. For example, |
| if the time is currently 1590020079.003388470 seconds after the |
| Epoch, then "date '+%s.%-N'" formerly output "1590020079.3388470", |
| and it now outputs "1590020079.00338847". |
|
|
| 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 |
| file creation time, where available. |
|
|
| od |
| file, greatly improving performance in some cases. |
|
|
| stat(1) supports a new |
| 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 |
| regardless of any other arguments present before any optional '--' |
| end-of-options marker. |
|
|
| nohup now processes |
| 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 |
|
|
| '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 ' |
| '--block-signal[=SIG], to setup signal handling before executing a program. |
| |
| env now supports ' |
| signal handling before executing a program. |
|
|
| ** New programs |
|
|
| 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 |
| it is self referential. |
|
|
| ls |
|
|
| ** New features |
|
|
| cp |
|
|
| env supports a new -v/ |
| each processing step. |
|
|
| env supports a new -S/ |
| string into multiple arguments. Used to pass multiple arguments in scripts |
| (shebang lines). |
|
|
| md5sum accepts a new option: |
| NUL instead of a newline character. This also disables file name escaping. |
| This also applies to sha*sum and b2sum. |
|
|
| rm |
| 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 |
| 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 |
| 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 |
| 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 |
|
|
| ** Improvements |
|
|
| dd now supports iflag=direct with arbitrary sized files on all file systems. |
|
|
| tail |
| rather than reading from the start. |
|
|
| Utilities which do not support long options (other than the default |
| and |
| 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, |
| [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 |
| useful for visualizing diff output for example. |
|
|
| ls supports a new |
| format links to files, supported by some terminals. |
|
|
| split supports a new |
| lower case hexadecimal suffixes, similar to the |
|
|
| env now has a |
| 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 |
|
|
| 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 |
| as appropriate for the -a, |
| [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 programs |
| |
| 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 |
| replaced before inotify watches were created. |
| [bug introduced in coreutils-7.5] |
|
|
| tail |
| [bug introduced in the beginning] |
|
|
| tail |
| when those files are being created or renamed. |
| [bug introduced in coreutils-7.5] |
|
|
| ** New features |
|
|
| chroot accepts the new |
| 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 |
|
|
| 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 |
|
|
| split accepts a new |
| 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 |
| |
|
|
| tee accepts a new |
| 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 |
| 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 |
| 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 |
| 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 |
|
|
| 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 |
| system type, and tail -f uses polling for files on IBRIX file systems. |
|
|
| wc -l processes short lines much more efficiently. |
|
|
| References from |
| 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 |
| 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 |
| 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 |
|
|
| 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 |
|
|
| head |
| now copies all input to stdout. Previously nothing was output in this case. |
| [bug introduced with the |
|
|
| 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 unstattable |
| 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 |
| 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 |
|
|
| 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 |
| 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 |
| symbolic link to a target, irrespective of how the target is specified. |
|
|
| split now accepts an optional "from" argument to |
| which changes the start number from the default of 0. |
|
|
| split now accepts the |
| 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 |
| 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 |
| |
|
|
| ** 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 |
| [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 |
| 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 |
| 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 |
| 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 |
| [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 |
| 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 |
| 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 |
| 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 |
| Note the use of single quotes, not double quotes. |
| That creates files named xaa.xz, xab.xz and xac.xz. |
|
|
| timeout accepts a new |
| 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 |
| 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 |
| to the number of available processors. |
|
|
| ** New features |
|
|
| split accepts the |
| files, as well as the |
| 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 |
| 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 |
| control like taskset for example. |
|
|
| stat now provides translated output when no format is specified. |
|
|
| stat no longer accepts the |
| 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 |
| 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 |
| %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 "+/-" |
| 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 |
| The rewrite to make rm use fts introduced a regression whereby |
| a command 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 |
| files with capabilities were often not colored, and also sometimes, files |
| without capabilities 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 |
| 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 |
| 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 |
| 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 |
| 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 standard-conforming 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 " |
|
|
| 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 |
| 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 |
| [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 |
| [bug introduced in coreutils-7.1] |
|
|
| ls |
| 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 |
|
|
| du |
| 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 |
| processing the first file name, unless the list of names is known |
| to be small enough. |
|
|
| ** Changes in behavior |
|
|
| cp and mv: the |
| 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 |
| |
|
|
| 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 |
|
|
| comm accepts new option, |
| of an output delimiter other than the default single TAB. |
|
|
| cp and mv: the deprecated |
|
|
| 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 |
| 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 colors names of 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 |
|
|
| shuf |
| previously claimed it was called |
|
|
| ** 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 |
| * "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 |
| 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 |
| 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 |
|
|
| "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: |
|
|
|
|
| * 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: |
| |
| 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 |
| 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 |
|
|
| 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 |
| 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 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 |
| 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 |
| FMT is automatically newline terminated. The first stable release |
| containing this change was 5.92. |
|
|
| stat accepts the new option |
| automatically newline terminated. |
|
|
| stat: backslash escapes are interpreted in a format string specified |
| via |
| 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 |
|
|
| 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 |
| 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 |
| |
| |
|
|
| 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 |
|
|
| ** 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 |
|
|
| date accepts the new option |
| 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 |
|
|
| |
| and/or group match those of an affected symlink. |
|
|
| Check for incompatible options. When -R and |
| 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 |
|
|
| 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 |
| 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 % |
| printf function. |
|
|
| ptx now diagnoses invalid values for its |
| and |
|
|
| 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 |
| and -t is now a short name for their |
|
|
| 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 ' |
| 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 |
| 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: |
| and |
|
|
| The stat option |
| consistency with POSIX "file system" and with cp and du |
|
|
| ** Removed features |
|
|
| md5sum and sha1sum's undocumented --string option has been removed. |
| |
| tail's undocumented |
|
|
| * 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 |
|
|
| 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: |
| |
|
|
| 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 |
| ( |
| 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/ |
| 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 |
| arithmetic bug that could result in bounds violations. |
|
|
| ls |
| (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 |
|
|
| split accepts a new option -d or |
|
|
| 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 |
| 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 |
| 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 |
| N lines (bytes) at the end of the file |
| - md5sum |
| 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 |
|
|
| ** 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 |
|
|
|
|
| ======================================================================== |
| 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: |
| |
| The -u option now produces POSIX-specified results and is the same as |
| the long option '--users'. |
| * 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 |
| 'uname -a' now outputs -i and -o information at the end. |
| New uname option |
| Uname option |
| and |
| 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 |
| [2.0h] |
| * all programs fail when printing |
| * printf exits nonzero upon write failure |
| * yes now detects and terminates upon write failure |
| * date |
| * 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 |
| [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 |
|
|
| ======================================================================== |
| For older NEWS entries for the fileutils, textutils, and sh-utils |
| packages, see ./old |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |