Docker

如何找出 AlpineLinux 中是否有帶有特定命令的包?

  • April 7, 2022

具體來說,我試圖找出我必須安裝什麼包才能disown在基於 Alpine Linux 的 docker 中獲取命令?此外,如果有人能啟發我,我應該如何尋找失去的命令(以及它們在什麼包中),這樣我就不必帶著每一個命令來到這裡。

disown是一個bash 內置的(作業控制),就像switch,continuehistory. 因此,您不會在任何軟體包列表中找到它,而不僅僅是 AplineLinux’。我不確定disown是新功能(因此舊版本中缺少)還是可選部分。在 Ubuntu 下,bash 是 v4.3.46 並且可以使用。

對於其他任何事情,您都可以進行包內容搜尋。

如果你想以腳本方式使用 pkgs.alpinelinux.org,你可以在你的發行版中添加 html2text(對於 Alpine:apk add html2text)並使用我在 10 分鐘前完成的這個腳本……:)

#!/bin/sh
file=$1
arch=${2:-x86_64}
branch=${3:-edge}

valid_branch="v3.3 v3.4 v3.5 v3.6 v3.7 v3.8 v3.9 v3.10 edge all"
valid_arch="armv7 s390x ppc64le armhf aarch64 x86 x86_64 all"

usage() {
   echo -e "\nUsage: $0 <pattern> [arch] [branch]\n"
   echo -e "\t<pattern>: Mandatory. Is the file you are searching. Supports wildcards (e.g. wge*) "
   echo -e "\t[arch]: Optional (default:  x86_64). Architecture. Valid values: $valid_arch"
   echo -e "\t[branch]: Optional (default: edge). Alpine releases. Valid values: $valid_branch\n"
   exit 1; 
}

query() {
       curl -s -d"$1" -H "application/x-www-form-urlencoded" -X GET https://pkgs.alpinelinux.org/contents | sed "s///\//g" | html2text -nobs -ascii | sed /^$/d | sed '1d' | awk /^File/,/*Copy*/ |grep -vE 'Privacy|Policy'
}

if ! [ $file ] ; then usage; fi
echo $valid_arch | grep -qi $arch || ( echo "Invalid arch. Valid values are: $valid_arch"; exit 1 )
echo $valid_branch | grep -qi $branch || ( echo "Invalid branch. Valid values are: $valid_branch"; exit 1 )

if [ $branch == "all" ]; then
   if [ $arch == "all" ]; then
       for b in $valid_branch; do
           query "branch=$b&file=$file"
       done
   else
       for b in $valid_branch; do
           query "branch=$b&file=$file&arch=$arch"
       done
   fi
else
   query "branch=$branch&file=$file&arch=$arch"
fi

2022-04-07 更新

你可以在https://github.com/fcolista/apkfile找到這個腳本

引用自:https://unix.stackexchange.com/questions/315606