Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
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
450
第2回 GNU/Linux勉強会
Hiroto Sasagawa
July 09, 2023
Tweet
Share
More Decks by Hiroto Sasagawa
See All by Hiroto Sasagawa
IP Anycastとリバースプロキシ
nagutabby
0
440
HSTSについて調べた
nagutabby
0
410
第1回 AWS勉強会
nagutabby
0
570
第1回 GNU/Linux勉強会
nagutabby
0
530
第3回 GNU/Linux勉強会
nagutabby
0
520
DNSを標的とする攻撃
nagutabby
0
470
EC2とCloudWatchで始める高対話型ハニーポット運用
nagutabby
0
580
Other Decks in Programming
See All in Programming
モデル駆動設計をやってみようワークショップ開催報告(Modeling Forum2025) / model driven design workshop report
haru860
0
260
【Streamlit x Snowflake】データ基盤からアプリ開発・AI活用まで、すべてをSnowflake内で実現
ayumu_yamaguchi
1
120
안드로이드 9년차 개발자, 프론트엔드 주니어로 커리어 리셋하기
maryang
1
110
堅牢なフロントエンドテスト基盤を構築するために行った取り組み
shogo4131
8
2.3k
tparseでgo testの出力を見やすくする
utgwkk
1
190
Cell-Based Architecture
larchanjo
0
110
開発に寄りそう自動テストの実現
goyoki
1
770
大体よく分かるscala.collection.immutable.HashMap ~ Compressed Hash-Array Mapped Prefix-tree (CHAMP) ~
matsu_chara
1
220
なあ兄弟、 余白の意味を考えてから UI実装してくれ!
ktcryomm
11
11k
AIコードレビューがチームの"文脈"を 読めるようになるまで
marutaku
0
350
ViewファーストなRailsアプリ開発のたのしさ
sugiwe
0
440
認証・認可の基本を学ぼう後編
kouyuume
0
180
Featured
See All Featured
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Mobile First: as difficult as doing things right
swwweet
225
10k
Large-scale JavaScript Application Architecture
addyosmani
515
110k
Agile that works and the tools we love
rasmusluckow
331
21k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
A designer walks into a library…
pauljervisheath
210
24k
BBQ
matthewcrist
89
9.9k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.7k
KATA
mclloyd
PRO
32
15k
GraphQLとの向き合い方2022年版
quramy
50
14k
The Cult of Friendly URLs
andyhume
79
6.7k
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よりも⾼速