テックブログ

技術ネタ

シンボリックリンクによる多重階層エラーにはまった話

皆さんこんにちは。
技術部のkkikuchiです。

久しぶりにブログを書くことになり、何を題材にしようかなあと悩んでいたのですが、
今回はシンボリックリンクの多重階層エラーにはまった話について書かせてもらいます。

■経緯

存在しないディレクトリにリンクを作成されている事に気付かず、そのディレクトリをchownコマンドで所有者・グループを変更しようとしたところ、
多重階層エラーが出たが、オプション -hを付ける事で解消

■前提

OS : CentOS Linux release 7.9.2009 (Core)
リンク先ディレクトリ :/home/kkikuchi/public
リンク作成ターゲット(存在しない):/home/kkikuchi/public/none

■多重階層エラーについて

実行コマンドが参照する先が存在しない際に、「シンボリックリンクの階層が多すぎます」
とのメッセージが出力される事。

■存在しないターゲット(/home/kkikuchi/public/none)を /home/kkikuchi/public へリンクさせる

①まずリンク作成ターゲットが存在しない事を確認

[root@kkikuchi2 ~]# ll /home/kkikuchi/public/none /home/kkikuchi/public
ls: /home/kkikuchi/public/none にアクセスできません: そのようなファイルやディレクトリはありません
/home/kkikuchi/public:
合計 0

②リンク作成

[root@kkikuchi2 ~]# ln -s /home/kkikuchi/public/none /home/kkikuchi/public
[root@kkikuchi2 ~]#

■リンクが貼られた事を確認

[root@kkikuchi2 ~]# ll /home/kkikuchi/public
合計 0
lrwxrwxrwx. 1 root root 26 6月 8 22:36 none -> /home/kkikuchi/public/none

■chownコマンドでkkikuchi:kkikuchi ユーザーに変更してみる

[root@kkikuchi2 ~]# chown kkikuchi:kkikuchi /home/kkikuchi/public/none
chown: `/home/kkikuchi/public/none' を参照できません: シンボリックリンクの階層が多すぎます

→多重階層エラーが出る

ここで、オプション -h を指定して再度権限変更することで
所有者変更が出来る。
まずchownコマンドのオプションについて。主に使用するものは以下となっております。

■chownコマンドのオプションについて

-h 指定したファイルがシンボリックリンクの場合、シンボリックリンクのみ所有権を変更
-c 所有権が変更された場合、その結果を表示
-R 指定したディレクトリとそのディレクトリ以下のファイルやディレクトリの所有権を再帰的に変更
-v 所有者変更の状況を表示 ※変更が無い場合は「変更が保留されました」等のメッセージが出力される

■オプション -h を指定して再度権限変更

[root@kkikuchi2 ~]# chown -h kkikuchi:kkikuchi /home/kkikuchi/public/none
[root@kkikuchi2 ~]#
[root@kkikuchi2 ~]# ll /home/kkikuchi/public/none
lrwxrwxrwx. 1 kkikuchi kkikuchi 26 6月 8 22:36 /home/kkikuchi/public/none -> /home/kkikuchi/public/none

→変更出来た。

大前提としてシンボリックリンクを正しいファイル・ディレクトリに作成することが大切ですが、
もし同じ状況になったら覚えておきたいですね。

実績数30,000件!
サーバーやネットワークなど
ITインフラのことならネットアシストへ、
お気軽にご相談ください