Upgrade to Pro — share decks privately, control downloads, hide ads and more …

第2回 GNU/Linux勉強会

第2回 GNU/Linux勉強会

Hiroto Sasagawa

July 09, 2023
Tweet

More Decks by Hiroto Sasagawa

Other Decks in Programming

Transcript

  1. 第2回 GNU/Linux 勉強会
    正規表現、⽂字列探索、プロセス管理
    2022/5/23 笹川 尋翔

    View Slide

  2. 正規表現とは
    • 端的に⾔えば、あいまいな表現
    • 定義
    • ⽂字列の集合を1つの⽂字列で表現する⽅法
    • メリット
    • ⽂字列検索を⾏う際にコード量を削減できる

    View Slide

  3. もう少し分かりやすく
    • カレーを例に考えてみる
    • 世界には⾊々なカレーがある
    • チキンカレー
    • ビーフカレー
    • ポークカレー …
    • 全てのカレーを検索対象とするときは、単に「カレー」と検索すれば
    いい
    • 正規表現では同様のことを「*カレー」という⽂字列で表現する

    View Slide

  4. Linuxにおける正規表現
    • grepコマンドと組み合わせることが多い
    • 今回はgrepコマンドを例に、実際に検索⽂字列から⽂字列を抽
    出してみる

    View Slide

  5. grep(global regular expression print)
    • ファイルや標準出⼒に書かれている⽂字列を検索対象として、指定
    した⽂字列を検索するコマンド
    • ⽤法
    • grep 検索パターン ファイル名
    • オプション
    • -c: マッチした⾏数のみを表⽰する
    • -f: ファイルの内容を検索パターンに指定する
    • -i: ⼤⽂字と⼩⽂字を区別しない
    • -n: 先頭に⾏番号を付けてマッチした⾏を表⽰する
    • -v: マッチしなかった⾏を表⽰する

    View Slide

  6. grep
    • -E: 拡張正規表現を使う
    • egrepコマンドと同じ挙動になる
    • -F: 検索パターンを正規表現ではなく固定⽂字列として解釈する
    • fgrepコマンドと同じ挙動になる
    • -e: 検索パターンを指定する
    • 検索パターンが1つの場合は不要

    View Slide

  7. grepを使ってみる
    • それぞれのユーザのホームディレクトリにinput.txtファイルを
    作成してある
    • 実際にgrepコマンドを使って⽂字列を検索してみる
    • ⽂字列linuxを含む⾏の⽂字列を表⽰する
    • grep linux input.txt

    View Slide

  8. grep -i
    • ⼤⽂字と⼩⽂字を区別せずに、⽂字列linuxを含む⾏の⽂字列を
    表⽰する
    • grep ‒i linux input.txt

    View Slide

  9. grep ‒v
    • ⽂字列linuxを含まない⾏の⽂字列を表⽰する
    • grep ‒v linux input.txt

    View Slide

  10. grepでAND, OR検索
    • AND検索(A∩B)
    • grepで抽出した結果を|(パイプ)で次のgrepに渡す
    • grep 検索パターンA ファイル名 | grep 検索パターンB
    • OR検索(A∪B)
    • grepの-eオプションで複数の検索パターンを指定する
    • grep ‒e 検索パターンA ‒e 検索パターンB ファイル名
    • 拡張正規表現の|を使う
    • grep ‒E 検索パターンA|検索パターンB ファイル名
    • egrep 検索パターンA|検索パターンB ファイル名

    View Slide

  11. grepの正規表現
    • []: []内の任意の1⽂字
    • [abc]: aかbかcのいずれか1⽂字を含む⾏
    • [a-z]: aからzまでのいずれか1⽂字(⼩⽂字のアルファベット)を含む⾏
    • [A-Z]: AからZまでのいずれか1⽂字(⼤⽂字のアルファベット)を含む

    • [0-9]: 0から9までのいずれか1⽂字(数字)を含む⾏

    View Slide

  12. grepの正規表現
    • .(ドット):任意の1⽂字
    • ...(ドット3つ): 任意の3⽂字
    • .*: 任意の⽂字列
    • a.*: aを含む⾏
    • ^: ⾏頭
    • ^a: aから始まる⾏
    • $: ⾏末
    • a$: aで終わる⾏

    View Slide

  13. grepの正規表現
    • ⾏頭が⼤⽂字Lである⾏の⽂字列を表⽰する
    • grep ^L.* input.txt あるいは grep ^L input.txt
    • マッチの仕⽅が全部⼀致でも部分⼀致でも
    ⾏は表⽰されることに注意する

    View Slide

  14. 特殊⽂字のエスケープ
    • エスケープする⽅法
    • \(バックスラッシュ)を特殊⽂字の直前に挿⼊する
    • ʻʼ(シングルクォーテーション)で囲む
    • grepの-Fオプションを使う
    • fgrepを使う

    View Slide

  15. プロセス管理
    • プロセス
    • Linuxカーネルがプログラムを管理する際の単位の1つ
    • プログラムを実⾏すると⽣成されるインスタンス
    • 親プロセスがforkされている場合は、単⼀のプログラムでも複数のプ
    ロセスを持つ
    • 親プロセスと⼦プロセスの関係はpstreeコマンドで確認できる

    View Slide

  16. pstree(process tree)

    View Slide

  17. init
    • Linuxカーネルが起動した際に最初に実⾏されるプログラム
    • initのPIDは必ず1になる
    • 他の全てのプロセスの親プロセス
    • 古い⽅から順番に、SysVinit、Upstart、systemdがある

    View Slide

  18. SysVinit
    • initプロセスを開始
    • → initプロセスが/etc/inittabを読み込む
    • → /etc/inittabに書かれたプロセスを順番に開始する
    • メリット
    • 開始するプロセスを1つのファイルだけで管理できる
    • デメリット
    • プロセスを順番に開始するため、全てのプロセスが開始されるまでに
    ⻑い時間が掛かる

    View Slide

  19. Upstart
    • イベント駆動型
    • initプロセスを開始
    • → initプロセスがイベントを検知する
    • → イベントを処理するために必要なジョブを実⾏するためのジョブ定
    義ファイルを/etc/event.dディレクトリから検索する
    • → ジョブを実⾏する
    • メリット
    • プロセスを並列で起動することができる

    View Slide

  20. systemd
    • initのデファクトスタンダード
    • ほとんどのディストリビューションで採⽤されている
    • プロセスをユニットと呼ばれる単位で管理する
    • systemdプロセスを開始
    • → default.targetを確認
    • → default.targetに書かれているtargetを確認
    • → 読み込んだtargetを元に必要なユニットを起動

    View Slide

  21. systemd
    • メリット
    • プロセスを並列で起動することができる
    • Upstartよりも⾼速

    View Slide