我感觉我的硬链接不时会被打破。
我通过创建链接来同步几个副本,例如:
link ~/work/genDocs/bibs/SKM.bib SKM.bib
有一段时间我发现同步没有发生,我“更新”链接。就个人而言,我不认为,这应该发生,但可能是这样的链接被打破了吗?
我能想到的原因:
答案 0 :(得分:11)
如果重新创建原始文件(~/work/genDocs/bibs/SKM.bib
)而不是就地修改,则会发生这种情况。将创建一个新的inode,但您的链接仍将指向旧的inode。您可以通过使用ln -s
创建符号链接而不是使用link
的硬链接来解决此问题。见What is the difference between a symbolic link and a hard link?
答案 1 :(得分:1)
为了避免在修改文件内容时更改inode,可以使用Unix文本文件编辑器ed
。
虽然(几乎)所有ed
实现也使用临时文件(请参阅"In-place" editing of files),ed
- 与sed -i
不同(正如chepner已经指出的那样) - “就地”修改文件而不更改其各自的inode(请参阅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
}