プログラミング

【実務で使える】Linuxコマンド一覧と応用例|シェルスクリプトの組み合わせ方

目次

実務で求められるLinuxコマンドとは?

Linuxの入門書で学ぶ基本コマンドは、個別の機能を理解することが目的です。しかし実務では、複数のコマンドを組み合わせて具体的な課題を解決する力が求められます。

例えば「特定の文字列を含むログファイルを検索し、該当行を抽出して日付順にソートし、別ファイルに保存する」といった複合的な処理が日常的に発生します。

実務でコマンドの組み合わせが重要な理由

実務のLinux環境では、システム管理、ログ解析、データ処理など、どの業務でも複数の処理を連続して実行する必要があります。

Webサーバーのログ解析を例にすると、エラーメッセージの抽出、発生頻度の集計、上位10件の表示という一連の流れは、以下のようなコマンド組み合わせで実現できます。

cat access.log | grep "ERROR" | awk '{print $5}' | sort | uniq -c | sort -nr | head -10

パイプ(|)で複数のコマンドを連結し、データを段階的に加工していくのが実務の基本スタイルです。各コマンドが小さな役割を持ち、それらを組み合わせることで複雑な処理を実現します。

組み合わせが重要な理由は以下の3点です。

  • 効率性: 手作業で時間がかかる処理を数秒で完了
  • 再現性: 同じコマンドを繰り返し実行でき、人為的ミスを削減
  • 自動化: シェルスクリプト化で定期実行や属人化の解消が可能

現場でよくある困りごと

実務でLinuxを使い始めた技術者が直面する典型的な課題を見ていきましょう。

どのコマンドを組み合わせればいいかわからない

「特定の条件に合うファイルを探したい」という課題に対して、findだけでなくgrepxargsとの組み合わせが必要になることがあります。全体像が見えないと手が止まってしまいます。

よく使われる組み合わせパターンをいくつか覚えておくことで、応用が効くようになります。

毎回同じ作業を手動で繰り返している

ログファイルの整理、バックアップ作業、サーバー状態の確認など、定期的に発生する作業を毎回手動で実行していると時間がかかり、ミスも起こりやすくなります。

シェルスクリプトで自動化することで、作業時間を大幅に削減でき、属人化も防げます。基本的なスクリプトの書き方を押さえれば、誰でも自動化を実現できます。

実務で頻出するLinuxコマンド一覧

実務で本当によく使うLinuxコマンドを、用途別に整理して紹介します。実際に手を動かしながら慣れていくことをおすすめします。

ファイル・ディレクトリ操作

ファイルやディレクトリの操作は、どんな業務でも基本となる作業です。実務では複数ファイルの一括処理や条件指定が求められます。

コマンド実務でよく使うオプション使用例
ls-lah(詳細+隠しファイル+人間が読みやすい形式)ls -lah /var/log/
mkdir-p(親ディレクトリも同時作成)mkdir -p /backup/2024/01
rm-rf(ディレクトリごと強制削除)rm -rf /tmp/old_logs/
cp-r(ディレクトリごとコピー)cp -r /var/www/ /backup/

実務のポイント: rm -rfは強力なコマンドで、誤って重要なファイルを削除してしまうリスクがあります。実行前にlsで対象を確認する習慣をつけましょう。

# 月次バックアップディレクトリを作成
mkdir -p /backup/$(date +%Y)/$(date +%m)

# 特定の拡張子ファイルを別ディレクトリに移動
mv *.log /var/log/archive/

テキスト処理

ログファイルの解析、設定ファイルの編集、データの抽出など、テキスト処理は実務で最も頻繁に行う作業の一つです。

コマンド実務でよく使うオプション使用例
grep-i(大文字小文字無視)
-v(一致しない行)
-r(再帰検索)
grep -i "error" *.log
sed-i(ファイルを直接編集)sed -i 's/old/new/g' config.txt
awk-F(区切り文字指定)awk -F',' '{print $1,$3}' data.csv
tail-f(リアルタイム監視)
-n(表示行数指定)
tail -f /var/log/syslog

