Сделать файл linux исполняемым

Обновлено: 21.11.2024

Выполнить скрипт/файл или сделать исполняемый файл как сделать исполняемый файл в Linux
Прежде чем вы сможете запустить файл, он должен быть создан. Неважно, где создается файл. Лучше всего делать это там, где вам легче всего это найти. Для этого домашний каталог пользователя Pi предлагает: «/home/pi». Там вы находитесь автоматически, если вы открываете терминал или по журналам SSH.

С какими правами создается файл?

Существует несколько основных способов создания скриптов. В следующих двух примерах.
Здесь указано, что расширение файла «.sh» должно указывать только на то, что это файл сценария. «.sh» не означает, что файл обязательно исполняемый. С расширением файла «.sh» вы просто даете понять, что это скрипт. Вы также можете опустить «.sh».

Разница в том, что первая команда создает файл с привилегиями root, поэтому ее можно изменить и выполнить только с привилегиями root. Конечно, права потом можно поменять.
Во втором варианте без sudo файл создается с правами текущего пользователя. При исполнении также применяются его права.

Что сейчас лучше? Скрипт с правами root или пользователя? Это зависит от того, что делает скрипт. Если скрипт должен делать что-то актуальное для конкретного пользователя, то скрипт также должен быть создан и выполнен с правами пользователя.
Если скрипт делает что-то, требующее привилегий суперпользователя, то скрипт должен быть создан с правами суперпользователя привилегиями и запустить позже с привилегиями root.

Пользовательский скрипт, в котором должны выполняться команды с «sudo», т.е. с правами root, не имеет особого смысла. В таком случае лучше создать скрипт с теми же привилегиями root, если скрипт выполняет команды, требующие привилегий root.

Создайте пример скрипта с правами пользователя

Для дальнейшего тестирования мы создаем файл скрипта с помощью редактора «nano»:

или если вы хотите запустить скрипт с привилегиями root:

Если скрипт запускается от имени пользователя «root» или с «sudo», все команды внутри него также выполняются с правами пользователя «root». Таким образом, команда внутри скрипта НЕ должна иметь префикс «sudo».

В редакторе вводим следующую строку:

Затем сохраните и закройте: Ctrl + O, Return, Ctrl + X.

После того, как скрипт создан, возникает вопрос, как выполнить скрипт или сделать его исполняемым.

Выполнить скрипт

Самый простой способ выполнить скрипт — передать файл подходящему интерпретатору. Интерпретатор — это программа, которая вызывает файл и выполняет содержащиеся в нем команды. Однако вы не можете использовать каждый интерпретатор. Команды, содержащиеся в скрипте, уже должны соответствовать интерпретатору. В данном случае это интерпретатор bash.

Вызов этого скрипта bash выглядит следующим образом:

Эта команда вызывает интерпретатор Bash и передает имя файла сценария, который необходимо выполнить. Здесь важно, чтобы файл находился в текущем каталоге.
Пример скрипта не делает ничего, кроме вывода «test» в командной строке.

Недостаток этой команды в том, что вы должны знать и вводить интерпретатор скрипта. То, что файл заканчивается на «.sh», не означает, что это скрипт sh. По этой причине скрипт обычно является исполняемым, что сначала усложняет его, но потом упрощает.

Сделать скрипт исполняемым

Как правило, скрипт не вызывается через подходящий интерпретатор, а делает файл исполняемым.
Если скрипт с привилегиями root был создан как пользователь «root» или как пользователь с «sudo»:

Если скрипт был создан с правами пользователя (без sudo):

Недостаточно «сделать исполняемый файл». Поскольку в зависимости от конфигурации командной строки предполагается, что по умолчанию это bash-скрипт.

Если это не сработает, значит, нужный «шебанг» отсутствует. Это первая строка скрипта, указывающая на правильный интерпретатор во время выполнения.
Правильный «шебанг» зависит от интерпретатора:

Кроме того, мы добавляем в первую строку следующее:

Затем сохраните и закройте: Ctrl + O, Return, Ctrl + X.

После этого мы можем запустить скрипт:

«./» вызывает выполнение файла. Правильный интерпретатор определяется по первой строке скрипта (шебанг).
Но то, что установлен «шебанг», не означает, что файл является исполняемым. Для использования «шебанга» файл также необходимо сделать исполняемым (см. выше).

Резюме
Сценарий можно запустить двумя способами. Либо сценарий выполняется через интерпретатор, при этом содержащий «шебанг» в файле игнорируется.

