Як я можу виконати файл, не даючи собі на нього дозволу (з 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 $@