Come fa Linux a riconoscere quale file eseguibile eseguire per primo se ce ne sono più di uno?
Si veda la documentazione delle chiamate di sistema execlp(2), execvp(2) ed execvpe(2).
In breve:
- se l'argomento che specifica il percorso dell'eseguibile contiene una barra ("/"), guarda se c'è l'eseguibile nominato in quel percorso assoluto/relativo e usa quello, altrimenti fallisce;
- altrimenti (se l'argomento non contiene una barra) scansiona ogni directory elencata nella variabile d'ambiente PATH finché non viene trovato un file eseguibile chiamato come quello specificato.
Per esempio:
- il percorso assoluto /bin/ls (assoluto perché inizia con una barra) indica il file eseguibile ls elencato nella directory /bin, e non c'è nessuna possibile ambiguità (poiché una directory non può elencare nomi di file duplicati);
- il percorso relativo foo/ls indica il file eseguibile ls nella sottodirectory foo della directory corrente. O c'è o non c'è;
- il nudo nome del comando ls viene cercato in ogni directory elencata nella variabile d'ambiente PATH (le directory sono separate da punto e virgola), finché non ne viene trovato uno. Si noti che la directory corrente non viene cercata a meno che non sia esplicitamente elencata in PATH (come un punto: ".").
Un tipico valore per PATH potrebbe essere /sbin;/usr/sbin;/bin;/usr/bin;/usr/local/bin
Nota che MS-DOS funziona più o meno allo stesso modo, con l'importante eccezione che nel caso 3, viene cercata prima la directory corrente, e poi tutte le directory elencate nella variabile di ambiente PATH.
Articoli simili
- La Xbox One esegue Microsoft Windows o ha un sistema operativo diverso? È possibile eseguire un file eseguibile su Xbox One?
- Dal momento in cui si apre un file eseguibile, al momento in cui si finisce, come funziona un'installazione?
- Ho scaricato un file eseguibile su Android e l'ho trasferito sul pc. Non funziona, perché?
- Qual è l'estensione di un file eseguibile in Ubuntu?