Исполняемые фвйлы
Операционная система Linux, в отличие от Windows, определяет какие файлы являются программами не по расширению, а по специальному флагу исполняемости. У каждого файла есть три основных флага, чтение, запись и исполнение. Они определяют что система может делать с этим файлом.
Когда вы загружаете различные установщики программ из интернета или создаете скрипт в текстовом редакторе, для них устанавливаются флаги по умолчанию - только чтение и запись. Вы не сможете запустить такой файл как программу, его нужно доработать.
Программа - это набор инструкций, которые по очереди выполняет процессор над данными, чтобы получить определенный результат.
На самом деле для процессора нет разницы между данными и инструкциями. И те и другие состоят из байт, проще говоря цифр. Определенные сочетания цифр будут означать то или иное действие процессора. Для процессора нет никакой разницы что выполнять, исполняемый файл linux или обычный текстовый файл. Оба могут быть успешно выполнены, вот только во втором варианте инструкции не имеют никакого смысла.
Чтобы система могла определить какие файлы нужно выполнять, а какие лучше не надо и был придуман флаг исполняемости. По сути, флаг исполяемости - это несколько байт в файловой системе, которые говорят нужно выполнять файл или нет, само содержимое файла никак не изменяется. Со скриптами все работает точно так же, только команды из файла выполняет не процессор а интерпретатор, в bash
скриптах это сама оболочка bash
. В обычных программах тоже есть свой загрузчик - это ld-linux.so.2
.
Как сделать файл исполняемым в Linux
В операционной системе Linux, для управления флагами файлов используется утилита chmod
. Синтаксис вызова утилиты:
chmod категория действие флаг адрес_файла
Категория
флаги могут устанавливаться для трех категорий: владельца файла, группы файла и всех остальных пользователей. В команде они указываются символамиu
(user)g
(group)o
(other) соответственноДействие
может быть+
(плюс), что будет значить установить флаг или-
(минус) что будет значить снять флагФлаг
один из доступных флаговr
(чтение)w
(запись)x
(выполнение)
Например, чтобы сделать исполняемый скрипт в linux для владельца файла, достаточно выполнить:
chmod u+x адрес_файла
Этого в большинстве случаев бывает достаточно, но если мы хотим чтобы файл могли выполнять и другие пользователи, нужно указать также другие категории g
и o
:
chmod ugo+x адрес_файла
Как посмотреть флаги
Посмотреть флаги в терминале можно с помощью утилиты ls
:
ls -l каталог_с_файлами
Это значит, что все флаги включены для всех категорий, если флаг не установлен, на его месте будет прочерк:
- Первое
rwx
флаги владельца - Второе
rwx
флаги группы - Третье
r-x
флаги всех остальных
Как снять флаги
Снять флаг исполняемого файла очень просто. Используется та же команда только со знаком минус:
chmod u-x адрес_файла