2013-11-19 2 views
3

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

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

link ~/work/genDocs/bibs/SKM.bib SKM.bib 

После того, как некоторое время я признаю, что синхронизация не произошло, и я «обновить» ссылку. Лично я не думаю, что это должно произойти, но может быть, что такие ссылки нарушаются?

Причины я могу думать:

систем
  • обновляет
  • интерференции с контролем версий (я использую Git)

ответ

9

Это может произойти, если исходный файл (~/work/genDocs/bibs/SKM.bib) воссоздан вместо будучи измененным на месте. Будет создан новый индекс, но ваша ссылка будет по-прежнему указывать на старый индекс. Вы можете исправить проблему, создав символические ссылки с ln -s вместо жестких ссылок с link. См. What is the difference between a symbolic link and a hard link?

+0

+1 Например, 'sed -i' создает новый измененный файл, а затем заменяет его оригиналом. – chepner

1

Во избежание изменений inode при изменении содержимого файлов имеется текстовый редактор Unix ed.

Хотя (почти) все ed реализациях использование временных файлов, а также (см "In-place" editing of files), ed - в отличие от sed -i (как уже указывал chepner) - изменяет файлы «на месте», не меняя соответствующие дескрипторы (см Editing files with the ed text editor from scripts).

# 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 
} 
Смежные вопросы