SlideShare a Scribd company logo
1 of 80
Download to read offline
シェル芸初心者による
シェル芸入門 (修正版)
#rncc夏期講習
@icchyr
$ whoami
• @icchyr
• 某濃厚な大学のB3
• Activity
• CTF (tuat_mcc, TokyoWesterns)
• ICPC (nocow) など
Agenda
• シェル芸について
• シェルの機能を理解する
• 実用的なシェル芸
シェル芸
シェル芸を覚えるメリット
• あらゆる処理を一撃で終わらせられる
• カッコイイ
• 便利
!
• 基本的にパイプで繋ぐので超高速
• マルチプロセスの恩恵をフルに授かれる
シェル芸を覚えるデメリット
• 敬遠される
• 一般人から見るとキモい
!
• シェルが使えない環境に苛立ちを覚えるようになる
• Windowsを消したくなる衝動に駆られる
シェルの機能を理解する
• IO
• パイプ
• リダイレクト
• フィルタ処理
• 内部展開
• 制御構文
この先スライドを使いまわすので
スライドテーマがちょくちょく
変わります
IO (Input and Output)
Linuxの入出力は大きく分けて3つ
標準入力
標準出力
エラー出力
IOには番号(File Discriptor)が割り振られている
標準入力 0, 標準出力 1, エラー出力 2
普通の出力は1番
エラーメッセージは2番
IO (Input and Output)
ターミナル(端末)には識別番号がつけられている
コンソールから直接ログイン → tty
ターミナルエミュレータ   → pts (仮想tty)
tty pts
tty/1 tty/2 tty/3
tty/4 tty/5 tty/6
tty/7
pts/0 pts/1 pts/2
pts/3 pts/4 pts/5
pts/6 pts/7
接続するたびに増える
...
IO (Input and Output)
現在開いているターミナルエミュレータは

tty/7で起動したGUIから仮想的に接続しているもの
ttyを切り替えるには Ctrl + Alt + F1~7を押す (tty/1~7)
IO (Input and Output)
ターミナルに出力されているのは

自身のターミナル識別番号に出力された結果
$ ls -la
total 184
drwxr-x--x 21 root ubuntu…
drwxr-xr-x 6 root root…
….
/dev/pts/0
IO (Input and Output)
実際は出力をデバイスファイルに書き込んでいる
cat ls.bash
/dev/pts/10
/proc/self/fd/1
現在のprocess自身の

ファイルディスクリプタ1番(標準出力)
シンボリックリンク
ls -la
pts/10
シェルが書き込む /dev/stdout
リダイレクト
シェルでは
コマンドの出力を任意のファイルに書き出す
コマンドへの入力を任意のファイルから行う
ことが可能
例
ls -l > res.txt  ls -l の結果がres.txtに書き込まれる
bash < cmd.txt cmd.txtに書かれた内容を実行
リダイレクト
ls -l > res.txt
ls -l /proc/self/fd/1
res.txt (新規作成)
リダイレクト
bash < cmd.txt
bash/proc/self/fd/0
cmd.txt
ユーザー入力
/proc/self/fd/1
リダイレクト
リダイレクトを組み合わせることもできる
bash < cmd.txt > res.txt
cmd.txtに書かれた内容をbashで実行し,

その結果をres.txtに書き出す
コマンド >> output と書くとoutputの末尾に追加する
$ echo -n “hoge” > out

$ echo -n “fuga” >> out

$ cat out
hogefuga
リダイレクト
• リダイレクト先をfile descriptor (fd)で指定できる
• grep -r / 2>/dev/null # エラー出力を無視
• grep -r / 2>&1 # エラー出力を標準出力
!
• &(fd number)でfdをファイルのように扱える
パイプ
コマンドの実行結果を次のコマンドの入力にする
例). headは標準入力の先頭10行を出力する
$ ls -la > ls.result

$ head < ls.result
ls.resultというファイルを通じて実行結果を見る
!
$ cat ls.result | head
headに対する入力を”|”(パイプ)を通じて行う
“|” - JIS配列ならBackSpaceの左にあるキー
パイプ
内部的に何が起こっているか
ptscat ls.result
cat ls.result の結果
パイプ
内部的に何が起こっているか
!
!
$ cat ls.result > tmp

$ head < tmp
ptscat ls.result | head head
cat ls.result
head < {cat ls.result の結果}
パイプ
cat ls.result と ls -la の出力結果は同じ
!
!
それぞれのコマンドは

完全に独立した動き
ptsls -la | head head
ls -la の実行結果 入力の先頭10行
内部展開
• シェルではコマンドの実行結果をそのまま展開して
用いることができる
• `command` (バッククオートで囲む)
• $(command) (先頭に$をつけたカッコで囲む)
内部展開
• 内部では別プロセスが立ち上がり,その結果が展開
される (後述するxargsで似たような処理が可能)
file `which ls` which ls
file /bin/ls /bin/ls
/bin/ls: ELF 64-bit LSB Executable…
フィルタ処理
• 引数に与えられたファイルまたは

標準入力に対して特定のテキスト処理を行う
• grep, cut, sed, awk, sort, uniq
!
• 以降では,cmd [input] と表記した場合

[input]にはファイル名が入るが,省略した場合は
標準入力を使用する
grep
• grep expr [input]
• exprにマッチする行を出力する
• grep -v expr [input]
• exprにマッチしない行を出力する
• grep -r expr /some/path
• /some/path配下からexprにマッチするファイル
およびその箇所を出力する
grep
• 演習1: /home以下から現在ログインしているユー
ザーの名前を含むファイルを全て列挙して下さい
• ただしバイナリファイルのマッチ結果および

エラー出力(permission deniedなど)は出力しては
なりません.
• また,どの環境で実行しても同じ処理ができるよう
にして下さい. (bashで)
grep
• 演習1 解答:
• grep -r `whoami` /home ¦ grep -v matches
2>/dev/null
!
• grep -r と grep -v はよく使う
• エラーが多すぎる場合は/dev/nullに投げて無視
cut
• cut -d <delim> -f num [input]
• <delim>を区切り文字として,num番目の列を

出力する
• numには 1,3-5 (1と3-5行目)のように範囲を指
定できる
cut
• 例)
• cat /etc/passwd ¦ cut -d : -f1,6
• 全ユーザー名とログインシェルを列挙
sed
• sed expr [input]
• 入力を行ごとにexprに従って処理する
• expr
• s/[pat1]/[pat2]/g # pat1をpat2に置換する
• patに / が含まれる場合はエスケープが必要
• 区切り文字は別のものでも良い (@,#,%など)
sed
• 例)
• cat /etc/passwd ¦ sed s/bash/zsh/g
• 全ユーザーのログインシェルをbashからzshに変更
• 結果は出力されるだけ
• 反映させたい場合は-iオプションとファイルを指定
• 対象ファイルへのwrite権限が必要
awk
• awk expr [input]
• テキスト処理のために作られたスクリプト言語
• 行単位で処理を行う
• デフォルトで空白をいい感じに扱ってくれる
• 空白とタブが混じっていても大丈夫
• cutで崩れるような場合に便利
awk
• 処理の流れ
• BEGIN { statement } # 開始処理

(pattern) { statement }

…

