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

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

Чем отличается Linux от Windows в плане исполнений файлов, так это тем, что первая система определяет выполняемые файлы программными не по расширению, а по специальному флагу исполняемости. Так у каждого из них есть три режима исполняемости: чтение, исполнение и запись. Именно эти режимы определяют, что система может делать с конкретным файлом. Когда пользователь скачивает различные установщики из интернета или создает скрипт, то по умолчанию ему присваиваются следующие режимы – чтение и запись. Одним словом, пользователь не сможет сделать с такой программой ничего, так как с ним нужно сделать кое-что еще.

Что означает исполняемость?

Но для начала нужно разобраться с таким вопросом, как: что такое исполняемость и что это вообще означает? Начнем с программы, являющейся набором инструкций, выполняемых процессором над совокупностью данных с целью получения нужного результата. Для процессора не существует разницы между инструкциями и данными.

И первые, и вторые состоят из цифр – байт. То есть, определенное сочетание цифр будет означать для процессора необходимость выполнения конкретного действия. Для процессора нет принципиальной разницы, какой процесс выполнять – данные операционной системы или текстовый файл. И первый, и второй будут выполнены, вот только в случае с текстовым необходимость в инструкциях фактически отпадает.

Для понимания системой, какие должны быть выполнены по инструкции, а какие выполнять не нужно, и были придуманы флаги исполняемости. Фактически содержимое никак не изменяется в зависимости от установленного класса исполняемости – отличие сводится только к нескольким строчкам. Со скриптами все работает точно так же, только команды выполняет не процессор, а интерпретатор, например, в bash скриптах — сама оболочка bash. Да и в обычных программ тоже есть свой загрузчик — это ld-linux.so.2.

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

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

$ chmod категория действие флаг адрес_файла

КАК СДЕЛАТЬ ФАЙЛ ИСПОЛНЯЕМЫМ В LINUX

И здесь необходимо учитывать следующее:

Флаг — один из доступных — r (чтение), w (запись), x (выполнение).

Категория — могут устанавливаться для трех категорий: владельца файла, группы данных и всех остальных пользователей. В команде они указываются символами u (user) g (group) o (other) соответственно.

Действие — может быть + (плюс), что будет значить установить флаг или — (минус) снять флаг.

Таким образом, чтобы сделать исполняемым скрипт в Linux, пользователю необходимо выполнить:

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

Читайте также:  Linux сбросить кеш dns

Чтобы посмотреть их в терминале достаточно воспользоваться утилитой ls:

Посмотреть флаги в терминале можно с помощью утилиты ls

Флаги включены для всех категорий. Первое rwx — флаги владельца, второе — группы, а третье — для всех остальных. Если он не установлен, на его месте будет прочерк.

Снять флаг исполняемого файла очень просто. Используется та же команда только со знаком минус:

Дальше рассмотрим вопрос установки управляемости в GUI.

Как установить флаг исполняемости в GUI

Для новичков эта инструкция окажется проще. Рассмотрим на примере менеджера GNOME, Nautilus. Кликните правой кнопкой по нашему объекту программы или скрипта, чтобы открыть контекстное меню, затем выберите свойства:

КАК УСТАНОВИТЬ ФАЛГ ИСПОЛНЯЕМОСТИ В GUI

Переходим на вкладку права и устанавливаем галочку «Разрешить выполнение файла как программы»:

Разрешить выполнение файла как программы:

Теперь он будет запущен системой непосредственно из менеджера. Вот и вся инструкция. Теперь с запуском программы или скрипта из интернета у вас не возникнет трудностей.

Источник

Учимся писать базовые скрипты в Unix и Linux

img

Если вы еще не умеете писать скрипты в системах Unix и Linux, эта статья познакомит с основами написания скриптов.

Учимся писать базовые скрипты в Unix и Linux

