LINUX.ORG.RU

util-linux 2.29

 


0

1

6 октября Карел Жак (Karel Žák) анонсировал новую версию (на данный момент rc1, однако среди отличий между rc1 и релизом будут только исправления ошибок) пакета util-linux, содержащего основные системные утилиты для современных дистрибутивов GNU/Linux. Серьёзных изменений нет, за исключением libsmartcols, где было сделано много улучшений.

cal(1) стал дружелюбнее к пользователю. Теперь можно указывать название месяца (напр., cal Январь 2017) и использовать относительные временные отметки, например:

$ cal now
$ cal '1 year ago'
$ cal '+2 months'

В fdisk(8) появилась поддержка очистки только что созданных разделов. Эту особенность можно контролировать через опцию --wipe-partitions[==auto|never|default].
По умолчанию в интерактивном режиме пользователю будет предложен выбор, если найдена подпись ФС или RAID. План состоит в том, чтобы новые блочные устройства можно было использовать без коллизий и дополнительного шага wipefs(8) (команды форматирования вроде mkfs и пользователи часто не очищают устройство сами).

findmnt --verify, возможно, наиболее привлекательное улучшение для администраторов. Команда сканирует /etc/fstab и пробует проверить конфигурацию. Опция --verify, в отличие от традиционной команды для проверки конфигурации mount -a, не использует mount(2), но проверяет корректность синтаксиса, конвертацию LABEL/UUID в пути, порядок точек монтирования, поддержку используемых ФС. Опция --verify вместе с --verbose показывает много деталей.
Например, мои файловые системы:

# findmnt --verify --verbose -t ext4
/ 
   [ ] target exists
   [ ] LABEL=ROOT translated to /dev/sda4
   [ ] source /dev/sda4 exists
   [ ] FS type is ext4
   [W] recommended root FS passno is 1 (current is 2)
/boot
   [ ] target exists 
   [ ] UUID=c5490147-2a6c-4c8a-aa1b-33492034f927 translated to /dev/sda2
   [ ] source /dev/sda2 exists
   [ ] FS type is ext4
/home
   [ ] target exists
   [ ] UUID=196972ad-3b13-4bba-ac54-4cb3f7b409a4 translated to /dev/sda3
   [ ] source /dev/sda3 exists
   [ ] FS type is ext4
/home/misc
   [E] unreachable on boot required target: No such file or directory 
   [ ] UUID=e8ce5375-29d4-4e2f-a688-d3bae4b8d162 translated to /dev/sda5
   [ ] source /dev/sda5 exists
   [ ] FS type is ext4
 
0 parse errors, 1 error, 1 warning
Когда создаётся множество блочных устройств (loop) из одного файла, ядро Linux не производит проверку на возможные коллизии, и та же самая дисковая ФС обслуживается несколькими независимыми экземплярами ФС в памяти. Результат очевиден — потеря данных и поломка файловой системы.

Теперь mount(8) отклоняет запросы на создание очередного устройства и монтирования файловой системы для одинаковых backing-файлов. Команда losetup --nooverlap использует заново блочное устройство (loop), если оно уже существует для того же backing-файла. Вся функциональность подсчёта со смещением и лимит размера, конечно же, присутствует. Так что без проблем можно иметь несколько регионов (разделов) в одном файле образа и монтировать их все одновременно. Ограничение в том, что регионы не должны пересекаться. Спасибо Stanislav Brabec из Suse!

Heiko Carstens из IBM улучшил lscpu(1) для s390. Добавлена поддержка топологических уровней «drawer», статической и динамической тактовой частоты, типа устройства и новая опция --physical.

Пожалуй, самое важное изменение в libsmartcols — это улучшенная поддержка многострочных ячеек. Теперь библиотека поддерживает пользовательские функции для обёртки ячеек, что позволяет разделить текст на несколько ячеек по словам, переносам строк и т. д. Посмотрите на вывод таблицы с многострочными ячейками (колонка WRAPNL):

TREE           ID PARENT WRAPNL
aaaa            1      0 aaa
├─bbb           2      1 bbbbb
│ ├─ee          5      2 hello
│ │                      baby
│ └─ffff        6      2 aaa
│                        bbb
│                        ccc
│                        ddd
├─ccccc         3      1 cccc
│ │                      CCCC
│ └─gggggg      7      3 eee
│   ├─hhh       8      7 fffff
│   │ └─iiiiii  9      8 g
│   │                    hhhhh
│   └─jj       10      7 ppppppppp
└─dddddd        4      1 dddddddd
                         DDDD
                         DD

Другое изменение — это поддержка заданных пользователем символов заполнения. Мы используем эту возможность для LIBSMARTCOLS_DEBUG_PADDING=on|off, например:

