- Как проверить, является ли файл исполняемым, с помощью команды file в Bash?
- 2 ответа
- Делаем файл исполняемым в Linux
- Чем отличается Linux от Windows в плане исполнений файлов, так это тем, что первая система определяет выполняемые файлы программными не по расширению, а по специальному флагу исполняемости. Так у каждого файла есть три режима исполняемости: чтение, исполнение и запись. Именно эти режима определяют, что система может делать с конкретным файлом. Когда пользователь скачивает различные установщики из интернета или создает скрипт, то по умолчанию ему присваиваются следующие режимы – чтение и запись. Одним словом, пользователь не сможет сделать с такой программой ничего, так как с ним нужно сделать кое-что еще.
- Что означает исполняемость?
- Как сделать файл исполняемым
- Как установить флаг исполняемости в GUI
- Как сделать файл исполняемым в Linux
- Что такое исполняемость?
- Как сделать файл исполняемым в Linux?
- Как установить фалг исполняемости в GUI
- Выводы
- Что эквивалентно «exe-файлу»?
- Windows
- Linux / Unix
Как проверить, является ли файл исполняемым, с помощью команды file в Bash?
У меня есть задание, в котором я должен использовать команду file, чтобы проверить, является ли файл исполняемым типом или нет.
Формулировка, использованная в задании, следующая:
Команду file следует использовать для общего определения типа файла аргумента и, в частности, является ли файл исполняемым типом или нет. Выходные данные команды файла будут включать специальное ключевое слово «исполняемый», если файл является исполняемым типом.
Далее в вопросе говорится:
- Используйте файл и найдите в выходных данных ключевое слово «исполняемый», чтобы определить, является ли файл исполняемым типом или нет.
Мне пока не удалось найти какую-либо документацию, объясняющую, как это сделать. Когда я тестирую это на bash-скрипте в CentOS8, он возвращает это как результат:
Edit1 / found_the_answer_edit: Я попытался использовать идею ti7 об использовании тестового сценария, и он получил тот же результат, что и они. Это заставило меня задуматься. Сценарии для моих заданий должны быть отформатированы. В частности, чтобы получить признание наших скриптов, мы должны иметь:
2 ответа
Ваш сценарий validate.sh , вероятно, не исполняемый, как это определяет file ! Вероятно, это потому, что на нем неправильный заголовок
Как только это будет решено, вы можете проверить ключевое слово executable в ответе, возможно, с помощью grep
Если вас не заставляют использовать file , использование аргумента test -x может быть намного лучше, чем предлагается здесь, поскольку file не проверяет разрешения , а указывает, что формат файла является исполняемым
Обратите внимание, что команда тестовой команды на самом деле [ или [[ с небольшими отличиями
Вы можете проверить права доступа к нему с помощью ls , в котором перечислены файлы в каталоге и, при необходимости, их свойства.
Вы можете сделать свой скрипт исполняемым с помощью chmod (тривиально, chmod +x )
Не уверен, действительно ли это bash, работающий в Windows, и, возможно, WSL. Если это так, файл фактически вернет, что данный исполняемый файл Windows является исполняемым.
Имея это в виду, вы можете перейти к grep и протестировать результат, т.е.
Источник
Делаем файл исполняемым в Linux
Чем отличается Linux от Windows в плане исполнений файлов, так это тем, что первая система определяет выполняемые файлы программными не по расширению, а по специальному флагу исполняемости. Так у каждого файла есть три режима исполняемости: чтение, исполнение и запись. Именно эти режима определяют, что система может делать с конкретным файлом. Когда пользователь скачивает различные установщики из интернета или создает скрипт, то по умолчанию ему присваиваются следующие режимы – чтение и запись. Одним словом, пользователь не сможет сделать с такой программой ничего, так как с ним нужно сделать кое-что еще.
Что означает исполняемость?
Но для начала не будет лишним разобраться с таким вопросом, как: что такое исполняемость и что это вообще означает? Начнем с программы, являющейся набором инструкций, выполняемых процессором над совокупностью данных с целью получения нужного результата. Для процессора не существует разницы между инструкциями и данными.
И первые, и вторые состоят из цифр – байт. То есть, определенное сочетание цифр будет означать для процессора необходимость выполнения конкретного действия. Для процессора нет принципиальной разницы, какой процесс выполнять – файл операционной системы или текстовый файл. И первый, и второй файл будут выполнены, вот только в случае с текстовым файлом необходимость в инструкциях фактически отпадает.
Для понимания системой, какие файлы должны быть выполнены по инструкции, а какие выполнять не нужно, и были придуманы флаги исполняемости. Фактически содержимое файла никак не изменяется в зависимости от установленного флага исполняемости – отличие сводится только к нескольким строчкам. Со скриптами все работает точно так же, только команды из файла выполняет не процессор, а интерпретатор, например, в bash скриптах — сама оболочка bash. Да и в обычных программ тоже есть свой загрузчик — это ld-linux.so.2.
Как сделать файл исполняемым
В системе Linux предусмотрена специальная утилита, которая позволяет управлять флагами файлов, которая получила название chmod. Для вызова этой утилиты необходимо задействовать синтаксис:
$ chmod категория действие флаг адрес_файла
И здесь необходимо учитывать следующее:
- Флаг — один из доступных флагов — r (чтение), w (запись), x (выполнение).
- Категория — флаги могут устанавливаться для трех категорий: владельца файла, группы файла и всех остальных пользователей. В команде они указываются символами u (user) g (group) o (other) соответственно.
- Действие — может быть + (плюс), что будет значить установить флаг или — (минус) снять флаг.
Таким образом, чтобы сделать исполняемым скрипт в Linux, пользователю необходимо выполнить:
Зачастую уже этого достаточно, чтобы сделать файл исполняемым, но если необходимо наделить других пользователей полномочиями исполнять эти файлы, еще необходимо добавить:
Чтобы посмотреть флаги в терминале достаточно воспользоваться утилитой ls:
Флаги включены для всех категорий. Первое rwx — флаги владельца, второе — группы, а третье — для всех остальных. Если флаг не установлен, на его месте будет прочерк.
Снять флаг исполняемого файла очень просто. Используется та же команда только со знаком минус:
Дальше рассмотрим вопрос установки управляемости в GUI.
Как установить флаг исполняемости в GUI
Установка файлов исполняемости доступна не только через терминал, но и файловые менеджеры, одним из которых является GUI. Для новичков, возможно, даже эта инструкция окажется проще и доступней. Рассмотрим на примере файлового менеджера GNOME, Nautilus. Кликните правой кнопкой по нашему файлу программы или скрипта, чтобы открыть контекстное меню, затем выберите свойства:
Переходим на вкладку права и устанавливаем галочку «Разрешить выполнение файла как программы»:
Теперь файл будет запущен системой непосредственно из файлового менеджера. Вот и вся инструкция. Теперь с запуском программы или скрипта из интернета у вас не возникнет трудностей.
Источник
Как сделать файл исполняемым в Linux
Операционная система Linux, в отличие от Windows, определяет какие файлы являются программами не по расширению, а по специальному флагу исполняемости. У каждого файла есть три основных флага, чтение, запись и исполнение. Они определяют что система может делать с этим файлом.
Когда вы загружаете различные установщики программ из интернета или создаете скрипт в текстовом редакторе, для них устанавливаются флаги по умолчанию — только чтение и запись. Вы не сможете запустить такой файл как программу, с ним нужно сделать еще кое-что. В этой статье мы рассмотрим как сделать файл исполняемым в Linux.
Что такое исполняемость?
Уже много написано о том, как установить флаг исполняемости. Но что происходит с файлом во время этого, что такое исполянемость и как это работает?
Программа — это набор инструкций, которые по очереди выполняет процессор над данными, чтобы получить определенный результат. Но это вы, наверное, уже знаете.
На самом деле для процессора нет разницы между данными и инструкциями. И те и другие состоят из байт, проще говоря цифр. Когда-то договорились, что определенные сочетания цифр будут означать то или иное действие процессора, а во всем остальном это те же данные. Поэтому для процессора нет никакой разницы что выполнять — исполняемый файл 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 — флаги владельца, второе — группы, а третье — для всех остальных. Если флаг не установлен, на его месте будет прочерк.
Снять флаг исполняемого файла очень просто. Используется та же команда только со знаком минус:
chmod u-x адрес_файла
Как установить фалг исполняемости в GUI
Вы можете сделать файл исполняемым в linux не только через терминал. Такая функциональность есть во всех файловых менеджерах. Возможно, на первых порах это будет для вас проще. Рассмотрим на примере файлового менеджера GNOME, Nautilus. Кликните правой кнопкой по нашему файлу программы или скрипта, чтобы открыть контекстное меню, затем выберите свойства:
Дальше перейдите на вкладку права и установите галочку Разрешить выполнение файла как программы:
Готово, исполняемый файл linux может быть запущен системой, прямо из файлового менеджера.
Выводы
Вот и все, теперь вы знаете как сделать файл исполняемым в linux. И если нужно будет запустить скрипт или установщик из интернета, у вас не возникнет никаких проблем. Если остались вопросы, спрашивайте в комментариях!
Источник
Что эквивалентно «exe-файлу»?
Я не знаю, каково точное расширение исполняемого файла. Это .deb или .tar.gz ?
В Windows нет стандартного File-Extention, подобного файлу «.exe».
В Linux практически любой файл может быть исполняемым. Окончание файла просто описывает (но не обязательно), что или как файл «исполняется».
Например, скрипт оболочки заканчивается на .sh и «выполняется» через оболочку bash.
В своем вопросе вы спрашиваете .deb и .tar.gz. Хорошо. Файл .deb устанавливает программное обеспечение в вашей системе (пожалуйста, будьте осторожны!), А файл .tar.gz представляет собой сжатый файл, такой как .zip, который вы могли бы узнать по Окна.
Я бы суммировал систему следующим образом:
Любой файл, начинающийся с #! (называемый shebang или hashbang) в первой строке, является просто сценарием. Путь после шебанга — это путь к программе (исполняемому файлу), которая должна проанализировать скрипт, при условии, что для файла было установлено разрешение на выполнение chmod a+x filename .
Поэтому, ответьте на свой оригинальный вопрос, расширения нет, или редко, это .elf или .bin .
Это сделано вики-сообществом, поэтому любой может добавить запись.
Концепция исполняемого файла отличается в Unix / Linux от Windows.
Windows
Все, что заканчивается .exe или .com становится исполняемым файлом.
Linux / Unix
Каждый файл имеет исполняемый бит, поэтому любой файл может быть выполнен, в отличие от Windows. Чтобы увидеть, является ли файл исполняемым, вы можете проверить его свойства (вкладка «Разрешения») или даже увидеть их помеченные в терминале (все они отмечены *).
Даже текстовые файлы (например, сценарии оболочки) могут иметь свои исполняемые биты и запускаться как единое целое.
Чтобы узнать, что операционная система UNIX думает о типе конкретного файла, вы используете команду file:
В приведенном выше примере я указываю путь к программе ‘ls’, вы должны заменить путь к вашему файлу.
Файл сценария будет выглядеть так:
Случайный текстовый файл:
Он даже достаточно умен, чтобы правильно идентифицировать программу Windows, если у вас есть одна, лежащая на вашем компьютере с UNIX:
И когда он не может понять, что это за файл (но может открыть его), он называет это данными:
Выполнение файла в Linux вообще не связано с именем файла или расширением. Любой файл может быть потенциально выполнен при условии, что он обрабатывается binfmt механизмом ядра (и что для него установлены разрешения на выполнение).
Наиболее распространенным форматом для исполняемого файла является ELF , хотя некоторые ядра могут быть скомпилированы для поддержки старого a.out формата. (Для получения полной технической информации, binfmt_elf.c это где искать.)
Другим распространенным механизмом является «притон» система, обрабатывается binfmt_script , который ищет #!/path/to/interpreter в начале файла.
binfmt_misc позволяет для регистрации других обработчиков, как описано здесь .
Если вам нравится заниматься программированием ядра, вы даже можете написать свой собственный .
Хотя это и не связано напрямую, file команда должна указать вам, является ли файл исполняемым файлом ELF или чем-то еще.
Соглашение об именах не имеет ничего общего с состоянием исполняемого файла (кроме случаев, когда он используется для binfmt_misc регистрации). Они просто соглашения. Как правило, .exe файл, найденный в Linux, может быть моно-приложением , получившим .exe расширение в соответствии с соглашением, исходящим из мира Windows / .Net.
Другой аспект, который может возникнуть, когда вы хотите «запустить» файл, — это иметь инструмент проводника, который использует расширения регистра, чтобы иметь возможность запустить программу, которая откроет эти файлы. Это то, что произойдет, если вы дважды щелкнете по a .txt , .tar.gz или .deb , например: файлы не являются ни исполняемыми, ни исполняемыми, но то, что вы используете для двойного щелчка, выбирает, какой исполняемый файл нужно открыть, чтобы открыть эти файлы.
В Windows .exe-файл — это компьютерный файл, который заканчивается расширением «.exe», которое обычно называют исполняемым файлом. Когда вы нажимаете exe-файл, встроенная подпрограмма автоматически выполняет код, который может привести в движение несколько функций. EXE-файлы обычно используются для установки файлов в операционной системе Windows.
Кроме того, у вас есть файлы .tar, обычно известные как сжатые файлы. В версиях Linux, таких как Ubuntu, функции используются в различных дистрибутивах программного обеспечения, причем большая часть исходного кода программного обеспечения доступна в формате tar.gz. Из этого можно предположить, что tar. gz — это форма хорошо известного формата .tar, который используется для архивирования.
В Ubuntu, с другой стороны, формат файла .deb больше похож на файл .exe в windows. Когда вы открываете его, центр программного обеспечения обрабатывает его код и устанавливает содержащуюся в нем программу, такую как исполняемый файл.
Даже если вы по-прежнему можете устанавливать программное обеспечение и пакеты из исходного формата (tar.gz), наиболее подходящим форматом для установки программного обеспечения является .deb. Возьмем, к примеру, Ubuntu Software Center; все приложения, которые он содержит, на самом деле являются файлами .deb. В целом, в linux почти каждый формат файла (включая .deb и tar.gz, а также хорошо известные файлы bash .sh) может вести себя как исполняемый файл, так что вы можете установить пакеты или программное обеспечение с этим.
В Windows нет эквивалента расширению exe, указывающему на то, что файл является исполняемым. Вместо этого исполняемые файлы могут иметь любое расширение и, как правило, вообще не иметь расширения .
Linux / Unix использует права доступа к файлам , чтобы указать , если файл может быть выполнен. В частности, есть разрешение на выполнение файла, которое сообщает системе, что этот файл разрешено выполнять. Однако отсутствие этого разрешения не означает, что файл не является исполняемым; просто, что соответствующий пользователь не имеет права пытаться выполнить его. Точно так же наличие этого разрешения не всегда указывает на то, что файл является допустимым исполняемым файлом.
Linux / Unix имеет двоичный формат исполняемых файлов, называемый ELF, который эквивалентен двоичным исполняемым форматам PE (Windows) или MZ / NE (DOS), которые обычно имеют расширение .exe.
Тем не менее, другие типы файлов могут быть исполняемыми, в зависимости от оболочки. Как правило, если вы пытаетесь выполнить файл, который система не распознает как двоичный исполняемый файл (например, формат ELF), то он интерпретируется текущим интерпретатором оболочки. Это выполняет тот же эффект, что и пакетные файлы в Windows или DOS, за исключением того, что опять-таки это не расширение, которое определяет его тип или способ его выполнения.
Файлы оболочки могут необязательно начинаться с хеш-бенга (первые два символа в файле #! сопровождаются путем к интерпретатору), и в этом случае вместо интерпретации остальной части файла с помощью текущего интерпретатора оболочки он может запустить альтернативную оболочку или интерпретатор для выполнить файл. Таким образом, вы можете иметь сценарий на любом интерпретируемом языке и при этом запускать его с правильным интерпретатором при попытке выполнения сценария.
Файлы EXE и DLL являются переносимыми исполняемыми файлами. Они основаны на Unix-файлах PE / COFF.
Прочитайте http://en.wikipedia.org/wiki/Portable_Executable для получения дополнительной информации.
В Ubuntu у вас нет определенного расширения для исполняемого файла. Обычно это файлы, которые названы в честь приложения, к которому они относятся.
Важным фактором является то, что в этих файлах установлен исполняемый бит. Если у вас есть цветной терминал, вы заметите, что это другой цвет при использовании ls .
В файловой системе Unix бинарные исполняемые файлы обычно хранятся в собственном месте.
- / bin (основные двоичные файлы)
- / sbin (системные двоичные файлы)
- / usr / bin (двоичные файлы приложения)
тогда как другие ресурсы приложения могут храниться в / usr / lib / или / usr / share /
Файл deb более корректно соответствует файлу msi в windows (то есть установщику пакета).
Источник