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 /$_"}'