$ LIBSMARTCOLS_DEBUG=all LIBSMARTCOLS_DEBUG_PADDING=on findmnt 2> /dev/null
TARGET............................... SOURCE.......................... FSTYPE......... OPTIONS
/.................................... /dev/mapper/fedora_x1carbon-root ext4........... rw,relatime,seclabel,data=ordered
├─/sys............................... sysfs........................... sysfs.......... rw,nosuid,nodev,noexec,relatime,seclabel
│ ├─/sys/kernel/security............. securityfs...................... securityfs..... rw,nosuid,nodev,noexec,relatime
│ ├─/sys/fs/cgroup................... tmpfs........................... tmpfs.......... ro,nosuid,nodev,noexec,seclabel,mode=755
│ │ ├─/sys/fs/cgroup/systemd......... cgroup.......................... cgroup......... rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd
│ │ ├─/sys/fs/cgroup/devices......... cgroup.......................... cgroup......... rw,nosuid,nodev,noexec,relatime,devices
│ │ ├─/sys/fs/cgroup/perf_event...... cgroup.......................... cgroup......... rw,nosuid,nodev,noexec,relatime,perf_event
│ │ ├─/sys/fs/cgroup/pids............ cgroup.......................... cgroup......... rw,nosuid,nodev,noexec,relatime,pids
│ │ ├─/sys/fs/cgroup/hugetlb......... cgroup.......................... cgroup......... rw,nosuid,nodev,noexec,relatime,hugetlb
│ │ ├─/sys/fs/cgroup/blkio........... cgroup.......................... cgroup......... rw,nosuid,nodev,noexec,relatime,blkio
│ │ ├─/sys/fs/cgroup/net_cls,net_prio cgroup.......................... cgroup......... rw,nosuid,nodev,noexec,relatime,net_cls,net_prio
│ │ ├─/sys/fs/cgroup/cpu,cpuacct..... cgroup.......................... cgroup......... rw,nosuid,nodev,noexec,relatime,cpu,cpuacct
│ │ ├─/sys/fs/cgroup/memory.......... cgroup.......................... cgroup......... rw,nosuid,nodev,noexec,relatime,memory
│ │ ├─/sys/fs/cgroup/cpuset.......... cgroup.......................... cgroup......... rw,nosuid,nodev,noexec,relatime,cpuset
│ │ └─/sys/fs/cgroup/freezer......... cgroup.......................... cgroup......... rw,nosuid,nodev,noexec,relatime,freezer
│ ├─/sys/fs/pstore................... pstore.......................... pstore......... rw,nosuid,nodev,noexec,relatime,seclabel
│ ├─/sys/firmware/efi/efivars........ efivarfs........................ efivarfs....... rw,nosuid,nodev,noexec,relatime
│ ├─/sys/fs/selinux.................. selinuxfs....................... selinuxfs...... rw,relatime
│ ├─/sys/kernel/debug................ debugfs......................... debugfs........ rw,relatime,seclabel
│ ├─/sys/kernel/config............... configfs........................ configfs....... rw,relatime
│ └─/sys/fs/fuse/connections......... fusectl......................... fusectl........ rw,relatime
├─/proc.............................. proc............................ proc........... rw,nosuid,nodev,noexec,relatime
│ ├─/proc/sys/fs/binfmt_misc......... systemd-1....................... autofs......... rw,relatime,fd=26,pgrp=1,timeout=0,minproto=5,maxproto=5,direct,pipe_ino=13520
│ └─/proc/fs/nfsd.................... nfsd............................ nfsd........... rw,relatime
├─/dev............................... devtmpfs........................ devtmpfs....... rw,nosuid,seclabel,size=3982524k,nr_inodes=995631,mode=755
│ ├─/dev/shm......................... tmpfs........................... tmpfs.......... rw,nosuid,nodev,seclabel
│ ├─/dev/pts......................... devpts.......................... devpts......... rw,nosuid,noexec,relatime,seclabel,gid=5,mode=620,ptmxmode=000
│ ├─/dev/hugepages................... hugetlbfs....................... hugetlbfs...... rw,relatime,seclabel
│ └─/dev/mqueue...................... mqueue.......................... mqueue......... rw,relatime,seclabel
├─/run............................... tmpfs........................... tmpfs.......... rw,nosuid,nodev,seclabel,mode=755
│ ├─/run/user/42..................... tmpfs........................... tmpfs.......... rw,nosuid,nodev,relatime,seclabel,size=798952k,mode=700,uid=42,gid=42
│ └─/run/user/1000................... tmpfs........................... tmpfs.......... rw,nosuid,nodev,relatime,seclabel,size=798952k,mode=700,uid=1000,gid=1000
│   └─/run/user/1000/gvfs............ gvfsd-fuse...................... fuse.gvfsd-fuse rw,nosuid,nodev,relatime,user_id=1000,group_id=1000
├─/tmp............................... tmpfs........................... tmpfs.......... rw,nosuid,nodev,seclabel
├─/boot.............................. /dev/sda2....................... ext4........... rw,relatime,seclabel,data=ordered
│ └─/boot/efi........................ /dev/sda1....................... vfat........... rw,relatime,fmask=0077,dmask=0077,codepage=437,iocharset=ascii,shortname=winnt,errors=remount-ro
├─/home.............................. /dev/mapper/fedora_x1carbon-home ext4........... rw,relatime,seclabel,data=ordered
└─/var/lib/nfs/rpc_pipefs............ sunrpc.......................... rpc_pipefs..... rw,relatime
Для меня действительно важно, что у нас есть регрессионные тесты для всего табличного и древовидного кода в libsmartcols.

