Linux & Bashコマンド入門

サーバー構築や日々の開発で役立つ、Linuxの基本操作、パーミッション、Bashスクリプトの使い方を習得します。

学習をスタートする

ロードマップ

1

Linux基本コマンドとパイプ・リダイレクト

多くのWebシステムはLinuxサーバー上で動作しています。また、開発者が使用するターミナル(macOSのZshやWindowsのWSL)もLinux互換のコマンド群を使用します。本章では、Linuxの基本操作コマンドと、強力な機能である「パイプ」および「リダイレクト」の仕組みを学びます。 1. ファイルとディレクトリの基本操作 まずは、日々の開発で頻繁に使用する最も基礎的なコマンド群です。 * ls: ディレクトリの内容を表示します。オプション -la を付けると、隠しファイルを含めて詳細な情報(パーミッションやサイズなど)を表示できます。 * cd: ディレクトリを移動します。cd .. で1つ上のディレクトリに戻ります。 * cp: ファイルやディレクトリをコピーします。ディレクトリを丸ごとコピーする場合は -r オプションが必要です。 * mv: ファイルやディレクトリを移動、または名前を変更します。 * rm: ファイルやディレクトリを削除します。ディレクトリを削除する場合は rm -rf を使いますが、警告なしで削除されるため取り扱いには細心の注意が必要です。 2. 標準入出力とリダイレクト Linuxのプログラムには、データの出入り口として 標準入力(stdin)、標準出力(stdout)、標準エラー出力(stderr) の3つが用意されています。 リダイレクト を使うと、これらのデータの出入り口をファイルなどに切り替えることができます。 データフローとリダイレクト(図解) リダイレクトの具体例 * 新規書き込み (>): コマンドの実行結果をファイルに保存します(既存のファイル内容は上書きされます)。 * 追記書き込み (>>): ファイルの末尾に実行結果を追記します。 * 入力元切り替え (): エラーメッセージのみを別ファイルに出力します。 3. パイプライン ( ) とテキスト処理 パイプライン ( ) は、あるコマンドの実行結果(標準出力)を、別のコマンドの入力(標準入力)として直接渡す仕組みです。コマンドを組み合わせることで、複雑なテキスト処理を1行で行うことができます。 代表的なテキスト処理コマンド * cat: ファイルの内容を表示、または連結します。 * grep: テキストから特定のパターン(文字列や正規表現)に一致する行を検索します。 * sed: テキストの置換や行の削除などのストリーム編集を行います。 * awk: テキストを列単位で処理し、高度な集計やフォーマットを行います。 実用的なパイプの組み合わせ例 ログファイルから「ERROR」を含む行を抽出し、その数をカウントする例です。 また、特定のプロセスが実行されているかを確認する際にもパイプラインは頻繁に使われます。 まとめ * ls, cd, cp, mv, rm は開発におけるファイル操作の必須コマンド。 * リダイレクト (>, >>, <) を使用して、画面への出力をファイルへ書き込んだり、ファイルを入力にしたりできる。 * パイプライン ( ) を使って複数のコマンドを連結し、強力なテキスト・データ処理を組み立てる。

2

所有権・パーミッションとプロセス管理

Linuxシステムは、複数のユーザーが同時に利用することを前提とした「マルチユーザーOS」です。そのため、セキュリティを保つための 所有権(Ownership) と アクセス権(Permission) の管理、および実行中のプログラムである プロセス(Process) の管理が極めて厳格に設計されています。 1. ファイルとディレクトリのアクセス権(パーミッション) Linuxでは、すべてのファイルやディレクトリに対して「誰が」「何をしてよいか」が定義されています。 パーミッションの表記ルール(図解) ls -l コマンドを実行した際に表示される、先頭の10文字(例: -rwxr-xr-x)の意味は以下の通りです。 * ファイル種別: - は一般ファイル、d はディレクトリ、l はシンボリックリンクを示します。 * 権限の種類: - r (Read): 読み取り権限(数値表記: 4) - w (Write): 書き込み・変更権限(数値表記: 2) - x (Execute): 実行権限(数値表記: 1) - -: 権限なし(数値表記: 0) パーミッションの変更 (chmod) 権限の変更には chmod コマンドを使用します。数値の合計値で指定する方法が一般的です。 所有権の変更 (chown) ファイルの所有ユーザーや所有グループを変更するには chown コマンドを使用します。この操作には通常管理者権限(sudo)が必要です。 2. プロセス(Process)の管理 Linux上で実行されている個々のプログラムの実行単位を プロセス と呼びます。各プロセスには一意の識別番号である PID(Process ID) が割り当てられます。 プロセスの状態を確認する * ps: 起動中のプロセスの一覧を表示します。 - ps aux: システム上のすべてのプロセスを詳細に表示します。 * top / htop: CPUやメモリの使用状況と、高負荷なプロセスをリアルタイムで監視します。 プロセスの終了 (kill) フリーズしたプログラムやバックグラウンドで動作し続けているプロセスを強制終了するには、kill コマンドを使用します。 まとめ * パーミッションは 所有者 (User)、グループ (Group)、その他 (Other) に対する r (4), w (2), x (1) の組み合わせ。 * chmod でアクセス権を設定し、chown で所有者を変更する。 * 実行中のプログラムは プロセス として管理され、ps や top で監視し、必要に応じて kill で終了させる。

3

Bashスクリプトの作成と自動化の基本

コマンドラインで実行する一連の操作をファイルに記述して実行可能にしたものを シェルスクリプト と呼びます。その中でも、最も広く利用されているシェル「Bash」向けに書かれたスクリプト(Bashスクリプト)は、サーバー構築やタスクの自動化で強力なツールになります。 1. スクリプトの基本構造とシバン シェルスクリプトを作成する際は、ファイルの1行目に必ず シバン (Shebang) と呼ばれる、どのインタプリタでスクリプトを実行するかを示す特殊な行を記述します。 実行方法 シェルスクリプトを実行できるようにするには、ファイルに 実行権限 (x) を追加し、ファイルのパスを指定して実行します。 2. 変数とコマンド置換 変数の定義と参照 変数を定義する際は、イコール = の前後にスペースを空けてはいけません。変数を参照する際は、名前の前に $ を付けます。 コマンド置換 コマンドの実行結果を変数に代入したい場合は、$(コマンド) という構文(コマンド置換)を使用します。 3. 条件分岐(if)と条件式 if 文の基本 Bashの条件式は [ ... ](大括弧)で囲みます。この大括弧の内側には、必ず スペースを空ける 必要があります。 代表的な条件演算子 演算子 意味 -f file ファイルが存在し、かつ通常ファイルであれば真 -d dir ディレクトリが存在すれば真 -z str 文字列の長さが 0 であれば真(空文字チェック) $A = $B 文字列 A と B が等しければ真 $A -eq $B 数値 A と B が等しければ真 (Equal) $A -lt $B 数値 A が B より小さければ真 (Less Than) 4. 引数の処理とループ 特殊な変数(位置パラメータ) スクリプト実行時に渡された引数は、$1, $2 などの変数で受け取ることができます。 * $0: スクリプト自身のファイル名 * $1, $2, ...: 第1引数、第2引数... * $#: 引数の総数 * $@: すべての引数リスト ループ(for) 指定したリストの各要素に対して処理を繰り返します。 まとめ * スクリプトの1行目には必ず #!/bin/bash (シバン) を書く。 * 変数は NAME="value" のように代入し、${NAME} で参照する。 * 条件分岐の [ ... ] は前後にスペースを必ず入れる。 * $1, $@ を使用して実行時の引数をパースし、処理の自動化に応用する。

4

Linuxプロセス管理とリソース監視

