Glossario

ARPA

La Advanced Research and Projects Agency del Department of Defense degli Stati Uniti. Nota anche come DARPA (la "D" sta per "Defense"), ha avuto origine alla fine degli anni '60, e agli inizi degli anni '70 hanno avuto origine la proposta e gli standard per Internet. Per questo Internet fu inizialmente indicato come ARPANet, e collegava le forze armate con i diversi centri di ricerca degli Stati Uniti con un sistema progettato per avere un alto grado resistenza ad un attacco nucleare.

BASH

La Bourne Again Shell, è basata sulla shell Bourne, sh, l'originale interprete di comandi.

Bourne Shell

La shell Bourne è l'originale shell Unix (programma di esecuzione di comandi, chiamata spesso interprete dei comandi) che fu sviluppata alla AT&T. Chiamata così dal suo sviluppatore, Stephen Bourne, la shell Bourne è conosciuta anche col suo nome di programma, sh. Il prompt di shell (carattere mostrato per indicare che il sistema è pronto a ricevere un input) usato è il simbolo $. La famiglia delle shell Bourne include le shell Bourne, la shell Korn, bash e zsh. Bourne Again Shell (bash) è la versione libera della shell Bourne distribuita con i sistemi Linux. Bash è simile all'originale, ma ha caratteristiche aggiuntive come l'immissione di istruzioni da riga di comando. Il suo nome a volte è scritto come Bourne Again SHell, la Hell con l'iniziale maiuscola è riferita alle difficoltà che alcune persone hanno nell'uso di questa shell.

CLI

Una CLI (Command Line Interface - interfaccia a riga di comando) è un'interfaccia utente per un sistema operativo del computer o per un'applicazione, nella quale l'utente risponde ad un prompt visuale inserendo un comando su di una determinata riga, riceve una risposta dal sistema, poi immette un altro comando, e così via. Il Prompt MS-DOS, un'applicazione del sistema operativo Windows, è un esempio di un'interfaccia a riga di comando. Oggi, la maggior parte degli utenti preferisce l'interfaccia utente grafica (GUI) fornita da Windows, Mac OS, BeOS e altri. Tipicamente, la maggior parte dei sistemi basati su Unix correnti rende disponibile sia un'interfaccia a riga di comando che un'interfaccia utente grafica.

core

Un file core viene creato quando un programma termina in modo inaspettato, a causa o di un baco, o della violazione di un meccanismo di protezione del sistema operativo o dell'hardware. Il sistema operativo "uccide" il programma e crea un file core che i programmatori possono usare per avere un'idea di ciò che è andato male. Questo contiene una descrizione dettagliata dello stato in cui era il programma al momento della sua terminazione. Per determinare il programma da cui proviene un file core si usa il comando "file", in questo modo: $ file core. Si avrà come risposta il nome del programma che ha provocato la scrittura sul file core. È consigliabile scrivere al/ai responsabile/i del programma, per informarli del termine inatteso del loro programma. Per abilitare o disabilitare la scrittura sui file core si può usare il comando "ulimit" in bash, il comando "limit" in tcsh, o il comando "rlimit" in ksh. Si veda la pagina di manuale appropriata per i dettagli. Queste impostazioni influenzano tutti i programmi eseguiti dalla shell (direttamente o indirettamente), non l'intero sistema. Se si vuole abilitare o disabilitare la scrittura sul file core per tutti i processi predefiniti, si possono cambiare le impostazioni predefinite in /usr/include/linux/sched.h. Fare riferimento alla definizione di INIT_TASK, e guardare anche in /usr/include/linux/resource.h. Il supporto per PAM ottimizza l'ambiente di sistema, inclusa la quantità di memoria consentita per un utente. In alcune distribuzioni questo parametro è configurabile nel file /etc/security/limits.conf. Per ulteriori informazioni fare riferimento alla Linux Administrator's Security Guide.

daemon (demone)

Un processo latente in background, normalmente inosservato, finché qualcosa non lo mette in azione. Per esempio, il demone \cmd{update} si attiva circa ogni trenta secondi per svuotare la cache dei buffer, e il demone \cmd{sendmail} si attiva ogni volta che qualcuno invia della posta.

DARPA

La Defense Advanced Research Projects Agency (agenzia per i progetti di ricerca avanzata per la difesa) è l'organizzazione centrale per la ricerca e lo sviluppo per il Department of Defense (DoD) [degli Stai Uniti]. Gestisce e dirige progetti mirati di ricerca, di base e applicata, e di sviluppo per DoD, e indirizza lo sviluppo della ricerca e della tecnologia dove il rischio e il tornaconto sono entrambi molto alti, e dove il successo può produrre innovazioni eclatani per i compiti e le missioni tradizionali delle forze armate.

DHCP

Dynamic Host Control Protocol, è un protocollo simile a BOOTP (effettivamente dhcpd include molte delle funzionalità di BOOTPD). Assegna gli indirizzi IP ai client basandosi sui tempi di lease. DHCP è usato estensivamente da Microsoft e più recentemente anche da Apple. Probabilmente è essenziale in ogni ambiente multipiattaforma.

DNS

Domain Name System (sistema di denominazione del dominio) traduce il dominio Internet e i nomi di host in indirizzi IP. DNS implementa un database distribuito per conservare le informazioni su nome e indirizzo per tutti gli host pubblici sulla rete. DNS presuppone che gli indirizzi IP non cambino (cioè sono assegnati staticamente piuttosto che assegnati dinamicamente). Il database DNS risiede su una gerarchia di server specializzati. Quando si visita un sito web o un altro componente sulla rete, una parte di software chiamato il risolutore DNS (generalmente incorporato nel sistema operativo di rete) per prima cosa contatta un server DNS per determinare l'indirizzo IP del server. Se il server DNS non contiene la mappatura di cui ha bisogno, inoltrerà ricorsivamente la richiesta a un server DNS posto al livello immediatamente superiore nella gerarchia. Dopo diversi inoltri e messaggi di accompagnamento inviati all'interno della gerarchia DNS, l'indirizzo IP per il dato host è eventualmente trasmesso al risolutore. DNS include anche il supporto per la memorizzazione delle richieste nella cache e per la ridondanza. La maggior parte dei sistemi operativi di rete consente a un utente di entrare negli indirizzi IP dei server DNS primari, secondari o terziari, ognuno dei quali può soddisfare le richieste iniziali provenienti dai client. Molti fornitori di servizi internet (ISP) hanno i propri server DNS e usano DHCP per assegnare automaticamente gli indirizzi di questi server ai client dial-in, così la maggior parte degli utenti domestici non ha necessità di conoscere i dettagli sulla configurazione DNS. I nomi di dominio registrato e gli indirizzi devono essere rinnovati periodicamente, e quando si accende una disputa tra due parti sulla proprietà di un determinato nome, come ad esempio nel campo dei marchi commerciali, può essere invocata la Uniform Domain-Name Dispute-Resolution Policy approvata dalla ICANN. Il DNS è conosciuto anche come Domain Name System, Domain Name Service, Domain Name Server.

environment variable (variabile d'ambiente)

Una variabile disponibile per qualsiasi programma avviato dalla shell.

ESD

Enlightened Sound Daemon. Questo programma è progettato per combinare diversi flussi audio digitalizzati per farli riprodurre da un singolo dispositivo.

filesystem

L'insieme dei metodi e strutture di dati che un sistema operativo usa per tener traccia dei file su un disco o una partizione; il modo in cui i file sono organizzati sul disco. La parola è usata anche per riferirsi a una partizione o disco usato per immagazzinare i file, o al tipo di filesystem.

FSSTND

Spesso il gruppo che produce il documento The Linux File System Structure, o il documento stesso, viene indicato come 'FSSTND'. Questa è l'abbreviazione di "file system standard". Questo documento ha contribuito a standardizzare ovunque la struttura dei file system sui sistemi Linux. Sin dalla release originale dello standard, la maggior parte dei distributori lo ha adottato totalmente o parzialmente, con grande beneficio per tutti gli utenti Linux. Ora si fa spesso riferimento a questo documento indicandolo come FHS (Filesystem Hierarchy Standard) da quando è stato inserito nel progetto LSB (Linux Standards Base).

GUI

Graphical User Interface (Interfaccia utente grafica). L'uso di immagini piuttosto che di parole per rappresentare input e output di un programma. Un programma con una GUI viene eseguito sotto alcuni sistemi a finestre (p.es.. The X Window System, Microsoft Windows, Acorn RISC OS, NEXTSTEP). Il programma mostra alcune icone, pulsanti, finestre di dialogo etc. nelle sue finestre sullo schermo, e l'utente le controlla principalmente muovendo un puntatore sullo schermo (tipicamente controllato da un mouse) e selezionando certi oggetti premendo pulsanti col mouse mentre il puntatore è sopra di questi. Anche se quelli della Apple Computer vogliono avere la pretesa di aver inventato la GUI col loro sistema operativo Macintosh, il concetto ha avuto origine ai primi degli anni '70 nei laboratori PARC della Xerox.

hard link (collegamento fisico)

Una voce di directory che mappa un nome di file verso un numero di inode. Un file può avere diversi nomi o collegamenti fisici. Il conteggio dei collegamenti fornisce il numero di nomi attraverso il quale un file è accessibile. I collegamenti fisici non consentono nomi multipli per le directory e non consentono nomi multipli in differenti filesystem.

init

il processo "init" è il primo processo al livello di utente avviato dal kernel; init ha diversi compiti importanti, come: avviare getty (in modo che gli utenti possano eseguire il login), implementare i run level (livelli di esecuzione) e occuparsi dei processi "orfani". Questo capitolo spiega com'è configurato init e come si può far uso dei diversi run level. Init è uno di quei programmi che sono assolutamente essenziali per il funzionamento di un sistema Linux, ma che l'utente può tuttavia ignorare nella maggior parte dei casi. Usualmente ci si deve preoccupare di init se si connettono dei terminali in serie, modem dial-in (non dial-out), o se si vuol cambiare il run level predefinito. Quando il kernel è avviato (cioè è stato caricato in memoria, ha iniziato a funzionare, e ha inizializzato tutti i driver e le strutture di dati e altre cose simili), termina la sua parte del processo di avvio facendo partire un programma a livello di utente, init. Quindi, init è sempre il primo processo (il suo numero di processo è sempre 1). Il kernel cerca init in alcune posizioni che sono state tradizionalmente usate per esso, ma la sua posizione appropriata è /sbin/init. Se il kernel non riesce a trovare init, tenta di eseguire /bin/sh, e se anche questa azione non ha successo, il processo di avvio si interrompe. Quando init si avvia, completa il processo di avvio svolgendo una serie di attività di amministrazione, come controllare i filesystem, svuotare la directory /tmp, avviare i vari servizi e avviare una sessione di getty per ogni terminale e console virtuale a cui gli utenti si possano collegare. Dopo che il sistema è stato correttamente avviato, ogni volta che un utente si scollega dal terminale init riavvia getty su quel terminale (in modo che l'utente successivo possa collegarsi). Inoltre init adotta i processi orfani: quando un processo avvia un processo figlio e termina prima di quest'ultimo, il processo figlio diventa immediatamente un processo figlio di init. Questo è importante per diverse ragioni tecniche, ma è bene che si conosca, poiché rende più facile comprendere gli elenchi dei processi e il grafico dell'albero dei processi. Lo stesso init non è possibile che termini. Non si può "uccidere" init nemmeno con il comando SIGKILL. Sono disponibili alcune varianti di init. La maggior parte delle distribuzioni Linux usa sysvinit (scritto da Miquel van Smoorenburg), che è basato sull'init del System V. Le versioni BSD di Unix hanno un diverso init. La differenza principale è costituita dai livelli di esecuzione (runlevel): System V li ha, BSD no.

inode

Un inode è un indirizzo di un blocco del disco. Quando si vedono le informazioni sull'inode attraverso ls, ls visualizza sullo schermo l'indirizzo del primo blocco nel file. Quest'informazione può essere usata per controllare se due file sono in realtà lo stesso file con diversi nomi (collegamenti). Un file ha diverse componenti: un nome, dei contenuti, e informazioni di amministrazione come permessi e data di modifica. Le informazioni di amministrazione sono memorizzate nell'inode (nel corso degli anni il trattino di "i-node" è sparito), insieme a dati del sistema essenziali come la lunghezza, dov'è memorizzato il contenuto del file sul disco, e così via. Ci sono tre indicazioni di data/ora nell'inode: la data e l'ora in cui il contenuto del file è stato modificato (scritto) per l'ultima volta, la data e l'ora in cui il file è stato usato per l'ultima volta (letto o eseguito) e la data e l'ora in cui l'inode stesso è stato cambiato, ad esempio per impostare i permessi. Alterare il contenuto del file non influenza la data/ora dell'ultimo accesso, e il cambio dei permessi influenza solo la data e ora del cambio dell'inode. Comprendere gli inode è importante, non solo per apprezzare le opzioni di ls, ma perché in senso stretto gli inode sono dei file. Tutto quello che fa la gerarchia della directory è fornire nomi adatti per i file. Il nome interno di sistema per il file è il suo i-number: il numero dell'inode che gestisce le informazioni sul file.

kernel

La parte del sistema operativo che implementa l'interazione con l'hardware e la condivisione delle risorse.

libraries (librerie)

Gli eseguibili non dovrebbero avere nessun simbolo indefinito, ma solo simboli utilizzabili; tutti i programmi utilizzabili fanno riferimento a simboli che essi non possono definire (p.es. printf o write). Questi riferimenti sono risolti incorporando nell'eseguibile i file oggetto contenuti nelle librerie.

link (collegamento)

Un collegamento simbolico (alias in MacOS e shortcut sotto Windows) è un file che punta a un altro file; è uno strumento usato comunemente. Un collegamento fisico (hard-link), creato di rado dall'utente, è un nome di file che punta a un blocco di dati che ha a sua volta diversi altri nomi di file.

man page (pagina man)

Ogni versione di UNIX è corredata di un'ampia collezione di pagine di aiuto in linea chiamate pagine man (abbreviazione di pagine di manuale). Le pagine man costituiscono l'autorevole documentazione del sistema UNIX installato. Contengono informazioni complete sul kernel e su tutti i programmi di utilità.

MTA

Mail Transfer Agent. Accanto al web, l'invio della posta è il primo motivo della popolarità di Internet. La posta elettronica (E-mail) è un metodo economico e veloce per inviare messaggi differiti nel tempo che, in modo molto simile al Web, è basato in realtà sull'invio e la ricezione di file di testo. Il protocollo usato è chiamato Simple Mail Transfer Protocol (SMTP). I programmi dei server che implementano SMTP per trasferire posta da un server all'altro sono chiamati MTA. Diverso tempo fa gli utenti dovevano collegarsi con Telnet a un server SMTP e usare un programma a riga di comando come "mutt" o "pine" per controllare la posta. Ora, client di posta elettronica basati su GUI come Mozilla, Kmail e Outlook consentono agli utenti di controllare la posta di un server SMTP locale. Protocolli aggiuntivi come POP3 e IMAP4 vengono usati fra il server SMTP e il client di posta sul desktop per permettere ai client di manipolare i file sui loro server di posta locale e di scaricarli dallo stesso server. I programmi che implementano POP3 e IMAP4 sono chiamati Mail Delivery Agent (MDA). In genere sono separati dagli MTA.

NFS

Network File System, è l'equivalente UNIX di Server Message Block (SMB). È un modo attraverso il quale macchine diverse possono importare ed esportare file locali tra di loro. Come SMB, tuttavia, NFS invia informazioni con incluse le password utente decriptate, per cui la miglior cosa è limitare il suo uso all'interno della rete locale.

operating system (sistema operativo)

Il software che condivide le risorse di un computer (processore, memoria, spazio del disco, network bandwidth, e così via) tra gli utenti e i programmi applicativi che vengono eseguiti. Controlla l'accesso al sistema per garantire la sicurezza.

PAM

Pluggable Authentication Modules. Un pacchetto costituito da un insieme di librerie condivise che determina come un utente verrà autenticato. Per esempio, convenzionalmente gli utenti UNIX si autenticano fornendo una password al prompt della password dopo aver inserito il loro nome nel prompt del login. In molte circostanze, come accessi interni alle stazioni di lavoro, questa semplice forma di autenticazione è considerata sufficiente. In altri casi è giustificata la richiesa di maggiori informazioni. Se un utente vuole accedere a un sistema interno da una fonte esterna, come Internet, possono essere richieste informazioni maggiori o alternative; magari una password utilizzabile una volta sola. PAM fornisce, tra le tante, anche questo tipo di possibilità. Una cosa molto importante è che i moduli PAM consentono di configurare l'ambiente con il livello di sicurezza richiesto.

PATH

La shell cerca comandi e programmi in un elenco di percorsi di file memorizzati nella variabile d'ambiente PATH. Una variabile d'ambiente memorizza l'informazione in una posizione alla quale possono aver accesso altri programmi e comandi. Le variabili d'ambiente memorizzano informazioni come la shell attualmente in uso, il nome di login e la directory di lavoro corrente. Per vedere un elenco di tutte le variabili d"ambiente correntemente definite è sufficiente digitare "set" al prompt. Quando si inserisce un comando al prompt della shell, la shell cerca quel file di programma del comando in ogni directory elencata nella variabile PATH, in quel determinato ordine. Verrà eseguito il primo programma trovato che corrisponde al comando battuto. Se il file di programma del comando non è presente in una directory elencata nella variabile d'ambiente PATH, la shell restituisce un messaggio di errore "command not found" (comando non trovato). Normalmente, la shell non cerca comandi nella directory di lavoro corrente o nella directory di home. Questo è proprio un meccanismo di sicurezza per non eseguire programmi accidentalmente. Cosa accadrebbe se un utente malintenzionato mettesse un programma nocivo chiamato ls nella directory di home? Se battendo ls la shell cercasse il programma falso nella directory di home prima del programma vero nella directory /bin, cosa si può pensare che accada? Se si pensano cose brutte si è sulla strada giusta. Poiché la PATH non contiene la directory corrente fra le sue posizioni di ricerca, i programmi nella directory corrente devono essere chiamati con un percorso assoluto di un percorso relativo specificato come "./nome-programma". Per vedere quali directory fanno parte del PATH bisogna dare questo comando: # echo $PATH (che dovrebbe fornire sullo schermo qualcosa come:) /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11

pipe e socket

File speciali che i programmi usano per comunicare uno con l'altro. Questi si vedono raramente, ma è possibile vedere un socket o due nella directory /dev/.

process identifier (identificatore di processo)

È mostrato nell'intestazione del comando ps come PID. Il numero univoco assegnato ad ogni processo in esecuzione nel sistema.

rpc

Remote Procedure Calls (chiamata di procedura remota). Abilita un sistema ad eseguire chiamate a programmi come NFS attraverso la rete in modo trasparente, abilitando ogni sistema a interpretare le chiamate come se fossero locali. In questo caso, fa apparire i filesystem esportati come se fossere locali.

set group ID (SGID)

Il permesso SGID fa in modo che uno script venga eseguito col suo gruppo impostato al gruppo dello script, piuttosto che al gruppo dell'utente che lo esegue. Normalmente è considerata una pessima pratica eseguire un programma in questo modo poiché potrebbe creare molti problemi di sicurezza. Le ultime versioni del kernel Linux proibiscono addiritura l'esecuzione di script di shell che sono impostati con questo attributo.

set user ID (SUID)

Il permesso SUID fa in modo che uno script venga eseguito come utente proprietario dello script, piuttosto che come utente che l'ha avviato. Normalmente è considerata una pessima pratica eseguire un programma in questo modo poiché potrebbe creare molti problemi di sicurezza. Le ultime versioni del kernel Linux proibiscono addiritura l'esecuzione di script di shell che sono stati impostati con questo attributo.

signal (segnali)

Interrupt software inviati a un programma per indicare che è accaduto un evento importante. Gli eventi possono variare da richieste dell'utente a errori di accesso in memoria illegale. Alcuni segnali, come i segnali di interrupt, indicano che un utente ha chiesto al programma di fare qualcosa che non è nell'usuale flusso di controllo.

SSH

La Secure Shell, o SSH, fornisce un modo di eseguire applicazioni a riga di comando e grafiche, e trasferire file, su una connessione criptata; tutto quello che è visibile diventa incomprensibile. È sia un protocollo che un pacchetto di piccole applicazioni a riga di comando, che possono essere usate per varie funzioni. SSH sostituisce la vecchia applicazione Telnet, e può essere usata per l'amministrazione in remoto di macchine in maniera sicura attraverso Internet. Comunque, ha anche altre caratteristiche. SSH incrementa la facilità di eseguire applicazioni da remoto configurando i permessi di X automaticamente. Se si hanno i permessi d'accesso ad una macchina, consente l'esecuzione di un'applicazione grafica su di essa, diversamente da Telnet, che invece richiede una conoscenza dei meccanismi di autenticazione di X che vengono gestiti attraverso i comandi xauth e xhost. SSH ha inoltre la funzione di compressione integrata, che consente un'esecuzione più veloce delle applicazioni grafiche sulla rete. SCP (Secure Copy) e SFTP (Secure FTP) consentono il trasferimento di file su collegamenti remoti, attraverso programmi di utilità a riga di comando propri di SSH o anche con strumenti grafici come GFTP di Gnome. Come Telnet, SSH è multipiattaforma. Si trovano server e client SSH per Linux, Unix, Windows in tutte le sue varianti, BeOS, PalmOS, Java e SO incorporati usati nei router.

STDERR

Standard error. Uno speciale tipo di output usato per i messaggi d'errore. Il descrittore di file per STDERR è 2.

STDIN

Standard input. L'input dell'utente viene letto da STDIN. Il descrittore di file per STDIN è 0.

STDOUT

Standard output. L'output degli script è generalmente verso STDOUT. Il descrittore di file per STDOUT è 1.

symbol table (tabella dei simboli)

La parte di una tabella degli oggetti (object table) che fornisce il valore di ogni simbolo (normalmente rappresentato da un nome di sezione e da un offset) è chiamata tabella dei simboli (symbol table). Anche gli eseguibili possono avere una tabella dei simboli; quest'ultima dà i valori definitivi dei simboli. I debugger usano la tabella dei simboli per rappresentare agli utenti gli indirizzi in una forma simbolica piuttosto che numerica. È possibile togliere la tabella dei simboli dagli eseguibili così da avere degli eseguibili di dimensioni più ridotte, questo però impedisce l'esecuzione di debug significativi.

symbolic link o soft link (collegamento simbolico)

Un tipo di file speciale, che è un piccolo file puntatore, che permette nomi multipli per lo stesso file. Diversamente dai collegamenti fisici (hard link), i collegamenti simbolici (symbolic link) possono essere creati per le directory e possono essere creati tra filesystem diversi. I comandi che raggiungono il file che è stato puntato si dice che seguono il collegamento simbolico. I comandi che aprono il collegamento stesso non seguono il collegamento simbolico.

system call (chiamata di sistema)

I servizi forniti dal kernel ai programmi applicativi, e la modalità con la quale sono chiamati. Si veda la sezione 2 delle pagine di manuale.

system program (programma di sistema)

Programmi che implementano funzionalità ad alto livello di un sistema operativo, per esempio, cose che non sono direttamente dipendenti dall'hardware. A volte possono richiedere speciali privilegi per essere eseguiti (p.es, per spedire posta elettronica), ma spesso sono comunemente considerati più semplicemente come parte del sistema (p.es, un compilatore).

tcp-wrappers (wrapper tcp)

Quasi tutti i servizi forniti attraverso inetd sono chiamati attraverso i wrapper tcp passando per il demone dei wrapper tcp, tcpd. La tecnica dei wrapper tcp consiste nell'effettuare restrizioni sulla lista di controllo degli accessi e nella registrazione di tutte le richieste di servizio al servizio oggetto del wrap. Può essere usato sia per TCP che per i servizi TCP per tutto il tempo in cui i servizi sono invocati attraverso un processo demone centrale come inetd. Questi programmi registrano il nome dell'host dei client che inviano richieste telnet, ftp, rsh, rlogin, finger etc.... . Le opzioni di sicurezza sono: il controllo degli accessi attraverso un host, un dominio e/o un servizio; rilevamento dello spoofing del nome di host o dello spoofing dell'indirizzo di host; "trappole" per implementare un sistema di preallarme.

ZSH

Zsh fu sviluppata da Paul Falstad come sostituto di entrambe le shell Bourne e C. Incorpora caratteristiche di tutte le altre shell (come il completamento del nome di file e il meccanismo della cronologia), ma ha anche nuove funzionalità. Zsh è considerata simile alla shell Korn. Falstad voleva creare con zsh una shell che avrebbe dovuto fare qualsiasi cosa un programmatore può ragionevolmente sperare di fare. Zsh è nota agli utenti avanzati. Insieme alla shell Korn e alla shell C, la shell Bourne rimane tra le tre più largamente usate ed è inclusa in tutti i sistemi UNIX. La shell Bourne è spesso considerata la migliore shell per sviluppare script.