シェル環境におけるコマンド実行の概要
Linux システムとの対話は、カーネルに直接アクセスするのではなく、シェルと呼ばれるコマンド解釈器を介して行われます。GUI を用いないCLI(コマンドラインインターフェース)は、サーバー管理や開発効率において不可欠なスキルです。
ディレクトリ操作とナビゲーション
ファイルシステムの位置を把握し、移動するための基本ツールについて解説します。
現在の作業場所の確認
pwd(Print Working Directory)を実行することで、ターミナルが現在どのディレクトリ配下にあるかを確認できます。
pwd
ディレクトリ一覧の表示
lsコマンドは指定されたディレクトリ内のファイルやサブディレクトリを一覧表示します。オプションを組み合わせることで詳細情報を取得可能です。
-l: ファイルの詳細情報(権限、所有者、サイズなど)を表示。-a: ディレクトリに含まれる隠しファイル(`.`で始まるもの)もリストアップ。-h: ファイルサイズを人間が読みやすい形式(K, M, G)に変換。-R: サブディレクトリを含む再帰的な検索を行う。
# 詳細かつ人間に優しい形式で一覧表示
ls -lah ~/projects/
ワークディレクトリの移動
cd(Change Directory)を用いてカレントディレクトリを変更します。
cd ..: 親ディレクトリへ遷移。cd ~: 自身のホームディレクトリへ移動。cd -: 直前にいたディレクトリに戻す。
パスの性質: ルートディレクトリ(`/`)から始まる絶対パスは常に一貫した場所を指しますが、相対パスは現在地を基準とした参照となります。`./` は現在ディレクトリ、`../` は一つ上の階層を表します。
ファイルとディレクトリの作成・削除
新規作成
touchコマンドは、存在しない場合新しい空ファイルを生成するか、既存ファイルの更新時間を修正するのに使用されます。
# 現在時刻でタイムスタンプを更新または新規作成
touch config.yaml
ディレクトリを作成するには mkdir を使用します。-p オプションを追加すると、親ディレクトリが存在しない場合でも自動的に作成されます。
mkdir -p logs/2023/october/
複製と移動・改名
ファイルを別の場所にコピーするには cp を利用します。ディレクトリ全体を複製する場合は -r(recursive)オプションが必要です。
# バックアップ用に同名コピーを作成
cp server.conf server.conf.bak
# ディレクトリを圧縮保存先へコピー
cp -rv assets/ backup_location/
mv(Move)はファイルを別の場所に移動させたり、名前を変更したりする際使います。
# フォルダ内のファイルを整理用フォルダへ移動
mv temp_file.txt archive_2024/
# 拡張子を変更(リネーム)
mv document.docx document.pdf
削除に関する注意: rm でファイルやディレクトリを削除できます。強力なオプションである -f(強制)、-r(再帰的削除)を使用する際は慎重に行う必要があります。特に rm -rf / のような誤操作はシステムを破損させるため避けるべきです。
テキストデータの閲覧と検索
コンテンツの確認
ファイルの中身を見るために cat がよく使われますが、ページ数が多い場合は less が適しています。less はメモリ効率が高く、前後のスクロールや検索が可能です。
# 大型ログファイルの内容をページ毎に確認
less application_logs.log
特定の行数のみを確認したい場合、head(先頭)や tail(末尾)を使用します。
# ファイルの最後 50 行を表示
tail -n 50 error_log.txt
# 最後の 10 行をリアルタイム追跡する場合
tail -f status.log
文字列の検索
ファイル内から特定のパターンを検索する場合は grep が標準的です。
-i: 大文字小文字を区別しない検索。-n: 該当行の番号を表示。-v: 一致しない行のみ抽出。
# ログ中のエラー文言を含んだ行を抽出し行番号付きで表示
grep -in "Critical Failure" system.out
ファイル探索
find コマンドを使って複雑な条件でファイルを特定できます。
# 直近 24 時間で変更されたコンフィグファイルを探す
find ./config -name "*.ini" -mtime -1
# 大容量(1GB 以上)のファイルをルート以下から探す
find /home -size +1G
I/O リダイレクトとパイプ処理
コマンドの入出力先を柔軟に制御する機能です。
出力のリダイレクト
>: 標準出力をファイルに書き込む(既存内容は上書き)。>>: ファイル末尾に内容を追記。
# エラーメッセージだけを別ファイルへ記録
network_check.sh 2> network_errors.log
パイプライン(Pipe)
|(ピプ)を用いると、あるコマンドの出力結果を次のコマンドの入力として接続できます。
# プロセスリストから HTTP サーバー関連のプロセスを特定
ps aux | grep "[h]ttpd"
アーカイブと圧縮
TAR アーカイブ
tar はファイル群を一つのアーカイブにまとめます。gzip や bzip2 と組み合わせることで圧縮も可能です。
-c: アーカイブ作成。-x: アーカイブ展開。-z: gzip 圧縮/解凍に対応。-v: 詳細プロセスを表示。
# ホームドキュメントを gzip 圧縮したアーカイブを作成
tar -czvf my_docs_archive.tar.gz /home/user/docs/
# 作成したアーカイブを展開して確認
tar -xzvf my_docs_archive.tar.gz
ZIP ユーティリティ
ZIP 形式の取り扱いには zip と unzip が用いられます。
# インストールされていない場合はパッケージマネージャで入手
sudo yum install -y unzip
システム情報の取得
OS やハードウェア状態を確認するためのコマンド群です。
uname -r: カーネルバージョンを確認。date: 現在の日時を表示または設定(例:date +%Y-%m-%d)。cal: カレンダーを表示。man: コマンドのヘルプマニュアルを表示(例:man ls)。which: コマンドの実行可能ファイルの位置を表示。
キーボードショートカット
操作中に頻繁に使用する便利なキーバインドです。
[Tab]: コマンドやファイル名の補完を実行。[Ctrl] + c: 現在実行中のプロセスを強制的に終了。[Ctrl] + d: 入力を終了する(EOF 信号を送信)。exit と同様の効果がある場合があります。