diff --git a/101/010_unix_commands.md b/101/010_unix_commands.md index 18e9939..35d111e 100644 --- a/101/010_unix_commands.md +++ b/101/010_unix_commands.md @@ -21,4 +21,5 @@ uname รจ /usr/bin/uname - **nl**: *number line*, visualizza il numero di linee di un file, anteponendo il numero ad ogni riga - **tr**: *translate*, permette di sostituire caratteri - **cut**: estrapola parti di testo come se fossero campi, identificandoli tramite un delimitatore -- **paste**: unisce i file in colonne \ No newline at end of file +- **paste**: unisce i file in colonne +- **cat**: funziona anche con dati binari, come l'invio del contenuto di un dispositivo a blocchi a un file (o per unire diversi file video in un unico grande file) \ No newline at end of file diff --git a/101/016_pipe_e_reindirizzamenti.md b/101/016_pipe_e_reindirizzamenti.md new file mode 100644 index 0000000..de59ddf --- /dev/null +++ b/101/016_pipe_e_reindirizzamenti.md @@ -0,0 +1,47 @@ +# Reindirizzamenti + +In Linux i processi hanno tre canali di comunicazione: `standard input` (`stdin`, il cui *descrittore di file* e'**0**), `standard output` (`stdout`, **1**) e `standard error` (`stderr`, **2**). I canali di comunicazione sono anche accessibili tramite i dispositivi speciali `/dev/stdin`, `/dev/stdout` e `/dev/stderr`. + +## Descrittore di file + +Il simbolo `>` ad esempio permette di reindirizzare lo `stdout` di un processo su un file, + +```bash +cat /proc/cpuinfo > cpu.txt +``` +Per impostazione predefinita, viene reindirizzato solo il contenuto che arriva a *stdout*. Questo perche' il valore numerico del descrittore di file deve essere specificato prima del simbolo `>`. Se non specificato, Bash reindirizza lo *stdout*. Pertanto, usare `>` equivale a scrivere `1>`. Per catturare il contenuto di `stderr` bisognerebbe usare il simbolo `2>`. La destinazione di un descrittore di file e' rappresentata dal simbolo `>&`. Per esempio, `1>&2` reindirizza *stdout* a *stderr*. + +Sia *stderr* che *stdout* vengono reindirizzati alla stessa destinazione con `&>`. Per scartare l'output di un comando o di un file, basta reindirizzarne il contenuto al file speciale `/dev/null`. + +Il simbolo `<` viene utilizzato per reindirizzare il contenuto di un file allo *stdin* di un processo. I dati scorrono da destra a sinistra. + +## Here document e Here String + +Il reindirizzamento del *Here document* consente di digitare del testo su piu' righe che verra' utilizzato come contenuto: + +```bash +cat > file << EOF +> riga 1 +> riga 2 +> riga 3 +> EOF + +cat file +riga 1 +riga 2 +riga 3 + +wc -c << EOF +> Quanti caratteri ci sono in questo documento? +> Non ne ho idea, ma scopriamolo! +> EOF +78 + +cat << EOF > file +> riga 1 +> EOF +``` + +La modalita' di inserimento terminera' non appena sara' inserito il termine di *fine file* (nell'esempio il carattere `EOF`). + +Il metodo *Here string* e' molto simile, ma viene utilizzato il simbolo `>>>` e interessa solo una singola riga : `wc -c <<< "Quanti caratteri in questa stringa?"`. Le stringhe con spazi devono essere racchiuse tra `""`. \ No newline at end of file