по сабжу, в 2-х словах - представим файл, ну например, фильм, в виде массива данных на диске с определенными координатами.
имя этого файла - это тоже по сути файл, который содержит координаты основного массива данных (т.е. фильма).
симлинк - это файл, который ссылается на координаты имени основного файла.
жесткая ссылка (хардлинк) - это файл, который ссылается, в отличии от симлинка, не на имя основного файла, а на сам этот файл, т.е. на масссив данных.
Ещё надо иметь в виду, что архиваторы (по крайней мере некоторые, а именно zip), если им скормить символическую ссылку, архивируют именно ссылку, а не содержимое нужного файла.
Но с жёсткими ссылками всё разумеется отлично. Поэтому, когда нужно заархивировать какую-то папку, но не всю, а выбросив отдельные файлы оттуда, я делаю cp -rl папка/ /tmp/папка, удаляю из копии ненужные файлы и зипую.
Угу, и каким же магическим образом в Си при удалении последней жёсткой ссылки удалится содержимое файла? Тогда уж об указателях с подсчётом ссылок надо говорить (можно упомянуть Си++, std::auto_ptr и boost::shared_ptr и прочая).