Соедините синтаксические правила каналом

Если Вы на самом деле видите, что он происходит, использовать iotop.

10
20.04.2014, 01:58
2 ответа

Существует три типа путей:

  • относительные пути, такие как foo , foo / bar , ../ а , . . Они не начинаются с / и относятся к текущему каталогу процесса, выполняющего системный вызов с этим путем.
  • абсолютные пути, например / , / foo / bar или /// x . Они начинаются с 1, 3 или более / , они не являются относительными, ищутся, начиная с корневого каталога / .
  • POSIX разрешает особую обработку // foo , но не указывает, как это сделать. Некоторые системы используют это для особых случаев, таких как сетевые файлы . Это должно быть ровно 2 слэша.

За исключением начала, последовательности косых черт действуют как одна.

~ является специальным только для оболочки , он расширяется оболочкой, он вообще не является специальным для системы. Как он расширяется, зависит от оболочки. Оболочки выполняют другие формы расширения, такие как глобус ( *. Txt ) или расширение переменных / $ foo / $ bar или другие. Что касается системы, то ~ foo - это просто относительный путь, например _foo или foo .

На что следует обратить внимание:

  • foo / не то же самое, что foo . Это ближе к foo /. чем foo (особенно если foo является символической ссылкой) для большинства системных вызовов в большинстве систем ( foo // то же самое, что foo / хотя).
  • a / b /../ c не обязательно совпадает с a / c (например, если a / b является символической ссылкой). Лучше всего не лечить .. специально.
  • в целом безопасно считать a /././././ b тем же, что и a / b .
13
27.01.2020, 20:01

Например, насколько я могу судить, кажется, что foo / bar и foo // bar указывают на одно и то же место.

Да. Это обычное явление, потому что программное обеспечение иногда объединяет путь, предполагая, что первая часть не была завершена косой чертой, поэтому для уверенности добавляется один (то есть их может быть два или более). foo /// bar и foo ///// bar также указывают на то же место, что и foo / bar . Хорошей функцией для библиотеки манипуляций с путями была бы такая, которая сокращает любое количество последовательных косых черт до одного (за исключением начала пути, где она может использоваться в URL-стиле или, как указывает Стефан, для любых неуказанного специального назначения).

Также ~ обычно означает домашний каталог пользователя

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

Кроме того, ~ является допустимым символом в пути * nix и не может быть изменен на что-либо еще. Согласно согласно этому , единственными символами, которые недопустимы в имени файла unix, являются / (потому что это разделитель пути) и "null" (также известный как нулевой байт), потому что они вообще незаконны в тексте.

3
27.01.2020, 20:01

Теги

Похожие вопросы