Как запустить скомпилированный исполняемый файл в Linux?

«Как запустить скомпилированный исполняемый файл в Linux?» — вопрос из категории Linux, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Запуск исполняемого файла в Linux зависит от его типа и расположения. Вот практические шаги, которые я выполняю:

1. Проверка и настройка прав:

# Сначала проверяю, что файл действительно исполняемый
file my_program
# Вывод: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked...

# Даю права на выполнение, если их нет
chmod +x ./my_program

2. Запуск:

# Если файл в текущей директории, обязательно указываю путь
./my_program

# Если файл добавлен в PATH, можно запускать по имени
my_program

3. Распространенные проблемы и их решение:

  • Ошибка: "bash: ./my_program: Permission denied"
    # Проверяю права
    ls -la my_program
    # Если нет 'x', исправляю
    chmod u+x my_program
  • Ошибка: "bash: ./my_program: No such file or directory" при наличии файла
    # Проверяю архитектуру и зависимости
    file my_program  # Убеждаюсь, что это ELF для правильной архитектуры
    ldd my_program   # Проверяю наличие всех shared libraries

    Если ldd показывает "not a dynamic executable", возможно, файл статически слинкован или это скрипт.

  • Запуск скриптов (Bash, Python):

    # Для bash-скриптов с shebang (#!/bin/bash)
    ./script.sh
    
    # Для Python-скриптов можно явно указать интерпретатор
    python3 script.py

4. Пример из практики (запуск самописного Go-приложения):

# Компилирую
GOOS=linux GOARCH=amd64 go build -o myapp ./cmd/main.go

# Копирую на сервер и запускаю
scp myapp user@server:/opt/app/
ssh user@server "cd /opt/app && chmod +x myapp && ./myapp --config prod.yaml"