Как запустить исполняемый файл в ubuntu
Перейти к содержимому

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

  • автор:

Форум русскоязычного сообщества Ubuntu

Страница сгенерирована за 0.116 секунд. Запросов: 23.

  • Сайт
  • Об Ubuntu
  • Скачать Ubuntu
  • Семейство Ubuntu
  • Новости
  • Форум
  • Помощь
  • Правила
  • Документация
  • Пользовательская документация
  • Официальная документация
  • Семейство Ubuntu
  • Материалы для загрузки
  • Совместимость с оборудованием
  • RSS лента
  • Сообщество
  • Наши проекты
  • Местные сообщества
  • Перевод Ubuntu
  • Тестирование
  • RSS лента

© 2012 Ubuntu-ru — Русскоязычное сообщество Ubuntu Linux.
© 2012 Canonical Ltd. Ubuntu и Canonical являются зарегистрированными торговыми знаками Canonical Ltd.

Исполняемый файл в Linux

Как на Linux создать исполняемый файл без использования ./ gcc c ключом -o генерирует исполняемый файл который можно использовать только прописывая ./my_program, но как сделать чтобы его можно было использовать прописывая только имя самой программы «my_program»?

Отслеживать

задан 5 янв 2021 в 17:48

Mad Science Mad Science

13 3 3 бронзовых знака

Bad practice — export PATH=$PATH:.

5 янв 2021 в 18:02

Никогда так не делайте. Непоиск по умолчанию исполняемого файла в текущем каталоге — это не просто так сделано.

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

Весьма часто в инструкциях по установке игр в Linux или в других ситуациях необходимо сделать файл выполняемым. У новичков, особенно тех кто перешёл на Ubuntu с операционной системы Windows этот момент возбуждает много вопросов. Давайте разберёмся в тонкостях и посмотрим как сделать всё правильно. Для начала чуть-чуть теории. в Windows, исторически ещё со времён DOS, было реализовано определение исполняемых файлов по их продолжению.

В Linux и других unix системах ситуация иная. Здесь расширение файлов как таковые отсутствуют, т.е. безусловно вы можете в имени файла использовать точку и три буквы в качестве расширения, но только из собственных эстетических соображений. Для операционной системы это не будет иметь никакого значения. Ну и главный вопрос как же операторная система определяет какой файл исполняемый, является программой, а какой нет. Всё очень элементарно — это устанавливается одним из битов прав на файл.

Исполняемые файлы в Linux

В вопросах исполняемых файлов, то есть, когда по простому, обычных программ, Ubuntu кардинально отличается от Windows. В Windows исполняемые компданные имеют расширение exe (в основном), а внутри представляют из себя нечитаемый набор байтов. А в Ubuntu выполняемым может быть даже текстовый файл. Сразу скажу, что exe — это программы для Windows и в Ubuntu они не трудятся без Wine (приложения для запуска исполняемых файлов Windows в Linux), но вообще говоря и в Wine они трудятся далеко не всегда.

Читайте также: Установка Squid на CentOS 5.5

Итак, что же такое исполняемый файл с точки зрения Ubuntu? Практически это любой файл, который помечен, как исполняемый и который Ubuntu сможет запустить на исполнение. Означает это вот что: у каждого файла есть специальное свойство-переключатель, никак не зависящее ни от имени, ни от охватываемого, отвечающее за исполняемость. Если файл помечен, как исполняемый, то вообще говоря он таковым и представляется, а если не помечен — то это обычный файл с данными и напрямую запустить его на выполнение нельзя. Иное дело, что не любой файл, помеченный как исполняемый, Ubuntu сможет выполнить, хотя в запасе Ubuntu есть масса методов запуска файлов с совершенно различным содержимым.

Читайте также: Найти все скрытые файлы в Linux

Характерные черты исполняемых файлов в Linux

Пользователи, активно применяющие в повседневной работе операционную систему Windows, свыкнули к тому, что программы имеют расширение «.exe». Такие файлы содержат скомпилированный программный код, или иными словами – последовательность байтов, которая загружается в оперативную память и выполняется процессором. Linux реализует асбсолютно другой подход. Ранее, изучая написание скриптов командного интерпретатора Bash, мы уже поспели рассмотреть пример создания исполняемого файла. Он в отличие от Windows представляет собой обыкновенный текстовый документ с набором команд. Его особенностью является то, что перед основным содержимым дополняется специальный комментарий, говорящий операционной системе Linux, какую программу использовать для интерпретации. Кроме скрипта, исполняемым файлом является и скомпилированная программа. Таким образом, все файлы в Linux смогут быть, как обычными текстовыми документами, так и исполняемыми программами. Отличие лишь в специальных флагах и преимуществах доступа операционной системы (множество элементов, находящихся в отношениях и связях друг с другом, которое образует определённую целостность, единство).