Написание скриптов в системе Unix или Linux может быть одновременно и простым и чрезвычайно сложным. Все зависит от того, что вы пытаетесь выполнить, используя скрипт. В этой статье мы рассмотрим основы создания скриптов — то, как начать, если вы никогда раньше не создавали скрипты.

Идентификация оболочки.

Сегодня в системах Unix и Linux есть несколько оболочек, которые вы можете использовать. Каждая оболочка — это интерпретатор команд. Он считывает команды и отправляет их ядру для обработки.

Bash является одной из самых популярных оболочек, но существуют также zsh , csh , tcsh и korn . Есть даже оболочка под названием fish , которая может быть особенно полезна новичкам в Linux благодаря полезным параметрам автозаполнения команд. Чтобы определить, какую оболочку вы используете, используйте эту команду:

Вы также можете определить свою основную оболочку, просмотрев файл /etc/passwd :

$ grep $USER /etc/passwd nemo:x:1111:1111:Nemo the Fish:/home/nemo:/bin/bash

Один из способов определить, какие оболочки доступны в системе Linux, - это проверить файл /etc/shells .

$ more /etc/shells # /etc/shells: valid login shells /bin/sh /bin/dash /bin/bash /bin/rbash /bin/zsh /usr/bin/zsh /usr/bin/screen /usr/bin/tmux /usr/bin/fish

На выводе видно, что доступно всего девять оболочек.

Какую оболочку выбрать пользователю во многом зависит от того, что он привык использовать, поскольку большая часть синтаксиса в скриптах не представляет команды, которые вы найдете в /bin , /us /bin или /usr/local/bin . Вместо этого они являются частью самой оболочки и называются «встроенными». Сюда входят команды, используемые для цикла (например, for и while ).

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

Выбор оболочки

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

#!/bin/sh #!/bin/dash #!/bin/bash #!/bin/rbash #!/bin/zsh #!/usr/bin/zsh #!/usr/bin/screen #!/usr/bin/tmux #!/usr/bin/fish

Когда первая строка вашего скрипта идентифицирует оболочку, которая будет использоваться, эта оболочка будет выполнять команды в скрипте. Если вы не определите оболочку в первой строке в скрипте, то оболочка, которую вы используете при вызове сценария, будет той, которая его запускает.

Выполнение команд

Любую команду, которую вы запускаете в командной строке Linux, можно запустить в скрипте, если он совместим с указанной оболочкой. Используйте свой любимый текстовый редактор и вводите нужные для исполнения команды. Вот очень простой скрипт, который выводит текущую дату в формате день-месяц-год. Скрипт имеет название today .

Чтобы запустить этот скрипт, выполните команду:

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

Рекомендуется добавлять к скриптам комментарии, объясняющие, для чего предназначен скрипт, особенно если скрипт длинный или имеется сложный синтаксис. Просто начните комментарий со знака # . Комментарии могут быть отдельными строками или добавляться в конец команд в скрипте. Например:

#!/bin/bash # циклическое отображение даты/времени while true do echo -n “still running . ” date sleep 300 # sleep 5 minutes done

Делаем файл исполняемым

Чтобы сделать скрипт исполняемым, используйте команду chmod и убедитесь, что предполагаемые пользователи могут его запустить. Например:

$ chmod 700 scriptname # только вы сможете его запустить $ chmod 755 scriptname # запустить его смогут все

Если скрипт не сделан как исполняемый, его все равно можно запустить с помощью символа . Это встроенная функция, которая «выполняет» (т. е. читает и запускает) скрипт.

Использование команды if

Команда if позволяет вам проверять условия или переменные. В примере ниже мы проверяем, запускается ли скрипт в пятницу.

if [ date +”%A” == Friday ];then echo “TGIF!”; fi

Базовый синтаксис команды if - if value == other_value . Знак == выполняет сравнение, и необходимо убедиться, что оболочка видит по одному значению с каждой стороны оператора сравнения. По этой причине часто приходится заключать свои строки в кавычки.

Понятие переменных

