「/」に続くソフトリンクを誤って移動するとどうなりますか?

「/」に続くソフトリンクを誤って移動するとどうなりますか?

現在のディレクトリへのソフトリンクを作成しました。

$ ln -s "$PWD" math

その後、別のディレクトリに移動したいと思います。

$ mv math/ ~/dirlinks/maths/

それから私はそうしなければならないことに気づきました。

$ mv math ~/dirlinks/maths/

したがって、プロセスが完了する前にCtrl-cを押してプロセスをキャンセルします。

math下にdirがあることがわかりましたが、下のファイルも下に表示されるのを見ると、下のファイルがそこにコピーされた~/dirlinks/maths/ようです。しかし、そうではないので理解できません。走るとどうなりますか?.~/dirlinks/maths/math~/dirlinks/maths/math.mvcpmv math/ ~/dirlinks/maths/

ありがとうございます。

答え1

最初のコマンドが実行する作業を見てみましょう。math現在のディレクトリの絶対パスを指すシンボリックリンクを現在のディレクトリに作成します。慎重に確認してみましょう:

user@host:/free$ ls -al /free
total 4
drwxrwxrwt  2 root root   40 Oct 14 10:29 .
drwxr-xr-x 24 root root 4096 Oct  1 22:28 ..
user@host:/free$ ln -vs /free math
‘math’ -> ‘/free’
user@host:/free$ ls -al /free
total 4
drwxrwxrwt  2 root root    60 Oct 14 10:29 .
drwxr-xr-x 24 root root  4096 Oct  1 22:28 ..
lrwxrwxrwx  1 user users    5 Oct 14 10:29 math -> /free

いくつかのファイルを追加して$PWD移動を実行すると、次のようになります。

user@host:/free$ touch a b
user@host:/free$ mv -vi math/ /tmp/Q
‘math/’ -> ‘/tmp/Q’
‘math/math’ -> ‘/tmp/Q/math’
‘math/b’ -> ‘/tmp/Q/b’
‘math/a’ -> ‘/tmp/Q/a’
removed ‘math/math’
removed ‘math/b’
removed ‘math/a’
mv: cannot remove ‘math/’: No such file or directory

デフォルトでは、指すディレクトリ全体をターゲットに移動しますmath。現在のディレクトリを指すので、指定した場所に正確に移動します。目的地のすぐ上にある場合、興味深い屋根ふきの問題が発生する可能性があります。

関連情報