Linuxサーバーの管理やデバッグを行う際、実行されている個々のプログラム(プロセス)の状態を把握し、制御するスキルは不可欠です。暴走したプロセスを発見して停止したり、システムの空きメモリやディスク容量を調査したりするシーンは実務で多々発生します。 第4章では、Linuxのプロセス管理とシステムのリソース監視について学びます。 1. プロセスの概念とリソース監視 Linuxでは、実行されるプログラムはすべて 「プロセス」 という単位で管理され、それぞれ固有の 「PID (Process ID)」 を持ちます。 主要なリソース監視コマンド * ps (Process Status): 現在動作しているプロセスを表示します。 * top / htop: CPUやメモリの使用状況をリアルタイムで監視するインタラクティブなコマンドです(htop はよりビジュアルで操作性が高いです)。 * free: システムの物理メモリとスワップ領域の空き・使用状況を表示します。 * df (Disk Free): ディスク(ファイルシステム)の全体容量と空き容量を人間が読みやすい形式 (-h) で表示します。 2. ジョブ制御(バックグラウンド実行) ターミナルで時間のかかる処理(例: 重いファイルのダウンロードやスクリプト実行)を行うと、その間ターミナルに入力できなくなります。これを制御するために 「ジョブ制御」 を使います。 * バックグラウンド実行 (&): コマンドの末尾に & を付けると、処理を裏側(バックグラウンド)で動かし、即座に次のコマンドを入力できます。 * ジョブの確認 (jobs): 現在バックグラウンドで動作しているジョブのリストを表示します。 * フォアグラウンド切り替え (fg): バックグラウンドのジョブを手前に戻します(fg %1 などのようにジョブ番号を指定)。 * 一時停止とバックグラウンド移行: 実行中の処理を Ctrl + Z で一時停止し、bg コマンドでバックグラウンド実行へ切り替えることができます。 3. シグナルとプロセスの終了 (kill) 実行中のプロセスに対して外部から挙動を指示する信号を 「シグナル」 と呼びます。最もよく使うのがプロセスの終了を指示するシグナルです。 シグナル名 番号 コマンドの例 意味 SIGHUP 1 kill -1 ハングアップ(設定ファイルの再読み込みなどに利用される) SIGINT 2 Ctrl + C 割り込み(端末からの終了指示) SIGTERM 15 kill 終了(プロセスに安全な終了を促す、デフォルト) SIGKILL 9 kill -9 強制終了(クリーンアップを待たず、カーネルが即座にプロセスを抹殺する) システムの動作状態を見極め、適切にプロセスを制御できるようになることで、サーバーの障害対応力やオペレーション効率が大きく向上します。

5

テキスト処理とデータストリームの応用

Linuxの真骨頂は、すべてのデータを「テキスト」として扱い、複数の小さなコマンドを連結して複雑な処理を一瞬でこなす点にあります。これを支えるのが 「データストリーム(入出力のストリーム)」 と 「テキスト処理コマンド(フィルタ)」 です。 第5章では、リダイレクトやパイプを用いたデータの流れの制御と、ログ解析等に欠かせないテキスト処理コマンドの応用について学びます。 1. 標準入出力とリダイレクト プログラム(プロセス)が起動すると、OSによって自動的に3つの情報の通り道(データストリーム / ファイル記述子)が用意されます。 デフォルトではこれらはキーボードや画面に繋がっていますが、これをファイルや別のプログラムに繋ぎ替える操作を 「リダイレクト (Redirect)」 と呼びます。 リダイレクトの表記法 * >: 標準出力をファイルに書き出します(上書き)。 * >>: 標準出力をファイル末尾に追記します。 * 2>: 標準エラー出力のみをファイルに書き出します。 * 2>&1: 標準エラー出力を標準出力と同じ場所(同じファイルなど)に合流させます。 2. パイプ ( ) によるコマンドの連結 あるコマンドの「標準出力」を、別のコマンドの「標準入力」としてダイレクトに受け渡す仕組みが 「パイプ (Pipe)」 です。これにより、複数のコマンドを一連の流れ作業(パイプライン)として処理できます。 3. 強力なテキスト処理フィルタ Linuxにはテキストを加工・抽出するためのツール(フィルタコマンド)が標準で用意されています。 1. grep (パターンの検索): * 指定した文字列や正規表現に一致する行を抽出します。 2. cut (列の切り出し): * カンマやスペースなどで区切られたテキストから特定の列だけを抽出します。 * 例: cut -d',' -f2(カンマ区切りの2列目を抽出) 3. sed (テキストの置換・編集): * ストリームエディタと呼ばれ、パターンに一致する文字を置換できます。 * 例: sed 's/old/new/g' (oldをnewにすべて置換) 4. awk (高度なテキスト整形・解析): * プログラミング言語に近い機能を持つ非常に強力なテキスト処理ツールです。スペース区切りのログファイルの集計等に多用されます。 * 例: awk '{print $1, $4}'(1列目と4列目だけを表示) 5. sort と uniq (並び替えと重複排除): * データをソートし、連続する重複した行を取り除いたり、重複のカウントを行います。 * 例: sort uniq -c (各行の出現回数をカウント) 実践的な組み合わせ例 アクセスログ(access.log)から、リクエストの多い上位3つのIPアドレスを抽出します。 これらのツール群を使いこなせるようになると、数ギガバイトある膨大なログファイルから、特定のIPアドレスや特定のエラーメッセージの傾向をほんの数秒で分析・抽出できるようになります。