stat -Lオプションの使い方を解説|シンボリックリンクをたどってファイル情報を確認しよう
生徒
「先生、statコマンドでリンクファイルの情報を見ると、リンク先じゃなくてリンクそのものの情報が表示されますよね?」
先生
「そうだね。でも、-Lオプションを使えば、リンクの先にあるファイルの情報を直接確認できるんだよ。」
生徒
「なるほど!リンクの中身をたどって、元のファイルの情報が知りたいときに便利なんですね。」
先生
「そのとおり!それではstat -Lの基本的な使い方を紹介していこう。」
1. stat -Lとは?
stat -Lオプションは、シンボリックリンク(symbolic link)の先にある実際のファイルの情報を表示するためのオプションです。
シンボリックリンクとは、別のファイルやディレクトリへの「案内標識」のようなもので、リンク先の場所にアクセスするための目印です。
Linuxでは、通常のstatコマンドでシンボリックリンクを指定すると、リンク自体の情報が表示されます。しかし-Lオプションを付けると、リンクの先にあるファイルの情報を直接取得できます。
2. シンボリックリンクを使った基本例
まず、通常のstatコマンドでシンボリックリンクの情報を表示してみましょう。
ln -s /etc/hosts mylink
stat mylink
File: mylink -> /etc/hosts
Size: 11 Blocks: 0 IO Block: 4096 symbolic link
Device: 802h/2050d Inode: 1234567 Links: 1
Access: 2025-09-16 10:00:00.000000000 +0900
Modify: 2025-09-16 09:50:00.000000000 +0900
Change: 2025-09-16 09:51:00.000000000 +0900
このように、statではmylinkというリンクそのものの情報が表示されます。リンク先の中身は見られません。
次に、-Lオプションを使って、リンク先(この場合/etc/hosts)のファイル情報を表示してみましょう。
stat -L mylink
File: /etc/hosts
Size: 230 Blocks: 8 IO Block: 4096 regular file
Device: 802h/2050d Inode: 5678901 Links: 1
Access: 2025-09-16 09:59:00.000000000 +0900
Modify: 2025-08-01 10:00:00.000000000 +0900
Change: 2025-08-01 10:01:00.000000000 +0900
このように、リンクではなくリンク先のファイルの情報を直接確認することができました。
3. statとstat -Lの違いを比較しよう
初心者が混乱しやすいポイントとして、「statとstat -Lって何が違うの?」という疑問があります。以下のように覚えると良いでしょう:
- stat:リンクの情報(案内標識そのもの)を表示
- stat -L:リンク先の実際のファイルの情報を表示
つまり、ファイルの中身や実体の更新日時などを確認したい場合には-Lオプションが必要です。
4. 絶対パス・相対パスでの挙動の違い
リンクの種類には「絶対パス」と「相対パス」があり、stat -Lはどちらでも有効です。ただし、リンクが壊れている(先のファイルが存在しない)場合にはエラーになります。
ln -s /nonexistent target
stat -L target
stat: cannot statx 'target': No such file or directory
このように、リンク先が消えていたり存在しないと、stat -Lではエラーが出る点も覚えておきましょう。
5. 他のオプションとの組み合わせ
stat -Lは、他のオプションと組み合わせて使うことも可能です。たとえば、--formatオプションで表示内容をカスタマイズできます。
stat -L --format="%n: %s bytes" mylink
/etc/hosts: 230 bytes
このように、リンク先のファイル名とサイズだけを表示させるといった使い方もできます。スクリプト内での活用やログ用途にも便利です。
6. ls -lとの違いは?
ls -lコマンドでもリンクとそのリンク先の関係をある程度は確認できます。
ls -l mylink
lrwxrwxrwx 1 user user 11 Sep 16 10:00 mylink -> /etc/hosts
しかし、この情報ではファイルの詳細なサイズや最終更新日時までは確認できません。正確なファイル情報を知りたい場合にはstat -Lが適しています。