Sequenza per capire da dove viene lanciato un comando [messaggio #35968] |
dom, 20 febbraio 2011 18:46 |
MBulu Messaggi: 20 Registrato: febbraio 2011 |
Junior Member |
|
|
Ciao a tutti,
mi interessa capire una cosa: nel momento in cui digito un comando dal
terminale, qual'è la sequenza di cartelle in cui viene cercato il
comando da lanciare?
Se per esempio ho 2 comandi differenti ma con lo stesso nome in 2
directories differenti, come faccio a sapere quale dei 2 viene
lanciato?
So che in windows prima viene cercato nella directory corrente e poi,
in sequenza, nelle directories che fanno parte della PATH e viene
lanciato il primo che viene trovato nella sequenza appena descritta.
In linux, come funziona?
Grazie in anticipo, Mario
|
|
|
|
|
|
Re: Sequenza per capire da dove viene lanciato un comando [messaggio #36008 è una risposta a message #35968] |
mar, 22 febbraio 2011 10:09 |
mallin.shetland Messaggi: 129 Registrato: novembre 2010 |
Senior Member |
|
|
Addì Sun, 20 Feb 2011 18:46:19 +0100 MBulu scrisse:
> mi interessa capire una cosa: nel momento in cui digito un comando dal
> terminale, qual'è la sequenza di cartelle in cui viene cercato il
> comando da lanciare?
Nessuna sequenza, Linux non ha cartelle.
Addì Sun, 20 Feb 2011 18:46:19 +0100 MBulu scrisse:
> Se per esempio ho 2 comandi differenti ma con lo stesso nome in 2
> directories differenti, come faccio a sapere quale dei 2 viene lanciato?
man which
which man
which which
Addì Sun, 20 Feb 2011 18:46:19 +0100 MBulu scrisse:
> So che in windows prima viene cercato nella directory corrente e poi, in
> sequenza, nelle directories che fanno parte della PATH e viene lanciato
> il primo che viene trovato nella sequenza appena descritta.
No, assolutamnete no.
Innanzi tutto sia in MSDOS e Windows(|NT|XP) sia in Linux la ricerca viene
effettuata solo se digiti il comando senza un percorso.
In MSDOS e Windows si cerca prima tra i comandi interni, poi se viene dato
un comanda esterno si cerca nella directory corrente del drive correne (in
Windows esiste una directory corrente per ogni unità disco) ed infine si
cerca nella directory del PATH. Inoltre non si esegue affatto il primo
comando che si trova: se in una directory esistono diversi programmi con
lo stesso nome ma estensione diversa c'è una ben precisa precedenza:
prima i *.EXE, poi i *.COM ed infine i *.BAT
Addì Sun, 20 Feb 2011 18:46:19 +0100 MBulu scrisse:
> In linux, come funziona?
Nella bash, se la shell è interattiva, dopo le varie espansioni vengono
sostituiti gli alias, poi si cerca tra le funzioni, poi tra i comandi
interni. Infine se esiste la variabile di ambiente PATH si cerca tra le
directory contenute in essa altrimenti se non esiste la variabile di
ambiente PATH si cerca nella directory corrente.
Se invece la shell non è interattiva per default gli alias non vengono
sostituiti.
Altre shell si comportano in maniera analoga, ci possono essere piccole
differenze sugli alias e sulle funzioni. Ma in fondo anche in MSDOS e
Windows esistono molte shell che fanno a modo loro.
Tutto sommato l'unica grossa differenza è che in Windows viene cercato
PRIMA nella directory corrente e poi nel PATH mentre in ambiente Unix
questo comportamento è considerato una falla nella sicurezza.
|
|
|
Re: Sequenza per capire da dove viene lanciato un comando [messaggio #36010 è una risposta a message #35996] |
mar, 22 febbraio 2011 11:35 |
NicoKid Messaggi: 212 Registrato: novembre 2010 |
Senior Member |
|
|
Dalet wrote:
> Il 20-02-2011, NicoKid dice:
>>Crononauta wrote:
>
>>>>Se per esempio ho 2 comandi differenti ma con lo stesso nome in 2
>>>>directories differenti, come faccio a sapere quale dei 2 viene
>>>>lanciato?
>
>>Potrebbe essere interessante anche:
>>whereis comando
>
> whereis ti da' pure le manpagine, invece per conoscere
> la precedenza penso che occorra type, guarda ad esempio
> con echo: e' interno con precedenza, oppure in /bin.
In effetti hai ragione, direi che type è il comando adatto.
Nicola.
--
chi va pian va san e va lontan
|
|
|