2
0

More than 3 years have passed since last update.

Alpine Linuxでパッケージ(apk)を使って入れたファイルの一覧を出す

Last updated at Posted at 2020-06-17

Alpine Linux で、インストールしている apk パッケージに入っているファイルを表示するワンライナーを書きました。

標準で入っているものだけで作りたかったんですが、力不足で perl に依存する形になってしまいました……。できました!

スクリプト

汚いし、長いです。

ash だとヒストリを辿るときに複数行に分けると美しくないので一行バージョンも用意しました。中身は同じです。

apk info | sort | xargs apk info -L | while read -r l; do if [ `echo -n $l | grep -c contains:` -eq 1 ]; then p=`echo -n $l | sed -E 's/^(.*)\-[^-]+\-r[0-9]+ contains:.*$/\1/'`; elif [ "$l" != "" ]; then echo "$p /$l"; fi; done

改行とインデントを加えて、挙動を少しでも分かりやすくしてみました。
https://github.com/keioni/qiita-sample/blob/master/apk_listup_files.sh

apk_listup_files.sh
apk info | sort | xargs apk info -L |
while read -r l; do
  if [ `echo -n $l | grep -c contains:` -eq 1 ]; then
    p=`echo -n $l | sed -E 's/^(.*)\-[^-]+\-r[0-9]+ contains:.*$/\1/'`;
  elif [ "$l" != "" ]; then
    echo "$p /$l";
  fi;
done

実行結果

以下のように "パッケージ名 パス" のかたちで表示されます。grep して使ってください。

:
apache2 /usr/sbin/suexec
apache2 /var/www/logs
apache2 /var/www/modules
apache2 /var/www/run
apache2 /var/www/localhost/cgi-bin/printenv
apache2 /var/www/localhost/cgi-bin/printenv.vbs
apache2 /var/www/localhost/cgi-bin/printenv.wsf
apache2 /var/www/localhost/cgi-bin/test-cgi
apache2 /var/www/localhost/htdocs/index.html
apache2-http2 /etc/apache2/conf.d/http2.conf
apache2-http2 /usr/lib/apache2/mod_http2.so
apache2-mod-wsgi /etc/apache2/conf.d/wsgi-module.conf
apache2-mod-wsgi /usr/lib/apache2/mod_wsgi.so
apache2-ssl /etc/apache2/conf.d/ssl.conf
apache2-ssl /usr/lib/apache2/mod_ssl.so
apk-tools /sbin/apk
apr /usr/lib/libapr-1.so
apr /usr/lib/libapr-1.so.0
apr /usr/lib/libapr-1.so.0.7.0
apr-util /usr/lib/libaprutil-1.so.0
apr-util /usr/lib/libaprutil-1.so.0.6.1
apr-util /usr/lib/apr-util-1/apr_crypto_openssl-1.so
apr-util /usr/lib/apr-util-1/apr_crypto_openssl.so
busybox /bin/busybox
busybox /bin/sh
busybox /etc/securetty
:

(旧版) perl

最初に作った perl バージョンも、一応そのまま置いておきます。

apk info | sort | xargs apk info -L | perl -ne 'if (/^(.*)\-[^-]+\-r\d+ \w+:/) {$p=$1; next} elsif ( !/^$/ ) {print "$p /$_"}'
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0