ディスク使用量の確認:df
df
(Disk Free)コマンドは、マウントされたファイルシステムのディスク使用量を表示します。
dfの基本的な使用法
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
dfの主要オプション:
-h
: 人間が読みやすい形式(MB、GB等)-T
: ファイルシステムタイプを表示-i
: inode使用量を表示-x
: 特定のファイルシステムタイプを除外
dfの出力の読み方
# 基本的な使用量表示
df -h
# 出力例:
# Filesystem Size Used Avail Use% Mounted on
# /dev/sda1 20G 8.5G 11G 45% /
# /dev/sda2 100G 45G 51G 47% /home
# tmpfs 2.0G 0 2.0G 0% /tmp
各列の意味:
- Filesystem: デバイス名
- Size: 総容量
- Used: 使用容量
- Avail: 利用可能容量
- Use%: 使用率
- Mounted on: マウントポイント
特定のディレクトリの使用量
# 特定のマウントポイントのみ表示
df -h /home
# inode使用量を確認
df -i
# 全ファイルシステムタイプを表示
df -hT
ディレクトリ使用量の確認:du
du
(Disk Usage)コマンドは、ディレクトリやファイルのディスク使用量を表示します。
duの基本操作
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
duの主要オプション:
-h
: 人間が読みやすい形式-s
: 指定したディレクトリの合計のみ表示-a
: すべてのファイルを表示-c
: 総計を表示--max-depth=N
: 表示する階層を制限
duの実践的な使用法
# 現在のディレクトリの使用量
du -h
# サマリのみ表示
du -sh .
# 深さを制限
du -h --max-depth=1
# 大きいディレクトリから順に表示
du -h | sort -hr
# 特定のファイル/ディレクトリのサイズ
du -sh /var/log /tmp /home
大きなファイル・ディレクトリの発見
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
# トップ10の大きなディレクトリ
du -h | sort -hr | head -10
# 1MB以上のファイル
find . -type f -size +1M -exec du -h {} + | sort -hr
# 特定サイズ以上のディレクトリ
du -h | awk '$1~/[0-9]+M/ || $1~/[0-9]+G/'
# 隠しファイルも含めて検索
du -ah | sort -hr | head -20
ファイル情報の詳細確認
stat - 詳細なファイル情報
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
# ファイルの詳細情報
stat example.txt
# 表示される情報:
# - ファイルサイズ
# - ブロック数
# - inode番号
# - パーミッション
# - 所有者/グループ
# - タイムスタンプ(アクセス、変更、作成)
# 特定の情報のみ表示
stat -c '%s' example.txt # ファイルサイズ
stat -c '%a' example.txt # 8進数パーミッション
stat -c '%U %G' example.txt # 所有者とグループ
file - ファイルタイプの判定
# ファイルタイプの確認
file *
# MIMEタイプで表示
file -i document.pdf
# 複数ファイルの一括確認
find . -type f | head -10 | xargs file
開いているファイルの確認:lsof
lsof
(List Open Files)は、現在開かれているファイルを表示します。
lsofの基本使用法
# 現在開いているファイル
lsof
# 特定のファイルを開いているプロセス
lsof /var/log/syslog
# 特定のディレクトリ内の開かれているファイル
lsof +D /tmp
# 特定のプロセスが開いているファイル
lsof -p PID
# 特定のユーザーが開いているファイル
lsof -u username
# ネットワークポート
lsof -i :80
lsof -i TCP:22
実践的なlsofの使用例
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
# 削除できないファイルの原因調査
lsof | grep deleted
# ディスク容量が減らない原因調査
lsof | grep -i deleted
# どのプロセスがディスクを使用しているか
lsof -n | grep -E '(REG.*[0-9]+\s*[0-9]+)' | awk '{print $2}' | sort | uniq -c | sort -nr
実践的なディスク容量管理
容量不足の解決手順
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
# 1. 現在の状況を確認
df -h
# 2. 大きなディレクトリを特定
du -h --max-depth=1 / | sort -hr
# 3. 大きなファイルを検索
find / -type f -size +100M 2>/dev/null | head -10
# 4. 一時ファイルを確認
find /tmp -type f -mtime +7
find . -name "*.tmp" -o -name "*.cache"
# 5. 古いログファイルを確認
find /var/log -name "*.log" -mtime +30
# 6. 重複ファイルの検索(重複除去ツール使用)
fdupes -r /path/to/check
自動化されたクリーンアップスクリプト
#!/bin/bash
# cleanup.sh - ディスククリーンアップスクリプト
LOG_FILE="/var/log/cleanup.log"
THRESHOLD=90
echo "$(date): Starting cleanup" >> $LOG_FILE
# 現在のディスク使用率を確認
USAGE=$(df / | tail -1 | awk '{print $5}' | sed 's/%//')
if [ $USAGE -gt $THRESHOLD ]; then
echo "Disk usage is $USAGE%. Cleaning up..." >> $LOG_FILE
# 一時ファイルの削除
find /tmp -type f -mtime +7 -delete
# ログローテーション
find /var/log -name "*.log" -size +100M -exec gzip {} \;
# キャッシュファイルの削除
find /var/cache -name "*.cache" -mtime +30 -delete
echo "Cleanup completed" >> $LOG_FILE
else
echo "Disk usage is $USAGE%. No cleanup needed." >> $LOG_FILE
fi
ファイルシステムの監視
定期的な監視スクリプト
#!/bin/bash
# disk_monitor.sh
while true; do
# ディスク使用率を確認
df -h | awk '$5 > 80 {print "Warning: " $1 " is " $5 " full"}'
# inode使用率も確認
df -i | awk '$5 > 80 {print "Warning: " $1 " inodes are " $5 " full"}'
sleep 3600 # 1時間待機
done
ログファイルの管理
# ログファイルのサイズ監視
find /var/log -name "*.log" -size +50M -printf "%s %p\n" | sort -nr
# ログローテーション設定の確認
cat /etc/logrotate.conf
ls -la /etc/logrotate.d/
# 手動でのログローテーション
logrotate -f /etc/logrotate.conf
実践演習
演習1:容量分析レポート作成
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
指定されたディレクトリ構造の容量分析レポートを作成してください。
解答例:
#!/bin/bash
echo "=== Disk Usage Analysis Report ==="
echo "Generated on: $(date)"
echo
echo "Overall disk usage:"
df -h | grep -E '^/dev/'
echo
echo "Top 5 largest directories:"
du -h analysis/ | sort -hr | head -5
echo
echo "Files larger than 10MB:"
find analysis/ -type f -size +10M -exec du -h {} + | sort -hr
echo
echo "File count by type:"
find analysis/ -type f -name "*.dat" | wc -l | sed 's/^/.dat files: /'
find analysis/ -type f -name "*.log" | wc -l | sed 's/^/.log files: /'
find analysis/ -type f -name "*.tmp" | wc -l | sed 's/^/.tmp files: /'
演習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
7日以上古いファイルを安全に削除するクリーンアップスクリプトを作成してください。
解答例:
#!/bin/bash
# safe_cleanup.sh
CLEANUP_DIR="cleanup"
BACKUP_DIR="backup_$(date +%Y%m%d)"
LOG_FILE="cleanup.log"
echo "$(date): Starting cleanup of $CLEANUP_DIR" >> $LOG_FILE
# バックアップディレクトリ作成
mkdir -p "$BACKUP_DIR"
# 7日以上古いファイルを検索
find "$CLEANUP_DIR" -type f -mtime +7 -print0 | while IFS= read -r -d '' file; do
echo "Processing: $file" >> $LOG_FILE
# バックアップ
cp "$file" "$BACKUP_DIR/"
# 削除
rm "$file"
echo "Removed: $file" >> $LOG_FILE
done
echo "$(date): Cleanup completed" >> $LOG_FILE
トラブルシューティング
よくある問題と解決策
1. ディスクフル状態
# 緊急時の対処
df -h
# 使用率100%のファイルシステムを特定
# 大きなファイルを見つけて削除
find / -type f -size +1G 2>/dev/null | head -5
# 削除されたが開かれているファイルを確認
lsof | grep -i deleted
# 該当プロセスを再起動
2. inode不足
# inode使用率を確認
df -i
# 小さなファイルが大量にある場合
find / -type f | wc -l
find / -size 0 -type f -delete # 空ファイルを削除
3. 削除できないファイル
# ファイルを使用しているプロセスを確認
lsof filename
# プロセス終了後に削除
kill PID
rm filename
まとめ
このレッスンでは、ファイルシステムとディスク使用量の管理について学びました:
- df/duを使った使用量の確認
- 大きなファイル・ディレクトリの特定方法
- lsofによる開いているファイルの調査
- 効率的なクリーンアップ手法
定期的な監視と適切なメンテナンスにより、ディスク容量の問題を予防できます。
💡 次のレッスンでは、ファイル属性とメタデータについて学びます。