タイプミスのためにこれが許可されていることがわかりましたln -s useless useless
。
その後、期待どおりにls useless/*
次のエラーメッセージが発生します。
ls: 'useless/*' にアクセスできません: シンボリックリンクレベルが多すぎます。
これが許可されln
受け入れられるようにするには、どのような状況でこれが必要ですか?
私はそれをテストしていますSLES 12.4
。
答え1
いいえ必要fr これは許可されます。シンボリックリンクが指しているものか、存在しないパス(またはシンボリックリンク自体)も関係ありません。
存在しないパスへのシンボリックリンクを無効にすることを想像できますが、いくつかの問題が発生する可能性があります。
- シンボリックリンクへの逆参照がないため、ファイルへのシンボリックリンクを作成してからファイルを削除してシンボリックリンクを残すことは依然として可能です。
- シンボリックリンクは、アンマウントされた他のファイルシステムを指すことがあります。
- シンボリックリンクを含むファイルシステムは複数のマウントポイントに同時にマウントできます。一部のシンボリックリンクは既存のパスを指し、他のシンボリックリンクは存在しないパスを指します。
- 絶対パスを指すシンボリックリンクは、一部のプロセスでは既存のパスを指し、他のプロセスでは吊り下げられたパスを指すことがあります。これは、プロセスごとにルートディレクトリが異なる可能性があるためです。
存在しないパスを指すシンボリックリンクがある場合は、シンボリックリンクの名前を自分を指すシンボリックリンクに変更できます。したがって、自分を指すシンボリックリンクを許可したくない場合は、名前の変更を制限する必要があります。
答え2
シンボルは多く、プログラム/オペレーティングシステム/人を表すことができるので、シンボルリンクは何でも構いません。実際の世界のシンボルと同様に、シンボルは何でも作成でき、何でもデザインできます。ターゲットがすでにシステムに存在するか、ユーザーが何らかの方法で自分の権限でそのターゲットにアクセスできるため、認証は不要です。
本当にこの行動を止めたい場合。自分を指していることを確認し、その場合はエラーを返し、そうでない場合はリンクを生成するスクリプトを作成できます。スクリプトを生成した後、スクリプトを指すlnのエイリアスを生成できます。
次のように見えます。
#!/bin/bash
if [ "$1" == "$2" ]
then
echo "ERROR pointing to self!"
else
ln "$1" "$2"
fi