У меня Windows 7 64-битный ПК. Я установил Cygwin версии 2.6.0 на него в каталоге c:\cygwin64.

У меня есть файл с именем file1. Для этого я создал файл мягкой ссылки с именем file1_soft1.

Команда ls -i -l дает мне такой вывод:

всего 2
3377699721198685 -rw-r - r-- 1 cChappati Domain Users 57 янв. 20 19:47 file1
37154696926542763 lrwxrwxrwx 1 cChappati Domain Users 5 января 21 10:36 file1_soft1 -> file1

Затем я успешно удалил исходный файл с помощью команды rm file1 .

Теперь, когда я запускаю команду ls -i -l , я получаю следующий вывод:

всего 1
37154696926542763 lrwxrwxrwx 1 cChappati Domain Users 5 января 21 10:36 file1_soft1 -> file1

Почему file1_soft1 файл по - прежнему связан с file1 файл , когда file1 файл больше не существует?

Я ожидал, что либо файл file1_soft1 также будет удален, либо станет обычным файлом с удаленной ссылкой на файл file1 . Но ничего этого не произошло.

Спасибо

2 ответа2

4

Это связано с тем, что мягкая ссылка указывает на путь, а не на сам файл.

Ваше предположение, что ссылка все еще указывает на исходный файл, неверно. Это указывает на оригинальный путь.

Неважно, что там на этом пути, и вообще ничего. Если вы создадите новый файл file1 (или, возможно, даже каталог с таким именем), ссылка будет указывать на него.

3

Почему файл file1_soft1 по-прежнему связан с файлом file1, если файл file1 больше не существует?

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

Это может привести к значительным накладным расходам:

  • Ведение списка всех ссылок

  • Периодически проверяйте список, чтобы увидеть, был ли удален связанный файл.

Окна:

  • Команды Windows, используемые для создания файловых программных ссылок (mklink и ярлык), могут создавать ссылки на несуществующие цели.

Unix:

  • Команда Unix для создания программных ссылок (ln -s) также может создавать ссылки на несуществующие цели.

    $ ll
    total 0
    $ ln -s target dummy
    $ ll
    total 1
    lrwxrwxrwx 1 DavidPostill None 6 Jan 21 16:19 dummy -> target
    $ cat dummy
    cat: dummy: No such file or directory
    $
    

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


Дальнейшее чтение

  • Индекс AZ командной строки Windows CMD - Отличный справочник по всем вопросам, связанным с командной строкой Windows.
  • mklink - создает символическую ссылку на каталог или файл, или создает жесткую ссылку на файл или соединение каталога.
  • Ярлык - Создать ярлык Windows (.Файл LNK).

  • Индекс AZ командной строки Bash для Linux - отличный справочник по всем вопросам, связанным с командной строкой Bash.

  • ln - создает ссылки между файлами, по умолчанию он создает жесткие ссылки; с опцией -s он создает символические (или "мягкие") ссылки.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .