Могут ли быть неканонизированные формы путей файловой системы значительными? (например, «foo // bar», «foo /./ bar» и «foo /../ bar»)

У меня есть сценарий для создания конкретного вкуса кросс-компилятора GCC. Во всем сценарии есть много путей, которые не входят в каноническую форму, например дублирующие разделители путей ( /xxx/foo//bar/yyy ) и вмешиваются в «эти» каталоги ( /xxx/foo/./bar/yyy ).

Я собирался их канонизировать, но мне интересно, важны ли эти формы, а не просто сценарий, который не очищается. В дополнение к только что упомянутым формам мне также любопытно, может ли включение в каталог «вверх по каталогу» также быть значимым в любой конкретной ситуации (например, « /xxx/foo/../bar/yyy вместо /xxx/bar/yyy ). Например, я наткнулся на путь, как /xxx/foo/.//bar/yyy .

Единственная потенциальная ситуация, о которой я могу думать, – это когда задействованы ссылки. Я могу представить, что форма .. может вести себя по-другому, но как насчет двух других форм выше?

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

  • Конфигурация виртуального хоста apache CentOS7
  • Является ли поведение chmod неправильным для символических ссылок?
  • Безопасно ли создавать символические ссылки в / root для файлов конфигурации в домашнем каталоге пользователей aa?
  • Почему пакеты slackware воссоздают символические ссылки после установки?
  • Автоматическое добавление косой черты при навигации по символической ссылке
  • Undeletable символическая ссылка на smbfs / simfs
  • копировать символические ссылки с помощью rsync
  • Понимание обхода символических ссылок каталога и родительского каталога
  • One Solution collect form web for “Могут ли быть неканонизированные формы путей файловой системы значительными? (например, «foo // bar», «foo /./ bar» и «foo /../ bar»)”

    /./ вы всегда должны иметь возможность свернуть / .
    // обычно должен быть разборным, НО я видел, что скрипты configure проверяют его, поэтому я предполагаю, что могут существовать системы, где это не то же самое. Проверьте это, но, наверное, все будет хорошо.
    /../ будет работать только в том случае, если предыдущий каталог не является символической ссылкой (или, я считаю, жесткой ссылкой). Поскольку .. является жесткой ссылкой на родительский каталог, он будет соответствовать этой ветке, а не той, которая используется в текстовом пути. (NB. В вашей оболочке может быть установлено, что она не разрешает символические ссылки на cd s, и в этом случае она войдет в каталог, где символическая ссылка, однако это поведение почти полностью ограничено cd в оболочках с этим набором опций.)

    Используйте readlink -f "$path" , я считаю, что он разрешит все эти случаи должным образом.

    Interesting Posts

    Как размонтировать ранее chroot'd файловую систему?

    Количество номеров каталогов

    Отобразить текущий TTY / PTY в заголовке терминала

    Как получить дескриптор файла, отличный от stdin stdout и stderr (чтобы сделать что-то вроде $ program 1> file_1 3> file_2)?

    Ctrl + Alt + T не подтягивает новый терминал в Linux Mint Cinnamon 18.1

    С помощью сценариев оболочки мне нужно объединить данные из двух файлов в один файл

    Предоставление временной метки для каждой строки вывода из команды

    пользователь root отказал в доступе к .gvfs в rsnapshot?

    Есть ли альтернатива команде `which`?

    Сообщение Rsyslog `logger` дублируется

    что такое дескриптор файла моего терминала

    Захват зашифрованного ключа в mkinitcpio.conf для полного шифрования системы USB-накопитель Arch install

    Использование акцентов в Vim плавно

    MariaDB – проблемы с зависимостями – оставляя неконфигурированные

    Исполняемый формат в OS X vs Исполняемый формат во FreeBSD

    Linux и Unix - лучшая ОС в мире.