Даш, есть ли какие-либо ограничения на пути к файлам

У меня есть исполняемый файл, который находится на моей машине с Linux, так что длина пути к исполняемому файлу составляет 107 символов. Я нашел количество символов, используя команду echo -n "/path/to/the/executable" | wc -c -m, Когда я пытаюсь выполнить исполняемый файл с полным путем, я получаю следующую ошибку:

sh: 1: /subpath/to/the/executable: not found

Я проверил длину /subpath/to/the/executable и это 81 символов. И если я размещу свой исполняемый файл так, чтобы его длина пути была меньше 81 символа, я не получу вышеуказанное sh error,

Я провел некоторый поиск и обнаружил, что ограничение пути к файлу в Linux env составляет 255 символов. Я не мог найти, есть ли у черты или оболочки какое-либо ограничение на пути к файлу. На моей машине /bin/sh есть символическая ссылка на /bin/dash.

Может кто-нибудь объяснить этот предел в 81 символ на пути к файлу, который вводится через тире? Есть ли способ увеличить лимит?

1 ответ

Да, dash (из-за Linux) имеет ограничения по длине пути к файлам:

  • Никакая запись в пути не может быть длиннее 255 символов.
  • Общий путь не может быть длиннее 4095 символов.

Вот примеры, демонстрирующие это:

$ "$(head -c 255 /dev/zero | tr '\0' 'x')"
dash: 2: xxxxxx[...]xxxxxxx: not found

$ "$(head -c 256 /dev/zero | tr '\0' 'x')"
dash: 3: xxxxxx[...]xxxxxxxx: File name too long

$ "$(while true; do printf "/x"; done | head -c 4095)"
dash: 4: /x/x/[...]/x/x/x/: not found

$ "$(while true; do printf "/x"; done | head -c 4096)"
dash: 5: /x/x/[...]/x/x/x/x: File name too long

Без ограничений влияет на 81 символ или 107 символов имени. Вот пример, показывающий, что 200 символов прекрасно работают в dash:

$ name="./$(head -c 200 /dev/zero | tr '\0' x)"
$ printf '%s\n' '#!/bin/sh' 'echo "hello world"' > "$name"
$ chmod +x "$name"
$ "$name"
hello world

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

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