Читайте также: Переименовать все файлы из текущей директории в нижней регистр в Linux

Назначение прав для запуска файла в Linux

Сделать файл вразумительным для запуска можно с помощью графической оболочки. Нажмите по ярлыку правой кнопкой мыши. В контекстуальном меню выберите пункт «свойства». Открывшееся окно должно содержать вкладку «преимущества», в котором нужно активировать пункт «разрешить выполнение файла как программы». Данный метод будет отличаться в зависимости от дистрибутива Linux и графической оболочки. Также возможно приставить права запуска через консоль. Для этого используется команда chmod. Пример, презентованый ниже, устанавливает право выполнения для владельца файла и его группы. Вы можете скопировать Bash-скрипт из первоначального примера в файл и провести с ним данную операцию.

chmod ug+x games-dialog

Установка прав на пуск в Linux

Для того чтобы сделать файл исполняемым в Ubuntu Linux необходимо осуществить в окне терминала простую команду:

chmod +x имя_файла

sudo chmod +x имя_файла

Вот и все, сейчас вы знаете как сделать файл исполняемым в Linux. И если нужно будет запустить script или установщик из интернета, у вас не возникнет никаких проблем. Если остались вопросы, спрашивайте в комментах!

Как в Ubuntu автоматически запускать файл с параметрами?

Все привет.
ОС — Ubuntu 16.04
И так. В папке есть исполняемый файл. Его запускаю через командную строку командой: ./name_file -c cp-conf.json . И далее скрипт выполняется циклично, пока его не выключить. После ребута системы, приходится заново проводить процедуру запуска. Подскажите, как сделать автоматическую загрузку скрипта с параметрами в командной строке чтобы этого не делать каждый раз ручками?

  • Вопрос задан более трёх лет назад
  • 1523 просмотра

10 комментариев

Оценить 10 комментариев

Adamos

Чтобы с параметрами — написать скрипт.
Чтобы автоматически — прописать этот скрипт в автозагрузку.
Вопрос-то в чем?

Андрей @undefined_title
подключи в ~/.bashrc или в ~/.profile свой файл через source

VadimPachin

_ Disciple @VadimPachin Автор вопроса
Adamos: вопрос в написании самого скрипта, который нужно положить в загрузку

VadimPachin

_ Disciple @VadimPachin Автор вопроса
Андрей: а можно для деревянных на пальцах?

Adamos

#!/bin/bash /home/user/name_file -c /home/user/cp-conf.json

Всей хитрости — не забывать ко всему прописывать полные пути.
Андрей @undefined_title

Gordon Frimen: у тебя есть файл командной оболочки который ранится при стартре, это .bashrc ты можешь подключить свой скрипт который будет раниться при старте www.linuxcenter.ru/lib/books/kostromin/gl_05_09.phtml

VadimPachin

_ Disciple @VadimPachin Автор вопроса

Всем спасибо. С этим более менее разобрался. Но вот автозагружаться в упор отказывается. Запускал, скрипт так работает, но после ребута не грузится. Подскажите правильные варианты реализации автозагрузки скрипта после ребута.

VadimPachin

_ Disciple @VadimPachin Автор вопроса
Итак. Давайте по порядку. Создал файл с расширение .sh содержащий -> структуру

#!/bin/bash
# Запуск
/home/user/opt/cpm -c /home/user/opt/cp-conf.json

Я правильно сделал? Если да, то как его теперь автоматически загрузить после загрузки графической оболочки системы? Должен запустить терминал в котором как раз и будет идти выполнение скрипта.

VadimPachin

_ Disciple @VadimPachin Автор вопроса
Андрей: можете подсказать подробнее на моем примере?

VadimPachin

_ Disciple @VadimPachin Автор вопроса
Андрей: а как правильно подключать скрипт в .bashrc?
Решения вопроса 1

как мелкий лайфхак можно на конфиг навесить флаги исполнения. а исполняемую прогу в сам конфиг прописать через shebang
#! /path/to/name_file -c

получается удобно.
но, с учетом будущего, лучше создать systemd.service скрипт c Type=oneshot.

Ответ написан более трёх лет назад

VadimPachin

_ Disciple @VadimPachin Автор вопроса
Можете рассказать подробнее как это сделать?
Нарисовать скрипт
/etc/systemd/system/my_name_file.service
с таким содержимым

[Unit] Description=My service for ./name_file -c cp-conf.json [Service] Type=simple ExecStart=/path/to/name_file -c /path/to/cp-conf.json [Install] WantedBy=multi-user.target

