Могут ли жесткие ссылки сломаться?

У меня такое чувство, что время от времени мои жесткие ссылки ломаются.

Я использую для синхронизации нескольких копий, создавая ссылки через, например:

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
}