Тихо и незаметно в последнюю 13-ю пятницу уходящего года вышла новая версия GNU coreutils. За десять месяцев, прошедших с прошлого релиза, 32 разработчика сделали 195 коммитов.
Выход версии 8.22 прежде всего связан с исправлением ошибок и улучшением производительности.
Значительные изменения.
Исправление ошибок:
- df теперь корректно выводит список примонтированных файловых систем в том случае, когда невозможно выполнить stat() на точке монтирования (ошибка появилась в предыдущей версии).
- df теперь корректно обрабатывает символьные ссылки на специальные файлы, содержащие примонтированные файловые системы (ошибка присутствовала изначально).
- df теперь корректно обрабатывает dive nodes в случае наличия точек монтирования с опцией «bind». Теперь df показывает основную файловую систему, а не последнюю примонтированную (ошибка присутствовала изначально).
- install теперь удаляет целевой файл, если программа strip завершается некорректно. Ранее файл сохранялся, возможно, с неправильно выставленными правами доступа (ошибка присутствовала изначально).
- ln --relative теперь правильно обновляет существующие символические ссылки. Ранее работало так:
Ошибка появилась в версии 8.16, когда была добавлена опция "--relative".
# Create some directories mkdir test mkdir test/folder1 mkdir test/folder2 #Create some files touch test/folder1/file1 touch test/folder1/file2 #Create a relative symlink in folder2 to file1 ln -sr test/folder1/file1 test/folder2/link #Check the link ls -l test/folder2/link # Correctly output a link to ../folder1/file1 #Overwrite the symlink to point to file2 ln -sfr test/folder1/file2 test/folder2/link #Check the link ls -l test/folder2/link # Wrongly output a link to file2 instead of ../folder1/file2
- ls --recursive больше не завершает работу с «серьезным» кодом ошибки (2), если произошла ошибка чтения директории, не указанной в командой строке (ошибка появилась в версии 5.3.0).
- mkdir, mkfifo, mknod теперь работают лучше при создании файла в директории, чья ACL-umask отличается от umask процесса, если umask директории является более приоритетной, чем umask процесса, например, в системе GNU/Linux (ошибка появилась в версии 6.0).
- mv теперь заменят пустые директории в точке назначения на директории из источника при копировании между файловыми системами (ошибка присутствовала изначально).
- od -wN при N, большим 64K, на системах с 32-битным size_t печатала 2*N избыточных байтов заполнения (ошибка появилась в версии 7.0).
- rm -I теперь запрашивает подтверждение при удалении файла с защитой от записи (ошибка появилась в версии 6.8).
- shred once again uses direct I/O on systems requiring aligned buffers. Also direct I/O failures for odd sized writes at end of file are now handled. [The «last write» bug was introduced in coreutils-5.3.0 but masked by the alignment bug introduced in coreutils-6.0].
- tail --retry f теперь ждет появления указанного файла, ранее tail немедленно завершала работу, если файл недоступен. Ошибка появилась вместе с поддержкой inotify в версии 7.5.
- tail -F теперь лучше поддерживает символические ссылки. Ранее tail не реагировала, когда объект, на который указывает символическая ссылка, появлялся или (пере)создавался (ошибка появилась вместе с поддержкой inotify в версии 7.5).
Новые возможности:
- cp, install, mkdir, mknod, mkfifo и mv с помощью опции -Z теперь поддерживают функциональность «restorecon», устанавливающую контекст SELinux в соответствии с новым положением в файловой системе.
- csplit теперь принимает новую опцию "--supressed-matched", чтобы пропускать строки-разделители.
- У df --output появилось новое поле «file», позволяющее указывать определенное имя файла; будут показаны файловые системы, содержащие эти файлы.
- du --inodes показывает, сколько инодов использовано.
- id -z использует в качестве разделителя нулевой символ вместо пробела.
- новая опция id и ls отображают контекст безопасности SMACK там, где это возможно.
- id теперь может искать пользователей и по ID, а не только по имени.
- join --zero-terminated (-z) в качестве символа окончания строки используют нулевой символ.
- uniq --group не удаляет повторяющиеся элементы, а объединяет их в группы, отделяя пустыми строками.
- shred --remove даёт больший контроль над операциями, что позволяет снизить издержки, связанные с sync.
- shuf --repeat может повторять пункты в выводе.
Изменения в поведении:
- cp --link теперь разыменовывает символические ссылки на стороне источника перед тем, как создать жесткую ссылку на стороне приемника, если не указана опция -P, --no-deref. Ранее создавалась жесткая ссылка на символическую ссылку даже при указании опций -L, -H.
- cp, install, mkdir, mknod и mkfifo более не принимают аргумент для короткой опции -Z. Длинная опция --context по-прежнему используется с указанием дополнительного аргумента.
- dd status=none подавляет вывод все нефатальных диагностических сообщений.
- df больше не принимает устаревшую длинную опцию --megabytes.
- stdbuf теперь требует указания хотя бы одного режима буферизации.
Улучшения:
- Скорость кодирования больших объёмов данных в base64 увеличилась примерно на 60%.
- md5sum теперь может использовать библиотеку libcrypto, что позволяет использовать системно-специфичную логику. Так, произодительность sha1sum увеличивается на 40% на i3-2310M.
- stat иtail теперь лучше работают с файловыми системами EFIVARFS, EXOFS, F2FS, HOSTFS, SMACKFS, SNFS и UBIFS. Команда stat -f --format=%T правильно указывает тип файловой системы. Команда tail -f использует inotify (кроме SNFS).
- shuf более эффективно выводит подмножество большого ввода. Reservoir sampling is used to limit memory usage based on the number of outputs, rather than the number of inputs.
- shred теперь пишет блоками большего размера, 64КиБ вместо 12КиБ.
- split --line-bytes=SIZE теперь использует столько памяти, сколько действительно нужно, вместо того, чтобы сразу же выделить SIZE байтов при запуске программы.
- stty теперь позволяет конфигурировать «stick (mark/space) parity where available.
Кроме того, теперь factor успешно собирается на системах aarch64 (ошибка появилась в версии 8.20).
>>> Подробности