Как я могу выполнить файл без разрешения на выполнение?

Как я могу выполнить файл, не предоставляя себе разрешения на выполнение (с chmod u+x) для него?

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

11
задан 7 February 2014 в 06:24

2 ответа

Проверьте принадлежность файла

Сделайте это перед чем-либо далее (если Вы не уверены, что владеете файлом).

Проверьте и удостоверьтесь, что Вы владеете файлом, который Вы пытаетесь выполнить с одним из следующих методов.

Графический

  1. Щелкните правой кнопкой по файлу.
  2. Нажмите 'Properties'.
  3. Нажмите вкладку 'Permissions'.
  4. Удостоверьтесь, что поле 'Owner' говорит Ваше имя пользователя. Если это не видит "Принадлежности файла изменения" ниже

Командная строка

  1. Выполните эту команду в терминале

    [ ! -O "/path/to/file" ] && echo "You don't own the file"
    
  2. Если это печатает"You don't own the file", см. "Принадлежность файла изменения" ниже.

Измените принадлежность файла

Выполните эту команду в терминале

sudo chown $USER:$(id -gn $USER) "/path/to/file"

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

Ответ я нашел из комментария Lekensteyn на ответе для вопроса о chmod на разделах NTFS, которые я думаю, заслуживает своего собственного вопроса и ответа, полного кредита к Lekensteyn.

Используйте эту команду для исполняемых файлов (замена /path/to/executable с корректным путем):

  • Исполняемые файлы на 64 бита:

    /lib64/ld-linux-x86-64.so.2 /path/to/executable
    
  • Исполняемые файлы на 32 бита:

    /lib/ld-linux.so.2 /path/to/executable
    

Если вышеупомянутое не работает (или повышает файл, не найденный ошибками), попытайтесь использовать это перед вышеупомянутой командой

cd "$(dirname /path/to/executable)"

Все вышеупомянутые команды не будут работать на основанные на тексте сценарии (Bash, Python, Perl, и т.д.), видеть ниже.

Проверьте, составляет ли программа 64 или 32 бита

Используйте эту команду, чтобы узнать, равняется ли исполняемый файл 32 (x86) или 64 (x86-64) бит

objdump -f "$file" | grep '^architecture' | cut -d, -f1 | sed 's/architecture: //'

Если это говорит i386:x86-64, затем это - 64 бита. Если это говорит i386 только, затем это - 32 бита.


Сценарии

Для основанных на тексте сценариев (Bash, Python, Perl, и т.д.), необходимо использовать команду, указанную в первом #! строка в файле.

Например, если первая строка файла

#!/usr/bin/env python3

затем выполните эти команды в терминале (замена /path/to/file с корректным путем)

cd "$(dirname /path/to/file)"       # Not strictly necessary, see section below

# Replace '/usr/bin/env python3' with the first line without the front #!
/usr/bin/env python3 /path/to/file  # Use './file' if you want

Java .jar файлы

Для исполнимой банки Java можно просто использовать эти команды (замена /path/to/jar с корректным путем):

cd "$(dirname /path/to/jar)"   # Not strictly necessary, see section below
java -jar /path/to/jar

Когда Вам не нужно cd "$(dirname /path/to/file)"

Это возможные обстоятельства, где привычка необходимо использовать cd "$(dirname /path/to/file)" прежде, чем запустить программу с любым методом: Если по крайней мере один верен, Вы потребность привычки cd сначала.

  • Программа не выполняет операций файла сама (пример: это только использует apt-get)
  • Использование программы cd (или эквивалентный) для изменения на полный путь прежде, чем сделать любые операции файла (пример: cd "$(dirname "$0")")
  • Программа не ссылается ни на какие относительные пути (пути, запускающиеся с ./ или запуск без наклонной черты)

Если не уверенный, добавить cd "$(dirname "$0")" (или эквивалентный) к верхней части сценария (если применимо) или использования cd "$(dirname /path/to/file)" так или иначе.

14
ответ дан 7 February 2014 в 06:24

Если это сценарий оболочки, вы можете «взять» его из другого сценария оболочки, например:

#!/bin/bash
# This script runs another script indirectly, by sucking in its contents and evaluating inline:

source /path/to/script/which/lost/its/exec/flag "$@"

«$ @» добавляет параметры командной строки, если это необходимо. ]

Сказав это, это, вероятно, не лучшее решение для основной проблемы, но мы недостаточно знаем об этой проблеме, чтобы предложить альтернативы.

0
ответ дан 7 February 2014 в 06:24

Другие вопросы по тегам:

Похожие вопросы: