GNUとUnixコマンドを深く理解しよう #2

6 min 52 views
正規表現・プロセス管理・実行優先度

正規表現・プロセス管理・実行優先度までまとめて解説!

Linuxの学習を続けていくと、避けて通れないのが「GNUとUnixコマンド」。
今回はその中でも“動くテキストを見つける力”と“プロセスを操る力”に焦点を当てながら、実践的に理解していきます。

「grepってよく聞くけど何?」
「プロセスって種類がいろいろあって難しそう…」
そんな人にも安心して読めるよう、専門用語には補足を入れてやさしく説明していきます。

目次

1. 正規表現を使ってテキストを検索しよう

まずは“テキスト検索の王様”ともいえる 正規表現(Regex)
これは「文字列のルールをひとつのパターンで表す方法」です。

例えば

  • 「a」で始まり
  • 「ri」で終わる

という条件をまとめて書けるのが正規表現です。

 主に使うメタキャラクタ(基本正規表現)

記号意味
.任意の1文字a.c → abc / aec / adc
*直前文字を0回以上繰り返すa*b → ab / aab / aaab
^行頭にマッチ^abc → abc〜
$行末にマッチxyz$ → 〜xyz
[]指定した文字のどれか[abc] → a / b / c

補足:エスケープ
メタキャラクタを「普通の文字」として扱う場合は \ を付けます
例:* を検索したい → \*

 grep: 正規表現でテキスト検索する定番コマンド

ファイルの中から「特定パターンに一致する行」を探すコマンドです。

grep [オプション] "検索パターン" ファイル名

▼ よく使うオプション

  • -i :大文字小文字を区別しない
  • -v :一致しない行を表示(NOT検索)
  • -c :一致した行数のみ表示
  • -n :行番号も一緒に表示
  • -E :拡張正規表現を有効にする

 拡張正規表現(ERE)も覚えると一気に便利に!

記号意味
+1回以上繰り返すab+c → abc / abbc
?0〜1回の繰り返しab?c → ac / abc
{n}n回繰り返すa{3}b → aaab
``OR条件

 egrep / fgrep の違い

egrep

  • grepに-Eを付けた状態と同じ
  • オプションなしで拡張正規表現が使える

fgrep

  • 正規表現を使わず、文字をそのまま検索
  • 「*」や「?」をそのまま検索したいときに便利

 sed: テキストを編集する万能ツール

「置換」「削除」など、ファイルを直接編集せずに変換だけ行うコマンドです。

sed [オプション] 'コマンド' ファイル名

▼ よく使う sed のコマンド

コマンド内容
s/検索/置換/置換(g で全置換)
y/abc/123/1→1変換(a→1, b→2 など)
d該当行を削除

例:全ての「aggressive」を「AGRRESSIVE」に置換

sed 's/aggressive/AGRRESSIVE/g' sample.txt

2. プロセスとジョブ管理の基礎

Linuxで実行中のプログラムは “プロセス” と呼ばれます。

 基本用語

  • プロセス:OS上で動いているプログラム
  • ジョブ:シェル(端末)上で動かす作業単位
  • 親プロセス / 子プロセス:プロセスを起動する側とされる側
  • シグナル:プロセスに対する「メッセージ」(停止・終了など)

 よく使うプロセス管理コマンド

コマンド用途
ps実行中プロセスを一覧表示
topプロセスをリアルタイム監視
pstreeプロセスの親子関係をツリー表示
killPID(プロセスID)で終了
killall名前で終了
pkill正規表現で終了
pgrep検索パターンに一致するPIDを表示

 ジョブ管理コマンド(シェルで作業するときの必須)

コマンド概要
jobsジョブ一覧
bg一時停止中ジョブを背景で再開
fgジョブを前面に戻す
nohupログアウト後も処理を継続

補足:フォアグラウンドとバックグラウンド

  • FG(前面):画面を占有し、操作できる状態
  • BG(背面):裏で動かしつつ他の作業ができる

3. 実行優先度(nice値)を変えてみよう

Linuxでは、プロセスごとに「実行優先度」を決められます。
これを nice値 と呼びます。

  • 数値:-20 〜 19
  • 小さいほど優先度が高い

 nice: 実行時に優先度を指定

nice -n 5 コマンド

※何も指定しないと +10 されます(優先度が下がる)

 renice: 実行中プロセスの優先度を変更

renice -n -5 -p 1234
  • -p:プロセスID指定
  • -u:ユーザー指定も可能

まとめ:ここまででできるようになること

この記事で学んだ内容をざっくり振り返ると…

 正規表現コマンド

  • grep / egrep / fgrep で柔軟な検索ができる
  • sed で置換・削除などのテキスト編集が簡単

 プロセス管理

  • ps, top, pstree で監視
  • kill / killall / pkill / pgrep で終了

 ジョブ管理

  • jobs, bg, fg でジョブを自在に操作
  • nohup でログアウト後も継続

 実行優先度

  • nice / renice で負荷の調整が可能

Linuxを扱えるようになるとサーバー管理やシェルスクリプトでも役立つ知識ばかりです。
特に grep, sed, ps, kill は現場で毎日使うレベルの必須ツールなので、早めに慣れておくと安心です。

 1. 正規表現(基本+拡張)

◆ 基本正規表現(よく出る5つ)

記号読み方・意味
.ドット:任意の1文字a.cabc, axc
*アスタリスク:直前を0回以上繰り返しab*a, ab, abb
^キャレット:行頭にマッチ^abcabc で始まる行
$ダラー:行末にマッチxyz$xyz で終わる行
[]いずれか1文字(-で範囲)[0-9] → 数字1桁

◆ 拡張正規表現(grep -E / egrep)