Чтобы разобраться в понятии переменной важно понимать, что переменные назначаются одним способом, а на них ссылаются другим. Назначьте переменной только ее имя, но перед именем поставьте знак $ , чтобы ссылаться на нее.

Запрос пользователя на ввод данных

Чтобы пользователь, во время исполнения скрипта, смог ввести некоторую информацию, вам необходимо вывести как подсказку, так и команду, чтобы прочитать, что вводит пользователь. Вы также должны присвоить переменной имя, которое имеет смысловое значение, как в этом примере. Обратите внимание, что использование команды echo -n означает, что пользователь вводит свой ответ в той же строке, что и приглашение.

echo -n “Сколько циклов “ read numloops

Человек, запускающий сценарий, увидит приглашение и введет ответ :

Использование аргументов командной строки

Чтобы использовать аргументы, которые пользователь вводит вместе с именем скрипта, необходимо знать, как их идентифицировать. Аргументам скрипта будут присвоены имена $1 , $2 и так далее. Для любого аргумента, который вы собираетесь использовать неоднократно, вы можете рассмотреть возможность присвоения этих значений более значимым именам переменных.

$!/bin/bash if [[ $1 != 5* ]]; then echo “Ошибка: $1 это не число” exit else loops=$1 fi

В этом случае мы проверяем, является ли первый предоставленный аргумент числовым, и закрываем скрипт, если это не так. Если ответ - число, то далее назначаем его переменной $loops , чтобы использовать позже в скрипте.

Еще одна полезная вещь, которую нужно сделать в скрипте, - это сначала проверить наличие аргументов. В противном случае синтаксис, подобный показанному выше, не сработает, потому что оболочка увидит выражение if [[! = 6 *]]; , что приведет к синтаксической ошибке.

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

#!/bin/bash if [ $# -lt 2 ]; then echo “Usage: $0 lines filename” exit 1 fi

Различные способы создания циклов

Есть несколько способов сделать цикл внутри скрипта. Используйте for , если вы хотите повторить действие заданное количество раз. Например:

#!/bin/bash for day in Sun Mon Tue Wed Thu Fri Sat do echo $day done
#!/bin/bash for letter in do echo $letter done

Используйте while , если хотите выполнять какое-то действие, пока условие существует или не существует.

#!/bin/bash n=1 while [ $n -le 4 ] do echo $n ((n++)) done

Использование оператора case

Операторы case позволяют вашим скриптам реагировать по-разному в зависимости от того, какие значения проверяются. В приведенном ниже скрипте используются разные команды для извлечения содержимого файла, предоставленного в качестве аргумента, путем определения типа файла.

#!/bin/bash if [ $# -eq 0 ]; then echo -n “myfile> “ read myfile else myfile=$1 fi if [ ! -f “$myfile” ]; then echo “Файл не найден: $myfile” exit fi case $myfilein *.tar) tar xf $myfile;; *.zip) unzip $myfile;; *.rar) rar x $myfile;; *) echo “Нет опций для извлечения $myfile” esac

Обратите внимание, что этот сценарий также запрашивает имя файла, если оно не было предоставлено, а затем проверяет, действительно ли указанный файл существует. Только после этого выполняется извлечение.

Реакция на ошибки

Вы можете обнаруживать ошибки в скриптах и реагировать на них и тем самым избегать других ошибок. Хитрость заключается в том, чтобы проверять выходные коды после запуска команд. Если код выхода имеет значение, отличное от нуля, произошла ошибка. В этом скрипте проверяется, запущен ли Apache, но отправляем результат проверки в /dev/null . Затем проверяем, не равен ли код выхода нулю, поскольку это означает, что команда ps не получила ответа. Если код выхода не равен нулю, сценарий сообщает пользователю, что Apache не запущен.

#!/bin/bash ps -ef | grep apache2 > /dev/null if [ $? != 0 ]; then echo Apache is not running exit fi

Источник

Оцените статью
Adblock
detector