Unix / Linux - Ambiente

In questo capitolo, discuteremo in dettaglio sull'ambiente Unix. Un importante concetto di Unix è ilenvironment, che è definito dalle variabili di ambiente. Alcuni sono impostati dal sistema, altri da te, altri ancora dalla shell o da qualsiasi programma che carichi un altro programma.

Una variabile è una stringa di caratteri a cui assegniamo un valore. Il valore assegnato potrebbe essere un numero, testo, nome file, dispositivo o qualsiasi altro tipo di dati.

Ad esempio, prima impostiamo una variabile TEST e poi accediamo al suo valore utilizzando il echo comando -

$TEST="Unix Programming"
$echo $TEST

Produce il seguente risultato.

Unix Programming

Si noti che le variabili di ambiente vengono impostate senza utilizzare il $sign ma durante l'accesso usiamo il segno $ come prefisso. Queste variabili mantengono i loro valori fino a quando non usciamo dalla shell.

Quando si accede al sistema, la shell subisce una fase chiamata initializationper creare l'ambiente. Questo di solito è un processo in due fasi che coinvolge la shell che legge i seguenti file:

  • /etc/profile
  • profile

Il processo è il seguente:

  • La shell verifica se il file /etc/profile esiste.

  • Se esiste, la shell lo legge. In caso contrario, questo file viene ignorato. Non viene visualizzato alcun messaggio di errore.

  • La shell verifica se il file .profileesiste nella tua directory home. La tua directory home è la directory in cui inizi dopo aver effettuato l'accesso.

  • Se esiste, la shell lo legge; in caso contrario, la shell lo salta. Non viene visualizzato alcun messaggio di errore.

Non appena entrambi questi file sono stati letti, la shell visualizza un prompt:

$

Questo è il prompt in cui è possibile immettere i comandi per eseguirli.

Note - Il processo di inizializzazione della shell descritto qui si applica a tutti Bourne tipo shell, ma alcuni file aggiuntivi vengono utilizzati da bash e ksh.

Il file .profile

Il file /etc/profile è mantenuto dall'amministratore di sistema della macchina Unix e contiene le informazioni di inizializzazione della shell richieste da tutti gli utenti di un sistema.

Il file .profileè sotto il tuo controllo. Puoi aggiungere a questo file tutte le informazioni di personalizzazione della shell che desideri. Il set minimo di informazioni che è necessario configurare include:

  • Il tipo di terminale che stai utilizzando.
  • Un elenco di directory in cui individuare i comandi.
  • Un elenco di variabili che influiscono sull'aspetto del tuo terminale.

Puoi controllare il tuo .profiledisponibile nella tua home directory. Aprilo usando l'editor vi e controlla tutte le variabili impostate per il tuo ambiente.

Impostazione del tipo di terminale

Di solito, il tipo di terminale che stai utilizzando viene configurato automaticamente dal login o gettyprogrammi. A volte, il processo di configurazione automatica indovina il tuo terminale in modo errato.

Se il tuo terminale è impostato in modo errato, l'output dei comandi potrebbe apparire strano o potresti non essere in grado di interagire correttamente con la shell.

Per assicurarsi che non sia così, la maggior parte degli utenti imposta il proprio terminale sul minimo comune denominatore nel modo seguente:

$TERM=vt100
$

Impostazione del PERCORSO

Quando digiti un comando sul prompt dei comandi, la shell deve individuare il comando prima che possa essere eseguito.

La variabile PATH specifica le posizioni in cui la shell dovrebbe cercare i comandi. Di solito la variabile Path è impostata come segue:

$PATH=/bin:/usr/bin
$

Qui, ciascuna delle singole voci separate dal carattere dei due punti (:)sono directory. Se richiedi alla shell di eseguire un comando e non riesce a trovarlo in nessuna delle directory fornite nella variabile PATH, appare un messaggio simile al seguente:

$hello
hello: not found
$

Ci sono variabili come PS1 e PS2 che vengono discusse nella sezione successiva.

Variabili PS1 e PS2

I caratteri visualizzati dalla shell come prompt dei comandi sono memorizzati nella variabile PS1. Puoi modificare questa variabile in modo che sia tutto ciò che desideri. Non appena lo modifichi, verrà utilizzato dalla shell da quel punto in poi.

Ad esempio, se hai emesso il comando -

$PS1='=>'
=>
=>
=>

Il tuo prompt diventerà =>. Per impostare il valore diPS1 in modo che mostri la directory di lavoro, emetti il ​​comando -

=>PS1="[\[email protected]\h \w]\$"
[[email protected] /var/www/tutorialspoint/unix]$
[[email protected] /var/www/tutorialspoint/unix]$

Il risultato di questo comando è che il prompt visualizza il nome utente dell'utente, il nome della macchina (nome host) e la directory di lavoro.

ce ne sono un bel pò escape sequencesche possono essere usati come argomenti di valore per PS1; cerca di limitarti al più critico in modo che il prompt non ti sommerga di informazioni.

Sr.No. Sequenza di escape e descrizione
1

\t

Ora corrente, espressa come HH: MM: SS

2

\d

Data corrente, espressa come data del mese del giorno della settimana

3

\n

Nuova linea

4

\s

Ambiente shell corrente

5

\W

Directory di lavoro

6

\w

Percorso completo della directory di lavoro

7

\u

Nome utente dell'utente corrente

8

\h

Nome host della macchina corrente

9

\#

Numero di comando del comando corrente. Aumenta quando viene immesso un nuovo comando

10

\$

Se l'UID effettivo è 0 (ovvero, se si è connessi come root), terminare il prompt con il carattere #; in caso contrario, usa il segno $

Puoi apportare tu stesso la modifica ogni volta che accedi, oppure puoi fare in modo che la modifica venga eseguita automaticamente in PS1 aggiungendola al tuo .profile file.

Quando esegui un comando incompleto, la shell mostrerà un prompt secondario e aspetterà che tu completi il ​​comando e premi Enter ancora.

Il prompt secondario predefinito è > (il segno di maggiore di), ma può essere modificato ridefinendo il PS2 variabile di shell -

Di seguito è riportato l'esempio che utilizza il prompt secondario predefinito:

$ echo "this is a
> test"
this is a
test
$

L'esempio fornito di seguito ridefinisce la PS2 con un prompt personalizzato:

$ PS2="secondary prompt->"
$ echo "this is a
secondary prompt->test"
this is a
test
$

variabili ambientali

Di seguito è riportato l'elenco parziale delle variabili di ambiente importanti. Queste variabili vengono impostate e accessibili come indicato di seguito:

Sr.No. Variabile e descrizione
1

DISPLAY

Contiene l'identificatore per il display che X11 i programmi dovrebbero essere usati per impostazione predefinita.

2

HOME

Indica la directory home dell'utente corrente: l'argomento predefinito per il cd built-in comando.

3

IFS

Indica il Internal Field Separator che viene utilizzato dal parser per la suddivisione delle parole dopo l'espansione.

4

LANG

LANG si espande alla locale di sistema predefinita; LC_ALL può essere utilizzato per sovrascriverlo. Ad esempio, se il suo valore èpt_BR, quindi la lingua è impostata sul portoghese (brasiliano) e la lingua sul Brasile.

5

LD_LIBRARY_PATH

Un sistema Unix con un linker dinamico, contiene un elenco di directory separate da due punti che il linker dinamico deve cercare per oggetti condivisi quando costruisce un'immagine di processo dopo exec, prima di cercare in qualsiasi altra directory.

6

PATH

Indica il percorso di ricerca dei comandi. È un elenco di directory separato da due punti in cui la shell cerca i comandi.

7

PWD

Indica la directory di lavoro corrente come impostata dal comando cd.

8

RANDOM

Genera un numero intero casuale compreso tra 0 e 32.767 ogni volta che viene fatto riferimento.

9

SHLVL

Aumenta di uno ogni volta che viene avviata un'istanza di bash. Questa variabile è utile per determinare se il comando di uscita integrato termina la sessione corrente.

10

TERM

Si riferisce al tipo di visualizzazione.

11

TZ

Si riferisce al fuso orario. Può assumere valori come GMT, AST, ecc.

12

UID

Si espande nell'ID utente numerico dell'utente corrente, inizializzato all'avvio della shell.

Di seguito è riportato l'esempio di esempio che mostra poche variabili di ambiente:

$ echo $HOME
/root
]$ echo $DISPLAY

$ echo $TERM
xterm
$ echo $PATH
/usr/local/bin:/bin:/usr/bin:/home/amrood/bin:/usr/local/bin
$