По результатам работы
Nov. 21st, 2008 04:57 pmИтак была задача выдрать списки установленных пакетов с разных UNIXов. То что установлено штатными менеджерами пакетов. В формате "имя_пакета версия_пакета"
Вывод пакетов идет на stdout.
Проще всего работать с Debian:
dpkg -l|grep ii |cut -b 5-41,42-78
Проблема одна - местный cut не имеет опции для повторяющихся разделителей. Пришлось указать абсолютные значения.
Немного сложнее с FreeBSD, нужен скрипт
[vinsent@mail ~/scripts]$ cat resplit.py
#!/usr/local/bin/python
import sys
f=sys.stdin
for line in f:
l=line.strip().replace('\n','').split('-')
ver=l[-1]
p=l[:-1]
print "-".join(p),ver
Который отрезает все что после последнего '-' и трактует это как номер версии
Сама команда банальна:
ls -1 /var/db/pkg|./resplit.py
И наконец, RedHat, ужас-ужас:
Во-первых нужен исправленный скрипт, потому что версия отрезается про 2му '-' а не по первому:
cat resplit2.py
#!/usr/bin/python
import sys
f=sys.stdin
for line in f:
l=line.strip().replace('\n','').split('-')
ver=l[-2:]
p=l[:-2]
print "-".join(p),"-".join(ver)
Во-вторых:
rpm -qa |sort |./resplit2.py
Т.е. rpm сам еще и не сортирует список!
Итого:
Дебиан максимально удобен, Фряха терпима, Редхатоиды ужасны :)
Зыж понимаю что скрипт - велосипед в чистом виде, но как это сделать в консоли с ходу чтото не придумалось :)
Вывод пакетов идет на stdout.
Проще всего работать с Debian:
dpkg -l|grep ii |cut -b 5-41,42-78
Проблема одна - местный cut не имеет опции для повторяющихся разделителей. Пришлось указать абсолютные значения.
Немного сложнее с FreeBSD, нужен скрипт
[vinsent@mail ~/scripts]$ cat resplit.py
#!/usr/local/bin/python
import sys
f=sys.stdin
for line in f:
l=line.strip().replace('\n','').split('-')
ver=l[-1]
p=l[:-1]
print "-".join(p),ver
Который отрезает все что после последнего '-' и трактует это как номер версии
Сама команда банальна:
ls -1 /var/db/pkg|./resplit.py
И наконец, RedHat, ужас-ужас:
Во-первых нужен исправленный скрипт, потому что версия отрезается про 2му '-' а не по первому:
cat resplit2.py
#!/usr/bin/python
import sys
f=sys.stdin
for line in f:
l=line.strip().replace('\n','').split('-')
ver=l[-2:]
p=l[:-2]
print "-".join(p),"-".join(ver)
Во-вторых:
rpm -qa |sort |./resplit2.py
Т.е. rpm сам еще и не сортирует список!
Итого:
Дебиан максимально удобен, Фряха терпима, Редхатоиды ужасны :)
Зыж понимаю что скрипт - велосипед в чистом виде, но как это сделать в консоли с ходу чтото не придумалось :)