Файлови връзки (Hard and Symbolic Links)

 

1.       Symbolic Links. 1

2.       Hard Links. 1

3.       Сравнение между Symlinks and Hard Links. 1

4.       Команди и файлови връзки. 1

5.       Упражнения. 1

 

 

     1.     Symbolic 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

 

     2.     Hard Links

За разлика от символичните връзки, които сочат към името на друг файл, „твърдите връзки“ се насочват към 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

     3.     Сравнение между Symlinks and Hard Links

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.

     4.     Команди и файлови връзки

Повечето команди работят с файловите връзки по същия начин, както с нормалните файлове, като някои имат опции, които показват дали Symlink трябва да бъдат следвани. Има обаче особености за някои команди.

Архивиращата tar команда отчита ако в архива има два или повече Hard Links файла и съхранява тази информация правилно (без дублиране на информацията от файла). По подразбиране тя съхранява Symlinks в архива. Ако бъде използвана с опция  -h  (--dereference), тя съхранява не Symlink, а сочения файл в архива.

Командата cp по подразбиране игнорира файловите връзки. За да бъдат запазени се използва опция -d (--no-dereference). При рекурсивно копиране за да бъдат запазени Symlinks се използва опцията -R (--recursive). Опцията -a (--archive) включва и двете опции  -d и -R.

     5.     Упражнения