Ansatzの備忘録

勉強したことあるいはふと思い立ったこと

シェルワンライナー160本ノック問題154

問題154 /etc/hostsの使用調査

7章で似たようなことをやったというので問題118でも参考にするのかと思って沼にはまってしまった。今回もできなかった。straceにはコマンドが開いたファイルを出力する機能もあるらしい。

解答例は

echo -e 'curl \nwget -O- \ndig \nnslookup \nping -c 1' | sed 's:.*:sudo strace -f & b.ueda.tech |\& grep /etc/hosts | sed "s/^/& /":' | bash | awk '!a[$1]++{print $1}'

となる。最初に実行したいコマンド一覧を作って、それをパイプで流してstraceのコマンドの中にうまく組み込んでいる。最後にawkで出力するものを絞っているが、これはたぶんひとつのコマンドの中で何回も/etc/hostsにアクセスするシステムコールが発行されているからなのだと思う。