はじめに
このレッスンでは、これまで学んだすべてのコマンドを使って、実践的な課題に取り組みます。各演習では複数の解法がありますので、自分なりの方法で挑戦してみてください。
演習1:プロジェクト構造の作成
新しいWebプロジェクトの基本構造を作成してみましょう。
CommandAcademy Terminal
Welcome to CommandAcademy Terminal!
Type "help" to see available commands.
user@cmdac:~$
█
ファイルツリー
/
etc
hosts35B
passwd76B
home
user
tmp
usr
bin
share
var
log
課題
以下の構造を持つプロジェクトを作成してください:
mywebapp/
├── src/
│ ├── components/
│ │ ├── Header.js
│ │ └── Footer.js
│ ├── styles/
│ │ └── main.css
│ └── index.js
├── public/
│ ├── index.html
│ └── images/
├── tests/
├── docs/
│ └── README.md
└── .gitignore
ヒント:
mkdir -p
で階層的なディレクトリを作成touch
で複数のファイルを一度に作成tree
コマンドがあれば構造を確認(なければls -R
)
解答例:
# プロジェクトディレクトリ作成
mkdir -p mywebapp/{src/{components,styles},public/images,tests,docs}
# ファイル作成
cd mywebapp
touch src/components/{Header.js,Footer.js}
touch src/styles/main.css src/index.js
touch public/index.html
touch docs/README.md .gitignore
# 構造確認
ls -la
find . -type f
演習2:ログファイルの分析
システムログから特定の情報を抽出して分析します。
CommandAcademy Terminal
Welcome to CommandAcademy Terminal!
Type "help" to see available commands.
user@cmdac:~$
█
ファイルツリー
/
etc
hosts35B
passwd76B
home
user
tmp
usr
bin
share
var
log
課題
- エラーメッセージの数をカウント
- 各ログレベル(ERROR, WARNING, INFO)の出現回数を表示
- 重複するエラーメッセージを見つけて、その回数を表示
- ログファイルを日付付きでバックアップ
ヒント:
grep
でパターン検索sort
とuniq -c
で重複カウントdate
コマンドで現在日時を取得
解答例:
# 1. エラー数をカウント
grep ERROR system.log | wc -l
# 2. 各ログレベルの出現回数
grep -o "^[A-Z]*:" system.log | sort | uniq -c
# 3. 重複エラーの確認
grep ERROR system.log | sort | uniq -c | sort -nr
# 4. バックアップ作成
cp system.log system_$(date +%Y%m%d_%H%M%S).log
演習3:ファイルの整理と権限設定
散らばったファイルを整理して、適切な権限を設定します。
CommandAcademy Terminal
Welcome to CommandAcademy Terminal!
Type "help" to see available commands.
user@cmdac:~$
█
ファイルツリー
/
etc
hosts35B
passwd76B
home
user
tmp
usr
bin
share
var
log
課題
- ファイルを種類別にディレクトリに整理
- テキストファイル → documents/
- 画像ファイル → images/
- スクリプト → scripts/
- その他 → misc/
- スクリプトファイルに実行権限を付与
- configファイルを所有者のみ読み書き可能に
- 整理完了後、ファイル一覧を詳細表示
解答例:
# 1. ディレクトリ作成と整理
mkdir -p {documents,images,scripts,misc}
mv *.txt documents/
mv *.jpg images/
mv *.sh scripts/
mv * misc/ 2>/dev/null
# 2. スクリプトに実行権限
chmod +x scripts/*.sh
# 3. configファイルの権限設定
chmod 600 misc/config.json
# 4. 結果確認
ls -laR
演習4:プロセス管理とシステム監視
実行中のプロセスを管理し、システムリソースを監視します。
CommandAcademy Terminal
Welcome to CommandAcademy Terminal!
Type "help" to see available commands.
user@cmdac:~$
█
ファイルツリー
/
etc
hosts35B
passwd76B
home
user
tmp
usr
bin
share
var
log
課題
- 現在のシェルでバックグラウンドジョブを3つ起動
- ジョブの一覧を確認
- 2番目のジョブをフォアグラウンドに
- すべてのジョブを終了
ヒント:
&
でバックグラウンド実行jobs
でジョブ一覧fg
とbg
でジョブ制御kill
でプロセス終了
解答例:
# 1. バックグラウンドジョブ起動
sleep 100 &
sleep 200 &
sleep 300 &
# 2. ジョブ確認
jobs
# 3. 2番目をフォアグラウンドに
fg %2
# Ctrl+Z で一時停止
bg %2
# 4. すべて終了
kill %1 %2 %3
# または
jobs -p | xargs kill
演習5:テキスト処理パイプライン
CSVデータを処理して、必要な情報を抽出します。
CommandAcademy Terminal
Welcome to CommandAcademy Terminal!
Type "help" to see available commands.
user@cmdac:~$
█
ファイルツリー
/
etc
hosts35B
passwd76B
home
user
tmp
usr
bin
share
var
log
課題
- Engineering部門の平均給与を計算
- 勤続年数5年以上の従業員を給与順で表示
- 部門ごとの人数と最高給与を表示
- 給与が60000以上の従業員の名前をアルファベット順で表示
ヒント:
awk
やcut
でフィールド抽出sort -t',' -k
で特定フィールドでソート- 数値計算には
awk
が便利
解答例:
# 1. Engineering部門の平均給与
grep Engineering employees.csv | cut -d',' -f3 | \
awk '{sum+=$1; count++} END {print "Average:", sum/count}'
# 2. 勤続5年以上を給与順で
awk -F',' 'NR>1 && $4>=5 {print}' employees.csv | \
sort -t',' -k3 -nr
# 3. 部門ごとの統計
tail -n +2 employees.csv | \
awk -F',' '{dept[$2]++; if(sal[$2]<$3) sal[$2]=$3}
END {for(d in dept) print d": Count="dept[d]", Max Salary="sal[d]}'
# 4. 給与60000以上の名前
awk -F',' 'NR>1 && $3>=60000 {print $1}' employees.csv | sort
演習6:ファイル検索と一括処理
特定の条件に合うファイルを検索して、一括で処理します。
CommandAcademy Terminal
Welcome to CommandAcademy Terminal!
Type "help" to see available commands.
user@cmdac:~$
█
ファイルツリー
/
etc
hosts35B
passwd76B
home
user
tmp
usr
bin
share
var
log
課題
- projectディレクトリ内のすべてのreport.txtファイルを検索
- 2021年のレポートファイルをすべてbackup/にコピー
- 空のreport.txtファイルに"No data"と書き込む
- ファイルサイズが0より大きいレポートの数をカウント
解答例:
# 1. report.txtを検索
find project -name "report.txt"
# 2. 2021年のファイルをバックアップ
mkdir -p backup
find project/2021 -name "report.txt" -exec cp {} backup/ \;
# 3. 空ファイルに書き込み
find project -name "report.txt" -empty -exec sh -c 'echo "No data" > {}' \;
# 4. サイズが0より大きいファイルをカウント
find project -name "report.txt" -size +0 | wc -l
最終課題:スクリプト作成
これまでの知識を使って、簡単なバックアップスクリプトを作成します。
CommandAcademy Terminal
Welcome to CommandAcademy Terminal!
Type "help" to see available commands.
user@cmdac:~$
█
ファイルツリー
/
etc
hosts35B
passwd76B
home
user
tmp
usr
bin
share
var
log
課題
backup.shスクリプトを作成して、以下の機能を実装してください:
- importantディレクトリを日付付きでバックアップ
- バックアップ先:backups/backup_YYYYMMDD/
- バックアップ完了後、ファイル数を表示
- スクリプトに実行権限を付与して実行
スクリプトの基本構造:
#!/bin/bash
# 変数定義
# ディレクトリ作成
# ファイルコピー
# 結果表示
解答例:
# スクリプト作成
cat > backup.sh << 'EOF'
#!/bin/bash
# 日付を取得
DATE=$(date +%Y%m%d)
BACKUP_DIR="backups/backup_${DATE}"
# バックアップディレクトリ作成
mkdir -p "$BACKUP_DIR"
# ファイルをコピー
cp -r important/* "$BACKUP_DIR/"
# ファイル数をカウント
FILE_COUNT=$(find "$BACKUP_DIR" -type f | wc -l)
# 結果表示
echo "Backup completed!"
echo "Backup location: $BACKUP_DIR"
echo "Total files backed up: $FILE_COUNT"
EOF
# 実行権限付与
chmod +x backup.sh
# 実行
./backup.sh
コース完了おめでとうございます!
Linux基礎マスターコースを完了しました!これまでに学んだコマンドは、Linuxシステムを操作する上での基礎となります。
学習した主なコマンド
- ナビゲーション: pwd, ls, cd
- ファイル操作: touch, mkdir, rm, cp, mv
- 表示: cat, head, tail, less
- 検索: find, grep
- プロセス管理: ps, top, kill
- 権限管理: chmod, chown
- テキスト処理: echo, sort, uniq, wc
次のステップ
-
実際のLinux環境で練習
- 仮想マシンやWSLをセットアップ
- 学んだコマンドを日常的に使用
-
より高度なコマンドを学習
- sed、awkでの高度なテキスト処理
- シェルスクリプトの作成
- システム管理コマンド
-
実践的なプロジェクト
- 自動化スクリプトの作成
- ログ分析ツールの開発
- システム監視の実装
🎉 お疲れさまでした!基本的なLinuxコマンドをマスターしました。これからも継続的に練習して、より効率的にLinuxを使いこなせるようになりましょう!