另一个试探法是查看当前正在运行的操作系统的软件包的来源。
简单(可能容易出错)的变体:
fgrep -r /debian/ /etc/apt/sources.list \
| egrep -v '^ *#' \
| awk '{print $3}' \
| egrep -v '[-/]' \
| uniq
一种更可靠的方法是从apt-cache policy
(没有其他参数)的输出中解析详细信息:
apt-cache policy \
| fgrep o=Debian, \
| fgrep ,l=Debian, \
| fgrep ,c=main, \
| awk -F '[,=]' '{print $6}'
apt-cache policy
列出本地系统上正在使用的所有APT存储库。我们过滤掉那些源于Debian的,仅被标记的Debian
(即不标记例如的Debian debug
),然后仅查看主归档文件(而不是contrib
或non-free
),然后选择相应的值。
甚至更稳定的方法是不依赖元素顺序并n=
在剩余的行中找到值:
apt-cache policy \
| fgrep o=Debian, \
| fgrep ,l=Debian, \
| fgrep ,c=main, \
| egrep -o 'n=[^, ]*' \
| awk -F= '{print $2}'
还有另一种可能性是自己解析/var/lib/apt/lists/*Release
文件而不是apt-cache
这样做:
egrep -l '^Origin: Debian$' /var/lib/apt/lists/*Release \
| xargs egrep -l '^Label: Debian$' \
| xargs egrep -L 'Codename: .*-' \
| xargs fgrep Codename \
| awk '{print $2}'
lsb_release
,请查看其源代码,看看是否愿意重新发明所有内容