Содержание статьи

Работа с файлами в Linux через терминал опирается на четкие правила: путь к файлу, права доступа и формат самого файла. Без понимания этих деталей запуск может завершиться ошибками вроде Permission denied или No such file or directory. Терминал не «угадывает» намерения пользователя, поэтому каждая команда должна точно указывать, что и как нужно выполнить.
Запуск начинается с определения типа файла: это может быть скомпилированный бинарный файл, shell-скрипт или программа на Python. Для каждого варианта применяется свой подход – от прямого выполнения через ./имя_файла до явного вызова интерпретатора. Ошибка многих пользователей связана с попыткой запустить файл без установленного бита исполнения или без указания корректного пути.
Отдельного внимания требуют пути. Терминал не ищет файлы в текущем каталоге автоматически, поэтому команда без ./ будет работать только для программ, расположенных в каталогах из переменной PATH. Понимание разницы между относительным и абсолютным путём позволяет избежать лишних проверок и ускоряет работу с проектами и скриптами.
Проверка прав доступа к файлу перед запуском
| Символ | Значение | Влияние на запуск |
|---|---|---|
| r | Право на чтение | Позволяет просматривать содержимое файла |
| w | Право на запись | Разрешает изменять файл, но не запускать |
| x | Право на выполнение | Дает возможность запустить файл как программу |
Назначение права на выполнение с помощью chmod

Если файл существует, но не запускается, требуется добавить бит выполнения. Для этого применяется команда chmod, изменяющая права доступа на уровне файловой системы. Минимальная операция – разрешить выполнение владельцу файла с помощью команды chmod u+x имя_файла.
При совместной работе или размещении скрипта для системного использования часто требуется разрешить запуск группе или всем пользователям. Для этого используются формы chmod g+x имя_файла и chmod a+x имя_файла. Назначение прав всем подряд оправдано только для файлов без доступа на запись.
Альтернативный способ – числовая нотация. Значение 1 отвечает за выполнение, 2 за запись, 4 за чтение. Команда chmod 755 имя_файла устанавливает полные права владельцу и разрешает запуск группе и остальным пользователям, что типично для исполняемых программ.
Для каталогов установка бита выполнения означает разрешение на вход в каталог, а не запуск файлов внутри него. Поэтому при работе со скриптами важно применять chmod к конкретному файлу, а не к каталогу целиком, чтобы избежать непреднамеренного расширения доступа.
После изменения прав рекомендуется сразу проверить результат командой ls -l. Отсутствие символа x в нужной позиции указывает на ошибку в параметрах команды или на ограничения, связанные с файловой системой, например при работе с разделами, смонтированными в режиме noexec.
Запуск исполняемого файла через./ в текущем каталоге

Терминал Linux не выполняет файлы из текущего каталога без явного указания пути. Для запуска используется префикс ./, который сообщает оболочке, что файл находится в текущей директории. Без этого префикса команда будет искаться только в каталогах, перечисленных в переменной PATH.
- Перейти в каталог с файлом: cd путь_к_каталогу
- Проверить наличие файла: ls
- Убедиться в наличии бита выполнения: ls -l
- Запустить файл: ./имя_файла
Если файл запускается с ошибкой command not found, это указывает на отсутствие ./ или на неверное имя файла. Ошибка No such file or directory часто связана с неправильной кодировкой конца строк в скрипте или с отсутствием указанного интерпретатора.
- Имя файла чувствительно к регистру
- Расширение не влияет на возможность запуска
- Файл должен быть обычным, а не каталогом
Такой способ запуска применяется для бинарных файлов и скриптов, расположенных в проектных каталогах, домашних директориях и временных путях, которые не добавляются в PATH по соображениям безопасности.
Запуск файла по абсолютному и относительному пути
Путь указывает оболочке точное расположение файла в файловой системе. Абсолютный путь начинается с корня / и не зависит от текущего каталога. Пример запуска: /home/user/scripts/app.sh. Такой формат снижает риск ошибки при выполнении из разных директорий.
Относительный путь строится от текущего рабочего каталога и может включать элементы ./ и ../. Команда ./bin/app указывает на файл в подкаталоге, а ../tools/run – на файл уровнем выше. Перед запуском необходимо убедиться, что текущий каталог выбран корректно.
Выбор типа пути влияет на читаемость и переносимость команд. В интерактивной работе удобны относительные пути, особенно внутри проектов. В скриптах и заданиях cron предпочтительны абсолютные пути, так как окружение запуска не гарантирует фиксированный рабочий каталог.
Если при указании полного пути возникает ошибка Permission denied, проблема связана с правами доступа или с параметрами монтирования раздела. Сообщение No such file or directory часто означает опечатку или отсутствие прав на проход по одному из каталогов в цепочке пути.
Запуск скриптов через интерпретатор bash, sh или python
Скрипт можно выполнить без назначения бита выполнения, указав интерпретатор напрямую. Такой способ подходит для проверки кода и работы с файлами, расположенными на носителях с ограничениями на выполнение. Пример запуска shell-скрипта: bash script.sh или sh script.sh.
Выбор интерпретатора влияет на доступный синтаксис. bash поддерживает расширенные конструкции, массивы и подстановки, тогда как sh ориентирован на совместимость и может игнорировать специфичные возможности bash. Запуск через неподходящий интерпретатор часто приводит к синтаксическим ошибкам.
Для Python-скриптов используется явный вызов интерпретатора с указанием версии. Команды python script.py и python3 script.py могут обращаться к разным средам. Проверка версии выполняется через python —version, что критично при работе с зависимостями.
В начале скрипта может присутствовать строка shebang, например #!/usr/bin/env python3 или #!/bin/bash. При наличии этой строки и установленного права на выполнение файл можно запускать напрямую, но при прямом вызове интерпретатора shebang игнорируется.
Запуск через интерпретатор позволяет обойти ошибки, связанные с кодировкой конца строк и путями к оболочкам. Такой подход упрощает отладку и дает полный контроль над тем, какая программа обрабатывает содержимое файла.
Запуск файла с аргументами и в фоновом режиме

