Cosa succede quando esegui un comando in Linux?
La maggior parte degli utenti Linux spesso non è a conoscenza del funzionamento interno del sistema operativo. Potresti eseguire comandi Linux sulla shell per molto tempo, ma ti sei mai chiesto cosa sta succedendo dietro le quinte quando premi Invio ?
Alla fine, avrai una breve comprensione di come la shell elabora il comando digitato in Linux.
Elaborazione del comando
Quando inserisci un comando, la prima cosa che fa la shell è suddividere l’intero comando in “token”. La shell cercherà quindi un nome di programma appartenente al primo token nella riga di comando.
Se non lo trova in nessuna delle directory nel percorso di ricerca definito nella variabile d’ambiente $PATH o nella directory locale con l’operatore . , o non è un alias di shell o una funzione di shell, la shell darà un errore . Se trova un comando valido, la shell esaminerà ciascuno degli altri token e deciderà se è una variabile, un parametro della shell o un argomento del comando.
Se la shell determina che si tratta di una variabile o di un parametro come l’operatore ~ per la directory home, la shell li espanderà o li sostituirà con i loro valori originali nel comando.
Quando la shell ha espanso qualsiasi parametro o variabile, passerà la stringa di comando al comando, eseguendo il programma con i suoi argomenti. La shell non determina se gli argomenti sono validi. Questo è il compito del comando.
Esecuzione del comando
Quando la shell lancia un altro comando, come torna allo stesso prompt che stavi usando prima? La shell crea una copia di se stessa, un processo chiamato fork. Questa copia della shell si sostituisce con il comando, con tutti gli argomenti elaborati in precedenza. Questo è noto come “exec” e il processo combinato è noto come “fork-and-exec”.
Ad esempio, quando esegui il comando ls , il processo della shell si biforcherà utilizzando il metodo fork() e creerà un’altra istanza della shell. Dei due processi shell in esecuzione sul sistema, la shell aggiuntiva eseguirà ls utilizzando la funzione exec() , trasformandosi in un’istanza del comando ls.
Nel frattempo, la shell originale attende il completamento del comando. Questo è il motivo per cui è possibile utilizzare il controllo dei lavori per sospendere i lavori e fare in modo che i lavori vengano eseguiti in background nella shell.
Segnalazione dello stato di uscita
I comandi Linux segnalano se sono stati eseguiti correttamente o meno attraverso il loro stato di uscita. Come suggerisce il nome, i programmi segnalano il loro stato di uscita al termine dell’esecuzione. Lo fanno attraverso il $? variabile di ambiente, che contiene lo stato di uscita dell’ultimo comando di esecuzione.
Per convenzione, uno stato di uscita pari a 0 indica un’esecuzione riuscita, mentre qualsiasi cosa diversa da 0 di solito indica un errore. La tua shell potrebbe anche indicare uno stato di uscita diverso da zero sulla riga di comando a seconda di come è configurato il tuo prompt.
Lo screenshot sopra è un esempio che mostra un prompt Zsh personalizzato che mostra uno stato di uscita di errore di 127 a causa di un comando che non esiste.
Ora sai come funzionano i comandi di Linux
Ora che sei a conoscenza di come la shell di Linux elabora un comando, esegue il fork e l’exec e come i programmi segnalano il loro stato di uscita, puoi utilizzare la riga di comando in modo più efficace.
Diverse shell Linux sono disponibili gratuitamente per gli utenti. Sebbene ciascuno di loro svolga più o meno lo stesso lavoro, sono diversi sotto molti aspetti. Puoi provare a installare alcune delle shell sul tuo sistema e decidere tu stesso quale ti si addice meglio.