列出当前安装的不稳定软件包(Gentoo Linux)

列出当前安装的不稳定软件包(Gentoo Linux)

我意外删除了我的软件包accept_keywords文件。~amd64 中只有几个我需要的软件包,但我记不清了。如果我有当前安装的所有不稳定软件包的列表,我就可以恢复它们。我该怎么做?

答案1

我们将使用查询命令来完成此操作。

equery y "PACKAGE NAME"将输出带有关键字 data 的软件包的信息。不稳定的软件包标记为~。因此,我们需要编写一个脚本,它将迭代已安装软件包的列表并输出它是否稳定。

单个输出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 '/[I]/{print $4;}'根据您的系统架构调整 awk 的打印数量()。

有些异常需要单独处理。例如,包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 不会输出任何内容。如果您看不到任何输出或包的输出很奇怪 - 请手动检查。这样的包应该很少。

此版本还将不稳定软件包列表输出到不稳定的.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

答案2

解决方案使用埃克斯但是比使用 equery 的解决方案要快得多:

eix --installed-unstable --only-names

相关内容