END { statement } # 終了処理
• BEGINとENDは無くてもよい
• patternにマッチするとその中身が実行される
awk
• 例) /etc/passwdでbashとnologinの数を計算
• /bash/ { ++bash }
• /nologin/ { ++nologin }
• END { print bash: bash, nologin: nologin}
• 宣言されていない変数は自動的に初期化される
• awk /bash/{++bash} /nologin/{…
awk
• 標準でさまざまな変数が用意されている
• NR => 処理中の行番号 (1 index)
• $n => 分割後のn番目の要素 ($0は行全体)
• ps aux ¦ awk NR>1 {print $1}
• 現在のプロセスIDを全列挙
sort
• sort [input]
• 入力をソートする (ソートキーを変更可能)
• -t <delim> # 区切り文字をdelimにする
• -k <key1> # key1から行末をソートキーにする
• -b # 行頭のスペースを無視
• -r # 降順
• -i # ignore case
uniq
• uniq [input]
• 重複する行を消して出力
• -c # 消した行数をカウントする
!
• sort と組み合わせて使うことが多い
フィルタ処理
• 演習2: rootが動かしているプロセスのうち,メモ
リ使用率が高いものから順番にPIDを10個出力して
下さい
• まずはrootが動かしているプロセスを列挙
• メモリ使用率でソートするためには?
• 先頭N行出力するコマンドはhead -n N
フィルタ処理
• 演習2 解答:
• ps aux ¦ grep ^root ¦ awk {print $4,$2} ¦
sort -r ¦ head ¦ cut -d -f2
!
• awkで出力順序を変更してソートしやすくする
xargs
• xargs cmd
• 引数を標準入力から受け取りコマンドを実行
• 標準入力が複数行ある場合

一行に連結して実行する
• cat filelist.txt ¦ xargs rm

# => rm file1 file2 file3 file4…

# filelist.txtに含まれるファイルを消去する
find
• find <path> <expr>
• pathからexprにしたがって検索を実行する
• expr (よく使うもの)
• -name <filename>
• filenameに一致したファイルのパスを出力する
find
• 演習3: /Users以下に存在する.DS_Storeを全て削
除して下さい
!
• 憎き.DS_Storeを殺せ
find
• 演習3 解答:
• find /Users -name .DS_Store ¦ xargs rm -f
!
• find /Users -name .DS_Store
• /Users以下に含まれる.DS_Storeを検索
• xargs rm -f
• rm -f [.DS_Store1] [.DS_Store2]…
☕ 一旦休憩 ☕
💀 危険シェル芸 💀
危険シェル芸
• マウスも使わず,ソースコードも残さず,

GUIツールを立ち上げる間もなく,

あらゆる破壊・迷惑・自滅行為を

CLI端末へのコマンド入力一撃で終わらすこと.
!
• 引用元: http://blog.ueda.asia/?page_id=3752
:(){: ¦ : &};:
:(){: ¦ :&};:
• :()
• : という関数を定義
• {: ¦ :&}; :
• :を:にパイプで繋ぐのをバックグラウンドで実行
!
• 無限にプロセスが増殖する
:(){: ¦ :&};:
• 言わずと知れたフォーク爆弾
!
• Dockerからやるとホストが死ぬらしい
!
• 要は実行するな
ps aux ¦ grep bash ¦ grep
-v $$ ¦ awk {print $2} ¦
xargs kill -9
ps aux ¦ grep bash ¦ grep -v $$
¦ awk {print $2} ¦ xargs kill -9
• ps aux
• プロセスを全列挙
• ¦ grep bash
• bashプロセスを抽出
• ¦ grep -v $$
• $$ (自分自身)を除外する
ps aux ¦ grep bash ¦ grep -v $$
¦ awk {print $2} ¦ xargs kill -9
• ¦ awk {print $2}
• PIDを列挙し
• ¦ xargs kill -9
• kill する
!
• つまり自分以外のbashを全員殺す
超迷惑なのでやめましょう
☕ 休憩おわり ☕
制御構文
• シェル(bash)では多くの制御構文がサポートされて
いる
• よく使うもの
• for, while read
• {} (ブロック)
for
• 言わずと知れたfor文
• 少し癖がある
!
• $ for((i=0;i<10;i++))

> do

> echo $i

> done
for
• bashならば0 9までの数字が一行ずつ出力される
• for((i=0…の書き方は zshならparse error

(下の例ならzshでもOK)
!
• $ for i in `seq 0 9`

> do

> echo $i

> done
for
• seq start end
• start から endまでの数字を順に出力
• seq start d end
• start から endまでの数字をdおきに出力
!
• for((i=0;i<10;i+=2)) ==> for i in `seq 0 2 9`
while
• while cond
• condがtrueの間続く処理をループする
!
• $ while true

> do

> echo hoge

> done
while
• while read line
• 標準入力から一行ずつ$lineに読み込む
• $lineを参照することで行単位の処理が可能
• $ cat filelist.txt ¦ while read line

> do

> rm $line

> done

# filelist.txtに書かれているファイルを削除
{} (ブロック)
• 複数コマンドの処理をひとまとめにしたもの
• パイプで繋げることができる
• 制御構文を使わなくとも複数行の処理を行える
• 内部で変数に一旦保存したい時とか便利
実用的なシェル芸
実用的なシェル芸
• ログ解析
• access.logとauth.logの中身を解析してみる
access.log
• Apacheのログ
• /var/log/apache/以下にある
• 一定時間経つとgzipで圧縮して保存
• 最新のものは*.log
access.log
• gzipで圧縮されているものを読むには
• gunzip -c [files]
• zcat [files]
• zcatの方がタイプ数が少なくコマンド名が直感的

(個人の主観)
access.log
• gzipで圧縮されているものを読むには
• gunzip -c [files]
• zcat [files]
• zcatの方がタイプ数が少なくコマンド名が直感的

(個人の主観)
access.log
• だが実際にはplain textとgzip圧縮されたテキスト
両方を見たい
• zcat -f (̶force) オプションをつけると普通の
テキストデータも表示してくれる
!
• grep前提ならばzgrepでもよい(こちらはオプショ
ン無しでも両方のデータをgrepしてくれる)
access.log
• zcat -f /var/log/apache/*access*
• 全てのaccess.logが得られる
• ¦ grep ()
• ShellShockのアレ
• ¦ awk {print $1}
• IPを表示
access.log
• ¦ sort
• ソートする
• ¦ uniq -c
• 重複するIPをカウント
!
• 怪しげなリクエストを送ってきたIPの統計が出る
auth.log
• ログインなど資格情報の使用記録
• /var/log/auth.log
• アーカイブはauth.log.<number>[.gz] の形
!
• 不正ログインしようとしたIPとそのユーザー名につ
いて調べてみる
auth.log
• zcat -f /var/log/auth.log*
• アーカイブを含む全てのauth.logを出力
• ¦ grep sshd
• sshのイベントを抽出
• ¦ grep Invalid
• Invalid user <username> from <IP address> 

のログを抽出
auth.log
• ¦ awk {print $10,$8}
• 8番目(username)と10番目(IP address)を抽出

あとでソートしやすくするために順番を逆にする
• ¦ sort
• ソート
• ¦ uniq -c
• 重複するものをカウント (IP別のユーザー名)
auth.log
• ¦ sort -g -r # -g: 数字をいいカンジにソート
• カウントの回数について降順にソート
!
• awkで抽出する列を
• 8のみにするとユーザー名
• 10のみにするとIP別の統計が取れる

auth.log
• 結果
• adminが超人気
• 次点でtest,apacheがいい勝負
!
• 実在しそうなユーザーを狙ってきてる
• 他に代表的なものとしては

vagrant,pi,oracle,ubuntuなど
補足
auth.log
• 単にカウントするだけでは試行回数が多ければ多い
ほど上位に来てしまう
• username別に何種類のIPから試行されたかカウン
トする方が現実的
!
• 先にusernameでソートをかけ,IPの重複を排除し
てからもう一度ソートをかける
auth.log
• zcat -f auth.log* ¦ grep sshd ¦ grep Invalid
• ¦ awk {print $8,$10} ¦ sort ¦ uniq
• username,IPの順にソートをして同一IPを排除する
• ¦ cut -d -f1 ¦ sort
• もう一度usernameでソートをかける
• ¦ uniq -c ¦ sort -g -r
• username毎にIPの種類数でカウントされる
auth.log
• 結果
• やはりadminが大人気
• vagrantが割と狙われている
• test,userなどの適当な名前も割とある
• xbmc,ftpなどサービス用のアカウント

を狙っているのも多い
まとめ
• 手元で色々できて便利

More Related Content

What's hot

Cybozu Tech Conference 2016 バグの調べ方
Cybozu Tech Conference 2016 バグの調べ方Cybozu Tech Conference 2016 バグの調べ方
Cybozu Tech Conference 2016 バグの調べ方MITSUNARI Shigeo
 
ocsとselってコマンド作ったわよ
ocsとselってコマンド作ったわよocsとselってコマンド作ったわよ
ocsとselってコマンド作ったわよxztaityozx
 
R を起動するその前に
R を起動するその前にR を起動するその前に
R を起動するその前にKosei ABE
 
Programming camp 2008, Codereading
Programming camp 2008, CodereadingProgramming camp 2008, Codereading
Programming camp 2008, CodereadingHiro Yoshioka
 
Cli mini Hack!#1 ~Terminalとの親睦を深めよう~
Cli mini Hack!#1 ~Terminalとの親睦を深めよう~Cli mini Hack!#1 ~Terminalとの親睦を深めよう~
Cli mini Hack!#1 ~Terminalとの親睦を深めよう~Kei IWASAKI
 
super_unkoをスーパーキレイにした
super_unkoをスーパーキレイにしたsuper_unkoをスーパーキレイにした
super_unkoをスーパーキレイにしたjiro4989
 
PowerShellが苦手だった男がPowerShellを愛するようになるまで
PowerShellが苦手だった男がPowerShellを愛するようになるまでPowerShellが苦手だった男がPowerShellを愛するようになるまで
PowerShellが苦手だった男がPowerShellを愛するようになるまでKazuhiro Matsushima
 
Functions
FunctionsFunctions
Functionsdo_aki
 
ひのきのぼうだけで全クリ目指す
ひのきのぼうだけで全クリ目指すひのきのぼうだけで全クリ目指す
ひのきのぼうだけで全クリ目指すAromaBlack
 
systemdでよく使うサブコマンド
systemdでよく使うサブコマンドsystemdでよく使うサブコマンド
systemdでよく使うサブコマンドKazuhiro Nishiyama
 
Node-v0.12の新機能について
Node-v0.12の新機能についてNode-v0.12の新機能について
Node-v0.12の新機能についてshigeki_ohtsu
 
Fabricでサーバー管理をDRYにしよう
Fabricでサーバー管理をDRYにしようFabricでサーバー管理をDRYにしよう
Fabricでサーバー管理をDRYにしようmax747
 
Sourcecode Reading Workshop2010
Sourcecode Reading Workshop2010Sourcecode Reading Workshop2010
Sourcecode Reading Workshop2010Hiro Yoshioka
 

What's hot (20)

Cybozu Tech Conference 2016 バグの調べ方
Cybozu Tech Conference 2016 バグの調べ方Cybozu Tech Conference 2016 バグの調べ方
Cybozu Tech Conference 2016 バグの調べ方
 
Memory sanitizer
Memory sanitizerMemory sanitizer
Memory sanitizer
 
ocsとselってコマンド作ったわよ
ocsとselってコマンド作ったわよocsとselってコマンド作ったわよ
ocsとselってコマンド作ったわよ
 
R を起動するその前に
R を起動するその前にR を起動するその前に
R を起動するその前に
 
Programming camp 2008, Codereading
Programming camp 2008, CodereadingProgramming camp 2008, Codereading
Programming camp 2008, Codereading
 
Cli mini Hack!#1 ~Terminalとの親睦を深めよう~
Cli mini Hack!#1 ~Terminalとの親睦を深めよう~Cli mini Hack!#1 ~Terminalとの親睦を深めよう~
Cli mini Hack!#1 ~Terminalとの親睦を深めよう~
 
Kernel fcache-bug
Kernel fcache-bugKernel fcache-bug
Kernel fcache-bug
 
ICHIGEKI-MT 2015/03/14
ICHIGEKI-MT 2015/03/14ICHIGEKI-MT 2015/03/14
ICHIGEKI-MT 2015/03/14
 
super_unkoをスーパーキレイにした
super_unkoをスーパーキレイにしたsuper_unkoをスーパーキレイにした
super_unkoをスーパーキレイにした
 
Altanative macro
Altanative macroAltanative macro
Altanative macro
 
Hello, systemd
Hello, systemdHello, systemd
Hello, systemd
 
PowerShellが苦手だった男がPowerShellを愛するようになるまで
PowerShellが苦手だった男がPowerShellを愛するようになるまでPowerShellが苦手だった男がPowerShellを愛するようになるまで
PowerShellが苦手だった男がPowerShellを愛するようになるまで
 
Ilstudy001_20110806
Ilstudy001_20110806Ilstudy001_20110806
Ilstudy001_20110806
 
SystemV IPC
SystemV IPCSystemV IPC
SystemV IPC
 
Functions
FunctionsFunctions
Functions
 
ひのきのぼうだけで全クリ目指す
ひのきのぼうだけで全クリ目指すひのきのぼうだけで全クリ目指す
ひのきのぼうだけで全クリ目指す
 
systemdでよく使うサブコマンド
systemdでよく使うサブコマンドsystemdでよく使うサブコマンド
systemdでよく使うサブコマンド
 
Node-v0.12の新機能について
Node-v0.12の新機能についてNode-v0.12の新機能について
Node-v0.12の新機能について
 
Fabricでサーバー管理をDRYにしよう
Fabricでサーバー管理をDRYにしようFabricでサーバー管理をDRYにしよう
Fabricでサーバー管理をDRYにしよう
 
Sourcecode Reading Workshop2010
Sourcecode Reading Workshop2010Sourcecode Reading Workshop2010
Sourcecode Reading Workshop2010
 

Viewers also liked

Summary of "Hacking", 0x351-0x354
Summary of "Hacking", 0x351-0x354Summary of "Hacking", 0x351-0x354
Summary of "Hacking", 0x351-0x354Taku Miyakawa
 
Format string Attack
Format string AttackFormat string Attack
Format string Attackicchy
 
USP友の会第五回シェル芸勉強会問題だけスライド
USP友の会第五回シェル芸勉強会問題だけスライドUSP友の会第五回シェル芸勉強会問題だけスライド
USP友の会第五回シェル芸勉強会問題だけスライドRyuichi Ueda
 
「やっちまったぁ!」を防ごう!
「やっちまったぁ!」を防ごう!「やっちまったぁ!」を防ごう!
「やっちまったぁ!」を防ごう!博文 斉藤
 
固定長レコード形式行順ファイルでもAwkがしたい!
固定長レコード形式行順ファイルでもAwkがしたい!固定長レコード形式行順ファイルでもAwkがしたい!
固定長レコード形式行順ファイルでもAwkがしたい!kunst1080
 
Usptomonokai 20111028
Usptomonokai 20111028Usptomonokai 20111028
Usptomonokai 20111028博文 斉藤
 
20150418 第16回シェル芸勉強会スライド
20150418 第16回シェル芸勉強会スライド20150418 第16回シェル芸勉強会スライド
20150418 第16回シェル芸勉強会スライドRyuichi Ueda
 
Format string vunerability
Format string vunerabilityFormat string vunerability
Format string vunerabilitynuc13us
 
20131222 第8回シェル芸勉強会スライド
20131222 第8回シェル芸勉強会スライド20131222 第8回シェル芸勉強会スライド
20131222 第8回シェル芸勉強会スライドRyuichi Ueda
 
Scalability, Fidelity and Stealth in the DRAKVUF Dynamic Malware Analysis System
Scalability, Fidelity and Stealth in the DRAKVUF Dynamic Malware Analysis SystemScalability, Fidelity and Stealth in the DRAKVUF Dynamic Malware Analysis System
Scalability, Fidelity and Stealth in the DRAKVUF Dynamic Malware Analysis SystemTamas K Lengyel
 
20130824 第六回チャンピオンシップシェル芸ランナー勉強会 in LLまつり
20130824 第六回チャンピオンシップシェル芸ランナー勉強会 in LLまつり20130824 第六回チャンピオンシップシェル芸ランナー勉強会 in LLまつり
20130824 第六回チャンピオンシップシェル芸ランナー勉強会 in LLまつりRyuichi Ueda
 
プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造Takuya Akiba
 

Viewers also liked (15)

Summary of "Hacking", 0x351-0x354
Summary of "Hacking", 0x351-0x354Summary of "Hacking", 0x351-0x354
Summary of "Hacking", 0x351-0x354
 
Format string Attack
Format string AttackFormat string Attack
Format string Attack
 
Uspstudy20121208
Uspstudy20121208Uspstudy20121208
Uspstudy20121208
 
USP友の会第五回シェル芸勉強会問題だけスライド
USP友の会第五回シェル芸勉強会問題だけスライドUSP友の会第五回シェル芸勉強会問題だけスライド
USP友の会第五回シェル芸勉強会問題だけスライド
 
「やっちまったぁ!」を防ごう!
「やっちまったぁ!」を防ごう!「やっちまったぁ!」を防ごう!
「やっちまったぁ!」を防ごう!
 
固定長レコード形式行順ファイルでもAwkがしたい!
固定長レコード形式行順ファイルでもAwkがしたい!固定長レコード形式行順ファイルでもAwkがしたい!
固定長レコード形式行順ファイルでもAwkがしたい!
 
Usptomonokai 20111028
Usptomonokai 20111028Usptomonokai 20111028
Usptomonokai 20111028
 
20150418 第16回シェル芸勉強会スライド
20150418 第16回シェル芸勉強会スライド20150418 第16回シェル芸勉強会スライド
20150418 第16回シェル芸勉強会スライド
 
CTFを楽しむやで
CTFを楽しむやでCTFを楽しむやで
CTFを楽しむやで
 
Format string vunerability
Format string vunerabilityFormat string vunerability
Format string vunerability
 
20131222 第8回シェル芸勉強会スライド
20131222 第8回シェル芸勉強会スライド20131222 第8回シェル芸勉強会スライド
20131222 第8回シェル芸勉強会スライド
 
Tips for bash script
Tips for bash scriptTips for bash script
Tips for bash script
 
Scalability, Fidelity and Stealth in the DRAKVUF Dynamic Malware Analysis System
Scalability, Fidelity and Stealth in the DRAKVUF Dynamic Malware Analysis SystemScalability, Fidelity and Stealth in the DRAKVUF Dynamic Malware Analysis System
Scalability, Fidelity and Stealth in the DRAKVUF Dynamic Malware Analysis System
 
20130824 第六回チャンピオンシップシェル芸ランナー勉強会 in LLまつり
20130824 第六回チャンピオンシップシェル芸ランナー勉強会 in LLまつり20130824 第六回チャンピオンシップシェル芸ランナー勉強会 in LLまつり
20130824 第六回チャンピオンシップシェル芸ランナー勉強会 in LLまつり
 
プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造
 

Similar to シェル芸初心者によるシェル芸入門 (修正版)

PostgreSQL運用管理入門
PostgreSQL運用管理入門PostgreSQL運用管理入門
PostgreSQL運用管理入門Yoshiyuki Asaba
 
JavaScript 講習会 #1
JavaScript 講習会 #1JavaScript 講習会 #1
JavaScript 講習会 #1Susisu
 
並行プログラミングと継続モナド
並行プログラミングと継続モナド並行プログラミングと継続モナド
並行プログラミングと継続モナドKousuke Ruichi
 
Python勉強会1-はじめに
Python勉強会1-はじめにPython勉強会1-はじめに
Python勉強会1-はじめに理 小林
 
ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)
ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)
ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)inaz2
 
ng-japan 2015 TypeScript+AngularJS 1.3
ng-japan 2015 TypeScript+AngularJS 1.3ng-japan 2015 TypeScript+AngularJS 1.3
ng-japan 2015 TypeScript+AngularJS 1.3Masahiro Wakame
 
リテラル文字列型までの道
リテラル文字列型までの道リテラル文字列型までの道
リテラル文字列型までの道Satoshi Sato
 
C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1信之 岩永
 
Constexpr 中3女子テクニック
Constexpr 中3女子テクニックConstexpr 中3女子テクニック
Constexpr 中3女子テクニックGenya Murakami
 
とあるDBAの黒い画面(ターミナル)II
とあるDBAの黒い画面(ターミナル)IIとあるDBAの黒い画面(ターミナル)II
とあるDBAの黒い画面(ターミナル)IIKazuhiro Yoshikawa
 
最近の単体テスト
最近の単体テスト最近の単体テスト
最近の単体テストKen Morishita
 
中3女子でもわかる constexpr
中3女子でもわかる constexpr中3女子でもわかる constexpr
中3女子でもわかる constexprGenya Murakami
 
【学習メモ#8th】12ステップで作る組込みOS自作入門
【学習メモ#8th】12ステップで作る組込みOS自作入門 【学習メモ#8th】12ステップで作る組込みOS自作入門
【学習メモ#8th】12ステップで作る組込みOS自作入門 sandai
 
Kink: invokedynamic on a prototype-based language
Kink: invokedynamic on a prototype-based languageKink: invokedynamic on a prototype-based language
Kink: invokedynamic on a prototype-based languageTaku Miyakawa
 
使い捨て python コードの書き方
使い捨て python コードの書き方使い捨て python コードの書き方
使い捨て python コードの書き方Sho Shimauchi
 
php7's ast
php7's astphp7's ast
php7's astdo_aki
 
ソースコードリーディングの基礎
ソースコードリーディングの基礎ソースコードリーディングの基礎
ソースコードリーディングの基礎hogemuta
 

Similar to シェル芸初心者によるシェル芸入門 (修正版) (20)

PostgreSQL運用管理入門
PostgreSQL運用管理入門PostgreSQL運用管理入門
PostgreSQL運用管理入門
 
入門 シェル実装
入門 シェル実装入門 シェル実装
入門 シェル実装
 
JavaScript 講習会 #1
JavaScript 講習会 #1JavaScript 講習会 #1
JavaScript 講習会 #1
 
並行プログラミングと継続モナド
並行プログラミングと継続モナド並行プログラミングと継続モナド
並行プログラミングと継続モナド
 
Python勉強会1-はじめに
Python勉強会1-はじめにPython勉強会1-はじめに
Python勉強会1-はじめに
 
ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)
ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)
ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)
 
ng-japan 2015 TypeScript+AngularJS 1.3
ng-japan 2015 TypeScript+AngularJS 1.3ng-japan 2015 TypeScript+AngularJS 1.3
ng-japan 2015 TypeScript+AngularJS 1.3
 
リテラル文字列型までの道
リテラル文字列型までの道リテラル文字列型までの道
リテラル文字列型までの道
 
C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1
 
Constexpr 中3女子テクニック
Constexpr 中3女子テクニックConstexpr 中3女子テクニック
Constexpr 中3女子テクニック
 
とあるDBAの黒い画面(ターミナル)II
とあるDBAの黒い画面(ターミナル)IIとあるDBAの黒い画面(ターミナル)II
とあるDBAの黒い画面(ターミナル)II
 
最近の単体テスト
最近の単体テスト最近の単体テスト
最近の単体テスト
 
中3女子でもわかる constexpr
中3女子でもわかる constexpr中3女子でもわかる constexpr
中3女子でもわかる constexpr
 
【学習メモ#8th】12ステップで作る組込みOS自作入門
【学習メモ#8th】12ステップで作る組込みOS自作入門 【学習メモ#8th】12ステップで作る組込みOS自作入門
【学習メモ#8th】12ステップで作る組込みOS自作入門
 
Objc lambda
Objc lambdaObjc lambda
Objc lambda
 
Kink: invokedynamic on a prototype-based language
Kink: invokedynamic on a prototype-based languageKink: invokedynamic on a prototype-based language
Kink: invokedynamic on a prototype-based language
 
使い捨て python コードの書き方
使い捨て python コードの書き方使い捨て python コードの書き方
使い捨て python コードの書き方
 
php7's ast
php7's astphp7's ast
php7's ast
 
about Perl5.10
about Perl5.10about Perl5.10
about Perl5.10
 
ソースコードリーディングの基礎
ソースコードリーディングの基礎ソースコードリーディングの基礎
ソースコードリーディングの基礎
 

シェル芸初心者によるシェル芸入門 (修正版)