- Вопрос или проблема
- Позволить всем пользователям запускать ваш скрипт
- Выполнение скрипта без делания его исполняемым
- Ответ или решение
- Теория
- Пример
- Применение в различных контекстах
- Запуск скрипта в терминале
- Создание алиаса для удобного запуска
- Изменение прав доступа через графический интерфейс
- Дополнительные детали и примеры
- Заключение
Вопрос или проблема
У меня есть файл script.sh, и его тип – shellscript. Я хочу сделать этот файл типом application/x-executable. Как мне это сделать?
Вы можете отметить файл как исполняемый:
chmod +x filename.sh
Затем вы можете выполнить его так:
./filename.sh
Если вы хотите использовать другую команду для его запуска, вы можете добавить псевдоним:
gedit ~/.bashrc
Добавьте это в конце файла:
alias <new name>='/home/<full path to script>/filename.sh'
Откройте новый сеанс терминала или введите source ~/.bashrc
в ваш терминал для применения.
Затем просто используйте новое имя для запуска скрипта.
Существуют два способа сделать файл исполняемым:
Метод через графический интерфейс:
Щелкните правой кнопкой мыши по файлу и выберите «Свойства».
Перейдите на вкладку разрешений, затем отметьте поле Выполнять: [ ] Разрешить выполнение файла как программы
или в Nautilus Программа: [ ] Разрешить этому файлу работать как программа
в Thunar.
Метод в терминале / командный метод:
Вы можете использовать:
cd /to/my/required/directory
Затем выполните
chmod +x filename.extension
Или просто выполните:
chmod +x /path/to/your/filename.extension
chmod
также имеет более расширенные параметры:
Пространства показывают, что это разбито: - rwx --- ---
Первый набор ---
– это Пользователь. Второй – это Группа, а последний – Это кто-то другой (любой другой)
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 -777 /path/to/file.extension
Чтобы снять все разрешения со всех.
И:
chmod +300 /path/to/file.extension
Чтобы добавить чтение и запись для пользователя, не влияя на другие разрешения (например, Разрешения на выполнение).
Этот сайт имеет очень полезную маленькую таблицу галочек, где вы можете отметить нужные параметры и получить команду:
Тем не менее, не все возможные комбинации разумно использовать; основные из них, которые используются, это следующие:
755 – Владелец
имеет все, и Группа
и Иной
могут читать и выполнять
700 – Владелец
имеет все
644 – Владелец
может читать и записывать, и Группа
и Иной
могут читать
600 – Владелец
может читать и записывать
И, если вы используете нетривиальные группы пользователей:
775 – Владелец
может читать и записывать, и Группа
и Иной
могут читать
770 – Владелец
и Группа
имеют все, и Иной
могут читать и выполнять
750 – Владелец
имеет все, и Группа
могут читать и выполнять
664 – Владелец
и Группа
могут читать и записывать, и Иной
могут только читать
660 – Владелец
и Группа
могут читать и записывать
640 – Владелец
может читать и записывать, и Группа
может читать
777 и 666 редко используются, кроме /tmp.
Спасибо Ilmari Karonen за указание на наиболее часто используемые!
Запустите:
chmod +x /path/to/file.sh
Чтобы сделать его неисполняемым, выполните:
chmod -x /path/to/file.sh
Например, я создал файл .sh
:
vi tester12.sh
После написания кода в vi редакторе, я выйду из него:
:wq!
chmod +x tester12.sh
./tester12.sh
Позволить всем пользователям запускать ваш скрипт
Как было сказано, вы можете установить бит выполнения файла, сделав его исполняемым с помощью chmod +x
. Но вы также можете использовать chmod a+x
:
$ ll file_command.txt
-rw-rw-r-- 1 rick rick 17 Sep 19 08:55 file_command.txt
$ chmod a+x file_command.txt
$ ll file_command.txt
-rwxrwxr-x 1 rick rick 17 Sep 19 08:55 file_command.txt*
ПРИМЕЧАНИЯ:
- Скрипт не обязательно должен оканчиваться на
.sh
, он может заканчиваться на.txt
, как показано здесь, или не иметь расширения вовсе. - Вместо просто
+x
(только вы можете выполнять скрипт), используйтеa+x
, чтобы все пользователи могли выполнять скрипт. - Имя файла имеет
*
, добавленный к нему, чтобы указать, что он исполняемый. Также имя файла меняет цвет на зеленый в большинстве систем.
Выполнение скрипта без делания его исполняемым
Вы все еще можете выполнить bash скрипт без того, чтобы делать его исполняемым. Например:
$ echo "echo Привет, мир" > file_command.txt
$ cat file_command.txt
echo Привет, мир
$ bash file_command.txt
Привет, мир
ПРИМЕЧАНИЯ:
- Сначала мы создаем скрипт, содержащий
echo Привет, мир
. - Затем мы подтверждаем, что скрипт с именем
file_command.txt
правильен. - Наконец, мы запускаем скрипт, вызывая
bash
и передавая ему имя скрипта. Командаbash
на самом деле хранится как/bin/bash
и это исполняемый файл на всех системах Ubuntu. - Создание файла команд избавляет вас от необходимости добавлять шейбанг
#!/bin/bash
в качестве первой строки в скрипт. - Создание файла команд избавляет вас от необходимости делать его исполняемым с помощью
chmod +x
илиchmod a+x
.
Причина, по которой было принято использовать .sh, заключалась в том, что различные инструменты архивации не сохраняли бит разрешений. Идея в том, чтобы вы НЕ добавляли +x к .sh версии файла, а просто создавали новый исполняемый файл. Make уже понимает конвенцию.. ВАМ НЕ НУЖЕН MAKEFILE.
Так что вы просто вводите make filename
graeme@NUC:/tmp$ ls -l filename*
-rw-r--r-- 1 graeme everyone 20 Jan 31 17:27 filename.sh
graeme@NUC:/tmp$ make filename
cat filename.sh >filename
chmod a+x filename
graeme@NUC:/tmp$ ls -l filename*
-rwxr-xr-x 1 graeme everyone 20 Jan 31 17:27 filename
-rw-r--r-- 1 graeme everyone 20 Jan 31 17:27 filename.sh
graeme@NUC:/tmp$ ./filename
hello world
Ответ или решение
Для того чтобы сделать файл, например, скрипт с расширением .sh, исполняемым в терминале, необходимо внести изменения в его разрешения, благодаря чему файл станет исполняемым. Это достигается посредством изменения прав доступа с использованием команды chmod
. Давайте рассмотрим все способы, как это можно сделать.
Теория
Команда chmod
позволяет изменить права доступа к файлу в Unix-подобных системах. Чтобы сделать файл исполняемым, необходимо установить соответствующий флаг прав на исполнение. Обычно права доступа к файлам отображаются в виде трех групп: для владельца файла, для группы и для всех остальных пользователей. Каждая группа может иметь три типа прав: чтение (r), запись (w) и выполнение (x).
Пример
Предположим, что у нас есть файл с именем script.sh
, который мы хотим сделать исполняемым. Исходное состояние файла может выглядеть так:
-rw-r--r-- 1 пользователь имяГруппы 3480 окт 31 10:20 script.sh
Знак -
перед rw-r–r– указывает на то, что это обычный файл, и у него отсутствует право на исполнение. Чтобы добавить право на исполнение и изменить файл на исполняемый, выполните:
chmod +x script.sh
После выполнения этой команды состояние файла изменится на:
-rwxr-xr-x 1 пользователь имяГруппы 3480 окт 31 10:20 script.sh
Теперь у файла script.sh
есть право на выполнение, а это значит, что его можно запустить, как программу.
Применение в различных контекстах
Запуск скрипта в терминале
После того как права на исполнение установлены, мы можем запустить наш скрипт в терминале. Для этого перейдем в директорию, где находится скрипт, и используем команду:
./script.sh
Здесь знак ./
указывает на то, что мы запускаем программу из текущей директории.
Создание алиаса для удобного запуска
Если вы хотите запустить скрипт по другому, более удобному имени, можно создать алиас. Это делается путем добавления алиаса в файл ~/.bashrc
. Откройте файл:
gedit ~/.bashrc
И добавьте в конец файла строку:
alias myscript='/путь/к/файлу/script.sh'
После добавления алиаса обновите сессию терминала:
source ~/.bashrc
Теперь вы сможете запускать скрипт, просто введя myscript
в терминале.
Изменение прав доступа через графический интерфейс
Также вы можете изменить права доступа через графический интерфейс. Для этого щелкните правой кнопкой на файл, выберите Свойства, затем перейдите на вкладку Права и отметьте поле Разрешить выполнение этого файла в качестве программы.
Дополнительные детали и примеры
Можно глубже управлять правами доступа, используя числовые обозначения: для этого вместо символической записи (rwx) используется восьмеричная форма, где r = 4, w = 2, x = 1. Так, полный доступ (rwx) — это 7 (4+2+1). Возможны различные комбинации:
- 755: Владелец может читать, писать, исполнять. Группа и другие могут читать и исполнять.
- 644: Владелец может читать и писать. Группа и другие могут только читать.
Для применения восемеричной записи используем:
chmod 755 script.sh
И в завершение подчеркнем, что скрипт не обязательно должен иметь расширение .sh — это просто соглашение, помогающее идентифицировать файл как shell script.
Заключение
Сделать файл исполняемым — это одна из базовых и часто используемых операций в Unix-подобных системах, особенно для автоматизации задач и запусков скриптов. Понимание команды chmod
и управления правами доступа позволит вам уверенно работать в этих системах, облегчая выполнение повседневных задач.