Come posso eseguire un file senza concedermi le autorizzazioni di esecuzione (con chmod u+x
) per esso?
Se provo a selezionare il segno di spunta "Consenti esecuzione file come programma", il segno di spunta viene immediatamente rimosso.
Come posso eseguire un file senza concedermi le autorizzazioni di esecuzione (con chmod u+x
) per esso?
Se provo a selezionare il segno di spunta "Consenti esecuzione file come programma", il segno di spunta viene immediatamente rimosso.
Risposte:
Per favore, fallo prima di qualsiasi altra cosa (a meno che tu non sia sicuro di possedere il file).
Verificare e assicurarsi di possedere il file che si sta tentando di eseguire con uno dei seguenti metodi.
Eseguire questo comando in un terminale
[ ! -O "/path/to/file" ] && echo "You don't own the file"
You don't own the file
", vedere "Modifica proprietà del file" di seguito.Eseguire questo comando in un terminale
sudo chown $USER:$(id -gn $USER) "/path/to/file"
Una risposta che ho trovato da un commento dal Lekensteyn su una risposta per una domanda su chmod
su partizioni NTFS che credo meriti di essa la propria domanda e risposta, pieno credito a Lekensteyn.
Utilizzare questo comando per i file eseguibili (sostituendo /path/to/executable
con il percorso corretto):
File eseguibili a 64 bit:
/lib64/ld-linux-x86-64.so.2 /path/to/executable
File eseguibili a 32 bit:
/lib/ld-linux.so.2 /path/to/executable
Se quanto sopra non funziona (o genera errori di file non trovati), prova a utilizzare questo prima del comando sopra
cd "$(dirname /path/to/executable)"
Tutti i comandi sopra non funzioneranno con script basati su testo (Bash, Python, Perl, ecc.), Vedi sotto.
Utilizzare questo comando per scoprire se un eseguibile è 32 ( x86
) o 64 ( x86-64
) bit
objdump -f "$file" | grep '^architecture' | cut -d, -f1 | sed 's/architecture: //'
Se dice i386:x86-64
, allora è a 64 bit. Se dice i386
solo, allora è a 32 bit.
Per gli script basati su testo (Bash, Python, Perl, ecc.), È necessario utilizzare il comando specificato nella prima #!
riga nel file.
Ad esempio, se la prima riga del file è
#!/usr/bin/env python3
quindi eseguire questi comandi in un terminale (sostituendo /path/to/file
con il percorso corretto)
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
File JavaPer i jar eseguibili Java, puoi semplicemente usare questi comandi (sostituendo /path/to/jar
con il percorso corretto):
cd "$(dirname /path/to/jar)" # Not strictly necessary, see section below
java -jar /path/to/jar
cd "$(dirname /path/to/file)"
Queste sono possibili circostanze in cui non è necessario utilizzare cd "$(dirname /path/to/file)"
prima di eseguire il programma con qualsiasi metodo: se almeno uno è vero, non sarà necessario cd
prima.
apt-get
)cd
(o equivalente) per passare a un percorso assoluto prima di eseguire qualsiasi operazione sui file (esempio cd "$(dirname "$0")"
:)./
o iniziano senza barra)Se non sei sicuro, aggiungi cd "$(dirname "$0")"
(o equivalente) all'inizio dello script (se applicabile) o usa cd "$(dirname /path/to/file)"
comunque.
Se si tratta di uno script di shell, è possibile "acquistarlo" da un altro script di shell, ovvero:
#!/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 "$@"
"$ @" Aggiunge i parametri della riga di comando, se necessario.
Detto questo, questa non è probabilmente la soluzione migliore per il problema di fondo, ma non sappiamo abbastanza su quel problema da offrire alternative.
bash script $@