Как то так, простейший скрипт.
Далее реиндксируешь systemd скрипты и проверяешь работоспособность своего
$ sudo systemctl daemon-reload
$ sudo systemctl start my_service.service
если все ок включаешь в автозагрузку
$ sudo systemctl enable my_service.service
Type=simple т.к. у тебя процесс после запуска работает все время. измени если по другому
Если процесс нужно пускать от имени пользователя, то пропиши User
да и вообще почитай маны systemd они бездонные 🙂

VadimPachin

_ Disciple @VadimPachin Автор вопроса
pfg21: выполнил команду systemctl status miner.service вот что получил в ответе:

● miner.service — Miner_service for ./cpuminer -c cpuminer-conf.json
Loaded: loaded (/etc/systemd/system/miner.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Чт 2017-06-08 15:53:10 +07; 2min 29s ago
Process: 818 ExecStart=/path/to/cpuminer -c /path/to/cpuminer-conf.json (code=exited, status=203/EXEC)
Main PID: 818 (code=exited, status=203/EXEC)

июн 08 15:53:10 minerserv1 systemd[1]: Started Miner_service for ./cpuminer -c cpuminer-conf.json.
июн 08 15:53:10 minerserv1 systemd[1]: miner.service: Main process exited, code=exited, status=203/EXEC
июн 08 15:53:10 minerserv1 systemd[1]: miner.service: Unit entered failed state.
июн 08 15:53:10 minerserv1 systemd[1]: miner.service: Failed with result ‘exit-code’.

соотвествующие /path/to/cpuminer -c /path/to/cpuminer-conf.json правильно указывают на нужные файлы ??
просто лучше указывать все файлы с полными путями к ним, чтобы не было проблем
тут надо не тупо копировать, а правильно прописать пути

VadimPachin

_ Disciple @VadimPachin Автор вопроса

pfg21: понял. по статусу заработало но после ребута терминал не запускается и я не вижу выполнения скрипта. Как сделать чтобы запускался терминал и в нем было выполнение скрипта?

наверное можно как-нибудь, но это не правильно.
весь вывод автозапуска сливается в логи смотри их
$ journalctl -xe
$ journalctl -u miner.service
второе выдаст тебе что в сислог записано с твоего юнита.

VadimPachin

_ Disciple @VadimPachin Автор вопроса

pfg21: тогда это не подходит. это майнер. там столько данных выводится, что смысла нет. а какие есть варианты именной моей реализации? Чтобы после запуска системы запускался терминал и шел процес майнинга.

Gordon Frimen: наверное, автологин и автостарт програмки гденить да описан, но неправильно сие.
Кстати вспомнил, можно перенастроить вывод юнита в любое место, смотри systemd.exec
По твоему варианту удобнее будет перенаправить вывод на /dev/tty1 и он тебе будет сорить выводом майнера на экран сразу как скрипт стартует 🙂
без всяких входов и автологинов в систему.
а входить с клавиатуры будешь через второй терминал — alt-F2

Ответы на вопрос 1
ruby on rails web dev
В 14.04 — upstart
Начиная с 16.04+ — systemd
Ответ написан более трёх лет назад
Нравится 1 3 комментария

VadimPachin

_ Disciple @VadimPachin Автор вопроса
А можно по подробнее

Могу только в общих чертах описать, потому что на память не помню всех команд и деталей.

Надо создать upstart/systemd файл(ы), который(ые) описывает(ют):
1) какую команду(ы) он запускает
2) когда он их запускает — runlevel, запуск после того, как поднимется сетевой интерфейс или монтирование файловой системы — тут возможны различные варианты и комбинации.
3) описывает коллбэки — что сделать перед стартом, что сделать после старта, что сделать после остановки
4) описывает, перезапускать ли программу, если она падает, максимальное число попыток и т.д
5) описывает, запускать ли в виде демона или как-есть.
. и т.д и т.п — там хватает нюансов.

Поэтому, гугли в этом направлении. Точнее, к сожалению, не подскажу.
P.S, systemd пока сам до конца не осилил — уж больно от отличается от upstart, к которому я привык.

Есть гораздо более простой, но МЕНЕЕ предпочтительный вариант: rc.local.
1) Включаем rc.local
sudo systemctl enable rc-local.service
2) В /etc/rc.local пишем:
/path/to/name_file -c cp-conf.json
Здесь надо иметь ввиду, что желательно указывать полный путь до исполняемого файла, а также интерпретатор:

/usr/bin/python3 /path/to/script.py /bin/bash /path/to/script.sh

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *