Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I faced a little strange behavior, while using hard links. From Terminal, I create a text file 1.txt and a hard link "to this file"

nano 1.txt
mkdir dir
ln 1.txt ./dir/

I check the resulting hard link and see that its contents are the same as of the original file.

less ./dir/1.txt

I change the initial file ...

nano 1.txt

... and see, that changes was reflected in hard-link

less ./dir/1.txt

I change content of hard-link (more correct, of course - file, being referenced with hard-link) ...

nano ./dir/1.txt

... and see, that changes are reflected in initial file

less 1.txt

Until now, all going well...

Now, I close Terminal and start playing with created files (1.txt and ./dir/1.txt) from Finder. When I change on this two files with TextEdit, changes are not reflected in another file.

The hard link is now broken. What's going on?

share|improve this question

migrated from May 9 '10 at 21:50

This question came from our site for professional and enthusiast programmers.

up vote 14 down vote accepted

It's not about the GUI, it's specifically about TextEdit's strategy for saving changes: it does not write in place on the existing file, but rather it first writes a new one, and when that's completed it removes the old one and renames the new one to the old one's names. Many editors (programs that conceptually alter a file "in place"), GUI or not, use this strategy for safety purposes (you won't lose both the new and old versions if there's a crash at a very unfortunate moment just when the writing is taking place), but as you noticed it "breaks" hard links.

One example of a non-interactive, non-GUI editor program with this behavior is perl with the -i ("in-place edits") command-line option switch...:

$ touch za.txt
$ ln za.txt zo.txt
$ echo ciao >za.txt
$ cat zo.txt 
$ perl -i -p -e 's/a/b/' zo.txt
$ cat zo.txt
$ cat za.txt
share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.