Risposte:
In Linux, UNIX e relativi sistemi operativi, .
indica la directory corrente. Poiché si desidera eseguire un file nella directory corrente e tale directory non è nella propria $PATH
, è necessario il ./
bit per dire alla shell dove si trova l'eseguibile. Quindi, ./foo
significa eseguire l'eseguibile chiamato foo
che si trova in questa directory.
Puoi usare type
o which
per ottenere il percorso completo di tutti i comandi trovati nel tuo $PATH
.
alias
es che possono interferire, non solo $PATH
.
.
prima, allora sarebbe un problema di sicurezza, tu o qualcun altro potresti sostituire ls
per esempio (un semplice virus / trojen: crea un file zip con un eseguibile chiamato ls
al suo interno, mentre qualcuno sta cercando attraverso , eseguono questo eseguibile, quello ...). Se lo .
hai cercato per ultimo, puoi passare molto tempo impazzendo non sapendo perché il tuo programma non funziona (ad es. Fai un programma chiamato test, invece di eseguirlo esegue il programma di test dei sistemi. Che non produce output).
export PATH="$PATH:."
per eseguire il comando nella directory corrente se non si trova altrove nel PERCORSO, è possibile aggiungerlo nel file .bashrc
La risposta letterale è come altri hanno dato: perché la directory corrente non è nella tua $PATH
.
Ma perchè? In breve, è per la sicurezza. Se stai cercando nella directory home di qualcun altro (o / tmp) e digiti solo gcc
o ls
, vuoi sapere che stai eseguendo quella vera, non una versione maligna che il tuo amico burlone ha scritto che cancella tutti i tuoi file. Un altro esempio potrebbe essere test
o [
, che potrebbe sovrascrivere quei comandi negli script di shell, se la shell non li ha come built-in.
Avere .
l' ultima voce nel tuo percorso è un po 'più sicuro, ma ci sono altri attacchi che ne fanno uso. Uno facile è quello di sfruttare errori di battitura comuni, come sl
o ls-l
. Oppure, trova un comando comune che sembra non essere installato su questo sistema vim
, ad esempio poiché i amministratori di sistema hanno una probabilità superiore alla media per digitarlo.
PATH
variabile d'ambiente.
Se vuoi dire, perché hai bisogno ./ All'inizio - questo perché (diversamente da Windows), la directory corrente non fa parte del tuo percorso per impostazione predefinita. Se corri:
$ ls
la tua shell cerca ls
nelle directory nella tua variabile d'ambiente PATH ( echo $PATH
per vederlo), ed esegue il primo eseguibile chiamato ls
che trova. Se digiti:
$ a.out
la shell farà altrettanto, ma probabilmente non troverà un eseguibile chiamato a.out. Devi dire alla shell dove si trova a.out: è nella directory corrente (.) Quindi il percorso è ./a.out
.
Se stai chiedendo perché si chiama "a.out", questo è solo il nome del file di output predefinito per gcc. Puoi cambiarlo con la riga di comando arg. Per esempio:
$ gcc test.c -o test
$ ./test
touch .a.out; ls -lA
a vedere questo.)
<dir>/<file>
quindi in pratica stai dicendo di eseguire un file nella directory corrente, che è indicato da./test
Puoi provare ad aggiungere :.
alla tua variabile $ PATH.
Prova ALT + F2 e digita: gksudo gedit /etc/environment
se esegui Linux / GTK (questo è quello che hai se usi Ubuntu).
TUTTAVIA, ti consiglio vivamente di NON farlo. È cattivo, cattivo, cattivo.
Sai, questo genere di cose funziona così dal 1970. C'è un motivo per cui la directory corrente non è inclusa in $ PATH.
.
è la directory corrente
.something
sarebbe un file nascosto (digitare "ALT +" per farli apparire in Nautilus o provare " ls -la
".
./someProgram.sh
è ciò che si digita per ESEGUIRE un eseguibile someProgram.sh nella directory corrente.
.somethingElse
significherebbe che hai un eseguibile nascosto nella directory corrente, che è una cattiva idea.
./command_name
per eseguire un comando in Linux?"