Почему ls // висит в Cygwin

Когда я запускаю команду ls // это Cygwin, оболочка зависает около 12 секунд, затем выдает ошибку ls: reading directory '//': Permission denied, Я помню, что где-то читал /some//path интерпретируется так же, как /some/path в пути POSIX, и, соответственно, когда я запускаю команду на виртуальной машине Ubuntu, задержка не возникает, и ls выводит содержимое /,

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

Редактировать:

Оказывается \\* пути - это сетевые пути в Windows. Когда я отключаю свой компьютер от всех сетей, ls \\ немедленно возвращает пустой список Когда я подключаюсь к некоторым сетям, я получаю список узлов в сети, но в других сетях я сталкиваюсь с проблемой, описанной выше. Учитывая это, есть ли способ настроить Windows так, чтобы задержка была уменьшена, даже в случае ошибки разрешения?

3 ответа

Это не проблема Cygwin, это проблема Unix. В первые дни компьютерных сетей, прежде чем Sun (Solaris) представила /net/hostname синтаксис для доступа к удаленным файловым системам 1 и NFS позволял монтировать удаленные файловые системы в произвольных точках монтирования (например, /mnt или же /home/username), некоторые версии Unix реализовали //hostname/pathname синтаксис для той же цели. Смотрите, на каких системах //foo/bar отличный от /foo/bar ? С годами этот синтаксис потерял популярность, уступив (в основном?) NFS.

Однако, чтобы эти устаревшие системы были совместимы с POSIX, стандарт явно разрешает // означать что-то отличное от / начале пути):

Если имя пути начинается с двух последовательных символов , первый компонент, следующий за начальными символами , может интерпретироваться способом, определяемым реализацией, хотя более двух ведущих символов должны обрабатываться как один персонаж.
(ближе к концу раздела "Разрешение пути")

- хотя это не определяет, что это должно означать (если что-нибудь).

Cygwin интерпретирует // почти так же, как старый /net, как задокументировано здесь. Он ссылается на "сетевую" (псевдо) папку Windows - ту, которая содержит "Этот компьютер" и другие обнаруживаемые машины.

См. Также Unix: разница между путями, начинающимися с / а также //,
____________
1... и, необязательно, /net может быть выведен для получения списка имен доступных хостов с экспортированными файловыми системами - то есть файловыми серверами.

На моем компьютере, ls // также работает медленно, печатая пару cannot access '//some-computer-name': No such file or directoryи в конце напечатайте несколько имен компьютеров. Это ПК с Windows в локальной сети, и, видимо, ls пытается подключиться к ним (не знаю зачем).

С другой стороны, dir \\ runs quickly and prints the same computer names (no error messages).

I don't think there's a way to configure Windows to prevent that, looks to me like a Cygwin issue (or feature). Best thing would be to write to Cygwin's mailing list about that, asking to fix it.

Anyway, can I ask why do you run ls // совсем?

https://cygwin.com/cygwin-ug-net/using.html

Существует также виртуальный каталог //, который позволяет перечислять файловые серверы, известные локальному компьютеру, с помощью ls.

Другие вопросы по тегам