20130413シェル芸勉強会スライド

28
4回春爛漫シェル芸人撩乱 勉強会 USP友の会 上田 隆一

description

2013年4月13日に開催したシェル芸勉強会のスライド完全版。

Transcript of 20130413シェル芸勉強会スライド

Page 1: 20130413シェル芸勉強会スライド

第4回春爛漫シェル芸人撩乱  勉強会

USP友の会 上田 隆一

Page 2: 20130413シェル芸勉強会スライド

近況

•  月曜、とあるサイトをリリース  –  (日曜の朝から作業。泊まり込み)  –  延期!でも明日も仕事だ!  

•  今朝は子供が while  sleep  1000  ;  do  嘔吐  ;  done  で病院へ連れて行った。  

 

•  お察しください。  

2013/04/13 第4回春爛漫シェル芸芸人撩乱勉強会 2

Page 3: 20130413シェル芸勉強会スライド

はじめに

 

なに!?

2013/04/13 第4回春爛漫シェル芸芸人撩乱勉強会 3

Page 4: 20130413シェル芸勉強会スライド

東京にミサイルが来るらしい

2013/04/13 第4回春爛漫シェル芸芸人撩乱勉強会 4

Page 5: 20130413シェル芸勉強会スライド

今、我々にできること

   

 

curlとシェル芸で無慈悲なパケット攻撃      

(注意:ダメ絶対)  

2013/04/13 第4回春爛漫シェル芸芸人撩乱勉強会 5

Page 6: 20130413シェル芸勉強会スライド

ということで本日は

   

シェル芸web編    

やりませう。

2013/04/13 第4回春爛漫シェル芸芸人撩乱勉強会 6

Page 7: 20130413シェル芸勉強会スライド

シェル芸とは?

•  マウスも使わず、ソースコードも残さず、  GUIツールを立ち上げる間もなく、  あらゆる調査・計算・テキスト処理を  コマンド入力一撃で終わらす。  

–  近、一般名詞化  してきた  

2013/04/13 第4回春爛漫シェル芸芸人撩乱勉強会 7

海外のシェル芸勉強会の様子(再掲)

Page 8: 20130413シェル芸勉強会スライド

今回の内容

•  ウェブ関連の9問を準備  – ポイント  •  表向き:webからの情報収集  •  裏のテーマ:不定形文章の処理(こっちが大事)  

•  ちょっと難しめ  – 玄人が1人混入した2,  3人のグループを  

作ってください。  

2013/04/13 第4回春爛漫シェル芸芸人撩乱勉強会 8

Page 9: 20130413シェル芸勉強会スライド

注意

•  解答例は  Mac  で作成  •  *Linux  の人は  gawk,  gsedを適宜 awk,  sedに読み替えのこと  •  その他環境でも、解答例にこだわらずネット等を  

調べながら解答願います。  

•  解答では、例題が解ければよい。  –  一般解を探すのは、場合によっては悪い癖となる。  

2013/04/13 第4回春爛漫シェル芸芸人撩乱勉強会 9

Page 10: 20130413シェル芸勉強会スライド

問題1:  肩ならし

•  次のファイルから、「index.cgi」を  除去して出力してください。  – ただし、p=index.cgiは残すこと。

2013/04/13 第4回春爛漫シェル芸芸人撩乱勉強会 10

Page 11: 20130413シェル芸勉強会スライド

解答

•  $  cat  2.html  |  sed  's/index\.cgi//'  •  $  cat  2.html  |  awk  '{sub(/index\.cgi/,"",$0);print}'  

2013/04/13 第4回春爛漫シェル芸芸人撩乱勉強会 11

Page 12: 20130413シェル芸勉強会スライド

問題2:  urlのリスティング

•  次のファイルを作って、urlを抜き出してください。

2013/04/13 第4回春爛漫シェル芸芸人撩乱勉強会 12

Page 13: 20130413シェル芸勉強会スライド

解答

•  $  cat  1.html  |  grep  'href='  |  sed  's/^.*href="\(..*\)".*$/\1/'  |  grep  -­‐v  "^#"  |  sed  's/"[^"].*//'  

•  $  cat  1.html  |  grep  "href="  |  grep  -­‐v  'href="#'  |  sed  's/[^"]*"//'  |  sed  's/".*$//'  

2013/04/13 第4回春爛漫シェル芸芸人撩乱勉強会 13

Page 14: 20130413シェル芸勉強会スライド

問題3:  整形

•  インデントの汚いhtmlを整形してください  – 一行にtd一個にすること

2013/04/13 第4回春爛漫シェル芸芸人撩乱勉強会 14

Page 15: 20130413シェル芸勉強会スライド

解答

•  $  cat  3.html  |  gsed  's;</td>;&\n;g'  |  gsed  's;<td>;\t\t&;'  |  grep  -­‐v  "^$"

2013/04/13 第4回春爛漫シェル芸芸人撩乱勉強会 15

Page 16: 20130413シェル芸勉強会スライド

問題4:  webページの切り取り

•  yahooさんのトップページからトピックスの  見出しを抽出しましょう

2013/04/13 第4回春爛漫シェル芸芸人撩乱勉強会 16

Page 17: 20130413シェル芸勉強会スライド

解答

•  まずcurl  –  $  curl  h^p://www.yahoo.co.jp  >  yahoo.html  

•  処理(内容を見ながら)  –  $  cat  yahoo.html  |  gsed  's;</[^/][^/]*>;&\n;g'  |  grep  top_table  |  grep  '・<a'  |  sed  's;</a>;;'  |  sed  's/..*>//'  

•  一行で書いてもそんなに長くはない  –  $  curl  h^p://www.yahoo.co.jp  |  gsed  's;</[^/][^/]*>;&\n;g'  |  grep  top_table  |  grep  '・<a'  |  sed  's;</a>;;'  |  sed  's/..*>//'  

2013/04/13 第4回春爛漫シェル芸芸人撩乱勉強会 17

Page 18: 20130413シェル芸勉強会スライド

問題5:  数値参照の変換

•  次のような数値参照、実体参照文字列を  読めるように変換してください。

2013/04/13 第4回春爛漫シェル芸芸人撩乱勉強会 18

Page 19: 20130413シェル芸勉強会スライド

解答

•  $  cat  numref  |  nkf  -­‐-­‐numchar-­‐input •  $  cat  numref  |  w3m  -­‐T  text/html  -­‐dump  我々はシェル芸人だ。    

2013/04/13 第4回春爛漫シェル芸芸人撩乱勉強会 19

Page 20: 20130413シェル芸勉強会スライド

問題6:  ポスト

•  h^p://www.usptomo.com/TOMONOKAI_CMS/CGI/hoge.cgi  に、ポストでデータを送りつけてください。

2013/04/13 第4回春爛漫シェル芸芸人撩乱勉強会 20

こんなCGIスクリプト→

Page 21: 20130413シェル芸勉強会スライド

解答

•  $  wget  -­‐-­‐post-­‐data  a=aho  <URL>  •  $  curl  -­‐-­‐data-­‐urlencode  a=aho  <URL>  •  $  curl  -­‐-­‐data  a=山本太郎  <url>  

あなたのポストしたデータは、

a=山本太郎

です。  

•  無慈悲な攻撃  –  $  seq  1  10000  |  xargs  –P  1000  -­‐I@  curl  -­‐-­‐data-­‐urlencode  a=@  h^p://www.usptomo.com/TOMONOKAI_CMS/CGI/hoge.cgi  

   2013/04/13 第4回春爛漫シェル芸芸人撩乱勉強会 21

Page 22: 20130413シェル芸勉強会スライド

問題7:  データの収集

•  本日の 高気温をワンライナーで  出力してください。  

2013/04/13 第4回春爛漫シェル芸芸人撩乱勉強会 22

Page 23: 20130413シェル芸勉強会スライド

解答

•  Yahooさんから、東京の 高気温  –  $  curl  h^p://weather.yahoo.co.jp/weather/jp/13/4410.html    2>  /dev/null  |  grep   高 |  tail  -­‐n  2  |  head  -­‐n  1  |  sed  's/.*<br>//'  |  sed  's/  .*//'  

•  tenki.jpさんから、東京の 高気温  –  $  curl  h^p://tenki.jp/forecast/city-­‐63.html  2>  /dev/null  |  grep  -­‐A  1   高 |  grep  temp  |  head  -­‐n  1  |  sed  's;.*bold">\(..*\)</span.*;\1;'

2013/04/13 第4回春爛漫シェル芸芸人撩乱勉強会 23

Page 24: 20130413シェル芸勉強会スライド

問題8:  画像をダウンロード

•  ウェブページに掲載されている画像を集めてください。  –  yahooさんのニュースのページ  h^p://headlines.yahoo.co.jp/hl    等々から

2013/04/13 第4回春爛漫シェル芸芸人撩乱勉強会 24

Page 25: 20130413シェル芸勉強会スライド

解答

•  画像のリンクはすべてフルパスのようです。  

–  $  curl  h^p://headlines.yahoo.co.jp/hl  2>  /dev/null  |  nkf  |  gsed  's/src="/\n&/g'  |  grep  src=  |  sed  's/^src="\([^"]*\)".*$/\1/'  |  while  read  f  ;  do  wget  $f  ;  done  

–  $  curl  h^p://headlines.yahoo.co.jp/hl  2>  /dev/null  |  nkf  |  gsed  's/src="/\n&/g'  |  grep  src=  |  sed  's/^src="\([^"]*\)".*$/\1/'  |  xargs  wget  

2013/04/13 第4回春爛漫シェル芸芸人撩乱勉強会 25

Page 26: 20130413シェル芸勉強会スライド

問題9:  クローリング

•  どこかのサイトのトップページにあるリンク先のリストを作って、リストのページや画像等をダウンロードしてください。  

–  相対パスにも対応しましょう。  

–  できたら再帰的にクローリング

2013/04/13 第4回春爛漫シェル芸芸人撩乱勉強会 26

Page 27: 20130413シェル芸勉強会スライド

解答

•  $  curl  h^p://www.yahoo.co.jp  |  gsed  's/href="/\n&/g'  |  grep  ^href=  |  sed  's/[^"]*"//'  |  sed  's/".*$//'  |  awk  '/^h^p/{print  $0}!/^h^p/{print  "h^p://www.yahoo.co.jp/"  $0}'  |  xargs  wget  

•  wget  -­‐r  h^p://www.yahoo.co.jp    

2013/04/13 第4回春爛漫シェル芸芸人撩乱勉強会 27

Page 28: 20130413シェル芸勉強会スライド

おわりに

•  次は・・・  

#!/beer/bash  

2013/04/13 第4回春爛漫シェル芸芸人撩乱勉強会 28