Или вы делаете файл исполняемым и устанавливаете правильный интерпретатор в «Shebang».

Но то, что установлен «шебанг», не означает, что файл является исполняемым. Для использования «Shebang» файл должен быть исполняемым.

Затем вы можете запустить файл. Если установлен правильный «Шебанг», то он тоже работает.

Какую форму выполнения вы выберете, будь то с помощью интерпретатора или в виде исполняемого файла и «шебанга», в принципе не имеет значения.
Место для скриптов
Где вы логически храните свои собственные скрипты оболочки? В Linux для этого есть специальные каталоги.

  • Системные сценарии с привилегиями root: «/usr/local/sbin»
  • Общие пользовательские сценарии с правами пользователя: «/usr/local/bin»

Эти и другие каталоги по умолчанию включены в глобальную переменную $PATH. Если вы создаете файл в этих каталогах и делаете их исполняемыми, вам не нужно указывать их каталог. Он определяется автоматически.

Скопируйте пример скрипта:

Здесь важно, чтобы скрипт был исполняемым и содержал «шебанг».

У меня есть файл script.sh, тип этого файла — файл shellscript. Я хочу сделать этот файл исполняемым файлом application/x. Как я могу это сделать?

Это не дубликат, потому что я специально просил сделать его application/x-executable. Другой вопрос просто требует открытия файла sh в терминале.

4 ответа 4

Вы можете пометить файл как исполняемый:

Затем вы можете выполнить его следующим образом:

Если вы хотите использовать другую команду для запуска, вы можете добавить псевдоним:

Добавьте это в конец файла:

Откройте новый сеанс терминала или введите source ~/.bashrc в своем терминале, чтобы применить. Затем просто используйте новое имя для запуска скрипта.

Знаете ли вы, как использовать команду sudo после ввода команды в виде: "alias command1 = '/home/user_name/dir/script.sh'. В моем случае это работает без sudo, но не с ним.

Существует два способа сделать исполняемый файл:

Метод графического интерфейса:

Щелкните файл правой кнопкой мыши и выберите "Свойства". Перейдите на вкладку разрешений, затем установите флажок «Выполнить»: [ ] Разрешить выполнение файла как программы или в программе Nautilus: [ ] Разрешить запуск этого файла как программы в Thunar.

Метод терминала/команды:

Вы можете использовать:

chmod +x имя_файла.расширение

chmod +x /path/to/your/filename.extension

chmod также имеет некоторые дополнительные параметры:

Пробелы должны показывать, что он разделен: - rwx --- ---

Первый набор --- это User. Второй — Группа, а последний — Другой (любой другой)

r означает чтение, w — запись, а x — выполнение.

Таким образом, разрешить всем читать его, но только группе для выполнения и пользователю для чтения и записи (но по какой-то причине не выполнять) будет:

-rw- rx- r-- Но это будет добавлено к команде как:

chmod +rw-rx-r-- /path/to/file.extension

chmod также может делать это в цифрах. Он основан на бинарности (думаю, что и 1,2 и 4)

Итак, вот эти числа:

Выполнение пользователем равно 100 . Выполнить по группе 010 . Выполнить другим — 001 .

Запись пользователем составляет 200 . Запись по группе 020 . Написать другим — 002 .

Прочитано пользователем 400 . Чтение по группе 040 . Прочитано другим — 004 .

Затем вы складываете их вместе, чтобы получить желаемую комбинацию.

Таким образом, разрешить всем читать его, но только Группе для выполнения и Пользователю для записи (но по какой-то причине не выполнять) будет:

400 + 040 + 004 и 010 и 200

В сумме получается 600 + 050 + 004 = 654.

Тогда вы можете запустить команду.

chmod +654 /path/to/file.extension, чтобы установить его.

И чтобы установить все разрешения, которые вы можете ввести:

chmod +rwxrwxrwx /path/to/file.extension

Или (это немного проще написать, но сложнее запомнить каждое):

Наконец, вы можете сделать следующее:

chmod -777 /path/to/file.extension

Чтобы лишить всех разрешений.

chmod +300 /path/to/file.extension

Чтобы добавить чтение и запись для пользователя, не затрагивая другие разрешения (например, разрешения на выполнение).

На этом веб-сайте есть очень полезная маленькая сетка-флажок, с помощью которой вы можете отметить нужные параметры, и она даст вам команду:

Однако не все возможные комбинации целесообразно использовать; основные из них используются следующие:

