Посмотреть исполняемый файл в linux

Linux. Где находиться данные в файле, является ли он исполняемый или нет?

Здравствуйте, на сколько я понял в Linux, в каждом файле есть выделенная память на 16 бит, где первые 4 бита — кодируется запись о типе файла, 3 бита — какие-то свойства исполняемости файла, и последние 9 бит — права доступа. Делятся по три группы, с битами отвечающими за чтение, запись, или исполнение, т. е. rwx rwx r-x.
Мне нужно в своей программе узнать является ли он исполняемый или нет. Как я понимаю есть два способа:
1) Системный вызов stat, и прочитать в структуре права доступа.
2) Самому найти эти 16 бит, но где они будут находиться в файле? И можно ли их будет прочитать системными вызовами open и lseek?

Они не в файле — они в описании файла в файловой таблице.
Так что или кури маны по своей файловой системе — или stat.

не знаю подойдет ли, но тупой вариант в лоб

ls -ld file_name | cut -c 4,7,10

выдаст только биты исполнения

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

а то что ты проверяешь просто права на исполнение файла

Спасибо вам, я не знал что есть различия между исполняемым файлом и правами на исполнение.
Я просто разбираюсь с темой, мне надо в ассемблерной программе сделать проверку на то, является ли исполняемый файл или нет. Может быть вы знаете как в этом случае надо сделать, может есть какой-нибудь подходящий системный вызов?

Читайте также:  Astra linux восстановление файловой системы

Источник

Как узнать путь до исполняемого файла в Linux?

Как в Linux узнать путь до исполняемого файла? В виндовс, например, на ярлыке или в bin/app.exe можно через свойство посмотреть Интересуюсь с целью создавать *.desktop ярлыки для заполнениями ими рабочего стола 🗔, так как способ «добавить в избранное» мне не подходит и получается рабочий стол пустой 😔

Для создания *.desktop нет необходимости указывать полный путь. Посмотрите примеры в /usr/share/applications

3 ответа 3

Я по факту могу найти приложение в диспетчере приложений, можно ли как-то оттуда взять этот путь? Или лучше и правильнее поискать путь к .exe в папках типа как в Windows —> C/Program FIles/app_folder/bin/app.exe ?

Внизу слева есть кнопка «Показать приложения», я про это имел в виду, оттуда бы как-то брать пути, там же ярлыки и их на рабочий стол хочу закидывать : )

Если вы знаете имя исполняемого файла, который выполняется в текущий момент, то полный путь к исполняемому можно узнать вот так:

pgrep | while read pid; do echo -ne "$pid\t"; readlink -f /proc/$pid/exe; done 

Например, вывод для исполняемого процесса gopls (сервер go для VS Code):

pgrep gopls | while read pid; do echo -ne "$pid\t"; readlink -f /proc/$pid/exe; done 30880 /mnt/drive2/home2/user/go/bin/gopls 

Набрав в командной строке

whereis locates the binary, source and manual files for the specified command names. The supplied names are first stripped of leading pathname components and any (single) trailing extension of the form .ext (for example: .c) Prefixes of s. resulting from use of source code control are also dealt with. whereis then attempts to locate the desired program in the standard Linux places, and in the places specified by $PATH and $MANPATH.

Источник

Читайте также:  How to install yandex disk on linux

Исполняемые фвйлы

Операционная система Linux, в отличие от Windows, определяет какие файлы являются программами не по расширению, а по специальному флагу исполняемости. У каждого файла есть три основных флага, чтение, запись и исполнение. Они определяют что система может делать с этим файлом.

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

Программа — это набор инструкций, которые по очереди выполняет процессор над данными, чтобы получить определенный результат.

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

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

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

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

chmod категория действие флаг адрес_файла
  • Категория флаги могут устанавливаться для трех категорий: владельца файла, группы файла и всех остальных пользователей. В команде они указываются символами u (user) g (group) o (other) соответственно
  • Действие может быть + (плюс), что будет значить установить флаг или — (минус) что будет значить снять флаг
  • Флаг один из доступных флагов r (чтение) w (запись) x (выполнение)
Читайте также:  Linux копировать сочетание клавиш

Например, чтобы сделать исполняемый скрипт в linux для владельца файла, достаточно выполнить:

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

Как посмотреть флаги

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

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

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

  1. Первое rwx флаги владельца
  2. Второе rwx флаги группы
  3. Третье r-x флаги всех остальных

Как снять флаги

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

Источник

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