使用arch/pacman时,如何查询软件包的许可证?

使用arch/pacman时,如何查询软件包的许可证?

是否可以只安装自由的Arch Linux 中的软件包?或者也许在安装之前查询软件包的许可证?我想您可以用来-Q搜索特定许可证的文本,但这似乎有些过头了。

答案1

您可以使用expac[extra] 中的 alpm 数据工具来完成此操作。例如,要在存储库中搜索 Apache 许可的软件:

 expac -Ss '%L - %n' '^Apache'

注意:expac 对目标进行完整搜索,因此可能需要额外的过滤。

但最终,如果您只想要免费软件,那么您想要抛物线Linux,它是基于 Arch 的,但是是一个单独的发行版。

答案2

当使用/或/ pacman 命令的-i/选项时,会包含许可证。没有必要按照 jasonwryan 的建议安装另一个软件。--info-Q--query-S--sync

以下是 的一些结果示例pacman -Si glibc

Name            : glibc
Version         : 2.33-4
Description     : GNU C Library
Architecture    : x86_64
URL             : https://www.gnu.org/software/libc
Licenses        : GPL  LGPL
Groups          : None
Provides        : None
Depends On      : linux-api-headers>=4.10  tzdata  filesystem
Optional Deps   : gd: for memusagestat
Conflicts With  : None
Replaces        : None
Download Size   : 9.84 MiB
Installed Size  : 46.04 MiB
Packager        : Allan McRae <[email protected]>
Build Date      : Sat 13 Feb 2021 04:39:21 PM EST
Validated By    : MD5 Sum  SHA-256 Sum  Signature

现在我们可以将输出通过管道传输到 sed 并将其设为 bash 脚本:

#!/bin/bash

pacman -Si "$@" | sed -E -n 's/Licenses\s*?:\s+(.+)/\1/p'

# "$@"       | pass through arguments (same as $1 $2 $3 ...)

# sed        | stream editor
# -E         | extended (better) regex
# -n         | disable default printing of all lines

# s/         | substitution command
#   Licenses | literal string "Licenses"
#   \s*      | zero or more whitespace characters
#   :        | literal character ":"
#   \s+      | one or more whitespace characters
#   (.+)     | capture rest of line after non-whitespace
# /\1        | replace with first capture group (.+)
# /p         | re-enable printing, but only for matches

示例输出pacman-license glibc curl ffmpeg(已添加注释):

GPL  LGPL    # glibc
MIT          # curl
GPL3         # ffmpeg

相关内容