実務のポイント: tail -fはログをリアルタイムで監視する際に必須です。Webアプリケーションのデバッグやエラー発生時の原因調査で頻繁に使います。

# エラーログから特定のエラーメッセージを抽出
grep "500 Internal Server Error" access.log | tail -20

# CSVファイルから特定の列だけを抽出
awk -F',' '{print $1,$4}' sales.csv > summary.txt

# 設定ファイルのコメント行と空行を除外して表示
grep -v "^#" config.conf | grep -v "^$"

システム情報・プロセス管理

サーバー管理では、システムの状態を把握し、リソース使用状況を監視することが重要です。

コマンド実務でよく使うオプション使用例
psaux(全プロセスを詳細表示)`ps aux
df-h(人間が読みやすい形式)df -h
du-sh(合計サイズを人間が読みやすい形式で)du -sh /var/log/*
free-h(人間が読みやすい形式)free -h
# 特定のプロセスが動作しているか確認
ps aux | grep "apache2"

# ディスク使用率が高いディレクトリを特定
du -sh /var/* | sort -h | tail -10

ネットワーク・通信

Webサーバーの動作確認、API連携のテスト、ネットワーク疎通確認など、ネットワーク関連の調査や検証で使用頻度の高いコマンドです。

コマンド実務でよく使うオプション使用例
curl-X(HTTPメソッド指定)
-H(ヘッダー指定)
-d(データ送信)
curl -X GET https://api.example.com/users
wget-O(保存ファイル名指定)wget -O latest.zip https://example.com/file.zip
netstat-tuln(TCP/UDPのリスニングポート表示)`netstat -tuln
# WebサーバーのHTTPステータスコードを確認
curl -I https://example.com

# APIにJSONデータをPOST送信
curl -X POST -H "Content-Type: application/json" -d '{"name":"test"}' https://api.example.com/users

実務で使うコマンドの組み合わせパターン

ここからは、実務で本当に役立つコマンドの組み合わせテクニックを具体例とともに紹介します。

パイプを使った複数コマンドの連携

パイプ(|)は、あるコマンドの出力を次のコマンドの入力として渡す仕組みです。データを段階的に加工していく処理で頻繁に使われます。

# 基本構文
コマンド1 | コマンド2 | コマンド3

実務例1: アクセスログから特定のIPアドレスのアクセス数を集計

cat access.log | grep "192.168.1.100" | wc -l

処理の流れ:

  1. cat access.log: ログファイルの内容を出力
  2. grep "192.168.1.100": 特定のIPアドレスを含む行だけを抽出
  3. wc -l: 行数をカウント

実務例2: プロセス一覧から特定のアプリケーションをメモリ使用量順に表示

ps aux | grep "node" | grep -v "grep" | sort -k4 -nr | head -10

処理の流れ:

  1. ps aux: 全プロセスを表示
  2. grep "node": “node”を含むプロセスを抽出
  3. grep -v "grep": grep自身のプロセスを除外
  4. sort -k4 -nr: 4列目(メモリ使用率)で降順ソート
  5. head -10: 上位10件を表示

リダイレクトでログやデータを保存

リダイレクトは、コマンドの実行結果をファイルに保存する機能です。処理結果の記録、レポート作成、ログの蓄積などで日常的に使います。

記号意味使い方
>上書き保存command > file.txt
>>追記保存command >> file.txt
2>エラー出力を保存command 2> error.log
&>標準出力とエラー出力を両方保存command &> all.log
# システム情報を定期的にレポートファイルに記録
echo "=== System Report ===" > report.txt
date >> report.txt
df -h >> report.txt
free -h >> report.txt

# エラーログだけを別ファイルに保存
./batch_process.sh 2> error.log

# 実行結果とエラーを両方記録
./daily_backup.sh &> backup_log_$(date +%Y%m%d).txt

grepとawkを組み合わせたテキスト抽出

grepawkの組み合わせは、ログ解析やデータ抽出で最も強力なパターンの一つです。grepで必要な行を絞り込み、awkで必要な列だけを取り出します。

