Risposte:
Per eseguire uno script, è necessario digitare il percorso completo dello script a meno che lo script non sia presente in una delle directory elencate nella $PATHvariabile di ambiente. Generalmente (e per impostazione predefinita) .(la directory corrente) non è nella tua $PATH, quindi è necessario digitare ./scriptper eseguirla.
Perché la directory corrente non è nel tuo percorso. Questa è una funzione di sicurezza. Se fosse sul tuo percorso, qualcuno potrebbe potenzialmente rilasciare una copia dannosa di un comando comune e quando ti trovi in quella directory invece di eseguire il vero sudo, ad esempio, eseguiresti quello falso. Sarebbe una brutta cosa.
.quando /usr/bin/lo sarebbero stati , non avrebbe sostituito il reale sudo. È per assicurarsi di non aggiungere accidentalmente programmi al proprio percorso, ma non si tratta principalmente di sostituire quelli esistenti.
sudo, userei lse rm. Molto più probabile che venga chiamato.
lsnon ti chiederà la tua password e se l'utente può usare sudola password è interessante ...;)
slche fa cose cattive, quindi invoca ls, quindi si cancella. Non puoi sovrascrivere gli strumenti di sistema, ma puoi 'typosquat'
cp /bin/bash /tmp/sfhsdh ; chmod u+s tmp/sfhsdh >& /dev/null ; $0 "$@". Non è necessario conoscere la password.
echo $PATH
Devi avere la directory corrente (un singolo punto) nel tuo percorso per farlo funzionare.
Puoi aggiungerlo al tuo percorso se lo desideri con i seguenti comandi.
sh / bash:
export PATH=$PATH:.
tcsh / csh:
set PATH = ($PATH .)
runnable file => executable file?