Есть ли разница между жесткой связью с cp -l или ln?

15

Я реализую схему резервного копирования, используя rsync и жесткие ссылки. Я знаю, что могу использовать link-dest с rsync для создания жестких ссылок, но я видел упоминание об использовании "cp -l" до того, как "link-dest" был реализован в rsync. Другой известный мне метод жестких ссылок - «Ин».

Поэтому из любопытства мой вопрос: есть ли разница в создании жестких ссылок с использованием "cp -l" по сравнению с использованием "ln"?

twan163
источник
Ссылки неразличимы.
Ричи
Вы хотите сказать, что нет никакой разницы? Их можно использовать взаимозаменяемо?
twan163
Я сам провел небольшой тест, но с первого взгляда не увидел никакой разницы между ними.
twan163
cp: illegal option -- lВы уверены, что у cp есть опция l?
Том

Ответы:

16

Результаты обоих должны быть одинаковыми в том, что создается жесткая ссылка на исходный файл.

Разница заключается в предполагаемом использовании и, следовательно, в параметрах, доступных для каждой команды. Например, cpможет использовать рекурсию, тогда как lnне может:

cp -lr <src> <target>

создаст жесткие ссылки <target>на все файлы в <src>. (это создает новые каталоги; не ссылки). В результате структура дерева каталогов <target>будет выглядеть так же, как и в <src>. Он будет отличаться от того, cp -r <src> <target>что при использовании последних будут копироваться все файлы и папки, и каждый получит новые, inodeтогда как первый просто использует жесткие ссылки на файлы и, следовательно, просто увеличивает их Linksколичество.

При использовании для копирования одного файла, как в вашем примере, результаты будут идентичны.

garethTheRed
источник
если я правильно понимаю, "cp -lr" создаст жесткие ссылки для всех файлов, но если в <target> отсутствуют каталоги, они будут созданы как новые (т.е. нет жестких ссылок на каталоги в <target>)?
twan163
Да, это правильно. Вы не можете создавать жесткие ссылки на каталоги. Поэтому, чтобы сохранить структуру файла / каталога, он становится жесткой ссылкой на файлы внутри «настоящих» каталогов.
garethTheRed
относительно поведения для "cp -lr": жесткие ссылки для файлов ... новые каталоги для каталогов. кажется немного странным, но я думаю, что это «странное» поведение является побочным эффектом ограничений (не может иметь жестких ссылок на каталоги). ||| также для справки. Вот некоторые ссылки на информацию о жестких ссылках, не разрешенных для directoreis ref1 из askubuntu и ref2 из unix.stackexchange .
Тревор Бойд Смит
2

link использует наименьшее количество системных вызовов, затем ln и, наконец, cp :

$ strace link f.txt g.txt | wc --lines
282

$ strace ln --symbolic f.txt g.txt | wc --lines
311

$ strace ln f.txt g.txt | wc --lines
334

$ strace cp --symbolic f.txt g.txt | wc --lines
394

$ strace cp --link f.txt g.txt | wc --lines
410
Стивен Пенни
источник