cp --preserve=links に関する情報

cp --preserve=links に関する情報

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=links2つの異なる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 

関連情報