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

Ответ

Запуск исполняемого файла в 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"

Ответ 18+ 🔞

А, ну ты про запуск файлов в линуксе спрашиваешь? Ёпта, классика жанра, каждый раз одно и то же. Слушай, тут главное — не накосячить с правами, а то будет тебе «Permission denied», и будешь ты потом сидеть, как дурак, и думать, какого хуя оно не работает.

Вот, смотри, по шагам, чтобы мозги не расплавились.

1. Проверка и настройка прав: Первым делом, чувак, надо понять, с чем имеешь дело. Не всякий файл — исполняемый. Тыкаешь в консоль:

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

Если там написано что-то про ELF — красота, это бинарник. Если видишь текст или скрипт — тоже норм, но подход чуток другой. Дальше самое важное — права. Без них нихуя не запустится.

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

Вот эта команда — твой лучший друг. Запомни её, как «ёб твою мать». Без неё — никуда.

2. Запуск: Тут тоже есть подвох, ядрёна вошь. Нельзя просто написать my_program.

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

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

Забыл точку со слешем — получишь «command not found», и будешь чесать репу, гадая, куда делся твой файл. Проверено на собственной шкуре, доверия ебать ноль к этой системе после такого.

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

  • Ошибка: "bash: ./my_program: Permission denied" Э, сабака сука, классика! Значит, права кривые. Смотри:
    # Проверяю права
    ls -la my_program
    # Если нет 'x', исправляю
    chmod u+x my_program

    Если и после этого не пускает — возможно, файл на разделе с noexec или ты под левым пользователем. Бывает.

  • Ошибка: "bash: ./my_program: No such file or directory" при наличии файла Вот это уже интереснее. Файл есть, а система его не видит. Волнение ебать.
    # Проверяю архитектуру и зависимости
    file my_program  # Убеждаюсь, что это ELF для правильной архитектуры
    ldd my_program   # Проверяю наличие всех shared libraries

    Если ldd орёт, что библиотек нет — вот тебе и причина. Надо ставить зависимости. А если пишет «not a dynamic executable» — ну, может, файл статический или вообще скрипт какой хитрожопый.

  • Запуск скриптов (Bash, Python): Со скриптами та же история, только у них в начале должен быть shebang (это вот такая строка #!/bin/bash).

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

    Главное — не перепутай интерпретатор, а то будет тебе пиздопроебибна с кодировками и синтаксисом.

4. Пример из практики (запуск самописного Go-приложения): Ну, а вот живой пример, чтобы вообще всё стало понятно. Допустим, ты накодил что-то на 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"

Видишь алгоритм? Скомпилировал -> скопировал -> дал права -> запустил. Всё, блядь, элементарно. Если на последнем шаге опять ошибка — возвращайся к пункту 3 и ищи, в чём засада. Обычно или библиотек не хватает, или конфиг кривой. Удачи, не облажайся!