Если вы ранее взаимодействовали с такой операционной системой, как Windows, то следующий контекст должен иметь смысл. Такие среды операционных систем поддерживают два типа файлов. Первый тип — исполняемые, а второй — неисполняемые. Исполняемые файлы связаны с расширением файла подписи, например «.exe».

Создание исполняемого файла в Linux

С другой стороны, когда мы мигрируем в экосистему Linux, правило неисполняемых и исполняемых файлов не применяется. Каждому файлу может быть предоставлена ​​исполняемая привилегия. Чтобы понять, как работает эта концепция, нам нужен образец файла для ссылки.

Терминал/командная строка

Чтобы создать такой файл, мы можем использовать встроенную команду echo. Это применимо к терминалу Linux. Эта команда полезна для создания командной строки и перенаправления ее в файл.
Откройте терминал Linux и выполните следующую последовательность команд.

Из приведенной выше последовательности команд мы использовали команду echo для создания буквальной строки «echo привет, пользователь Fosslinux, добро пожаловать в этот учебный сеанс». После этого мы сохранили эту литеральную строку в файле с именем «greetings». Как вы могли заметить, в Linux можно создать файл, не присваивая ему расширения, такого как .exe или .txt. Такой подход к созданию файлов невозможен в других средах операционных систем.

Файл, существующий без расширения в Linux, позволяет предоставить ему привилегию выполнения всякий раз, когда возникает необходимость. После выполнения команды «кошачьи приветствия» терминал выводит буквальную строку, которую мы сохранили в файле «приветствия», из приведенной выше последовательности команд.

Литеральная строка должна начинаться с команды echo, чтобы среда Linux могла ее правильно интерпретировать. В противном случае вы можете получить ошибку типа «команда не найдена», когда мы позже сделаем файл исполняемым. Гибкость среды операционной системы Linux становится жизнеспособной, когда мы можем сделать этот файл «приветствия» исполняемым, не обращаясь к команде cat для доступа к его содержимому.

Чтобы сделать файл исполняемым, мы будем использовать команду «chmod», как показано ниже.

После этого нам нужно только вызвать этот файл «приветствия» следующим образом, чтобы получить доступ к его содержимому.

Ожидаемый результат должен быть примерно таким:

Как вы заметили, приведенный выше вывод не начинается с «эха». Среда терминала интерпретирует эхо не как вывод, а как команду, необходимую для отображения результирующего вывода терминала.

Под капотом этого процесса выполнения файла

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

В этом сценарии нам нужно было работать с правами «чтения» для доступа и вывода содержимого этого файла. Это делает необходимым использование команды «chmod +x». Назначение или удаление разрешения на выполнение файла не делает этот файл постоянно исполняемым или постоянно неисполняемым. Мы просто даем файлу право на выполнение, которое также можно отнять.

Использование «./» перед файлом «приветствия» сообщает терминальной программе, где найти файл, запланированный для выполнения. Вы также можете использовать «sudo» перед «./greetings», чтобы предоставить исполняемым процессам необходимые привилегии. В обсуждаемом выше примере мы использовали эхо для обработки выполнения буквальной строки «привет, пользователь FossLinux, добро пожаловать в этот учебный сеанс». Для этого выполнения вы можете использовать другую программу, например print Python.

Сначала вам нужно установить двоичный файл местоположения программы в качестве заголовка файла, который вы хотите выполнить. В этом случае, если бы мы использовали функцию печати Python, содержимое файла «приветствия» выглядело бы примерно так:

Выполнение этого файла с помощью команды «./greetings» даст те же результаты, что и при использовании команды echo.

Подход с графическим интерфейсом

Если вам не нужен технический путь к тому, как вы делаете свои исполняемые файлы, графический пользовательский интерфейс Linux всегда будет хорошей отправной точкой. Сначала найдите файл, который вы хотите сделать исполняемым, перейдя к его расположению. Используйте компьютерную мышь, чтобы щелкнуть правой кнопкой мыши по этому файлу и выбрать «меню свойств».

выбор пункта меню свойств файла, который вы хотите сделать исполняемым

На следующем экране будут три выровненных пункта меню. Выберите пункт меню «Разрешения».

Метод графического интерфейса для создания исполняемого файла в среде Linux

В этом окне установите флажок «Разрешить выполнение файлов как программ».
Выполнив эти простые действия с графическим интерфейсом, вы сделаете нужный файл исполняемым.

Гибкость Chmod

