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

13,770 views

Published on

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

Published in: Technology

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

  1. 1. 第4回春爛漫シェル芸人撩乱   勉強会 USP友の会 上田 隆一
  2. 2. 近況 •  月曜、とあるサイトをリリース   –  (日曜の朝から作業。泊まり込み)   –  延期!でも明日も仕事だ!  •  今朝は子供が while  sleep  1000  ;  do  嘔吐  ;  done   で病院へ連れて行った。    •  お察しください。  2013/04/13 第4回春爛漫シェル芸芸人撩乱勉強会 2
  3. 3. はじめに   なに!? 2013/04/13 第4回春爛漫シェル芸芸人撩乱勉強会 3
  4. 4. 東京にミサイルが来るらしい 2013/04/13 第4回春爛漫シェル芸芸人撩乱勉強会 4
  5. 5. 今、我々にできること       curlとシェル芸で無慈悲なパケット攻撃       (注意:ダメ絶対)   2013/04/13 第4回春爛漫シェル芸芸人撩乱勉強会 5
  6. 6. ということで本日は     シェル芸web編     やりませう。 2013/04/13 第4回春爛漫シェル芸芸人撩乱勉強会 6
  7. 7. シェル芸とは? •  マウスも使わず、ソースコードも残さず、   GUIツールを立ち上げる間もなく、   あらゆる調査・計算・テキスト処理を   コマンド入力一撃で終わらす。   –  最近、一般名詞化   してきた   海外のシェル芸勉強会の様子(再掲) 2013/04/13 第4回春爛漫シェル芸芸人撩乱勉強会 7
  8. 8. 今回の内容 •  ウェブ関連の9問を準備   –  ポイント   •  表向き:webからの情報収集   •  裏のテーマ:不定形文章の処理(こっちが大事)  •  ちょっと難しめ   –  玄人が1人混入した2,  3人のグループを   作ってください。  2013/04/13 第4回春爛漫シェル芸芸人撩乱勉強会 8
  9. 9. 注意 •  解答例は  Mac  で作成  •  *Linux  の人は  gawk,  gsedを適宜 awk,  sedに読み替えのこと  •  その他環境でも、解答例にこだわらずネット等を   調べながら解答願います。  •  解答では、例題が解ければよい。   –  一般解を探すのは、場合によっては悪い癖となる。  2013/04/13 第4回春爛漫シェル芸芸人撩乱勉強会 9
  10. 10. 問題1:  肩ならし •  次のファイルから、「index.cgi」を   除去して出力してください。   –  ただし、p=index.cgiは残すこと。 2013/04/13 第4回春爛漫シェル芸芸人撩乱勉強会 10
  11. 11. 解答 •  $  cat  2.html  |  sed  s/index.cgi//  •  $  cat  2.html  |  awk  {sub(/index.cgi/,"",$0);print}  2013/04/13 第4回春爛漫シェル芸芸人撩乱勉強会 11
  12. 12. 問題2:  urlのリスティング •  次のファイルを作って、urlを抜き出してください。 2013/04/13 第4回春爛漫シェル芸芸人撩乱勉強会 12
  13. 13. 解答 •  $  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
  14. 14. 問題3:  整形 •  インデントの汚いhtmlを整形してください   –  一行にtd一個にすること 2013/04/13 第4回春爛漫シェル芸芸人撩乱勉強会 14
  15. 15. 解答 •  $  cat  3.html  |  gsed  s;</td>;&n;g  |  gsed   s;<td>;tt&;  |  grep  -­‐v  "^$" 2013/04/13 第4回春爛漫シェル芸芸人撩乱勉強会 15
  16. 16. 問題4:  webページの切り取り •  yahooさんのトップページからトピックスの   見出しを抽出しましょう 2013/04/13 第4回春爛漫シェル芸芸人撩乱勉強会 16
  17. 17. 解答 •  まず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
  18. 18. 問題5:  数値参照の変換 •  次のような数値参照、実体参照文字列を   読めるように変換してください。 2013/04/13 第4回春爛漫シェル芸芸人撩乱勉強会 18
  19. 19. 解答 •  $  cat  numref  |  nkf  -­‐-­‐numchar-­‐input •  $  cat  numref  |  w3m  -­‐T  text/html  -­‐dump  我々はシェル芸人だ。    2013/04/13 第4回春爛漫シェル芸芸人撩乱勉強会 19
  20. 20. 問題6:  ポスト •  h^p://www.usptomo.com/TOMONOKAI_CMS/CGI/ hoge.cgi  に、ポストでデータを送りつけてください。 こんなCGIスクリプト→ 2013/04/13 第4回春爛漫シェル芸芸人撩乱勉強会 20
  21. 21. 解答 •  $  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
  22. 22. 問題7:  データの収集 •  本日の最高気温をワンライナーで   出力してください。  2013/04/13 第4回春爛漫シェル芸芸人撩乱勉強会 22
  23. 23. 解答 •  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
  24. 24. 問題8:  画像をダウンロード •  ウェブページに掲載されている画像を集めてくださ い。   –  yahooさんのニュースのページ   h^p://headlines.yahoo.co.jp/hl     等々から 2013/04/13 第4回春爛漫シェル芸芸人撩乱勉強会 24
  25. 25. 解答 •  画像のリンクはすべてフルパスのようです。   –  $  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
  26. 26. 問題9:  クローリング •  どこかのサイトのトップページにあるリンク先のリス トを作って、リストのページや画像等をダウンロード してください。   –  相対パスにも対応しましょう。   –  できたら再帰的にクローリング 2013/04/13 第4回春爛漫シェル芸芸人撩乱勉強会 26
  27. 27. 解答 •  $  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
  28. 28. おわりに •  次は・・・   #!/beer/bash  2013/04/13 第4回春爛漫シェル芸芸人撩乱勉強会 28

×