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

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

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

ディレクトリがあり(パスを無視しよう)、名前を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

おすすめ記事