Я случайно удалил мой пакет accept_keywords
. Было всего несколько пакетов, которые мне были нужны от ~ amd64, но я не могу вспомнить их все. Я мог бы восстановить их, если бы у меня был список всех установленных на данный момент нестабильных пакетов. Как я могу это сделать?
2 ответа
Решение с использованием eix, но намного быстрее, чем решение с использованием equery
eix -c --installed-unstable
Если вам нужны только имена пакетов, добавьте --only-names
.
Мы будем использовать команду equery, чтобы сделать это.
equery y "PACKAGE NAME"
выведет информацию о пакете с данными ключевых слов. Нестабильные пакеты помечаются как ~
. Поэтому нам нужно написать скрипт, который будет перебирать список установленных пакетов и выводить их, если она стабильна или нет.
Вывод одиночного equery y "PACKAGE"
выглядит так:
test@test ~ $ equery y "portage"
Keywords for sys-apps/portage:
| | u |
| a a a p s | n |
| l m r h i m m p s p | u s | r
| p d a m p a 6 i p c 3 a x | s l | e
| h 6 r 6 p 6 8 p p 6 9 s r 8 | e o | p
| a 4 m 4 a 4 k s c 4 0 h c 6 | d t | o
-----------------+-----------------------------+-----+-------
[M]2.1.6.7_p1 | + + + o + + + ~ + + + + + + | # 0 | gentoo
2.1.11.62 | + + + o + + + ~ + + + + + + | # | gentoo
2.1.12.2 | + + + o + + + ~ + + + + + + | # | gentoo
2.2.1 | + + + o + + + ~ + + + + + + | # | gentoo
2.2.6 | ~ ~ ~ o ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ | # | gentoo
[I]2.2.7 | + + + + + + + ~ + + + + + + | o | gentoo
2.2.8 | ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ | # | gentoo
2.2.8-r1 | ~ ~ ~ ~ + ~ ~ ~ ~ ~ ~ ~ ~ ~ | o | gentoo
9999 | o o o o o o o o o o o o o o | o | gentoo
Из этого вывода нам нужно получить строку с [I]
что означает, что пакет установлен. Далее нам нужно вывести ключевое слово для вашей архитектуры (скажем, это amd64 - второй столбец таблицы). Для этого мы можем использовать awk
(страница руководства AWK для справки). Для одного пакета это будет выглядеть так:
equery y "portage" | awk '/[I]/{print $4;}'
и вывод будет
+
в то время как для нестабильного пакета вывод будет
~
Теперь нам нужно сделать это со всеми установленными пакетами. Этот скрипт поможет нам:
#!/bin/bash
ALL_PKG=`equery list "*"`
for PKG in $ALL_PKG
do
echo $PKG
equery y "$PKG" | awk '/[I]/{print $4;}'
done
Вам необходимо настроить номер печати awk (awk '/[I]/{print $4;}'
) в зависимости от архитектуры вашей системы.
Есть некоторые исключения, которые необходимо обрабатывать индивидуально. Например, пакет winetricks
дает следующий вывод:
test@test ~ $ equery y "winetricks"
Keywords for app-emulation/winetricks:
| | u |
| a a a p s | n |
| l m r h i m m p s p | u s | r
| p d a m p a 6 i p c 3 a x | s l | e
| h 6 r 6 p 6 8 p p 6 9 s r 8 | e o | p
| a 4 m 4 a 4 k s c 4 0 h c 6 | d t | o
---------+-----------------------------+-----+-------
20130629 | o ~ o o o o o o o o o o o ~ | # 0 | gentoo
20130707 | o ~ o o o o o o o o o o o ~ | o | gentoo
99999999 | o o o o o o o o o o o o o o | o | gentoo
Здесь нет символа [I]
, поэтому awk ничего не выводит. Если вы не увидите вывод или странный вывод для пакета - проверьте его вручную. Таких пакетов должно быть очень мало.
Эта версия также выводит список нестабильных пакетов в unstable.txt
#!/bin/bash
ALL_PKG=`equery list "*"`
for PKG in $ALL_PKG
do
echo $PKG
export stb=$(equery y "$PKG" | awk '/[I]/{print $4;}' 2>&1)
echo $stb
if [[ "$stb" == "~" ]]; then echo $PKG >> unstable.txt; fi
done