Жесткая ссылка и символические ссылки в Unix

StackOverflow https://stackoverflow.com/questions/2808394

  •  25-09-2019
  •  | 
  •  

Вопрос

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

Я провел команду:

ln source hardlink
ln -s source softlink

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

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

С уважением, Darkie15.

Это было полезно?

Решение

И да и нет :-)

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

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

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

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

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

Мягкие ссылки не имеют этого ограничения, так как они хранят путь к целевому файлу, а не на свой 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

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

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


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

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

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

Другие советы

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top