「too many levels of symbolic links」というエラーメッセージについて

Bash,CentOS,Cygwin,Linux,Ubuntu

はじめに

僕は出会ったことはないのですが、 「too many levels of symbolic links」 というエラーメッセージに遭遇したという話を聞いて再現方法を調べてみました。

検証環境

$ uname -moi
x86_64 MacBookPro11,4 Darwin

$ bash -version | head -n 1
GNU bash, バージョン 5.0.16(1)-release (x86_64-apple-darwin18.7.0)

エラーを再現させてみる

早速再現させてみます。
通常はこんなことは起きないとは思いますが、 自分自身を参照するシンボリックリンク hoge を作成します。

$ ln -s hoge hoge

$ ls -l
total 0
lrwxrwxrwx 1 root root 4 Apr  7 14:33 hoge -> hoge

このシンボリックリンク hoge をフォルダとみなして、 hoge/x というファイルを作成してみます。

$ touch hoge/x
touch: cannot touch 'hoge/x': Too many levels of symbolic links

エラーが再現しました。

touch コマンドでなくても同じエラーメッセージが発生します。

$ echo test > hoge/y
bash: hoge/y: Too many levels of symbolic links

$ mkdir hoge/z
mkdir: cannot create directory 'hoge/z': Too many levels of symbolic links

原因は「循環したシンボリックリンク」

こちらのエラーメッセージは、シンボリックリンクの循環が原因で発生するようです。
先の例では、 hoge シンボリックリンクは自分自身を参照している形になりますが、このようなシンボリックリンクに対してファイル(ディレクトリもLinuxではファイルです)を作成しようとした場合にエラーが発生します。

以下のような三すくみ状態のシンボリックリンクでもエラーは発生します。

$ ln -s a b

$ ln -s b c

$ ln -s c a

$ touch a/test
touch: cannot touch 'a/test': Too many levels of symbolic links

ひとこと

「too many levels of symbolic links」 というエラーメッセージにお困りの場合に参考になれば幸いです。