UP | HOME

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

Мы создали новый объект файловой системы, который указывает на уже существующий файл. В правах доступа появилось указание что новый объект файловой системы имеет тип lsymbolic 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

Author: Pavel Vavilin

Created: 2017-10-26 Thu 00:03

Validate