cp --preserve=links
単独で使用すると、どのような効果があるかを理解しようとしています。
cp -L
テストした結果、通常のファイルをコピーしてシンボリックリンクを正常に逆参照しているように見えますが、単一のファイルで使用した場合と同じ効果があるようです。
これが本当ですか、それとも私が何かを見逃しているのでしょうか?
答え1
この--preserve=links
オプションはシンボリックリンクを参照せず、ハードリンクを参照します。cp
コピーされる2つ以上のファイル間の既存のハードリンクを維持する必要があります。
$ date > file1
$ ln file1 file2
$ ls -1i file1 file2
6034008 file1
6034008 file2
両方のソースファイルがハードリンクされており、対応するiNode番号が6034008であることがわかります。
$ mkdir dir1
$ cp file1 file2 dir1
$ ls -1i dir1
total 8
6035093 file1
6038175 file2
これで、コピーなしで--preserve=links
2つの異なるinode番号があることを確認できます。 2つの間にはもはやハードリンクはありません。
$ mkdir dir2
$ cp --preserve=links file1 file2 dir2
$ ls -1i dir2
total 8
6089617 file1
6089617 file2
これで、--preserve=links
両方のコピーはまだハードリンクされていますが、対応するinode番号は6089617であり、これは元のファイルのinode番号とは異なります(例とは逆cp --link
)。
答え2
マニュアルページをテストして読んだ後、いくつかの矛盾する情報が得られました。ちょうどいくつかのテストを行った結果、次のことがわかりました。
[root@el7-1 dest]# ls -l
total 0
lrwxrwxrwx. 1 root root 16 Aug 18 16:51 test1.txt -> ../src/test1.txt
次のコマンドはリンクを参照します。
cp test1.txt test2.txt
cp -L test1.txt test2.txt
cp --preserve=link test1.txt test2.txt
次のコマンドはシンボリックリンク自体をコピーします。
cp -P test1.txt test2.txt