Qual è la differenza tra filenamee ./filename? In quali circostanze uno è preferito all'altro?
Qual è la differenza tra filenamee ./filename? In quali circostanze uno è preferito all'altro?
Risposte:
Per i file di dati, non fa differenza: entrambe le istruzioni faranno riferimento al file di dati nella directory corrente. (Ad esempio, cat filenamee cat ./filenamesono semanticamente identici.)
È una storia diversa se il nome file in questione si riferisce a un eseguibile , ovvero è la prima (o anche unica) cosa che digiti sulla riga di comando. ./filenamecercherà il file eseguibile nella directory corrente e da nessun'altra parte. filename, D'altra parte, valuterà la variabile d'ambiente PATH, e cercare filenamein ogni directory in esso memorizzati (che potrebbe o non potrebbe includere la directory corrente).
./filename(o qualsiasi altro /path/to/filename) è quindi preferito quando si desidera eseguire un eseguibile specifico , non il primo trovato nel PERCORSO.
Se stai eseguendo un programma, filenamedice di eseguire il primo trovato nel tuo $PATHe il secondo dice di eseguire quello nella directory corrente.
Se stai usando quel nome di file come argomento per un programma come in do_something filenameo do_something ./filenameallora significano la stessa cosa.
Ti riferisci all'esecuzione del comando, giusto?
Esiste una variabile di ambiente PATHche contiene alcune directory di sistema, delimitate da punto e virgola. Quando si digita commandil sistema cerca in queste directory nell'ordine in cui sono specificate per trovare un file eseguibile chiamato <command> Se lo trova, tenta di eseguirlo. Puoi vedere il tuo PERCORSO via echo $PATHin bash. Per esempio:
$ echo $ PATH
/ sbin: / bin: / usr / sbin: / usr / bin: / usr / games: / usr / local / sbin: / usr / local / bin: / home / ivanatora / bin: / usr / local / kde4 / bin: / usr / local / kde4 / bin
Durante la digitazione ./filenamesi specifica il percorso esatto: la directory corrente. Puoi vedere che la directory corrente è raramente nel tuo $ PATH (per motivi di sicurezza). Quindi, se si desidera eseguire un file dalla directory corrente, si utilizza ./filename.
Per eseguire un file dal suo percorso (specialmente se non è in $ PATH) puoi anche digitare <path>/file, come:
/ Sbin / ifconfig
La sicurezza eseguibile è la ragione principale di questa differenza.
Tu non vuoi . (presente directory di lavoro o PWD) nel tuo percorso perché qualcuno potrebbe trojan http://en.wikipedia.org/wiki/Trojan_horse_%28computing%29 un eseguibile cruciale come ps o ls nel tuo PWD e ingannarti presentando dati errati.
Dipende da quali circostanze lo stai usando.
Come argomento, ad esempio "nome file del programma", dipende dal programma, ma generalmente sono identici.
Come nome del programma, ad es. "Argomenti nomefile", quindi "argomenti nomefile" cercherà il PERCORSO per trovare il binario, mentre "./argomento argomenti nomefile" utilizzerà il programma nella directory corrente. Questo è ovviamente utile se. non è nel PERCORSO, ma è anche utile usarlo anche se. è nel percorso, forse perché corrisponde a una voce precedente.