# アクセスログから特定のステータスコードのURLとアクセス時刻を抽出
cat access.log | grep " 404 " | awk '{print $4,$7}' > 404_errors.txt

# CSVファイルから条件に合うデータを抽出して加工
cat sales.csv | grep "Electronics" | awk -F',' '{sum+=$5} END {print "Total: " sum}'

# メモリ使用率が80%以上のプロセスを抽出
ps aux | awk '$4 > 80 {print $2, $4, $11}'

findコマンドと他コマンドの組み合わせ

findコマンドは、条件に合うファイルを検索し、見つかったファイルに対して一括処理を実行する際に活躍します。

# 30日以上前のログファイルを削除
find /var/log -name "*.log" -mtime +30 -exec rm {} \;

# PHPファイルの中から"password"という文字列を含むファイルを検索
find /var/www -name "*.php" -exec grep -l "password" {} \;

# 100MB以上のファイルを検索してサイズ順に表示
find /home -type f -size +100M -exec du -h {} \; | sort -h > large_files.txt

# 特定の拡張子のファイルを別ディレクトリにコピー
find /source -name "*.jpg" | xargs -I {} cp {} /destination/

実務のポイント: findコマンドは強力ですが、-exec rmなどの削除処理は取り返しがつきません。実行前に-exec ls -l {} \;で対象ファイルを確認する習慣をつけましょう。

シェルスクリプトで業務を自動化する

コマンドの組み合わせに慣れてきたら、次のステップはシェルスクリプト化による自動化です。毎回同じコマンドを手入力する手間を省き、誰でも同じ処理を実行できるようにすることで、業務の効率化と標準化を同時に実現できます。

シェルスクリプトの基本構造

シェルスクリプトは、複数のコマンドをファイルにまとめて実行可能にしたものです。

#!/bin/bash
# スクリプトの説明をここに書く

# 変数の定義
LOG_DIR="/var/log/myapp"
DATE=$(date +%Y%m%d)

# 処理の実行
echo "処理を開始します: $DATE"
# ここに実行したいコマンドを書く

echo "処理が完了しました"

重要な要素

  • シバン(Shebang): #!/bin/bash – スクリプトの1行目に必ず記述
  • 変数: 変数名=値で定義、$変数名で参照
  • 実行権限: chmod +x script.shで実行可能にする

条件分岐と繰り返し処理

# 条件分岐
if [ 条件 ]; then
    # 条件が真の時の処理
else
    # 条件が偽の時の処理
fi

