Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

100 views

Published on

要するにシェル芸

Published in: Software
  • Be the first to comment

  • Be the first to like this

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

  1. 1. Linuxの基本構造と Bashでの扱い方 渡邉 浩平Maker Faire Tokyo 2016 1 2017年12月4日(月)
  2. 2. 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. 3. 基本構造 ✓プロセス ✓ファイルシステム ✓ストリーム 3
  4. 4. プロセス 4
  5. 5. 【プロセス】 プロセスとは 付帯情報+コマンド フラグ 制御端末 開始時刻 付帯情報 コマンド コマンド 状態関数名物理メモリ仮想メモリ nice値 優先度PPIDPIDUID 5
  6. 6. 【プロセス】 プロセスの一生 親プロセス 実行中 TASK_RUNNING ゾンビ EXIT_ZOMBIE 死 EXIT_DEAD TASK_INTERRUPTIBLE TASK_UNINTERRUPTIBLE TASK_KILLABLE TASK_DEAD TASK_STOPPED TASK_TRACED TASK_WAKING ... fork() exit() wait() 実は前途多難 6
  7. 7. 【プロセス】 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. 8. ファイルシステム 8
  9. 9. 【ファイルシステム】 ファイルとは パーミッション ファイルの種類 オーナー グループ ハードリンク数 サイズ 更新時刻 名前 付帯情報 名前 付帯情報+名前+データ 9
  10. 10. 【ファイルシステム】 特殊なファイル シンボリックリンク • ln -s file link_name デバイスファイル • /dev/null など 名前付きパイプ • mkfifo name UNIXドメインソケット いろいろな種類のファイルが存在 10
  11. 11. 【ファイルシステム】 パターンマッチ * • 任意の1…n文字のファイル名にマッチする ? • 任意の1文字にマッチする […] • []の中の1文字にマッチする ただし / にはマッチしない ただし先頭の . はマッチしない パターンマッチを駆使してファイル名に展開 11
  12. 12. 【ファイルシステム】 shopt shopt -s globstar ** • / にもマッチする さらに強力なパターンマッチも利用可能 shopt -s extglob ?(pattern|pattern…) *(pattern|pattern…) +(pattern|pattern…) @(pattern|pattern…) !(pattern|pattern…) 12
  13. 13. ストリーム 13
  14. 14. 【ストリーム】 ストリームとは プロセスとファイルを仲介する媒体 14
  15. 15. 【ストリーム】 標準入出力 標準入出力を介してファイルを扱う 標準入力 <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
  16. 16. 【ストリーム】 パイプ プログラマーの君! 騙されるな! シェルスクリプトはそう書いちゃ駄目だ!! という話 – Qiita http://qiita.com/piroor/items/77233173707a0baa6360 パイプ「|」で標準入出力を自在に操る 16
  17. 17. 発表は以上です 詳細は man bash ↵ 17
  18. 18. 【小ネタ】 地味に便利な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
  19. 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 出力例 1 2 3 … 9 10 19
  20. 20. 【問題】 連番を出力 解答例 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
  21. 21. 【問題】 連番のファイルを生成 解答例 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
  22. 22. 【問題】 連番のファイルを生成 解答例 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
  23. 23. 【問題】 大きいサイズのファイル生成 解答例 head -c $((10**6)) /dev/zero >file 期待結果 $ ls -l -rw-rw-rw- 1 root root 1000000 11月 29 14:00 file $ cat file # やや重いが何も表示されない 23
  24. 24. 【問題】 大きいサイズのファイル生成 解答例 fallocate -l 1MB file head -c $((10**6)) /dev/zero >file dd if=/dev/zero of=file bs=1000 count=1000 24
  25. 25. 【問題】 ファイルの最後の行を削除 解答例 sed –i'' '$d' file cat file | (rm -f file && head -n -1 >file) 期待結果 $ cat file 1 2 3 $ # ファイルの最後の行を削除 $ cat file 1 2 $ 25
  26. 26. 【問題】 ファイルの最後の行を削除 解答例 sed –i'' '$d' file cat file | (rm -f file && head -n -1 >file) 26

×