Chmod – это сокращение от слова "изменить режим". Он касается контроля доступа к разрешениям как для файлов, так и для каталогов в вашей операционной системе Linux. Например, поскольку мы уже имели дело с созданием исполняемого файла, вы также можете узнать, как лишить всех этих прав на выполнение.

В этом случае вы можете ознакомиться с некоторыми абсолютными режимами, связанными с командой chmod. Эти режимы представлены числовыми числами, и их использование следует следующему правилу синтаксиса:

Другое использование chmod при выполнении файла

  • chmod 775 ваше_имя_файла.расширение_файла: в этом режиме любой может выполнить созданный или существующий файл. Однако только владелец файла может записывать или добавлять данные в этот файл.
  • chmod 777 your_file_name.file_extension: в этом режиме каждый пользователь системы Linux имеет равные права на выполнение существующего или созданного файла.
  • chmod 0010 your_file_name.file_extension: Только определенные члены группы системы Linux будут выполнять представленный файл.
  • chmod 0100 ваше_имя_файла.расширение_файла: только владелец файла или лицо, создавшее файл в системе Linux, может выполнять его исключительно.
  • chmod -777 ваше_имя_файла.расширение_файла: эта команда лишает права на выполнение файла всех пользователей этой операционной системы Linux.

Благодаря этой дополнительной информации о команде chmod вы должны быть уверены в ее использовании для создания исполняемых файлов в среде операционной системы Linux.

Последнее примечание

Простое правило, позволяющее сделать файл исполняемым в Linux, состоит из следующих шагов.

Например, sudo chmod +x new_file.bin

После того как вы только что сделали этот файл исполняемым, вы можете установить его, если это файл «bin», или просто запустить его, если это файл «run». В любом случае следующие подходы к командам помогут выполнить работу.

Для файла .bin не забудьте использовать ./my_file_name.bin

Если вы столкнетесь с какими-либо ошибками при попытке установить или запустить созданный исполняемый файл с помощью вышеуказанных команд, перед выполнением этих команд используйте «sudo». Это даст текущему пользователю системы Linux необходимые привилегии выполнения.

make — это инструмент Unix, упрощающий сборку исполняемых файлов программ из множества модулей. make считывает правила (указанные в виде списка целевых записей) из созданного пользователем файла Makefile. make будет перестраивать только то, что необходимо перестроить (объект или исполняемые файлы, которые зависят от файлов, которые были изменены с момента последней сборки объектов или исполняемых файлов).

Руководство по созданию GNU. Полное руководство по написанию make-файлов от простых до расширенных функций.

Кроме того, CMake — это кроссплатформенная система сборки. Помимо прочего, cmake сгенерирует для вас make-файлы. Это особенно полезно для больших проектов, для сборок, использующих множество библиотек, и для решения проблем компиляции, зависящих от платформы. Он автоматически генерирует (часто трудно читаемые и отлаживаемые) make-файлы для разных платформ. Для небольших проектов писать make-файлы вручную, вероятно, проще. Дополнительные сведения о cmake см. в документации Энди Даннера по Cmake.

Использование make

  1. Создайте Makefile со списком правил сборки исполняемого файла, который должен называться Makefile или makefile. Это нужно сделать только один раз, за ​​исключением случаев, когда в программу добавляются новые модули, необходимо обновить Makefile, чтобы добавить зависимости новых модулей к существующим правилам и добавить новые правила для создания новых модулей.
  2. После редактирования файлов программы перестройте исполняемый файл, введя make:

Создание Makefile

Макетный файл обычно начинается с некоторых определений переменных, за которыми следует набор целевых записей для создания конкретных целей (обычно .o и исполняемых файлов в C и C++ и файлов .class в Java) или выполнения набора команд. связан с целевым ярлыком.

Ниже представлена ​​общая форма ввода цели:

Пример простых файлов Makefile для C (или C++)

Самый простой Makefile для компиляции программы C (или C++) из одного файла .c с правилами make и make clean выглядит примерно так (не забудьте добавить символ TAB перед командной частью):

немного более общий простой make-файл

Несколько более общая версия make-файла, приведенного выше, использует переменные make-файла (просто измените определения переменных для создания исполняемых файлов в другой сети или с другими компиляторами или флагами компилятора):

Пример создания исполняемого файла из нескольких файлов .o:

Другой make-файл (с использованием makedepend и более сложного синтаксиса make)

Это более простой в использовании и модификации make-файл, но его немного сложнее читать, чем простой:

Читайте также: