hardlink и symlink в UNIX
Table of Contents
1 Отличия hardlink от symlink
- hardlink
- жёсткая ссылка, по сути этот копия того же файла, на который она ссылается.
- symlink
- мягкая ссылка, содержит путь до файла на который она ссылается.
- inode
- объект файловой системы, содержащий информацию о владельце файла, группе, правах доступа, размере, типе, времени модификации (mtime) и доступа к файлу (atime), времени модификации индексного дескриптора (ctime) и счётчик жёстких ссылок на файл. Каждый inode имеет номер, присваиваемый ему файловой системой в момент её создания.
ls -lih *.org
431974 -rw-rw-r-- 1 pimiento pimiento 6,7K Oct 25 23:01 cast.org 448780 -rw-r--r-- 1 pimiento pimiento 19K Oct 25 21:00 c_structures.org 449013 -rw-r--r-- 1 pimiento pimiento 3,3K Oct 25 22:00 c_varargs.org 449015 -rw-r--r-- 1 pimiento pimiento 8,3K Oct 25 22:00 decorators.org 449023 -rw-r--r-- 1 pimiento pimiento 2,8K Oct 25 22:06 fish_rat_or_bird.org 449028 -rw-r--r-- 1 pimiento pimiento 24K Oct 25 23:10 linkers.org 449029 -rw-r--r-- 1 pimiento pimiento 2,5K Oct 25 22:08 pdftk_and_djvu.org 449030 -rw-r--r-- 1 pimiento pimiento 7,9K Oct 25 22:09 processes.org 449032 -rw-r--r-- 1 pimiento pimiento 3,3K Oct 25 22:10 python_collections.org 449034 -rw-r--r-- 1 pimiento pimiento 14K Oct 25 22:10 python_gc.org 449036 -rw-r--r-- 1 pimiento pimiento 8,3K Oct 25 22:10 python_gil.org 449038 -rw-r--r-- 1 pimiento pimiento 5,9K Oct 25 22:11 python_graphs.org 475041 -rw-r--r-- 1 pimiento pimiento 29 Oct 25 17:10 python_logging.org 449040 -rw-r--r-- 1 pimiento pimiento 5,4K Oct 25 22:11 python_os.org 453615 -rw-rw-r-- 1 pimiento pimiento 5,6K Oct 26 00:03 unix_hardlink_symlink.org
Первая колонка отображает номер inode. Далее указаны права доступа, счётчик hardlink-ов на этот файл и т.д.
Создадим, например, жёсткую ссылку на один из файлов:
ln unix_hardlink_symlink.org unix_hardlink_symlink.hardlink.org ls -lih |grep 1700689
Таким образом счётчик ссылок показывает нам, что один и тот же файл хранится под двумя разными именами.
Мягкая ссылка создаётся с помощью той же команды ln, но с ключом -s:
ln -s unix_hardlink_symlink.org unix_hardlink_symlink.symlink.org ls -lih |grep unix_hardlink_symlink
453615 -rw-rw-r-- 2 pimiento pimiento 5,6K Oct 26 00:03 unix_hardlink_symlink.hardlink.org 453617 -rw-rw-r-- 1 pimiento pimiento 18K Oct 26 00:03 unix_hardlink_symlink.html 453615 -rw-rw-r-- 2 pimiento pimiento 5,6K Oct 26 00:03 unix_hardlink_symlink.org 449171 lrwxrwxrwx 1 pimiento pimiento 25 Oct 26 00:03 unix_hardlink_symlink.symlink.org -> unix_hardlink_symlink.org
Мы создали новый объект файловой системы, который указывает на уже существующий файл. В правах доступа появилось указание что новый объект файловой системы имеет тип l — symbolic link. Необходимо отметить, что inode-номера для оригинального файла и для symlink-а различаются, так как это два независимых файла для файловой системы.
hardlink не может указывать на файл в другой ФС, так как inode может принадлежать только одной ФС, symlink — может.
При удалении hardlink-а файл будет существовать до тех пор, пока существует хотя бы один hardlink на него, но может менять местоположение, если был удалён оригинальный фал и остался hardlink на него в другом каталоге. При удалении же оригинального файла для symlink — файл-ссылка просто станет нерабочей.
С помощью hardlink нельзя создать ссылку на каталог, но можно с помощью symlink.
rm -f unix_hardlink_symlink.symlink.org rm -f unix_hardlink_symlink.hardlink.org