Исполняемые файлы и скрипты часто принимают аргументы командной строки. Они передаются после имени файла через пробелы, например: ./app —config config.yml —port 8080. Порядок аргументов имеет значение, так как программа обрабатывает их последовательно.
Для передачи значений с пробелами используются кавычки. Команда ./script «имя файла.txt» передает один аргумент, а не два. Неправильное экранирование приводит к ошибкам разбора параметров еще до запуска логики программы.
Запуск в фоновом режиме выполняется добавлением символа & в конец команды. Пример: ./app —mode daemon &. Терминал сразу возвращает управление, а процесс продолжает работу независимо от текущей сессии.
Для контроля фоновых процессов применяются команды jobs, fg и bg. Они позволяют вернуть процесс в интерактивный режим или продолжить его выполнение после остановки. Идентификатор задания указывается в виде %1, %2 и так далее.
Вопрос-ответ:
Почему файл существует, но не запускается из терминала?
Чаще всего причина связана с отсутствием права на выполнение. Это проверяется командой ls -l: если в правах нет символа x, оболочка запретит запуск. Также проблема может быть вызвана файловой системой, смонтированной с параметром noexec, или попыткой запуска скрипта без корректного интерпретатора.
Зачем при запуске файла писать ./ перед именем?
Текущий каталог по умолчанию не включён в переменную PATH. Префикс ./ явно указывает оболочке, что файл расположен здесь же. Без него команда будет искаться только среди системных программ, что приведёт к ошибке command not found.
Можно ли запускать скрипт без chmod +x?
Да, если вызвать интерпретатор напрямую. Например, bash script.sh или python3 script.py. В этом случае оболочка запускает интерпретатор, а файл передаётся ему как аргумент, поэтому бит выполнения не требуется.
Почему появляется ошибка «No such file or directory», хотя файл есть?
Сообщение может означать не только отсутствие файла. Частая причина — неверный путь к интерпретатору в строке shebang или Windows-окончания строк. Проверка выполняется командами file имя_файла и head -n 1 имя_файла.
Как запустить программу так, чтобы она продолжала работать после закрытия терминала?
Для этого используется nohup или запуск в фоновом режиме с перенаправлением вывода. Команда nohup ./app > app.log 2>&1 & позволяет процессу продолжить выполнение без активной сессии и сохраняет вывод в файл.
Почему бинарный файл запускается по полному пути, но не стартует из текущего каталога?
Причина связана с тем, что текущий каталог не используется оболочкой при поиске команд. Если файл запускается как /home/user/bin/app, но не реагирует на ввод app, значит каталог не входит в PATH. В этом случае применяют ./app или добавляют каталог в PATH. Также стоит проверить, не отличается ли версия файла и не используется ли другая копия программы по абсолютному пути.
