Linuxファイル操作応用【応用編】
基本的なファイル操作をマスターしたら、次は高度なテクニックを身につけましょう。この応用編では、head・tail・file・stat・パイプ・リダイレクトを使った実践的なファイル分析と操作技術を詳しく解説します。
1. head・tail - ログ解析とファイル分析術
headとtailは、実務で最も頻繁に使用されるファイル分析コマンドです。特にサーバーのログ解析やデバッグ作業で欠かせません。
head - ファイル先頭のスマート表示
🔍 基本的な使用方法
$ head access.log
デフォルトで先頭10行を表示。ファイルの構造把握に最適
📊 行数指定で柔軟な表示
$ head -n 5 error.log # 先頭5行 $ head -5 error.log # 短縮形 $ head -n 100 config.txt # 先頭100行
📁 複数ファイルの一括確認
$ head -n 3 *.log
==> access.log <== 192.168.1.10 - - [11/Jan/2025:10:00:01] "GET /" 192.168.1.11 - - [11/Jan/2025:10:00:02] "GET /api" 192.168.1.12 - - [11/Jan/2025:10:00:03] "POST /login" ==> error.log <== [2025-01-11 10:00:01] ERROR: Database connection failed [2025-01-11 10:00:05] WARN: Slow query detected [2025-01-11 10:00:10] ERROR: Authentication failed
複数ログファイルの内容を一度に確認できる
tail - 最新情報とリアルタイム監視
🕰️ 最新エラーの確認
$ tail error.log
デフォルトで末尾10行。最新のエラーやイベントを素早く特定
🔥 リアルタイムログ監視(最重要)
$ tail -f /var/log/app.log
実務で最も使用頻度の高い機能。ログをリアルタイムで監視し、新しい行が追加されると自動表示
終了方法:Ctrl + C
📈 特定位置からの表示
$ tail -n +50 large_file.txt # 50行目から最後まで $ tail -n 20 access.log # 末尾20行
実務での高度なログ解析テクニック
🔍 エラー発生時刻の特定と追跡
# エラー発生直前のコンテキストを確認 $ grep -n "ERROR" app.log | tail -1 # 最新エラーの行番号取得 47:ERROR: Connection timeout # その周辺を詳細確認 $ head -n 50 app.log | tail -n 10 # 41-50行目表示
🔄 ログローテーション対応の監視
# ログファイルがローテートしても監視継続 $ tail -F /var/log/app.log # 大文字Fでファイル再作成に対応
🔥 複数ログの同時監視
# 複数のログファイルを同時に監視 $ tail -f /var/log/app.log /var/log/error.log # さらに高度な方法:multitailコマンド $ multitail /var/log/app.log /var/log/error.log /var/log/access.log
💡 プロのhead/tail使用テクニック
パフォーマンス問題の追跡
# アクセスログの最新トレンドを確認 $ tail -f access.log | grep "slow\|timeout\|error"
デプロイ時のリアルタイムモニタリング
# デプロイ実行中に別ターミナルで $ tail -f /var/log/deploy.log | tee deploy_$(date +%Y%m%d).log
ファイルサイズに応じた適切な選択
# 小さなファイルはcat、大きなファイルはhead/tail $ wc -l logfile.txt # 行数確認 $ [[ $(wc -l < file.txt) -gt 50 ]] && head file.txt || cat file.txt
2. file・stat - ファイル情報の詳細調査
ファイルの正体や詳細情報を調べるコマンドです。セキュリティチェックやデバッグ作業で非常に有用です。
file - ファイルタイプの特定
🔍 基本的なファイル診断
$ file mysterious_file
mysterious_file: UTF-8 Unicode text, with CRLF line terminators
ファイルの種類、エンコーディング、改行コードを特定
📊 複数ファイルの一括診断
$ file *
config.txt: ASCII text data.bin: data image.jpg: JPEG image data, JFIF standard script.sh: Bourne-Again shell script, ASCII text executable archive.tar.gz: gzip compressed data
ディレクトリ内のファイル種類を一括特定
🛡️ セキュリティチェックでの活用
# 拡張子偽装の検出 $ file suspicious_file.txt suspicious_file.txt: PE32 executable (console) Intel 80386, for MS Windows # .txtだが実際はWindows実行ファイル!
拡張子と実際のファイルタイプが異なる場合は悪意あるファイルの可能性
stat - 詳細なファイル情報
📈 完全なファイル情報表示
$ stat important_file.txt
File: important_file.txt Size: 1024 Blocks: 8 IO Block: 4096 regular file Device: 801h/2049d Inode: 1234567 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 1000/username) Gid: ( 1000/usergroup) Access: 2025-01-11 10:30:45.123456789 +0900 Modify: 2025-01-11 10:25:30.987654321 +0900 Change: 2025-01-11 10:25:30.987654321 +0900 Birth: 2025-01-11 10:20:15.555666777 +0900
ファイルサイズ、権限、タイムスタンプの詳細情報
🕰️ カスタムフォーマットで表示
# サイズと更新日時のみ表示 $ stat --format="%n: %s bytes, modified %y" *.txt
config.txt: 2048 bytes, modified 2025-01-11 09:15:22.123456789 +0900 log.txt: 51200 bytes, modified 2025-01-11 10:45:33.987654321 +0900
実務での活用シナリオ
🕵️ ファイル変更の追跡調査
# セキュリティインシデント対応 $ stat --format="%n - Last modified: %y, Last accessed: %x" /etc/passwd /etc/passwd - Last modified: 2025-01-11 08:30:15.123456789 +0900, Last accessed: 2025-01-11 10:45:22.987654321 +0900 # 不正アクセスがあったかどうか確認
💾 ディスクスペースの診断
# 大きなファイルの詳細情報 $ stat --format="%n: %s bytes (%S blocks)" large_files/* database.db: 1073741824 bytes (262144 blocks) backup.tar.gz: 536870912 bytes (131072 blocks)
🔗 シンボリックリンクの診断
$ file suspicious_link suspicious_link: symbolic link to /tmp/malicious_file $ stat suspicious_link File: suspicious_link -> /tmp/malicious_file Size: 18 Blocks: 0 IO Block: 4096 symbolic link
リンク先の特定と安全性確認
💡 file/stat コマンドのプロ活用術
バッチ処理でのファイルタイプフィルタリング
# 実行ファイルだけを抽出
for f in *; do
[[ $(file "$f") == *"executable"* ]] && echo "$f"
done
ファイルサイズでの一括ソート
# サイズ順でファイル一覧 stat --format="%s %n" * | sort -n | tail -10
3. パイプとリダイレクト
複数のコマンドを組み合わせて、強力な処理を実現します。
パイプ(|)
あるコマンドの出力を別のコマンドの入力に渡します。
基本的なパイプ
$ ls -la | grep ".txt"
.txtファイルのみを表示
リダイレクト
| 記号 | 説明 | 例 |
|---|---|---|
> |
出力をファイルに上書き | ls > list.txt |
>> |
出力をファイルに追記 | echo "text" >> file.txt |
< |
ファイルから入力 | sort < data.txt |
2> |
エラー出力をリダイレクト | command 2> error.log |
&> |
標準出力とエラー出力を同じファイルに | command &> all.log |
4. 実践的な組み合わせ技
実際の作業でよく使用する、コマンドの組み合わせ例を紹介します。
例1:ログファイルからエラーを抽出して集計
$ grep "ERROR" app.log | cut -d' ' -f3 | sort | uniq -c | sort -rn
エラーの種類別に出現回数を降順で表示
例2:大きなファイルTOP10を見つける
$ find . -type f -exec ls -lh {} \; | sort -k5 -rh | head -10
カレントディレクトリ以下で最も大きい10個のファイル
例3:特定の拡張子のファイル数を数える
$ find . -name "*.txt" | wc -l
.txtファイルの総数を表示
例4:プロセスのメモリ使用量TOP5
$ ps aux | sort -k4 -rn | head -5
メモリ使用率が高い順に5つのプロセスを表示
例5:ファイルのバックアップを作成
$ find . -name "*.conf" -exec cp {} {}.backup \;
すべての.confファイルのバックアップを作成
5. 実践演習:日常業務シナリオ
実際の業務でよく発生するシナリオを通じて、ファイル操作コマンドの実践的な使い方を学習しましょう。
💻 シナリオ1:サーバーメンテナンス作業
タスク:ログファイルのローテーションとアーカイブ
# 1. 現在のログファイルサイズ確認 $ ls -lah /var/log/app.log # 2. 最新エラーの確認 $ tail -20 /var/log/app.log | grep "ERROR" # 3. 安全なアーカイブ作成 $ cp /var/log/app.log /var/log/archive/app.log.$(date +%Y%m%d) # 4. ログのクリア(サービス停止中に実行) $ > /var/log/app.log # ファイルを空にする
🚀 シナリオ2:アプリケーションデプロイ
タスク:新バージョンの安全なデプロイ
# 1. 現在のバージョンをバックアップ $ cp -rp /opt/myapp /opt/myapp.backup.$(date +%Y%m%d_%H%M%S) # 2. 新バージョンの展開と確認 $ tar -tf new_version.tar.gz | head -10 # 中身確認 $ tar -xzf new_version.tar.gz -C /tmp/ # 一時展開 # 3. 設定ファイルのマージ $ cp /opt/myapp/config.ini /tmp/myapp/config.ini $ diff /opt/myapp/config.ini /tmp/myapp/config.ini # 差分確認 # 4. 本番環境への安全な上書き $ mv /opt/myapp /opt/myapp.old $ mv /tmp/myapp /opt/myapp
🔍 シナリオ3:セキュリティインシデント対応
タスク:不正アクセスの調査と証拠保全
# 1. アクセスログの緊急バックアップ $ cp /var/log/access.log /home/incident/access.log.$(date +%Y%m%d_%H%M%S) # 2. 不正アクセスの日時特定 $ grep "suspicious_pattern" /var/log/access.log | head -1 $ grep "suspicious_pattern" /var/log/access.log | tail -1 # 3. 該当時間帯のログ抽出 $ awk '/2025-01-11 10:30:/,/2025-01-11 11:00:/' /var/log/access.log > incident_logs.txt # 4. 関連ファイルの情報収集 $ stat /var/log/access.log > file_metadata.txt $ file /var/log/access.log >> file_metadata.txt
📁 シナリオ4:ディスクスペースクリーンアップ
タスク:安全な不要ファイルの削除
# 1. ディスク使用量の確認
$ df -h
$ du -sh /var/log/* | sort -hr | head -10
# 2. 古いログファイルの特定
$ find /var/log -name "*.log" -mtime +30 -type f
# 3. 安全な削除順序
$ find /var/log -name "*.log" -mtime +30 -type f -exec ls -la {} \; # 確認
$ find /var/log -name "*.log" -mtime +30 -type f -ok rm {} \; # 確認付き削除
# 4. 削除後の確認
$ df -h # スペースが増えたか確認
🎯 練習問題:安全環境で試してみよう!
基础編:ファイル操作の基本
- test.txt というファイルを作成し、「初期データ」と書き込み
- test.txt を test_backup.txt としてコピー
- test.txt を test_renamed.txt にリネーム
- test_backup.txt の内容を表示
- 不要なファイルを安全に削除
中級編:実務シミュレーション
- 「project」ディレクトリを作成し、その中に config.ini, app.py, README.md を作成
- project ディレクトリ全体をタイムスタンプ付きでバックアップ
- config.ini の内容を変更し、元のファイルとの差分を確認
- 問題があった場合のロールバック手順を実行
まとめ:安全なファイル操作マスターへ
この記事で学んだ重要ポイント:
- head/tail:ログ解析とリアルタイム監視の必須テクニック
- file/stat:セキュリティチェックとデバッグの強い味方
- パイプ・リダイレクト:複数コマンドの強力な組み合わせ
- 実践演習:実務シナリオでの総合活用
🎉 ファイル操作マスターシリーズ完了!
お疲れ様でした!基礎編・応用編を通じて、Linuxファイル操作のエキスパートになりました。
習得した知識を活かして、効率的なファイル管理と分析を実践してください。
📁 ファイル操作シリーズ全体
- 基礎編 - cp・mv・rm・catの基本操作と安全対策
- 応用編(この記事) - head・tail・file・stat・パイプ・実践演習
当サイトは、Amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイトプログラムである「Amazonアソシエイト・プログラム」の参加者です。商品価格に影響はありません。
📚 ファイル操作・コマンド活用学習におすすめの書籍
ファイル操作の応用技術とコマンド活用を効率的にマスターするために、実践重視の学習書を厳選してご紹介します。head・tail・grep・find・パイプなどの実践的な使い方を深く学べます。
📚 詳解シェルスクリプト
対象レベル: 中級〜上級
ファイル操作の高度なテクニックとパイプ・リダイレクトの実践活用を詳しく解説。grep・find・awkなどのフィルタコマンドを組み合わせた強力なテキスト処理技術を習得できる実践書です。
📚 入門UNIXシェルプログラミング
対象レベル: 初級〜中級
ファイル操作コマンドの基礎からシェルスクリプトでの実践活用まで体系的に学習。grep・sed・awkなどのテキスト処理ツールと組み合わせた実務パターンを詳しく解説しています。
📚 高度なファイルコマンド活用術
対象レベル: 中級〜上級
find・sort・uniq・diff などの応用コマンドを実践的に学習。大規模ファイル処理、ログ解析、データ変換など実務で役立つ高度なテクニックを習得できる専門書です。
📚 Bashコマンドライン入門
対象レベル: 初級〜中級
Bashのコマンドライン操作とファイル操作の基礎から応用まで実践的に学習。パイプ・リダイレクト・ワイルドカードなどの効率的な使い方を豊富な実例付きで詳しく解説しています。