# 繰り返し処理
for file in /var/log/*.log; do
    echo "処理中: $file"
    # ここに各ファイルへの処理を書く
done

ログファイルの定期整理を自動化

ログファイルは放置すると肥大化し、ディスク容量を圧迫します。古いログを定期的に削除・圧縮するスクリプトを作成することで、手動管理の手間を完全に排除できます。

#!/bin/bash
# ログファイル整理スクリプト
# 30日以上前のログを圧縮し、90日以上前のログを削除する

set -e  # エラーが発生したら停止

LOG_DIR="/var/log/myapp"
DATE=$(date +%Y%m%d)
COMPRESS_DAYS=30
DELETE_DAYS=90

echo "[$DATE] ログ整理を開始します"

# 30日以上前のログを圧縮
find $LOG_DIR -name "*.log" -mtime +$COMPRESS_DAYS ! -name "*.gz" -exec gzip {} \;
echo "古いログを圧縮しました"

# 90日以上前のログを削除
find $LOG_DIR -name "*.log.gz" -mtime +$DELETE_DAYS -delete
echo "90日以上前のログを削除しました"

echo "ログ整理が完了しました"

バックアップ作業を自動化

定期的なバックアップは重要ですが、手動で行うと忘れたりミスしたりします。スクリプト化して自動実行することで、確実なバックアップ体制を構築できます。

#!/bin/bash
# データベースバックアップスクリプト

set -e

BACKUP_DIR="/backup/db"
DATE=$(date +%Y%m%d_%H%M%S)
DB_NAME="myapp_db"
DB_USER="backup_user"
RETENTION_DAYS=7

mkdir -p $BACKUP_DIR

# データベースをバックアップ
mysqldump -u $DB_USER -p$DB_PASS $DB_NAME | gzip > $BACKUP_DIR/${DB_NAME}_${DATE}.sql.gz

if [ $? -eq 0 ]; then
    echo "[$DATE] バックアップ成功: ${DB_NAME}_${DATE}.sql.gz"
else
    echo "[$DATE] バックアップ失敗" >&2
    exit 1
fi

# 古いバックアップを削除
find $BACKUP_DIR -name "*.sql.gz" -mtime +$RETENTION_DAYS -delete
echo "[$DATE] 古いバックアップを削除しました"

cronで定期実行

# cronで毎日午前3時に実行
$ crontab -e
0 3 * * * /path/to/backup_script.sh >> /var/log/backup.log 2>&1

複数サーバーの状態を一括チェック

複数のサーバーを管理している場合、各サーバーの状態を個別に確認するのは非効率です。一括チェックスクリプトで効率化できます。

#!/bin/bash
# 複数サーバー監視スクリプト

SERVERS="server1 server2 server3"
ALERT_THRESHOLD=80

for server in $SERVERS; do
    echo "=== $server の状態チェック ==="

    # ディスク使用率をチェック
    DISK_USAGE=$(ssh $server "df -h / | tail -1 | awk '{print \$5}' | sed 's/%//'")

    if [ $DISK_USAGE -gt $ALERT_THRESHOLD ]; then
        echo "警告: $server のディスク使用率が ${DISK_USAGE}% です"
    else
        echo "正常: ディスク使用率 ${DISK_USAGE}%"
    fi

    # プロセスの確認
    ssh $server "systemctl is-active nginx" > /dev/null 2>&1
    if [ $? -eq 0 ]; then
        echo "正常: nginxが稼働中"
    else
        echo "警告: nginxが停止しています"
    fi

    echo ""
done

実務でつまずきやすいポイントと解決方法

Linuxコマンドを実務で使い始めると、現場特有のトラブルに直面することがあります。ここでは、多くの技術者が実際につまずくポイントと、その具体的な解決方法を解説します。

権限エラー(Permission denied)への対処

「Permission denied」は、ファイルやディレクトリへのアクセス権限が不足しているときに表示されるエラーです。

$ cat /var/log/secure
cat: /var/log/secure: Permission denied

対処法1: sudoコマンドを使う

管理者権限が必要なファイルには、sudoを付けて実行します。

$ sudo cat /var/log/secure

対処法2: ファイルの権限を確認して変更する

# 現在の権限を確認
$ ls -l /var/log/secure

# 読み取り権限を追加
$ sudo chmod +r filename

# 所有権を変更
$ sudo chown username:groupname filename

実務のポイント: 本番環境では、安易にchmod 777(全員にすべての権限を付与)を使わないようにしましょう。セキュリティリスクが高まります。必要最小限の権限のみを付与する原則を守ることが重要です。

コマンドが見つからない場合の確認手順

「command not found」エラーは、実行しようとしたコマンドがシステムに存在しない、またはPATHが通っていないときに表示されます。

# コマンドの場所を検索
$ which tree

# コマンドが見つからない場合はインストール
$ sudo yum install tree  # CentOS/RHEL系
$ sudo apt install tree  # Ubuntu/Debian系

# PATHを確認
$ echo $PATH

# 一時的にPATHを追加
$ export PATH=$PATH:/opt/myapp/bin

# 恒久的に追加する場合は~/.bashrcに記述
$ echo 'export PATH=$PATH:/opt/myapp/bin' >> ~/.bashrc
$ source ~/.bashrc

意図しない結果になったときのデバッグ方法

コマンドは実行できたものの、期待した結果と違う出力になることがあります。

方法1: コマンドを段階的に実行する

パイプで複数のコマンドを繋いでいる場合、どこで結果がおかしくなっているかを特定します。

# 最終的に実行したいコマンド
$ cat access.log | grep "ERROR" | awk '{print $1}' | sort | uniq -c

# 段階的に確認
$ cat access.log  # まずファイルの内容を確認
$ cat access.log | grep "ERROR"  # grepの結果を確認
$ cat access.log | grep "ERROR" | awk '{print $1}'  # awkの結果を確認

方法2: シェルスクリプトのデバッグモード

# 実行されるコマンドを表示しながら実行
$ bash -x script.sh

# スクリプト内で部分的にデバッグモードを有効化
set -x  # デバッグモード開始
# デバッグしたい処理
set +x  # デバッグモード終了

安全にコマンドを実行するための注意点

実務環境、特に本番環境でコマンドを実行する際は、取り返しのつかない事態を避けるための慎重さが求められます。

注意点1: 削除コマンドは必ず事前確認

# 安全な方法(まず確認)
$ ls *.log  # 削除対象を確認
$ rm *.log  # 確認後に削除

# findの場合
$ find /var/log -name "*.log" -mtime +30  # まず対象を表示
$ find /var/log -name "*.log" -mtime +30 -delete  # 確認後に削除

注意点2: バックアップを取ってから作業

# ファイルのバックアップ
$ cp important.conf important.conf.backup

# ディレクトリごとバックアップ
$ cp -r /etc/myapp /etc/myapp.backup.$(date +%Y%m%d)

注意点3: 破壊的な操作には確認プロンプトを入れる

#!/bin/bash
echo "本当に削除しますか? (yes/no)"
read answer

if [ "$answer" != "yes" ]; then
    echo "キャンセルしました"
    exit 0
fi

# 削除処理
rm -rf /path/to/files

Linuxコマンドを実務で使いこなすための学習ロードマップ

Linuxコマンドを実務レベルで使いこなすには、段階的な学習と実践の積み重ねが欠かせません。焦らず一つずつステップを踏んでいけば、誰でも実務で通用するスキルを身につけられます。

基本コマンドを実際に手を動かして覚える

Linuxコマンドの習得は、読むだけでは身につきません。実際に手を動かして、何度も繰り返し実行することで自然と身につきます。

ステップ1: 仮想環境を用意する

安心して試せる環境を作りましょう。

  • VirtualBox + Ubuntu: 無料で簡単に構築できる
  • WSL2: Windows上でLinuxを動かせる
  • Docker: コンテナで手軽にLinux環境を作成
  • クラウドの無料枠: AWS、GCP、Azureの無料枠を活用

ステップ2: 基本コマンド30個を完全に習得

カテゴリコマンド
ファイル操作ls, cd, pwd, cp, mv, rm, mkdir, touch
閲覧・検索cat, less, head, tail, grep, find
テキスト処理awk, sed, cut, sort, uniq, wc
システム情報ps, top, df, du, free
権限・ユーザーchmod, chown, sudo, whoami
ネットワークping, curl, wget, ssh

ステップ3: チートシートを自分で作る

よく使うコマンドとオプションを、自分の言葉でまとめたチートシートを作成します。人が作ったものより、自分で作ったほうが記憶に定着します。

実務のシーンを想定した練習課題に取り組む

基本コマンドに慣れてきたら、実務で遭遇する具体的なシーンを想定した練習課題に取り組みましょう。

練習課題1: ログ調査シミュレーション

# 課題1: 404エラーの行を抽出
# 課題2: IPアドレスごとのアクセス回数を集計
# 課題3: エラー(4xxまたは5xx)のみを抽出

練習課題2: サーバー監視スクリプト

# 課題: 以下をチェックして異常があればアラートを出す
# - ディスク使用率が80%以上
# - メモリ使用率が90%以上
# - 特定のプロセスが動いていない

練習課題3: バックアップスクリプト

# 課題: 以下の機能を持つバックアップスクリプトを作成
# - 指定ディレクトリを日付付きでtar.gz圧縮
# - 7日以上前のバックアップは自動削除
# - バックアップの成否をログに記録

シェルスクリプトで小さな自動化から始める

コマンドの組み合わせに慣れたら、シェルスクリプト化にチャレンジしましょう。最初から大きなスクリプトを作ろうとせず、小さな自動化から始めることが成功の秘訣です。

段階的な改善のステップ

  1. 手作業で実行 → まずコマンドを手で実行して動作確認
  2. スクリプト化 → 動作するコマンドをファイルにまとめる
  3. エラー処理追加 → 異常時の処理を追加
  4. ログ出力追加 → 実行履歴を記録
  5. cron登録 → 定期実行を設定
# cronで毎日午前3時に実行
$ crontab -e
0 3 * * * /path/to/backup_script.sh >> /var/log/backup.log 2>&1

チーム内でナレッジを共有して属人化を防ぐ

個人のスキルが向上しても、それが特定の人にしかできない状態になっては、組織全体の成長につながりません。ナレッジを共有し、誰でも同じレベルで作業できる仕組みを作ることが重要です。

共有方法1: スクリプトの共有リポジトリを作る

GitHubやGitLabなどで、チーム共通のスクリプトリポジトリを作成します。

# リポジトリ構成例
team-scripts/
├── README.md              # 各スクリプトの説明
├── backup/
│   ├── db_backup.sh      # データベースバックアップ
│   └── file_backup.sh    # ファイルバックアップ
├── monitoring/
│   ├── disk_check.sh     # ディスク監視
│   └── process_check.sh  # プロセス監視
└── maintenance/
    ├── log_cleanup.sh    # ログクリーンアップ
    └── temp_cleanup.sh   # 一時ファイル削除

共有方法2: ドキュメントを整備する

各スクリプトには必ず以下の情報を記載します。

#!/bin/bash
# ============================================
# スクリプト名: db_backup.sh
# 作成者: Tanaka
# 作成日: 2024-01-15
# 説明: MySQLデータベースを日次バックアップ
# 使い方: ./db_backup.sh [データベース名]
# 前提条件: mysqldumpコマンドが使用可能であること
# ============================================

まとめ:実務で使えるLinuxコマンドで業務効率化を実現しよう

この記事では、Linuxコマンドを実務で活用するための具体的な方法を、基礎から応用まで解説してきました。

基本コマンドの組み合わせパターンとして、パイプ(|)による複数コマンドの連携、grep + awk + sortによるログ分析、find + execによるファイルの一括処理、リダイレクトによる出力の保存を紹介しました。

シェルスクリプトによる自動化では、ログファイルの定期整理、バックアップの自動化、サーバー監視とアラート通知、レポート生成の自動化といった実務例を解説しました。

つまずきやすいポイントとして、Permission deniedへの対応、command not foundの解決、デバッグの方法、安全な実行のための注意点を取り上げました。

これらのコマンドとテクニックは、一度に全部を覚える必要はありません。日々の業務の中で少しずつ使いながら、自分の引き出しを増やしていくことが大切です。

「毎日5分かかる作業」をスクリプト化すれば、年間で約20時間の時間が生まれます。小さな自動化は、時間の節約だけでなく、ヒューマンエラーの削減、作業の標準化、精神的な負担軽減といったメリットをもたらします。

まずは今日から、一つのコマンドを実際に手を動かして試してみてください。そして毎日少しずつ、実務で使える技術を積み重ねていきましょう。困ったときは一人で抱え込まず、チーム内で相談し、ナレッジを共有することで、組織全体の技術力向上につながります。

師田 賢人

一橋大学商学部を卒業後、Accenture Japanに新卒入社し、ITコンサルタントとして大手企業のシステム導入・業務改善プロジェクトに従事。その後、Webエンジニアとしての実務経験を積み、2016年に独立。 独立後は、企業向けのWebシステム開発・業務効率化ツール構築を中心に、80件以上のプロジェクトを担当し、100社以上の企業と取引実績を持つ。技術領域ではブロックチェーン分野にも精通し、200名以上の専門家への取材・記事執筆を経験。 2023年にHarmonic Society株式会社を設立し、現在はAI駆動のWebサイト制作・業務システム開発・自動化ソリューションを提供。 中小企業から教育機関まで、幅広いクライアントのDXを支援している。

ちょっとした業務の悩みも、気軽にご相談ください。

コメントを残す