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が適しています。
まとめ
ここまで、stat -Lオプションの使い方を中心に、シンボリックリンクと実体ファイルの関係について丁寧に確認してきました。
Linux環境では、設定ファイルやログファイル、共有ディレクトリなどでシンボリックリンクが多用されます。
そのため、リンクそのものの情報を見たいのか、それともリンク先の実際のファイル情報を見たいのかを正しく使い分けることが、日常的な運用やトラブルシューティングではとても重要になります。
通常のstatコマンドは、シンボリックリンクを指定した場合、リンク自体のサイズや更新日時といった情報を表示します。
これは「案内標識そのもの」を調べるイメージです。一方でstat -Lを使うと、その案内標識をたどり、リンク先に存在する本物のファイルのサイズ、最終更新日時、inode番号などの詳細情報を取得できます。
ファイルの実体がいつ変更されたのか、どのくらいの容量を使っているのかを正確に知りたい場合には、-Lオプションが欠かせません。
また、壊れたシンボリックリンクに対してstat -Lを実行するとエラーになる点も、実務では重要な判断材料になります。
これは、リンク先が存在しないことを即座に検知できるため、設定ミスやファイル削除後の不整合を見つける手助けになります。
特にサーバー管理やシステム保守の現場では、「リンクは存在するが中身がない」という状態はよくあるため、stat -Lを使った確認は覚えておくと役立ちます。
さらに、--formatオプションと組み合わせることで、スクリプト向けに必要な情報だけを抽出することも可能です。
ファイルサイズだけを一覧で取得したり、ログ出力用にファイル名と更新日時だけを表示したりと、応用範囲は広がります。
単純なコマンド確認だけでなく、自動化や運用スクリプトの中でも活躍するのがstat -Lの強みと言えるでしょう。
まとめとしての確認用サンプル
最後に、リンクとリンク先の違いを改めて確認するための簡単なサンプルを見ておきましょう。 ここでは一般ユーザーとして実行しています。
ln -s /etc/hosts checklink
stat checklink
File: checklink -> /etc/hosts
Size: 11 Blocks: 0 IO Block: 4096 symbolic link
上記の結果では、checklinkというリンク自体の情報が表示されています。
次に、-Lオプションを付けてリンク先を確認します。
stat -L checklink
File: /etc/hosts
Size: 230 Blocks: 8 IO Block: 4096 regular file
このように、同じパスを指定しても、オプションの有無によって取得できる情報が大きく変わることが分かります。 この違いを理解しているかどうかで、Linuxコマンドの理解度は一段階上がると言っても過言ではありません。
生徒
「最初はstatとstat -Lの違いがよく分からなかったんですが、
リンクそのものを見るか、リンク先の実体を見るかの違いだと考えると、かなりスッと理解できました。」
先生
「その理解で大丈夫だよ。特に設定ファイルやログ周りではシンボリックリンクが多いから、
実体ファイルの情報を確認したい場面では自然と-Lを使うようになるはずだ。」
生徒
「壊れたリンクでエラーが出るのも、トラブルの発見に使えそうですね。 何となくコマンドを打つより、意味を考えながら使えるようになった気がします。」
先生
「それが一番大切だね。コマンドの結果を見て『なぜこうなるのか』を考える習慣がつくと、 Linux操作全体の理解も自然と深まっていくよ。」