Могут ли жесткие ссылки сломаться?
У меня такое чувство, что время от времени мои жесткие ссылки ломаются.
Я использую для синхронизации нескольких копий, создавая ссылки через, например:
link ~/work/genDocs/bibs/SKM.bib SKM.bib
время от времени я признаю, что синхронизация не состоялась, и я "обновляю" ссылку. Лично я не думаю, что это должно произойти, но может ли быть, что такие ссылки нарушаются?
причины, которые я могу придумать:
- обновления системы
- взаимодействие с контроль версий (я использую git)
2 ответов
Это может произойти, если исходный файл (~/work/genDocs/bibs/SKM.bib
) воссоздается вместо того, чтобы быть изменены на месте. Будет создан новый индекс, но ваша ссылка все равно будет указывать на старый индекс. Вы можете устранить проблему, создав символические ссылки с помощью ln -s
вместо жестких ссылок с link
. См.в чем разница между символической ссылкой и жесткой ссылкой?
чтобы избежать изменений индекса при изменении содержимого файлов, есть редактор текстовых файлов Unix ed
.
хотя (почти) все ed
реализации также используют временные файлы (см. "на месте" редактирование файлов), ed
в отличие от sed -i
(как уже указывал чепнер) - изменяет файлы "на месте" без изменения их соответствующих индексов (см. редактирование файлов с помощью текстового редактора ed из скриптов).
# sed & ed example to demonstrate whether inode is being changed or preserved
# sed
# inode is changed
{
rm -Pfv testfile.txt
echo a > testfile.txt
ls -i testfile.txt
sed -i -e 's/a/A/' testfile.txt
ls -i testfile.txt
}
# ed
# inode is not changed
{
rm -Pfv testfile.txt
echo a > testfile.txt
ls -i testfile.txt
printf '%s\n' 'H' ',s/a/A/' 'wq' | ed -s testfile.txt
ls -i testfile.txt
}
# >
# redirection operator preserves inode (on Mac OS X 10.6.8)
{
rm -Pfv testfile.txt
echo a > testfile.txt
ls -i testfile.txt
echo A > testfile.txt
ls -i testfile.txt
}