ディレクトリとファイルシステムの操作
このステップでは、stat
コマンドをディレクトリとファイルシステムで使用する方法を説明します。この知識は、システム管理タスクやストレージ使用量の理解に役立ちます。
ディレクトリでの Stat コマンド
stat
コマンドは、ファイルと同様にディレクトリでも機能します。テストディレクトリを作成し、そのメタデータを調べてみましょう。
mkdir -p ~/project/test_dir
stat ~/project/test_dir
ファイルの場合と同様の出力が表示されますが、ファイルの種類フィールドには「regular file」の代わりに「directory」と表示されます。
ファイルとディレクトリの主な違いは、ディレクトリには通常、より多くのリンクがあることです(直接の各サブディレクトリに対して 1 つ、ディレクトリ自体とその親に対して 2 つ)。
サブディレクトリを作成し、それがリンク数にどのように影響するかを見てみましょう。
mkdir -p ~/project/test_dir/sub_dir
stat ~/project/test_dir
リンク数が 1 増加したことに気付くはずです。
ファイルシステム情報
stat
コマンドは、-f
または --file-system
オプションを使用して、ファイルシステムに関する情報も提供できます。このオプションは、ファイルシステムの種類、ブロックサイズ、および使用状況統計などの詳細を表示します。
プロジェクトディレクトリを含むファイルシステムを調べてみましょう。
stat -f ~/project
出力には以下が含まれます。
- ファイルシステムの種類
- ブロックサイズ
- 合計ブロック数
- 空きブロック数
- 利用可能なブロック数(root 以外のユーザー向け)
- 合計 inode 数
- 空き inode 数
この情報は、ディスク容量の使用状況を監視し、容量を計画するのに役立ちます。
オプションの組み合わせ
ファイルシステムオプションとカスタムフォーマットオプションを組み合わせて、特定の情報を抽出できます。
stat -f -c 'File System: %T\nTotal size: %b blocks\nFree: %f blocks\nAvailable: %a blocks' ~/project
このコマンドは、ファイルシステムの種類、合計ブロック数、空きブロック数、および利用可能なブロック数を表示します。
シンボリックリンクの追跡
デフォルトでは、stat
コマンドがシンボリックリンクに遭遇すると、リンク自体に関する情報が表示され、それが指すファイルに関する情報は表示されません。シンボリックリンクを作成し、実際に見てみましょう。
echo "Target file content" > ~/project/target_file.txt
ln -s ~/project/target_file.txt ~/project/symlink.txt
stat ~/project/symlink.txt
出力には、ファイルの種類が「symbolic link」であり、サイズがターゲットファイルへのパスの長さであることが表示されます。
リンクではなくターゲットファイルに関する情報を表示するには、-L
または --dereference
オプションを使用します。
stat -L ~/project/symlink.txt
これで、出力にはターゲットファイルに関する情報が表示され、サイズと種類が「regular file」として表示されます。
実用的なアプリケーション:大きなディレクトリの検索
stat
コマンドの実用的なアプリケーションの 1 つは、大きなディレクトリを見つけることです。ディレクトリサイズを計算するスクリプトを作成しましょう。
echo '#!/bin/bash
for dir in "$@"; do
if [ -d "$dir" ]; then
size=$(du -s "$dir" | cut -f1)
echo "Directory: $dir, Size: $size KB"
else
echo "$dir is not a directory"
fi
done' > ~/project/dir_size.sh
chmod +x ~/project/dir_size.sh
次に、テストディレクトリでスクリプトを実行しましょう。
~/project/dir_size.sh ~/project/test_dir
このスクリプトは、du
コマンドを使用してディレクトリサイズを計算し、stat
コマンドによって提供されるメタデータ情報を補完します。
stat
コマンドをディレクトリとファイルシステムで使用する方法を理解することで、Linux システムのストレージの構成と使用状況に関する貴重な洞察を得ることができます。