シェルワンライナー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にアクセスするシステムコールが発行されているからなのだと思う。