シンボリックリンクの不確実性

シンボリックリンクの不確実性

クイック検索を実行しましたが、このシナリオに関する特定の情報が見つかりませんでした。

ディレクトリがあり(パスを無視しよう)、名前をAに指定するとします。これで、ディレクトリA(Sと呼ばれる)を指すシンボリックリンクを作成します。これで、次のものが必要です。

S -> A

別のディレクトリがある場合は、Bと言って次のことをしましょう。

cp -r B/ A/

シンボリックリンクは維持されますか、それとも壊れますか? bashコマンドを使わずにpython distutils.dir_utils.copytree(B、A)を使うとしましょう。シンボリックリンクSはまだAを指していますか? AはAで残るのか、それともBになるのか?

答え1

コマンドラインからこれをかなり簡単にテストできます。

# set up test
mkdir A
mkdir B
echo "this is A" > A/test.txt
echo "this is B" > B/test.txt
echo "this is A" > A/old.txt
echo "this is B" > B/new.txt

# contents of A change on copy
ln -s A S
cat S/test.txt
cp -r B/ A/
cat S/test.txt
cat A/test.txt

# S still points to A
ls -l S/
ls -l A/
ls -l B/

Bのファイルが示すように、Aのファイルを上書きすると、AとSの両方に影響します。ただし、Aからファイルをコピーすると、AとBの間に一意の名前を持つファイルが残ります。SはまだAを指していますが、Aは変更されました。

シンボリックリンクはパスを指します。たとえば、A を削除して S を保持する場合、S は存在しなくなった A を参照し続けます。

rm -rf A/
ls -l S/

Aという名前のテキストファイルを作成すると、SはまだパスAを指すため、テキストファイルを指します。 KusalanandaとG-Manが言ったように、AにすることはSには影響しません。または、より具体的にあなたがAにしたことは、SがAを指しているという事実には影響しません。

echo "new text file" > A
cat S

答え2

シンボリックリンクが指すパスですS。コマンドが実行する宛先にファイルをコピーしても、このリンクには影響しません。AAA

何らかの理由で名前を変更または削除すると、AシンボリックリンクがS壊れて使用できなくなります。その後、A以前のディレクトリと同じ場所に呼び出される別のディレクトリ(新しいディレクトリなど)を作成すると、そのAコンテンツSへのシンボリックリンクが作成されます。

シンボリックリンクはSディレクトリとは全く別個ですA。それ自体は、それが存在するのか、ファイルなのか、ディレクトリなのか、それとも別のものなのかはS関係ありません。Aあなたが何をしてもAいいえ影響S

シンボリックリンクの逆参照動作S(シンボリックリンクの使用、例:実行)は、その内容(存在する場合、ディレクトリの場合など)ls Sによって結果が異なります。A

答え3

S.txt(別のディレクトリに)というファイルがあると想像してみてください。

あなたが探している情報はディレクトリにありますA

ディレクトリに実行する操作の影響を受けませんA

シンボリックリンクはこれに非常に似ています。シンボリックリンクは、ターゲットに対して実行される操作の影響を受けません。

関連情報