Igor Gnatenko из Red Hat продолжает работать над обёрткой для libsmartcols на Python, смотрите https://github.com/ignatenkobrain/python-smartcols и пример ниже по тексту.
Идея использовать libsmartcols для форматирования вывода DNF (пакетного менеджера для дистрибутивов, основывающихся на RPM, замены YUM) — это ещё одна причина, по которой библиотека libsmartcols была сильно расширена и улучшена в последних релизах.

#!/bin/python3
 
import smartcols
 
tb = smartcols.Table()
name = tb.new_column("NAME")
name.tree = True
age = tb.new_column("AGE")
age.right = True
 
ggf = tb.new_line()
ggf[name] = "John"
ggf[age] = "70"
 
gfa = tb.new_line(ggf)
gfa[name] = "Donald"
gfa[age] = "50"
 
fa = tb.new_line(gfa)
fa[name] = "Benny"
fa[age] = "30"
 
ln = tb.new_line(fa)
ln[name] = "Arlen"
ln[age] = "5"
 
ln = tb.new_line(fa)
ln[name] = "Gerge"
ln[age] = "7"
 
fa = tb.new_line(gfa)
fa[name] = "Berry"
fa[age] = "32"
 
ln = tb.new_line(ggf)
ln[name] = "Alex"
ln[age] = "44"
 
print(tb)
NAME        AGE
John         70
├─Donald     50
│ ├─Benny    30
│ │ ├─Arlen   5
│ │ └─Gerge   7
│ └─Berry    32
└─Alex       44

На этом всё. Спасибо Werner Fink, Sami Kerola, Ruediger Meier и многим другим!

>>> Оригинал

★★★★

Проверено: JB ()

Под cut бы все-таки спрятать. Простыня на главной это слишком.

Promusik ★★★★★ ()

Что за гуглтранслейт я только что прочитал?

Radjah ★★★★★ ()

Старый добрый cal(1) теперь более дружелюбный к пользователю.

всё равно не готово - не работают следующие элементарные конструкции:

cal 'when the lobster is on the mountain whistles'

cal 'after rain in thursday'

buratino ★★★★★ ()
Ответ на: комментарий от Radjah

этот гультранслейт теперь более дружелюбный к пользователю

buratino ★★★★★ ()

Старый добрый cal(1) теперь более дружелюбный к пользователю. Теперь возможно указывать месяц «по имени» (напр. cal Январь 2017) и использовать относительные временные отметки, например:

надо бы бэкпорт в слаку запилить :)

Reedych ★☆ ()
Ответ на: комментарий от i_gnatenko_brain

Сарян, чувак, халявным корректором работать не хочу.

Radjah ★★★★★ ()

Уберите авторскую отсебятину, это должно быть отдельной новостью.

anonymous ()
Ответ на: комментарий от i_gnatenko_brain

Я про python bindings, которые не разрабатываются в составе проекта util-linux.

anonymous ()
Ответ на: комментарий от anonymous

теперь невнимательные идут по ссылке на оригинал и смотрят внимательнее.

i_gnatenko_brain ★★★★ ()

странно пишать «для меня», «мои», «мы» и т.п., а потом упоминать себя же в третьем лице по поводу dnf (:

anonymous ()

Линукс в утиль?

anonymous ()
Ответ на: комментарий от anonymous

Пошёл вон, форматный пёс ТВ, с моего лора

anonymous ()
Ответ на: комментарий от buratino

У меня работают. Ты точно в последней версии проверял? Попробуй из транка собрать что-ли.

MrClon ★★★★★ ()
Ответ на: комментарий от i_gnatenko_brain

Астрал не мой, скомпилел какой-то найденый на гитхабе форк. Какой, уже не помню. На компе сурсов найти не могу.

MrClon ★★★★★ ()

Спасибо за новость. RedHat наверное единственный, кто что-то профессионально делает не только для Linux, но и для окололинуксовых пакетов.

EXL ★★★★★ ()
Ответ на: комментарий от EXL

RedHat наверное единственный, кто что-то профессионально делает не только для Linux, но и для окололинуксовых пакетов.

Что за троллинг?

kedr ()
Ответ на: комментарий от anonymous

А кого хоть троллишь?

RedHat наверное единственный, кто что-то профессионально делает не только для Linux, но и для окололинуксовых пакетов.

Вопрос не в том, кого он троллит, вопрос заключается в том, в чью пользу он троллит. Его троллинг направлен против свободы, и впользу RedHat.

anonymous ()
Ответ на: комментарий от buratino

Попробуй грамотно написать сначала:

cal 'when a lobster whistles on top of a mountain'
cal 'after a rain on thursday'

CYB3R ★★★★★ ()
Ответ на: комментарий от CYB3R

on top of

Артикль где?

a rain

Это неисчисляемое существительное, бестолочь.

Садись, два.

anonymous ()
Ответ на: комментарий от i_gnatenko_brain

не нравится — пиши сам

Я, как это говорить - я плёхо понимайт по-рюсски... Очень плёхо... :)

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.