stat --dereferenceオプションの使い方を解説|-Lと同じようにシンボリックリンク先の情報を表示しよう
生徒
「先生、statコマンドの-Lオプションは覚えました。でも--dereferenceっていうのもあるって聞きました。それって何ですか?」
先生
「いい質問だね。--dereferenceは、-Lと全く同じ動きをするオプションなんだ。つまり、シンボリックリンクのリンク先のファイル情報を表示するんだよ。」
生徒
「そうなんですね!じゃあ-Lと--dereferenceはどっちを使っても大丈夫なんですか?」
先生
「その通り!表記の仕方が違うだけで、機能は全く同じなんだ。好みに合わせて使い分けてOKだよ。」
1. stat --dereferenceとは?
Linuxのstatコマンドで--dereferenceオプションを使うと、シンボリックリンク(symbolic link)が指し示す先のファイルの情報を表示することができます。これは短縮形の-Lと全く同じ動きをします。
「dereference(デリファレンス)」という言葉は、「参照を解除して中身を見る」という意味で、リンクの中身(つまりリンク先のファイル)を直接調べるという動作をします。
2. シンボリックリンクと--dereferenceの関係
まず、シンボリックリンクとは何かをおさらいしましょう。シンボリックリンクは、別のファイルやディレクトリへの「道しるべ」のようなものです。例えば、ある重要なファイルに別名でアクセスしたいときや、複数の場所から同じファイルを使いたいときに便利です。
statコマンドをそのままリンクに対して使うと、リンクそのものの情報しか表示されません。ですが--dereferenceを使うと、リンク先のファイルの情報を取得できます。
3. --dereferenceの基本的な使い方
まずは、シンボリックリンクを作ってみましょう。
ln -s /etc/passwd mylink
この状態で通常のstatコマンドを使うと、リンク自体の情報が表示されます。
stat mylink
File: mylink -> /etc/passwd
Size: 11 Blocks: 0 IO Block: 4096 symbolic link
Device: 802h/2050d Inode: 1234567 Links: 1
...
では、--dereferenceを使ってリンク先のファイル情報を表示してみましょう。
stat --dereference mylink
File: /etc/passwd
Size: 2813 Blocks: 8 IO Block: 4096 regular file
Device: 802h/2050d Inode: 2345678 Links: 1
...
このように、リンク先である/etc/passwdのファイル情報が表示されるのがわかります。
4. -Lとの違いは?
-Lと--dereferenceはまったく同じ動きをします。つまり、機能の違いはありません。
違いがあるのは表記方法だけです:
-L:短くて使いやすい(ショートオプション)--dereference:意味が明確でスクリプトなどで見やすい(ロングオプション)
どちらを使うかは、読みやすさや書きやすさの好みで決めて大丈夫です。
5. 組み合わせて便利に使う例
--formatオプションと一緒に使うと、リンク先の特定情報だけを表示することも可能です。
stat --dereference --format="%n: %s bytes" mylink
/etc/passwd: 2813 bytes
スクリプトでログをとったり、自動化処理をするときにとても便利です。
6. 他の似たコマンドとの違い
初心者にとってはls -lコマンドとの違いも気になるところです。
ls -lはファイルやリンクの属性(パーミッション、所有者など)を表示しますが、ファイルのサイズやタイムスタンプの詳細までは出ません。
ls -l mylink
lrwxrwxrwx 1 user user 11 Sep 16 10:00 mylink -> /etc/passwd
ls -lは見た目は分かりやすいですが、stat --dereferenceのような詳細情報は確認できません。ファイルの内容に関する正確な情報を調べたいときはstatを使いましょう。