如何找到我安装的每个应用程序/软件包的许可证?

如何找到我安装的每个应用程序/软件包的许可证?

我使用的是 Ubuntu-15.10。除了普通安装之外,我还安装了许多应用程序。

现在,我想知道有多少已安装的软件包是根据 GPL 或第三方许可证(例如 Fluendo)获得许可的。

有什么办法可以查出这一点吗?或者我是否需要手动检查每个已安装应用程序的每个许可证?

编辑:

下面的代码片段我用来列出各种已安装的许可证文件的名称。

find /usr/share/doc -type f -name copyright -exec grep "License\:" {} + | cut -f3 -d: | sort -u

答案1

软件包的许可证在 中进行了描述/usr/share/doc/${package}/copyright。需要该文件来指定软件包的主许可证;许多包使用机器可读copyright文件其中列出了源包中每个文件的许可证。

对于机器可读的文件,您可以使用License:引入许可证的行:

awk '/^License:/ { print $2 }' /usr/share/doc/*/copyright | sort -u

如果您正在寻找 中记录的许可证/usr/share/common-licenses,您可以在文件中查找对这些许可证的提及copyright例如计算根据 GPL 或 LGPL 许可的软件包数量:

grep -l GPL /usr/share/doc/*/copyright | wc -l

要仅计算源包的数量,请计算唯一文件的数量(从单个源包发出的二进制包具有完全相同的copyright文件,或链接到同一文件):

md5sum $(grep -l GPL /usr/share/doc/*/copyright) | sort -k1,1 -u | wc -l

Debsources 提供了多种搜索方式Debian 的所有copyright文件;这是一行检索单个文件的许可证(如果其包使用机器可读格式)。 (该单行的许可证没有记录,所以我只是链接到它,而不是在此处复制它。)

请注意,由于这些copyright文件记录了源包的许可证,因此它们很可能记录未在二进制包中提供的文件,并且不会影响二进制包的许可证;例如,GPL 许可的文件就属于这种情况,这些文件仅在构建非 GPL 许可的软件包期间使用。

答案2

大多数软件的许可信息可在/usr/share/doc/pkg-name/copyright

您可以粗略地估计使用的程序数量GPL

  • grep -l GPL /usr/share/doc/*/copyright

    grep还将包括链接文件而不是常规文件。所以,我推荐使用find如下:

  • sudo find /usr/share/doc -name copyright -type f -exec grep -l "GPL" '{}' \; | wc -l

    它还将包括类似的文件/usr/share/doc/ca-certificates/examples/ca-certificates-local/debian/copyright,如果您不希望它们计数,您可以maxdepth使用 find 指定。

示例(在我的系统上):

$ grep -l GPL /usr/share/doc/*/copyright | wc -l
1949

$ sudo find /usr/share/doc -name copyright -type f -exec grep -l "GPL" '{}' \; | wc -l
1889

请注意,软件中的每个文件可能包含多个许可证copyright

答案3

以下代码将帮助我列出 Ubuntu 15.04 上各种应用程序已安装的许可证。

find /usr/share/doc -type f -name copyright -exec grep "License\:" {} + | cut -f3 -d: | sort -u

答案4

我手头只有 CentOS 系统,您可以使用以下命令显示软件包名称和许可证信息:

$ rpm -qa --qf "%{name}: %{license}\n"
...
ncurses: MIT
cairo: LGPLv2 or MPLv1.1
dbus-python: MIT
media-player-info: BSD
dbus-x11: GPLv2+ or AFL
NetworkManager: GPLv2+
...

您应该能够dpkg-query --license在 Ubuntu 系统上执行类似的操作。

喜欢这里,他用来$ dpkg-query -f='${PackageSpec;-30}\t${Homepage}\n' -W "*"仅显示每个包的一部分信息。检查dpkg-query选项以查看您是否可以在那里获取许可证表格。

其他有趣的帖子关于这一点,准确地讨论了这个问题:

目前,这方面的支持很差,尽管正在努力在/usr/share/doc/*/copyright文件中提供机器可读的信息。

相关内容