ファイル検索と管理コマンド
find コマンドによる検索
Linux 環境において、特定のファイルやディレクトリを検索する際に find コマンドが広く利用されます。基本構文は検索開始パスと条件オプションで構成されます。
find [検索開始パス] [検索条件]
主な検索オプションには以下のようなものがあります。
- -name: ファイル名による検索(ワイルドカード * 使用可能)
- -type: ファイル種類の指定(f: 通常ファイル,d: ディレクトリ)
- -size: ファイルサイズによる検索
- -mtime: 最終更新日時による検索
例えば、設定ファイル nginx.conf をルートディレクトリから探す場合は以下の通りです。
find / -name "nginx.conf"
もし該当ファイルが見つからない場合、該当サービスがインストールされていない可能性があります。
拡張子でフィルタリングする場合、/var/log/ 配下にある .log ファイルを検索する例は以下のようになります。
find /var/log/ -name "*.log" -type f
ファイル名の一部が一致する検索も可能です。
find /var/log/ -name "access*" -type f
ファイルサイズに基づく検索
サイズ指定では、k (KB), M (MB), G (GB) などの単位を使用します。
size: 指定サイズと完全に一致-size: 指定サイズより小さい+size: 指定サイズより大きい
システム全体で 50MB を超えるファイルを検出するコマンドは以下の通りです。
find / -size +50M
また、検索結果に対して即座に削除処理を行うことも可能です。ホームディレクトリ配下で 50MB 超のファイルを削除する例を示します。
find /home/ -size +50M -delete
dd コマンドによるダミーファイル生成
テスト用に特定のサイズのファイルを作成するには dd コマンドが有用です。
dd if=[入力ソース] of=[出力ファイル] bs=[ブロックサイズ] count=[ブロック数]
/dev/zero はゼロバイトを連続して出力する特殊デバイスです。これを利用して 10MB のファイルを生成する手順は以下の通りです。
mkdir -p /var/work/test
cd /var/work/test
dd if=/dev/zero of=dummy.dat bs=10M count=1
ls -lh dummy.dat
検索結果に対する処理実行
find コマンドの -exec オプションまたは xargs を使用することで、検索されたファイルに対して任意のコマンドを実行できます。
例えば、/var/cache/ 配下にある 7 日以上経過した .tmp ファイルを削除する場合は以下のいずれかの方法があります。
方法 1: xargs を利用
find /var/cache/ -name "*.tmp" -type f -mtime +7 | xargs rm -f
方法 2: -exec を利用
find /var/cache/ -name "*.tmp" -type f -mtime +7 -exec rm -f {} \;
更新日時による検索
ファイルのメタデータを確認するには stat コマンドを使用します。
stat /var/work/test/dummy.dat
ファイルの更新日時を変更するには touch コマンドの -d オプションを用います。ファイルが存在しない場合は新規作成されます。
touch -m -d "2023-12-01 10:00" /var/work/test/old_file.txt
これを利用し、特定の日数範囲内のファイルを検索できます。-mtime の値に + を付与すると「〜日前より前」、- を付与すると「〜日前以内」を意味します。
find /var/work/ -mtime -5 -name "*.txt"
ディレクトリ構造の可視化
ディレクトリツリーを視覚的に確認するには tree コマンドが便利です。標準ではインストールされていない場合が多いため、パッケージマネージャを通じて導入が必要です。
yum -y install tree
tree /var/log/
仮想環境の複製
検証用環境を構築する際、仮想マシンのクローン機能を利用すると効率的です。クローン作成前に元となる仮想マシンはシャットダウンする必要があります。
主なクローン方式には以下の 2 種類があります。
- フルクローン: 独立したディスクファイルを作成するため容量を消費しますが、元マシンなしで動作可能です。
- リンククローン: 差分ディスクのみを作成するため容量を節約できますが、元マシンのディスクファイルへの依存が発生します。
一般的な手順としては、仮想化管理ツールのウィザードに従い、クローン元の状態選択、クローンタイプ選択、名前と保存路径の指定を行い、完了を待ちます。
リモートファイル転送
scp コマンドの基本
Linux 間でのファイル転送には scp (Secure Copy) を使用します。SSH プロトコルを経由するため、両主机で SSH サービスが稼働している必要があります。
ファイルのダウンロード
リモート主机からローカルへファイルを取得する構文は以下の通りです。
scp [オプション] ユーザー名@リモート IP:リモートパス ローカルパス
例として、リモート主机 (10.0.0.5) の /srv/data/backup.sql をローカルの /tmp/ に取得します。
scp root@10.0.0.5:/srv/data/backup.sql /tmp/
ファイルのアップロード
ローカルからリモートへファイルを送信する場合はパスの指定順序が逆になります。
scp [オプション] ローカルパス ユーザー名@リモート IP:リモートパス
例として、ローカルの config.ini をリモート主机 (10.0.0.5) の /etc/app/ へアップロードします。
scp config.ini root@10.0.0.5:/etc/app/
転送前に SSH デーモンが起動していることを確認してください。
systemctl status sshd
タスクの自動化
crontab の設定
定期実行ジョブの設定には crontab を使用します。
crontab -l: 現在のジョブ一覧表示crontab -e: ジョブの編集
編集画面では、分・時・日・月・曜日の順に実行時間を指定し、最後に実行コマンドを記述します。
バックアップ任務の自動化
例えば、毎日凌晨 3 時に /var/www/html ディレクトリを圧縮して /home/backup に保存する任务を設定する場合、以下のように記述します。
0 3 * * * /bin/tar -zcvf /home/backup/www_$(date +\%Y\%m\%d).tar.gz /var/www/html
これにより、指定した時刻に自動的にバックアップファイルが生成されます。
総合運用演習シナリオ
以下の手順は、ログ管理とバックアップ運用を想定した総合的な練習任務です。
- ディレクトリ準備:
/opt/labディレクトリを作成し、その中にlogsとarchiveサブディレクトリを構築します。 - テストファイル生成:
ddコマンドを使用し、logs配下に 5MB、20MB、50MB のサイズのダミーログファイル(app1.log,app2.log,app3.log)をそれぞれ作成します。 - 日時改ざん:
touchコマンドを用い、各ファイルの更新日時をそれぞれ 10 日前、5 日前、昨日に変更します。 - ファイル検索と整理:
findコマンドで 7 日前より古いファイルを検索し、archiveディレクトリへ移動させます。 - 容量制限チェック: 20MB を超えるファイルを検索し、一覧を表示した後、該当ファイルを削除します。
- アーカイブ作成:
archiveディレクトリ全体をbackup.tar.gzとしてホームディレクトリに保存します。 - リモート転送: 作成したアーカイブファイルを、別ホスト(IP: 10.0.0.20)の
/srv/incomingへscpで転送します。 - 定期任務設定: 毎週月曜日の凌晨 4 時に
/opt/lab/logs配下のファイルを圧縮し、日時付きファイル名で保存する cron 任務を追加します。
これらの操作を通じて、ファイル管理、検索、転送、自動化の一連の流れを実践的に習得できます。