記号意味
+1回以上の繰り返しab+cabc, abbc
?0〜1回の繰り返しab?cac, abc
{n} / {n,m}回数指定a{2,4}aa, aaa, aaaa
``OR(どちらか)

 2. 検索&テキスト編集コマンド

コマンド覚え方 / 役割代表的な使い方
grep正規表現で検索grep "error" log.txt
egrep / grep -E拡張正規表現で検索`egrep “err(or
fgrep / grep -F正規表現を使わず、「文字列そのもの」で検索fgrep "*sample*" file.txt
sed置換・削除など、テキスト変換に使うsed 's/foo/bar/g' file.txt

sed でよく使うパターン

書き方意味
s/旧/新/置換(1行の最初だけ)s/samurai/SAMURAI/
s/旧/新/g置換(その行のすべて)s/error/ERROR/g
y/abc/123/1文字ずつ変換a→1, b→2, c→3
1,5d1〜5行目を削除sed '1,5d' file.txt

 3. プロセス・ジョブ管理コマンド

◆ プロセスを見る系

コマンド役割よく使うオプション
psプロセスの一覧ps aux, ps -ef
topリアルタイム監視qで終了
pstree親子関係をツリー表示pstree -p(PID付き)

◆ プロセスを止める系

コマンド指定の仕方
killPIDで指定kill 1234
killallプロセス名で指定killall httpd
pkill正規表現パターンで指定`pkill “httpd
pgrepパターンにマッチするPIDを表示pgrep nginx

◆ ジョブ管理

コマンド役割
jobsジョブ一覧jobs
bg %1ジョブをバックグラウンド再開bg %1
fg %1ジョブをフォアグラウンドに戻すfg %1
nohupログアウト後も継続nohup command &

%1 の「1」は jobs で表示されるジョブ番号。

 4. システム状態をざっくり確認するコマンド

コマンド内容
freeメモリ状況free -m(MB表示)
uptime起動時間、ロードアベレージuptime
watch一定間隔で同じコマンドを実行watch -n 5 df -h

用語メモ

  • ロードアベレージ:CPUが「どのくらい詰まっているか」の平均値
  • 数字がCPUコア数を大きく超えていると「処理待ちが多い」と覚えると◎

 5. 実行優先度(nice値)関連

用語 / コマンド内容
nice値-20〜19。値が小さいほど優先度が高い
niceコマンド実行時の優先度を指定
renice動いているプロセスの優先度を変更

# 優先度を落としてコマンドを実行(他プロセスにやさしい)
nice -n 10 long_task.sh

# PID 1234 の優先度を上げる(root権限が必要なことが多い)
sudo renice -n -5 -p 1234

本編と暗記シートだけだと「なんとなくわかったけど、実際に触ると迷いそう…」というところもあると思うので、よくハマりがちなポイントを Q&A形式 で補足しておきます。

 Q1. grep と egrep(grep -E)って、どっちを覚えればいい?

A. 実務では「grep」と「grep -E」をセットで覚えておくのがおすすめ。

最近の環境では egrep は非推奨扱いになる傾向もあるので、

  • 基本:grep "パターン"
  • 拡張正規表現を使うとき:grep -E "パターン"

という形に慣れておくと、どの環境でも迷いにくいです。

 Q2. kill と killall と pkill、どう使い分ける?

ざっくりこう覚えるとスッキリします。

  • kill:PIDがわかっているとき(ピンポイント狙い)
  • killall:同名プロセスを全部止めたいとき(httpd全部など)
  • pkill:名前の一部や正規表現でまとめて指定したいとき

安全なのは pgrep で確認 → kill で止める 流れです。

pgrep nginx      # まず PID を確認
kill 1234 2345   # 必要なものだけ止める

 Q3. フォアグラウンドとバックグラウンドの違いがいまいち…

イメージで覚えると楽です。

  • フォアグラウンド:
    → 端末の画面を“占領”しているコマンド。終わるまで次のコマンドを打てない。
  • バックグラウンド:
    → 裏で動いていて、端末は他の操作に使える状態。

よくある流れ

# 時間がかかるコマンドをうっかりそのまま実行
long_task.sh

# あ、やってしまった…というとき
Ctrl + Z       # いったん一時停止
bg             # 裏で再開
jobs           # 状態確認

 Q4. nohup っていつ使うの?

  • 「サーバーにSSHで入って実行しているけど、ログアウトしても処理を止めたくない」
  • 「夜中までかかるバッチ処理を投げっぱなしにしたい」

というときに登場します。

nohup backup.sh &   # ログアウトしても動き続ける

nohup.out というファイルに標準出力がたまるので、後からログを確認できます。

 Q5. nice値を変えるときの注意点は?

  • 優先度を 下げる(値を大きくする) のは一般ユーザーでもできることが多い
  • 優先度を 上げる(値を小さくする) のは root 権限が必要なケースが多い

サーバー運用では、
「重いバッチ処理には nice をかけておいて、他のサービスに負荷をかけすぎない」
という使い方がよくされます。

 Q6. 正規表現の学習、どこから手をつければいい?

最初から全部覚えようとすると挫折しがちなので、段階をつけると楽です。

  1. 第1ステップ
    • .(任意1文字), *, ^, $
  2. 第2ステップ
    • [], +, ?
  3. 第3ステップ
    • {n}, {n,m}, |

おすすめ練習方法

  • 手元に簡単なテキストファイル(ログ・メモなど)を用意
  • grep で「検索パターンを1つずつ試してみる」
grep "^error" app.log       # errorで始まる行
grep "timeout$" app.log     # timeoutで終わる行
grep "user[0-9]" app.log    # user1〜user9

「動いているものを自分で絞り込めた」という体験が一度でもあると、一気に理解が進みます。

created by Rinker
¥3,300 (2025/12/01 06:52:13時点 楽天市場調べ-詳細)
関連記事