Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
第2回 GNU/Linux勉強会
Search
Hiroto Sasagawa
July 09, 2023
Programming
0
430
第2回 GNU/Linux勉強会
Hiroto Sasagawa
July 09, 2023
Tweet
Share
More Decks by Hiroto Sasagawa
See All by Hiroto Sasagawa
IP Anycastとリバースプロキシ
nagutabby
0
410
HSTSについて調べた
nagutabby
0
390
第1回 AWS勉強会
nagutabby
0
510
第1回 GNU/Linux勉強会
nagutabby
0
500
第3回 GNU/Linux勉強会
nagutabby
0
480
DNSを標的とする攻撃
nagutabby
0
440
EC2とCloudWatchで始める高対話型ハニーポット運用
nagutabby
0
510
Other Decks in Programming
See All in Programming
今年のアップデートで振り返るCDKセキュリティのシフトレフト/2024-cdk-security-shift-left
tomoki10
0
190
Асинхронность неизбежна: как мы проектировали сервис уведомлений
lamodatech
0
600
The Efficiency Paradox and How to Save Yourself and the World
hollycummins
1
440
たのしいparse.y
ydah
3
120
ゆるやかにgolangci-lintのルールを強くする / Kyoto.go #56
utgwkk
1
350
talk-with-local-llm-with-web-streams-api
kbaba1001
0
170
CSC305 Lecture 26
javiergs
PRO
0
140
17年周年のWebアプリケーションにTanStack Queryを導入する / Implementing TanStack Query in a 17th Anniversary Web Application
saitolume
0
250
良いユニットテストを書こう
mototakatsu
4
1.5k
Webエンジニア主体のモバイルチームの 生産性を高く保つためにやったこと
igreenwood
0
330
menu基盤チームによるGoogle Cloudの活用事例~Application Integration, Cloud Tasks編~
yoshifumi_ishikura
0
110
As an Engineers, let's build the CRM system via LINE Official Account 2.0
clonn
1
670
Featured
See All Featured
How To Stay Up To Date on Web Technology
chriscoyier
789
250k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
28
900
GitHub's CSS Performance
jonrohan
1030
460k
Building an army of robots
kneath
302
44k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
365
25k
Stop Working from a Prison Cell
hatefulcrawdad
267
20k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
10
810
Designing Experiences People Love
moore
138
23k
Rebuilding a faster, lazier Slack
samanthasiow
79
8.7k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
6
510
The Pragmatic Product Professional
lauravandoore
32
6.3k
Transcript
第2回 GNU/Linux 勉強会 正規表現、⽂字列探索、プロセス管理 2022/5/23 笹川 尋翔
正規表現とは • 端的に⾔えば、あいまいな表現 • 定義 • ⽂字列の集合を1つの⽂字列で表現する⽅法 • メリット •
⽂字列検索を⾏う際にコード量を削減できる
もう少し分かりやすく • カレーを例に考えてみる • 世界には⾊々なカレーがある • チキンカレー • ビーフカレー •
ポークカレー … • 全てのカレーを検索対象とするときは、単に「カレー」と検索すれば いい • 正規表現では同様のことを「*カレー」という⽂字列で表現する
Linuxにおける正規表現 • grepコマンドと組み合わせることが多い • 今回はgrepコマンドを例に、実際に検索⽂字列から⽂字列を抽 出してみる
grep(global regular expression print) • ファイルや標準出⼒に書かれている⽂字列を検索対象として、指定 した⽂字列を検索するコマンド • ⽤法 •
grep 検索パターン ファイル名 • オプション • -c: マッチした⾏数のみを表⽰する • -f: ファイルの内容を検索パターンに指定する • -i: ⼤⽂字と⼩⽂字を区別しない • -n: 先頭に⾏番号を付けてマッチした⾏を表⽰する • -v: マッチしなかった⾏を表⽰する
grep • -E: 拡張正規表現を使う • egrepコマンドと同じ挙動になる • -F: 検索パターンを正規表現ではなく固定⽂字列として解釈する •
fgrepコマンドと同じ挙動になる • -e: 検索パターンを指定する • 検索パターンが1つの場合は不要
grepを使ってみる • それぞれのユーザのホームディレクトリにinput.txtファイルを 作成してある • 実際にgrepコマンドを使って⽂字列を検索してみる • ⽂字列linuxを含む⾏の⽂字列を表⽰する • grep
linux input.txt
grep -i • ⼤⽂字と⼩⽂字を区別せずに、⽂字列linuxを含む⾏の⽂字列を 表⽰する • grep ‒i linux input.txt
grep ‒v • ⽂字列linuxを含まない⾏の⽂字列を表⽰する • grep ‒v linux input.txt
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 ファイル名
grepの正規表現 • []: []内の任意の1⽂字 • [abc]: aかbかcのいずれか1⽂字を含む⾏ • [a-z]: aからzまでのいずれか1⽂字(⼩⽂字のアルファベット)を含む⾏
• [A-Z]: AからZまでのいずれか1⽂字(⼤⽂字のアルファベット)を含む ⾏ • [0-9]: 0から9までのいずれか1⽂字(数字)を含む⾏
grepの正規表現 • .(ドット):任意の1⽂字 • ...(ドット3つ): 任意の3⽂字 • .*: 任意の⽂字列 •
a.*: aを含む⾏ • ^: ⾏頭 • ^a: aから始まる⾏ • $: ⾏末 • a$: aで終わる⾏
grepの正規表現 • ⾏頭が⼤⽂字Lである⾏の⽂字列を表⽰する • grep ^L.* input.txt あるいは grep ^L
input.txt • マッチの仕⽅が全部⼀致でも部分⼀致でも ⾏は表⽰されることに注意する
特殊⽂字のエスケープ • エスケープする⽅法 • \(バックスラッシュ)を特殊⽂字の直前に挿⼊する • ʻʼ(シングルクォーテーション)で囲む • grepの-Fオプションを使う •
fgrepを使う
プロセス管理 • プロセス • Linuxカーネルがプログラムを管理する際の単位の1つ • プログラムを実⾏すると⽣成されるインスタンス • 親プロセスがforkされている場合は、単⼀のプログラムでも複数のプ ロセスを持つ
• 親プロセスと⼦プロセスの関係はpstreeコマンドで確認できる
pstree(process tree)
init • Linuxカーネルが起動した際に最初に実⾏されるプログラム • initのPIDは必ず1になる • 他の全てのプロセスの親プロセス • 古い⽅から順番に、SysVinit、Upstart、systemdがある
SysVinit • initプロセスを開始 • → initプロセスが/etc/inittabを読み込む • → /etc/inittabに書かれたプロセスを順番に開始する •
メリット • 開始するプロセスを1つのファイルだけで管理できる • デメリット • プロセスを順番に開始するため、全てのプロセスが開始されるまでに ⻑い時間が掛かる
Upstart • イベント駆動型 • initプロセスを開始 • → initプロセスがイベントを検知する • →
イベントを処理するために必要なジョブを実⾏するためのジョブ定 義ファイルを/etc/event.dディレクトリから検索する • → ジョブを実⾏する • メリット • プロセスを並列で起動することができる
systemd • initのデファクトスタンダード • ほとんどのディストリビューションで採⽤されている • プロセスをユニットと呼ばれる単位で管理する • systemdプロセスを開始 •
→ default.targetを確認 • → default.targetに書かれているtargetを確認 • → 読み込んだtargetを元に必要なユニットを起動
systemd • メリット • プロセスを並列で起動することができる • Upstartよりも⾼速