2010-05-11 2 views
8

Я просто хотел уточнить, является ли жесткая/символическая ссылка фактически файлом, который создан ??Жесткая ссылка и Символические ссылки в Unix

я выполнил команду:

ln source hardlink 
ln -s source softlink 

- Команда Ls показывает эти 2 ссылки в виде файла.

Так что мой запрос: ln/ln -s на самом деле создать файл?

С уважением, darkie15

ответ

13

Да, и нет :-)

В UNIX, содержимое файла отличаются от записей каталога для этого файла. Вы можете иметь несколько записей в каталоге, указывающих на одно и то же содержимое (посмотрите, как это работает) inode, и вот этот сложный бит:

Все эти записи в каталоге равны. Несмотря на то, что, возможно, сначала было создано, в этом нет ничего особенного. Если вы удалите его, содержимое не исчезнет, ​​просто запись в каталоге. Содержимое исчезнет после того, как inode имеет нулевые записи в каталоге, указывающие на него (и все процессы закрывают файл). Я уже был укушен, пытаясь очистить дисковое пространство, удаляя файлы журнала только, чтобы найти это, потому что у процесса все еще есть файл open, содержимое файла не восстанавливается, хотя никакие записи в каталоге не указывают на них).

Это для жестких ссылок.

Сопряженные ссылки немного сложнее. Они создают «файл» рода (отдельный индексный дескриптор), содержащий путь к целевому файлу. И те ссылки не равный. Удаление оригинала оставит вас с мягкой ссылкой, нигде не указывая.

Поскольку иноды уникальны в данной файловой системе, жесткие ссылки не могут ссылаться на данные в другой файловой системе.

Сопряженные ссылки не имеют этого ограничения, так как они сохраняют путь к целевому файлу, а не его inode.

Следующая запись может помочь:

$ echo hello >f1 
$ ln f1 f2 
$ ln -s f1 f3 
$ ls -ial f* 
    7385 -rw-r--r-- 2 pax None 6 May 11 14:09 f1 
    7385 -rw-r--r-- 2 pax None 6 May 11 14:09 f2 
    4672 lrwxrwxrwx 1 pax None 6 May 11 14:09 f3 -> f1 
$ cat f1 
    hello 
$ cat f2 
    hello 
$ cat f3 
    hello 
$ rm f1 
$ ls -ial f* 
    7385 -rw-r--r-- 2 pax None 6 May 11 14:09 f2 
    4672 lrwxrwxrwx 1 pax None 6 May 11 14:09 f3 -> f1 
$ cat f1 
    cat: f1: No such file or directory 
$ cat f2 
    hello 
$ cat f3 
    cat: f3: No such file or directory 

Я использовал только последние четыре цифры номера инода сохранить запись коротких (и не ударил вас с номерами индексных дескрипторов, как 43910096366994672), но вы можете увидеть что f1 и f2 имеют одинаковый индекс, тогда как f3 отличается.Вы также можете увидеть, что содержимое файла, созданного изначально как f1, сохранило его удаление, потому что f2 все еще ссылается на него.

Однако, поскольку f3 ссылается на имя f1, а не на его inode, вы получаете сообщение об ошибке, пытающейся его использовать.


Помимо: Вы должны любить его, когда UNIX игрушки с вами, как это:

$ ls f* 
    f2 f3 
$ cat f3 # What the ...? 
    cat: f3: No such file or directory 

Почти столько же удовольствия, как создать файл с именем пространствазабойх, а затем наблюдая, как кто-то пытается его удалить :-)

+0

'rm \ '? Я не вижу, как бы пространство backspace (^?) Сделало бы его более сложным :) – Unode

3

Ни один создает файл.

Файл на диске идентифицируется «inode». Каталоги отображают имена файлов в inodes. Жесткая ссылка означает «создать новое имя файла в этом каталоге, которое указывает на тот же индекс, что и файл, который я называю».

Символическая ссылка означает «создать новое имя файла в этом каталоге, указывающее на любой инодекс, на который указывают другие файлы».

Как отмечает собеседник, символическая ссылка создает файл с именем целевой ссылки, но вы не должны обращать на это внимание. Это специальный файл, который является ничем из вашего бизнеса.

+2

в случае софт-ссылки создается файл, содержащий абсолютный путь к месту назначения. –

Смежные вопросы