Come posso eseguire un file senza eseguire le autorizzazioni?


11

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.



1
non è tutto il punto delle autorizzazioni dei file in modo che questo NON accada? : D
Galois,

Risposte:


14

Controlla la proprietà del file

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.

grafico

  1. Fare clic con il tasto destro del mouse sul file.
  2. Fai clic su "Proprietà".
  3. Fai clic sulla scheda "Autorizzazioni".
  4. Assicurati che il campo "Proprietario" indichi il tuo nome utente. Se non viene visualizzato "Modifica la proprietà del file" di seguito

Riga di comando

  1. Eseguire questo comando in un terminale

    [ ! -O "/path/to/file" ] && echo "You don't own the file"
    
  2. Se stampa " You don't own the file", vedere "Modifica proprietà del file" di seguito.

Cambia la proprietà del file

Eseguire questo comando in un terminale

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

File eseguibili

Una risposta che ho trovato da un commento dal Lekensteyn su una risposta per una domanda su chmodsu 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/executablecon 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.

Controlla se un programma è a 64 o 32 bit

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 i386solo, allora è a 32 bit.


Script

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/filecon 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

.jarFile Java

Per i jar eseguibili Java, puoi semplicemente usare questi comandi (sostituendo /path/to/jarcon il percorso corretto):

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

Quando non hai bisogno 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 cdprima.

  • Il programma non esegue alcuna operazione sui file (esempio: usa solo apt-get)
  • Il programma utilizza cd(o equivalente) per passare a un percorso assoluto prima di eseguire qualsiasi operazione sui file (esempio cd "$(dirname "$0")":)
  • Il programma non fa riferimento a percorsi relativi (percorsi che iniziano ./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.


1
Chiunque voglia scrivere questo script e farlo coprire tutte le possibilità (se usi molto filesystem MS ) è il benvenuto. Potrei farlo da solo, ma non contare su di esso. (+1 a questo commento se lo desideri, supporto sufficiente e potrei farlo)
kiri,

0

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.


Non vedo come questo sia particolarmente diverso dabash script $@
kiri,

Non è fondamentalmente diverso nel funzionamento. Molto probabilmente non capisco quale problema stai cercando di risolvere - supponevo che tu volessi un modo punta e clicca per eseguire uno script che (per qualsiasi motivo) non fosse eseguibile. "Creane uno eseguibile e fai in modo che l'altro sia" è una soluzione a questo problema. Se questo è il problema sbagliato ... beh :)
Stabledog,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.