SlideShare a Scribd company logo
1 of 26
Download to read offline
Linuxの基本構造と
Bashでの扱い方
渡邉 浩平Maker Faire Tokyo 2016
1
2017年12月4日(月)
Linux使ってますか
Windows,
88.88%
macOS, 6.29%
Linux, 4.83% FreeBSD,
0.01%
2017年9月のデスクトップOSのシェア
引用元: https://news.mynavi.jp/article/20171002-a160/ Net Applications による報告
もはや無視できない存在(?)
2
基本構造
✓プロセス
✓ファイルシステム
✓ストリーム
3
プロセス
4
【プロセス】 プロセスとは
付帯情報+コマンド
フラグ
制御端末 開始時刻
付帯情報
コマンド
コマンド
状態関数名物理メモリ仮想メモリ
nice値
優先度PPIDPIDUID
5
【プロセス】 プロセスの一生
親プロセス
実行中
TASK_RUNNING
ゾンビ
EXIT_ZOMBIE
死
EXIT_DEAD
TASK_INTERRUPTIBLE
TASK_UNINTERRUPTIBLE
TASK_KILLABLE
TASK_DEAD
TASK_STOPPED
TASK_TRACED
TASK_WAKING
...
fork()
exit()
wait()
実は前途多難
6
【プロセス】 Bashの基本書式
Simple Commands (コマンド)
• Delimiters: space や tab
• Words: 0-9A-Za-z+-=:%#@^_{} …
Pipelines
• command | input-command
Lists
• || && & ; newline
Compound Commands
• (lists) や { lists;}
Shell Function Definitions
• func_name() compound-commands
コマンドは文字列
7
ファイルシステム
8
【ファイルシステム】 ファイルとは
パーミッション
ファイルの種類
オーナー グループ
ハードリンク数
サイズ 更新時刻 名前
付帯情報 名前
付帯情報+名前+データ
9
【ファイルシステム】 特殊なファイル
シンボリックリンク
• ln -s file link_name
デバイスファイル
• /dev/null など
名前付きパイプ
• mkfifo name
UNIXドメインソケット
いろいろな種類のファイルが存在
10
【ファイルシステム】 パターンマッチ
*
• 任意の1…n文字のファイル名にマッチする
?
• 任意の1文字にマッチする
[…]
• []の中の1文字にマッチする
ただし / にはマッチしない
ただし先頭の . はマッチしない
パターンマッチを駆使してファイル名に展開
11
【ファイルシステム】 shopt
shopt -s globstar
**
• / にもマッチする
さらに強力なパターンマッチも利用可能
shopt -s extglob
?(pattern|pattern…)
*(pattern|pattern…)
+(pattern|pattern…)
@(pattern|pattern…)
!(pattern|pattern…)
12
ストリーム
13
【ストリーム】 ストリームとは
プロセスとファイルを仲介する媒体
14
【ストリーム】 標準入出力
標準入出力を介してファイルを扱う
標準入力
<file
cat file
<<word や <<-word
次に出てくる word まで
標準入力ストリームに流す
<<<word (Bash3+)
command <<<word や
<<<word command は
echo word | command
標準出力
>file
tee file >/dev/null
>>file
tee -a file >/dev/null
read var
1行を読み込み var に代入
15
【ストリーム】 パイプ
プログラマーの君! 騙されるな! シェルスクリプトはそう書いちゃ駄目だ!! という話 – Qiita
http://qiita.com/piroor/items/77233173707a0baa6360
パイプ「|」で標準入出力を自在に操る
16
発表は以上です
詳細は man bash ↵
17
【小ネタ】 地味に便利なCtrlキー
• ^C 中断 (kill -SIGINT pid)
• ^D ログアウト (logout)
• ^R ヒストリーのインクリメント検索
• ^H / ^D バックスペース/デリート
• ^W スペース・タブ直後までバックスペース
• ^A 先頭まで移動
• ^E 末尾まで移動
• ^U 先頭まで削除
• ^K 末尾まで削除
• ^B (backward) ^N (next) ^P (previous) ^F (forward) :
移動 viのhjklに相当
• ^V 制御文字を直接入力
18
【問題】 連番を出力
解答例
seq 10
ruby -e 'p *(1..10)'
echo {1..10} | xargs –n1
(あるいは | tr ' ' '⧵n')
(あるいは | sed 's/ /⧵n/g')
for i in {1..10}; do echo $i; done
for((i=1;i<=10;i++)); do echo $i; done
出力例
1
2
3
…
9
10
19
【問題】 連番を出力
解答例
seq 10
ruby -e 'p *(1..10)'
echo {1..10} | xargs –n1
(あるいは | tr ' ' '¥n')
(あるいは | sed 's/ /¥n/g')
for i in {1..10}; do echo $i; done
for((i=1;i<=10;i++)); do echo $i; done
20
【問題】 連番のファイルを生成
解答例
touch {01..10}
seq –w 10 | xargs touch
printf ' %02d' `seq 10` | xargs touch
for((i=1;i<=10;i++)); do
f=0$i
>>${f:$((${#i}-1)):2}
done
21
期待結果
$ ls
01 03 05 07 09
02 04 06 08 10
【問題】 連番のファイルを生成
解答例
touch {01..10}
seq –w 10 | xargs touch
seq –f %02g 10 | xargs touch
printf ' %02d' `seq 10` | xargs touch
for((i=1;i<=10;i++)); do
f=0$i
>>${f:$((${#i}-1)):2}
done
22
【問題】 大きいサイズのファイル生成
解答例
head -c $((10**6)) /dev/zero >file
期待結果
$ ls -l
-rw-rw-rw- 1 root root 1000000 11月 29 14:00 file
$ cat file
# やや重いが何も表示されない
23
【問題】 大きいサイズのファイル生成
解答例
fallocate -l 1MB file
head -c $((10**6)) /dev/zero >file
dd if=/dev/zero of=file bs=1000 count=1000
24
【問題】 ファイルの最後の行を削除
解答例
sed –i'' '$d' file
cat file | (rm -f file && head -n -1 >file)
期待結果
$ cat file
1
2
3
$ # ファイルの最後の行を削除
$ cat file
1
2
$
25
【問題】 ファイルの最後の行を削除
解答例
sed –i'' '$d' file
cat file | (rm -f file && head -n -1 >file)
26

More Related Content

What's hot

テーマ「最適化 その2」
テーマ「最適化 その2」テーマ「最適化 その2」
テーマ「最適化 その2」technocat
 
シェル芸初心者によるシェル芸入門
シェル芸初心者によるシェル芸入門シェル芸初心者によるシェル芸入門
シェル芸初心者によるシェル芸入門icchy
 
サーバー実装いろいろ
サーバー実装いろいろサーバー実装いろいろ
サーバー実装いろいろkjwtnb
 
MlnagoyaRx02
MlnagoyaRx02MlnagoyaRx02
MlnagoyaRx02mega80b
 
Go conference 2017 Lightning talk
Go conference 2017 Lightning talkGo conference 2017 Lightning talk
Go conference 2017 Lightning talkmokelab
 
#logstudy 01 rsyslog入門
#logstudy 01 rsyslog入門#logstudy 01 rsyslog入門
#logstudy 01 rsyslog入門Takashi Takizawa
 
菩薩でもわかる!Rで動かすExcelアドインの作り方
 菩薩でもわかる!Rで動かすExcelアドインの作り方  菩薩でもわかる!Rで動かすExcelアドインの作り方
菩薩でもわかる!Rで動かすExcelアドインの作り方 Nagi Teramo
 
dofilewrite and vn_write
dofilewrite and vn_writedofilewrite and vn_write
dofilewrite and vn_writekusabanachi
 
cdev_write and_comwrite
cdev_write and_comwritecdev_write and_comwrite
cdev_write and_comwritekusabanachi
 
Node.jsでDroneたちをめっちゃ簡単にHACKする話 JSオジサン#6
Node.jsでDroneたちをめっちゃ簡単にHACKする話 JSオジサン#6Node.jsでDroneたちをめっちゃ簡単にHACKする話 JSオジサン#6
Node.jsでDroneたちをめっちゃ簡単にHACKする話 JSオジサン#6Yukiko Tamiya
 
Javaで最強のfizz buzz
Javaで最強のfizz buzzJavaで最強のfizz buzz
Javaで最強のfizz buzzyy yank
 
第6回鹿児島node.jsの会資料_内村
第6回鹿児島node.jsの会資料_内村第6回鹿児島node.jsの会資料_内村
第6回鹿児島node.jsの会資料_内村Koichi Uchimura
 
2015年度 第1回バイオインフォマティクス実習
2015年度 第1回バイオインフォマティクス実習2015年度 第1回バイオインフォマティクス実習
2015年度 第1回バイオインフォマティクス実習Jun Nakabayashi
 

What's hot (20)

テーマ「最適化 その2」
テーマ「最適化 その2」テーマ「最適化 その2」
テーマ「最適化 その2」
 
Subprocess no susume
Subprocess no susumeSubprocess no susume
Subprocess no susume
 
シェル芸初心者によるシェル芸入門
シェル芸初心者によるシェル芸入門シェル芸初心者によるシェル芸入門
シェル芸初心者によるシェル芸入門
 
サーバー実装いろいろ
サーバー実装いろいろサーバー実装いろいろ
サーバー実装いろいろ
 
Unix
UnixUnix
Unix
 
MlnagoyaRx02
MlnagoyaRx02MlnagoyaRx02
MlnagoyaRx02
 
Go conference 2017 Lightning talk
Go conference 2017 Lightning talkGo conference 2017 Lightning talk
Go conference 2017 Lightning talk
 
Hudson using Groovy #jggug
Hudson using Groovy  #jggugHudson using Groovy  #jggug
Hudson using Groovy #jggug
 
#logstudy 01 rsyslog入門
#logstudy 01 rsyslog入門#logstudy 01 rsyslog入門
#logstudy 01 rsyslog入門
 
20131109 ruby conf2013
20131109 ruby conf201320131109 ruby conf2013
20131109 ruby conf2013
 
菩薩でもわかる!Rで動かすExcelアドインの作り方
 菩薩でもわかる!Rで動かすExcelアドインの作り方  菩薩でもわかる!Rで動かすExcelアドインの作り方
菩薩でもわかる!Rで動かすExcelアドインの作り方
 
Ruby 2.5
Ruby 2.5Ruby 2.5
Ruby 2.5
 
dofilewrite and vn_write
dofilewrite and vn_writedofilewrite and vn_write
dofilewrite and vn_write
 
Nginx lua
Nginx luaNginx lua
Nginx lua
 
Hachioji pm 21
Hachioji pm 21Hachioji pm 21
Hachioji pm 21
 
cdev_write and_comwrite
cdev_write and_comwritecdev_write and_comwrite
cdev_write and_comwrite
 
Node.jsでDroneたちをめっちゃ簡単にHACKする話 JSオジサン#6
Node.jsでDroneたちをめっちゃ簡単にHACKする話 JSオジサン#6Node.jsでDroneたちをめっちゃ簡単にHACKする話 JSオジサン#6
Node.jsでDroneたちをめっちゃ簡単にHACKする話 JSオジサン#6
 
Javaで最強のfizz buzz
Javaで最強のfizz buzzJavaで最強のfizz buzz
Javaで最強のfizz buzz
 
第6回鹿児島node.jsの会資料_内村
第6回鹿児島node.jsの会資料_内村第6回鹿児島node.jsの会資料_内村
第6回鹿児島node.jsの会資料_内村
 
2015年度 第1回バイオインフォマティクス実習
2015年度 第1回バイオインフォマティクス実習2015年度 第1回バイオインフォマティクス実習
2015年度 第1回バイオインフォマティクス実習
 

Similar to 2017-12-04 Linuxの基本構造とBashでの扱い方

Rでのtry関数によるエラー処理
Rでのtry関数によるエラー処理Rでのtry関数によるエラー処理
Rでのtry関数によるエラー処理wada, kazumi
 
Siphone coffeemaker okayama-js-1
Siphone coffeemaker okayama-js-1Siphone coffeemaker okayama-js-1
Siphone coffeemaker okayama-js-1NISHIMOTO Keisuke
 
Node予備校 vol.1 名古屋
Node予備校 vol.1 名古屋Node予備校 vol.1 名古屋
Node予備校 vol.1 名古屋Mori Shingo
 
どこでも動くゲームを作るためのベタープラクティス
どこでも動くゲームを作るためのベタープラクティスどこでも動くゲームを作るためのベタープラクティス
どこでも動くゲームを作るためのベタープラクティス5mingame2
 
知って得する標準関数の使い方
知って得する標準関数の使い方知って得する標準関数の使い方
知って得する標準関数の使い方Soudai Sone
 
Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1Ransui Iso
 
Djangoフレームワークの紹介
Djangoフレームワークの紹介Djangoフレームワークの紹介
Djangoフレームワークの紹介Shinya Okano
 
関西Php勉強会のlimeの話
関西Php勉強会のlimeの話関西Php勉強会のlimeの話
関西Php勉強会のlimeの話Hisateru Tanaka
 
スタート低レイヤー #0
スタート低レイヤー #0スタート低レイヤー #0
スタート低レイヤー #0Kiwamu Okabe
 
東京Node学園#3 Domains & Isolates
東京Node学園#3 Domains & Isolates東京Node学園#3 Domains & Isolates
東京Node学園#3 Domains & Isolateskoichik
 
第2回品川Redmine勉強会(日本語全文検索)
第2回品川Redmine勉強会(日本語全文検索)第2回品川Redmine勉強会(日本語全文検索)
第2回品川Redmine勉強会(日本語全文検索)Masanori Machii
 
TensorflowとKerasによる深層学習のプログラム実装実践講座
TensorflowとKerasによる深層学習のプログラム実装実践講座TensorflowとKerasによる深層学習のプログラム実装実践講座
TensorflowとKerasによる深層学習のプログラム実装実践講座Ruo Ando
 

Similar to 2017-12-04 Linuxの基本構造とBashでの扱い方 (20)

Rでのtry関数によるエラー処理
Rでのtry関数によるエラー処理Rでのtry関数によるエラー処理
Rでのtry関数によるエラー処理
 
about DakotagUI
about DakotagUIabout DakotagUI
about DakotagUI
 
Siphone coffeemaker okayama-js-1
Siphone coffeemaker okayama-js-1Siphone coffeemaker okayama-js-1
Siphone coffeemaker okayama-js-1
 
Node予備校 vol.1 名古屋
Node予備校 vol.1 名古屋Node予備校 vol.1 名古屋
Node予備校 vol.1 名古屋
 
zsh とわたし
zsh とわたし zsh とわたし
zsh とわたし
 
Rの高速化
Rの高速化Rの高速化
Rの高速化
 
Ansible2.0と実用例
Ansible2.0と実用例Ansible2.0と実用例
Ansible2.0と実用例
 
どこでも動くゲームを作るためのベタープラクティス
どこでも動くゲームを作るためのベタープラクティスどこでも動くゲームを作るためのベタープラクティス
どこでも動くゲームを作るためのベタープラクティス
 
実は怖くないDevOps
実は怖くないDevOps実は怖くないDevOps
実は怖くないDevOps
 
知って得する標準関数の使い方
知って得する標準関数の使い方知って得する標準関数の使い方
知って得する標準関数の使い方
 
Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1
 
Djangoフレームワークの紹介
Djangoフレームワークの紹介Djangoフレームワークの紹介
Djangoフレームワークの紹介
 
関西Php勉強会のlimeの話
関西Php勉強会のlimeの話関西Php勉強会のlimeの話
関西Php勉強会のlimeの話
 
スタート低レイヤー #0
スタート低レイヤー #0スタート低レイヤー #0
スタート低レイヤー #0
 
Node.jsでブラウザメッセンジャー
Node.jsでブラウザメッセンジャーNode.jsでブラウザメッセンジャー
Node.jsでブラウザメッセンジャー
 
東京Node学園#3 Domains & Isolates
東京Node学園#3 Domains & Isolates東京Node学園#3 Domains & Isolates
東京Node学園#3 Domains & Isolates
 
about dakota6.7 gui
about dakota6.7 guiabout dakota6.7 gui
about dakota6.7 gui
 
第2回品川Redmine勉強会(日本語全文検索)
第2回品川Redmine勉強会(日本語全文検索)第2回品川Redmine勉強会(日本語全文検索)
第2回品川Redmine勉強会(日本語全文検索)
 
initramfsについて
initramfsについてinitramfsについて
initramfsについて
 
TensorflowとKerasによる深層学習のプログラム実装実践講座
TensorflowとKerasによる深層学習のプログラム実装実践講座TensorflowとKerasによる深層学習のプログラム実装実践講座
TensorflowとKerasによる深層学習のプログラム実装実践講座
 

2017-12-04 Linuxの基本構造とBashでの扱い方