Как я могу выполнить файл, не предоставляя себе разрешения на выполнение (с chmod u+x
) для него?
Если я попытаюсь установить флажок «Разрешить выполнение файла как программы», этот флажок будет немедленно удален.
Как я могу выполнить файл, не предоставляя себе разрешения на выполнение (с chmod u+x
) для него?
Если я попытаюсь установить флажок «Разрешить выполнение файла как программы», этот флажок будет немедленно удален.
Ответы:
Пожалуйста, сделайте это прежде, чем что-либо еще (если вы не уверены, что владеете файлом).
Проверьте и убедитесь, что у вас есть файл, который вы пытаетесь выполнить одним из следующих способов.
Выполните эту команду в терминале
[ ! -O "/path/to/file" ] && echo "You don't own the file"
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 и т. Д.), См. Ниже.
Используйте эту команду, чтобы узнать, является ли исполняемый файл 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
.jar
Файлы 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)"
любом случае.
Если это сценарий оболочки, вы можете «взять» его из другого сценария оболочки, то есть:
#!/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 "$@"
"$ @" Добавляет параметры командной строки, если это необходимо.
Сказав это, это, вероятно, не лучшее решение для основной проблемы, но мы недостаточно знаем об этой проблеме, чтобы предложить альтернативы.
bash script $@