Reindirizzamento input output in esempi Linux/Unix

โšก Riepilogo intelligente

Il reindirizzamento in Linux e Unix cambia il punto in cui un comando legge l'input o invia l'output, scambiaping la tastiera e lo schermo per file o dispositivi utilizzando operatori come il segno maggiore di, il segno minore di e l'operatore di aggiunta.

  • ๐Ÿ”€ Reindirizzamento: Il reindirizzamento modifica l'input o l'output standard di un comando, reindirizzandolo dalla tastiera e dallo schermo a un file o a un dispositivo.
  • โžก๏ธ Produzione: L'operatore > scrive l'output su un file, mentre >> aggiunge i dati a un file esistente senza cancellarlo.
  • โฌ…๏ธ Ingresso: L'operatore < passa un file a un comando come input standard al posto della tastiera.
  • ๐Ÿ”ข Descrittori di file: Ad ogni file aperto viene assegnato un numero: 0 per stdin, 1 per stdout e 2 per stderr.
  • โš ๏ธ Reindirizzamento degli errori: L'utilizzo di 2> invia i messaggi di errore a un file separato in modo che non intralcino l'output normale.
  • ๐Ÿ”— Flussi combinati: La sintassi 2>&1 instrada l'errore standard alla stessa destinazione dell'output standard.
  • ๐Ÿค– Aiuto tramite intelligenza artificiale: Gli assistenti basati sull'intelligenza artificiale e GitHub Copilot possono creare e spiegare comandi di reindirizzamento e script di shell.

Reindirizzamento dell'input/output in Linux e Unix con esempi

Il reindirizzamento รจ una delle caratteristiche piรน utili del Linux e la shell Unix, perchรฉ permette di decidere dove un comando legge il suo input e invia il suo output. Questa pagina spiega l'output, l'input e il reindirizzamento degli errori con esempi pratici.

Cos'รจ il reindirizzamento?

Il reindirizzamento รจ una funzionalitร  di Linux che consente, durante l'esecuzione di un comando, di modificare i dispositivi di input e output standard. Il flusso di lavoro di base di qualsiasi Comando Linux La sua caratteristica principale รจ che prende un input e fornisce un output.

  • Il dispositivo di input standard (stdin) รจ la tastiera.
  • Il dispositivo di output standard (stdout) รจ lo schermo.

Tramite il reindirizzamento, รจ possibile modificare l'input e l'output standard sopra descritti.

Reindirizzamento dell'output

Il grafico sottostante indica l'inizio degli esempi di reindirizzamento dell'output.

Intestazione grafica della sezione di reindirizzamento dell'output

Il simbolo '>' viene utilizzato per la reindirizzamento dell'output (STDOUT).

Esempio:

ls -al > listings

In questo caso, l'output del comando ls -al viene reindirizzato al file "listings" anzichรฉ essere visualizzato sullo schermo. Lo screenshot qui sotto mostra il risultato.

Il terminale mostra l'elenco ls -al reindirizzato nel file degli elenchi

Nota: utilizzare il nome file corretto quando si reindirizza l'output del comando a un file. Se esiste giร  un file con lo stesso nome, il comando reindirizzato ne elimina il contenuto e lo sovrascrive.

Se non si desidera sovrascrivere un file ma si vuole aggiungere altro contenuto a un file esistente, utilizzare l'operatore '>>'. Lo screenshot qui sotto mostra il contenuto aggiunto con '>>'.

Terminale che mostra l'output del comando aggiunto a un file esistente con il doppio operatore maggiore di

รˆ possibile reindirizzare l'output standard non solo verso i file, ma anche verso i dispositivi.

$ cat music.mp3 > /dev/audio

Il comando cat legge il file music.mp3 e invia l'output a /dev/audio, che รจ il dispositivo audio. Se la configurazione audio sul tuo PC รจ corretta, questo comando riproduce il file musicale.mp3.

Reindirizzamento dell'input

Il grafico seguente illustra il reindirizzamento dell'input.

Intestazione grafica della sezione di reindirizzamento dell'input

Il simbolo '<' viene utilizzato per il reindirizzamento dell'input (STDIN).

Esempio: Il programma mail di Linux puรฒ aiutarti a inviare email dal terminale.

รˆ possibile digitare il contenuto dell'e-mail utilizzando la tastiera, il dispositivo di input standard. Tuttavia, se si desidera allegare un file all'e-mail, รจ possibile utilizzare l'operatore di reindirizzamento dell'input nel formato seguente.

mail -s "Subject" to-address < Filename

Lo screenshot qui sotto mostra il comando mail che legge un file come input.

Comando di posta elettronica che utilizza il reindirizzamento dell'input per allegare un file a un'e-mail

In questo modo il file viene allegato all'e-mail e inviato al destinatario.

Gli esempi precedenti erano semplici. Ora esaminiamo alcune tecniche di reindirizzamento avanzate che utilizzano i descrittori di file.

Compila il Descriptor (FD)

In Linux e Unix, tutto รจ un file. File regolari, directory e persino dispositivi sono file. Ogni file ha un numero associato chiamato descrittore di file (FD).

Il diagramma seguente mostra i flussi standard e i relativi descrittori di file.

Diagramma dei flussi standard di input, output ed errore e dei relativi descrittori di file.

Anche il tuo schermo ha un descrittore di file. Quando un programma viene eseguito, l'output viene inviato al descrittore di file dello schermo e tu vedi l'output del programma sul monitor. Se l'output fosse inviato al descrittore di file della stampante, l'output del programma verrebbe stampato.

Reindirizzamento degli errori

Ogni volta che si esegue un programma o un comando nel terminale, vengono sempre aperti tre file: input standard, output standard e errore standard.

Questi file sono sempre presenti quando un programma รจ in esecuzione. Come spiegato in precedenza, a ciascuno di questi file รจ associato un descrittore di file.

Compila il Compila il Descriptor
Ingresso standard STDIN 0
Uscita standard STDOUT 1
Errore standard STDERR 2

Per impostazione predefinita, il flusso di errori viene visualizzato sullo schermo. Il reindirizzamento degli errori li indirizza a un file diverso dallo schermo.

Perchรฉ il reindirizzamento degli errori?

Il reindirizzamento degli errori รจ una delle funzionalitร  piรน apprezzate di Unix e Linux.

Gli utenti frequenti di Unix sanno che molti comandi generano un'enorme quantitร  di errori. Ad esempio, durante la ricerca di file, in genere si ottiene autorizzazione Errori di accesso negato, che di solito non sono utili a chi cerca un file specifico. Durante l'esecuzione di script di shell, spesso non si desidera che i messaggi di errore ingombrino l'output normale del programma.

La soluzione consiste nel reindirizzare i messaggi di errore a un file.

esempio 1

$ myprogram 2>errorsfile

Lo screenshot qui sotto mostra questo comando nel terminale.

Terminale in esecuzione myprogram con errore standard reindirizzato al file errorsfile

Qui sopra, stiamo eseguendo un programma chiamato myprogram. Il descrittore di file per l'errore standard รจ 2. Utilizzando "2>", reindirizziamo l'output degli errori a un file chiamato "errorsfile". In questo modo, l'output del programma non viene sovraccaricato di errori.

esempio 2

Ecco un altro esempio che utilizza l'istruzione find.

find . -name 'my*' 2>error.log

Utilizzando il comando find, cerchiamo nella directory corrente "." un file il cui nome inizia con "my" e inviamo eventuali errori al file error.log.

Esempio 3: Prendiamo in esame un esempio piรน complesso.

Gli amministratori di server spesso elencano le directory e memorizzano sia l'output di errore che quello standard in un file, che puรฒ essere elaborato in seguito. Ecco il comando.

ls Documents ABC> dirlist 2>&1

Il diagramma sottostante mostra entrambi i flussi acquisiti in un unico file.

Diagramma dell'output standard e dell'errore standard entrambi reindirizzati al file dirlist

Qui:

  • 2>&1 significa che STDERR viene reindirizzato alla stessa destinazione di STDOUT (ovvero il file dirlist).
  • L'output di errore viene reindirizzato all'output standard, che a sua volta viene reindirizzato al file dirlist. Pertanto, entrambi i flussi vengono scritti nel file dirlist.

Il diagramma seguente riassume come input, output e reindirizzamento degli errori si integrano tra loro.

Diagramma che riassume l'input, l'output e il reindirizzamento degli errori in Linux e Unix.

DOMANDE FREQUENTI

A tubo (|) invia l'output di un comando direttamente in un altro comando come input. Il reindirizzamento, invece, collega un comando a un file o a un dispositivo, scrivendovi l'output o leggendone l'input. Le pipe uniscono i comandi; il reindirizzamento unisce un comando a un file.

L'operatore > scrive l'output di un comando in un file, sostituendo qualsiasi contenuto esistente. L'operatore >> aggiunge invece l'output alla fine del file, mantenendoloping Ciรฒ che รจ giร  presente. Usa >> ogni volta che vuoi aggiungere qualcosa a un file anzichรฉ sovrascriverlo.

/dev/null รจ un file speciale che scarta tutto ciรฒ che vi viene scritto. Aggiungendo 2>/dev/null a un comando, i messaggi di errore vengono reindirizzati a quel file, venendo automaticamente ignorati in modo che sullo schermo venga visualizzato solo l'output normale. รˆ un metodo comune per nascondere messaggi di errore indesiderati.

Il comando tee legge dall'input standard e scrive i dati sia a schermo che in uno o piรน file contemporaneamente, ad esempio ls -al | tee listing.txt. Consente di salvare l'output di un comando in un file mentre lo si visualizza ancora a schermo.

Un here document utilizza l'operatore << per passare piรน righe di testo inline a un comando come input, terminando in corrispondenza di una parola marcatrice scelta dall'utente. รˆ utile negli script di shell per passare input su piรน righe, come il corpo di un'e-mail, senza dover utilizzare un file separato.

Utilizza la sintassi 2>&1 dopo aver reindirizzato l'output, come in comando > file 2>&1, in modo che l'errore standard segua l'output standard nel file. Nelle versioni moderne di Bash, il comando abbreviato &> file fa la stessa cosa. L'ordine รจ importante: posiziona 2>&1 dopo il reindirizzamento dell'output.

Gli assistenti basati sull'intelligenza artificiale possono trasformare una richiesta in linguaggio naturale nel comando di reindirizzamento corretto, spiegare la funzione di operatori come 2>&1 o &> e segnalare gli errori prima dell'esecuzione. Gli strumenti di apprendimento automatico analizzano anche i file di log e di errore relativi ai reindirizzamenti per individuare anomalie che una revisione manuale non rileverebbe.

Sรฌ. Le serrature scorrevoli portatili e i catenacci a superficie possono essere usati per mettere in sicurezza una porta a scomparsa dall'esterno. Alcuni kit con catena di sicurezza consentono anche il bloccaggio esterno con chiave o manopola girevole. Copilota GitHub รˆ possibile generare comandi e script che reindirizzano input, output ed errori a partire da un breve commento che descrive l'obiettivo, e completarli man mano che si digita. RevEsamina attentamente tutti i comandi suggeriti per i tuoi file, in particolare quelli che utilizzano il simbolo > e che sovrascrivono i dati esistenti.

Riassumi questo post con: