シェル芸160本ノック解答例 その13
技術評論社から出版された『1日1問、半年以内に習得 シェル・ワンライナー160本ノック』の解答例です。
- 解答例の範囲: 問題121〜問題130
- 前回の解答例: シェル芸160本ノック解答例 その12
問題121
$ (strace seq 10000000 | head >/dev/null) |& grep -Po '"/.+?"' | tr -d \"
/usr/bin/seq
/etc/ld.so.preload
/etc/ld.so.preload
/proc/self/exe
/usr/bin/seq
/usr/lib/arm-linux-gnueabihf/libarmmem-v6l.so
/etc/ld.so.cache
/lib/arm-linux-gnueabihf/libc.so.6
/usr/lib/locale/locale-archive
なお、抽出されるファイルパスは実行環境により異なります。
問題122
$ (strace -c xargs -n 1 < words >/dev/null) |& awk '/clone$/{print $(NF-1)}'
3000
問題123
$ awk -F '[(<>]' '$(NF-1)~/^[0-9]+\.[0-9]+$/{if(FILENAME~/1/){d1[$1]+=$(NF-1)}else{d2[$1]+=$(NF-1)}}END{for(s in d1){d=d2[s]-d1[s];printf "%s %.6f\n",s,d<0?-d:d}}' dir{1,2}_strace | sort -k2,2nr | head -n3
read 11.879665
openat 0.860119
close 0.487181
問題124
$ ip -o link | awk '{print $2}' | tr -d : | xargs
lo wlan0
なお、表示されるネットワークデバイスは実行環境により異なります。
問題125
# 準備: すでにIPアドレスを持っているネットワークデバイスを確認
$ ip -o -4 addr
1: lo inet 127.0.0.1/8 scope host lo\ valid_lft forever preferred_lft forever
2: wlan0 inet 192.168.0.16/24 brd 192.168.0.255 scope global dynamic noprefixroute wlan0\ valid_lft 79901sec preferred_lft 69101sec
# 解答例のワンライナーを実行し、ネットワークデバイス`wlan0`にIPアドレスを追加
$ seq 100 200 | xargs -I@ sudo ip addr add local 192.168.2.@/24 dev wlan0 label wlan0:@
# IPアドレスが追加できているか確認
$ ip -o -4 addr
1: lo inet 127.0.0.1/8 scope host lo\ valid_lft forever preferred_lft forever
2: wlan0 inet 192.168.0.16/24 brd 192.168.0.255 scope global dynamic noprefixroute wlan0\ valid_lft 79852sec preferred_lft 69052sec
2: wlan0 inet 192.168.2.100/24 scope global wlan0:100\ valid_lft forever preferred_lft forever
2: wlan0 inet 192.168.2.101/24 scope global secondary wlan0:101\ valid_lft forever preferred_lft forever
2: wlan0 inet 192.168.2.102/24 scope global secondary wlan0:102\ valid_lft forever preferred_lft forever
(...略...)
2: wlan0 inet 192.168.2.198/24 scope global secondary wlan0:198\ valid_lft forever preferred_lft forever
2: wlan0 inet 192.168.2.199/24 scope global secondary wlan0:199\ valid_lft forever preferred_lft forever
2: wlan0 inet 192.168.2.200/24 scope global secondary wlan0:200\ valid_lft forever preferred_lft forever
# 片付け: IPアドレスを削除
$ seq 100 200 | xargs -I@ sudo ip addr del local 192.168.2.@/24 dev wlan0
# IPアドレスが削除できているか確認
$ ip -o -4 addr
1: lo inet 127.0.0.1/8 scope host lo\ valid_lft forever preferred_lft forever
2: wlan0 inet 192.168.0.16/24 brd 192.168.0.255 scope global dynamic noprefixroute wlan0\ valid_lft 79716sec preferred_lft 68916sec
なお、IPアドレスの追加/削除の対象となるネットワークデバイスは実行環境により異なります。
問題126
$ echo $BASH_VERSION
5.1.4(1)-release
なお、表示されるバージョン情報は実行環境により異なります。
問題127
$ trap 'clear; (tput lines; tput cols) | xargs' WINCH
解答例でしかけたtrap
の解除方法は次の通りです。
$ trap WINCH
問題128
$ strings $(ldd $(which grep) | awk '/pcre/{print $3}') | grep -Pa '^\d+\.\d+'
8.39 2016-06-14
なお、表示されるバージョン情報は実行環境により異なります。
問題129
$ eval echo $(base64 -d crypt | gunzip | strings | sed "s/..../$'\\\\u&'/g")
シェル
問題130
いずれの解答例も、待ち受けポート番号は8080
です。
$ busybox httpd -f -p 8080
$ perl -Mojo -E 'a->static->paths(["."]);a->start' daemon -l http://*:8080
$ php -S 0.0.0.0:8080
$ python3 -m http.server 8080
$ Rscript -e 'servr::httd(host="0.0.0.0",port=8080)'
$ ruby -run -ehttpd . -p8080
なお、perl
の解答例ではMojolicious
を、R
の解答例ではservr
をあらかじめインストールしています。
Written on November 27, 2022