Пример:
Докажите, что я отправляю байт NUL, сопровождаемый новой строкой:
$ echo -e \\0 | hexdump -C
00000000 00 0a |..|
00000002
Теперь я изменяю байт NUL на !
восклицательный знак:
$ echo -e \\0 | sed 's/\x00/!/' | hexdump -C
00000000 21 0a |!.|
Таким образом, прием использует \x00
как NUL-байт.
3-я попытка на самом деле работает! Я оставляю первые 2 попытки так, чтобы другие, которые могут столкнуться с этим Вопросы и ответы в будущем, надо надеяться, получили некоторое понимание, как нетривиальный проблема это должно проанализировать информацию о версии об/мин и определить происхождение, которого был на первом месте, во-вторых, и т.д.
Эта команда отсортирует вывод и даст Вам их в порядке версии:
$ rpm -q kernel --queryformat "%{VERSION} %{RELEASE}\n"|sort -n
2.6.18 238.12.1.el5
2.6.18 238.19.1.el5
2.6.18 274.12.1.el5
2.6.18 308.8.2.el5
ПОЧЕМУ ЭТО не РАБОТАЛО: наивный человек думал бы, что можно использовать некоторый вариант sort
команда для выполнения этой задачи но существует достаточно изменчивости и несоответствия в форматировании фактической информации о версии для данного об/мин, что это просто не до задачи.
$ rpm -q --last kernel | head -n 1 | cut -d' ' -f1
kernel-2.6.35.14-106.fc14
ПОЧЕМУ ЭТО не РАБОТАЛО: у Меня были большие надежды, что этот подход приведет к результатам, которые искал OP, но проблема с этим как @Joel указанный в комментариях, то, что --last
переключатель просто возвращает результаты, отсортированные по дате, RPMs были установлены.
Этот определенно сделает задание. Я нашел комплект инструментов под названием Средства разработки об/мин. Существует 2 инструмента в этом комплекте, который даст Вам возможность определить, является ли одна версия об/мин более новой или более старой, чем другой.
Если об/мин уже не установлен, можно сделать так следующим образом:
yum install rpmdevtools
Первый инструмент это полезно, называют rpmdev-vercmp
. Этот инструмент может сравнить 2 названия RPMs и сказать Вам, какой является более новым. Например:
$ rpmdev-vercmp kernel-2.6.35.14-100.fc14.x86_64 kernel-2.6.35.14-103.fc14.x86_64
0:kernel-2.6.35.14-103.fc14.x86_64 is newer
После нахождения этого я был все установлен соединить сценарий оболочки, но затем понят, человек, я ленив, таким образом, я ввел несколько минут по абсолютному адресу больше и нашел другой инструмент в комплекте названным rpmdev-sort
.
Этот инструмент является богатой рудной полосой. Можно использовать его следующим образом:
$ rpm -q kernel | rpmdev-sort
kernel-2.6.35.14-100.fc14.x86_64
kernel-2.6.35.14-103.fc14.x86_64
kernel-2.6.35.14-106.fc14.x86_64
Существует много инструментов в Средствах разработки об/мин, которые могли бы быть достойные внимания для других, таким образом, я перечисляю их здесь для дальнейшего использования.
$ rpm -q --queryformat '[%{NAME} %{FILEMODES:perms} %{FILENAMES}\n]' rpmdevtools \
| grep -E "^.* -..x..x..x " \
| awk '{print $3}' \
| sed 's#/usr/bin/##' \
| paste - - - \
| column -t
annotate-output checkbashisms licensecheck
manpage-alert rpmargs rpmdev-bumpspec
rpmdev-checksig rpmdev-cksum rpmdev-diff
rpmdev-extract rpmdev-md5 rpmdev-newinit
rpmdev-newspec rpmdev-packager rpmdev-rmdevelrpms
rpmdev-setuptree rpmdev-sha1 rpmdev-sha224
rpmdev-sha256 rpmdev-sha384 rpmdev-sha512
rpmdev-sort rpmdev-sum rpmdev-vercmp
rpmdev-wipetree rpmelfsym rpmfile
rpminfo rpmls rpmpeek
rpmsodiff rpmsoname spectool
Альтернатива, которую должен использовать OP, упомянутый в комментариях sort -V
. Это - капитал -V
. Я никогда не слышал об этом переключателе также. От sort
страница справочника:
-V, --version-sort
natural sort of (version) numbers within text
Как оказалось, sort
действительно предоставляет услугу для сортировки номеров версий, таким образом, Вы могли также выполнить сортировку как так:
$ rpm -q kernel | sort -V
kernel-2.6.35.14-100.fc14.x86_64
kernel-2.6.35.14-103.fc14.x86_64
kernel-2.6.35.14-106.fc14.x86_64
Действительно необходимо пользоваться библиотекой RPM для получения хорошего результата. Алгоритм сравнения версий... решительно сложен. Это нетривиально для перереализации в оболочке, но если можно использовать Python, чтобы сделать фактическое сравнение, это становится относительно простым. См. https://stackoverflow.com/questions/3206319/how-do-i-compare-rpm-versions-in-python для экс-клена того, как сделать так.
--last
не скажет Вам число последней версии, но оно закажет датой установки. Таким образом, Вы видите последний раз установленную версию:
[root@xms_apps ~]# rpm -qa kernel-xen --last
kernel-xen-2.6.18-348.1.1.el5 Tue 29 Jan 2013 02:18:52 PM EST
kernel-xen-2.6.18-308.11.1.el5 Fri 20 Jul 2012 04:00:26 PM EDT
kernel-xen-2.6.18-308.8.2.el5 Wed 20 Jun 2012 03:32:47 PM EDT
Большую часть времени (если они не сделали ручную установку ядра) эти два должны быть тем же.
Для получения его 100%-е правильные 100% времени Вы оказываетесь перед необходимостью свалить две версии ядра к 2.6.*
формат затем просто повреждает его независимо запускающийся после 2.6 (RHEL не будет повторно основывать это решительно в единственной версии, RHEL5 всегда будет 2,6 ядрами), и просто выполните итерации по каждой строке вывода об/мин (возможно отсортированный по --last
для производительности), и сравнивают каждое положение с аналогичным положением в версии ядра, от которой Вы добрались uname -r
если какое-либо из чисел больше в строке дб об/мин, чем строка uname, сразу выходит с тем сообщением.
Для помощи Вам там существует подобный вопрос, который задают здесь. Но та функция принимает чисто десятичное представление с разделением точками, таким образом, можно сравнить положение числа перед дефисом (так как существует только один), затем используют функцию удара того человека, чтобы протестировать, если версия патча выше в uname
чем в строке дб об/мин.
rpm -q kernel --queryformat="%{buildtime}\t%{name}-%{version}-%{release}.%{arch}\n" | sort -nr | head -1 | cut -f2
Я думаю, что при сортировке по времени сборки меньше вероятность того, что произойдет сбой, в отличие от времени установки. Однако --last лучше.
[root@ip-172-31-36-134 ~]# whatis grub2-rpm-sort
grub2-rpm-sort (8) - Sort input according to RPM version compare.
[root@ip-172-31-36-134 ~]# rpm -qf `which grub2-rpm-sort`
grub2-tools
--last
виды ко времени установки пакета, это не обязательно будет последним ядром (если они сделали ручную установку об/мин более низкой версии ядра, например). – Bratchley 21.05.2013, 22:39