Файлови връзки (Hard and Symbolic Links)
3. Сравнение между Symlinks and Hard Links
Символична файлова връзка (Symbolic link или symlink) е псевдо-файл, който представлява алтернативно име за друг файл или директория. Съдържанието на symlink е реалното име на сочения файл.
При използване на symlink в команда, ядрото замества symlink с неговото съдържание преди изпълнението на командата.
Този механизъм позволява един файл да бъде на едно място, а да претендира, че се намира на други места. Например да се разпространи информацията от една индивидуална файлова система върху различни дискови дялове.
Командата ln -s се използва за създаване на символична връзка със синтаксис първи параметър- реалното име, а втори – създаваното:
$ ln -s real-file file-link
$ ln -s real-dir dir-link
Командата ls -l показва символичната файлова връзка:
Пример:
$mkdir testd създаване на директория
$cd testd
$echo test information >file_org създаване на оригиналния файл
$ln -s file_org file_ln създава символичната връзка
$ls -l file_ln
За разлика от символичните връзки, които сочат към името на друг файл, „твърдите връзки“ се насочват към inode на съществуващ файл. По този начин различни имена на файлове се свързват към един и същ inode.
Една илюстрация от wikipedia
Командата е същата както при символичните връзки но без опцията –s:
$ ln real-file file-hrd_link
Като продължение на горния пример:
$echo test information2 >file_org2 създаване на оригиналния файл
$ln file_org2 file_hrdl създава символичната връзка
$ls -i file_hrdl проверка на inode
$ls -i file_org2 същият inode
$stat file_org2 обърнете внимание на броя на връзките в inode
Symlinks |
Hard Links |
Symlinks са съществено различни от нормалните файлове и ясно могат да бъдат различени от файловете към които сочат
Symlinks могат да сочат към всички видове файлове (нормални файлове, директории, специални файлове, Symlinks …)
Symlinks са насочени към имената на файловете и затова могат да сочат към файлове от различни индивидуални файлови системи.
Ако бъде преименуван, преместен или изтрит оригиналния файл Symlink става невалидна (broken)
Symlinks могат да имат различни права на достъп от файловете към които сочат |
Множеството Hard Links стил имена на един и същи файл са неразличими. Понятието Hard Link е до голяма степен условно
Hard Links не могат да сочат към директории (и в някои не Linux системи към Symlinks)
Hard Links работят с inode и са валидни само в рамките на една индивидуална файлова система.
Преименуването преместването или изтриването на „оригиналния“ файл няма ефект върху Hard Links файловете.
Промяната на правата на достъп на файл променя правата на достъп на всички негови Hard Links. |
Повечето команди работят с файловите връзки по същия начин, както с нормалните файлове, като някои имат опции, които показват дали Symlink трябва да бъдат следвани. Има обаче особености за някои команди.
Архивиращата tar команда отчита ако в архива има два или повече Hard Links файла и съхранява тази информация правилно (без дублиране на информацията от файла). По подразбиране тя съхранява Symlinks в архива. Ако бъде използвана с опция -h (--dereference), тя съхранява не Symlink, а сочения файл в архива.
Командата cp по подразбиране игнорира файловите връзки. За да бъдат запазени се използва опция -d (--no-dereference). При рекурсивно копиране за да бъдат запазени Symlinks се използва опцията -R (--recursive). Опцията -a (--archive) включва и двете опции -d и -R.