- LA SHELL NON E’ LINTERFACCIA A RIGA DI COMANDO
- L'interfaccia a riga di comando o cli è un tipo di interfaccia tra un qualunque dispositivo e l’ utente finale
- LA SHELL NON E’ IL TERMINALE
- Il terminale è un dispositivo per ricevere e trasmettere dati e può essere di tipo software (Terminale Virtuale) o hardware
- È un interprete di comandi
- È una delle parti principali di un OS, generalmente dell’ userspace
- Permette di lanciare comandi e programmi
- Esistono varie shell, tra le principali:
- Sh, Bourne Shell, la shell originale di UNIX
- Zsh, Z shell (❤)
- Ksh, Korn Shell
- Cmd.exe, la shell di NT
- Windows PowerShell, una shell avanzata di Microsoft
- Busybox, una shell compatta e usata per i sistemi embedded
- Bash, Bourne Again Shell, la shell principale di GNU/Linux
- Nasce nel 1988, la prima versione stabile è del 1989
- Fa parte del progetto GNU
- La sintassi di bash è un superinsieme di quella di sh
- E’ compatibile con tutti gli script per Sh (ma non vale il contrario)
- Non completamente POSIX-compliant di default. Note: Spiegare POSIX
- Viene configurata attraverso script in particolare:
~/.bashrc
che viene eseguito quando è invocata in modo interattivo~/.bash_profile
che viene eseguito quando è invocata come shell di login- Sono opzionali la configurazione di default è in
/etc/bashrc
~/.bashrc
~/.bash_profile
Ctrl+A
va ad inizio rigaCtrl+E
va a fine rigaAlt+B
oCtrl+freccia sx
va ad inizio parolaAlt+F
oCtrl+freccia dx
va a fine parola
- Bash implementa la storia dei comandi digitati
- Usando freccia su e giù si naviga tra gli ultimi comandi
- Bash supporta la funzione di autocompletamento
- Premendo
Tab
si completa il comando - Da certi pacchetti viene abilitato autocompletamento per determinati comandi
- La cosa essenziale è saper come chiedere aiuto
- Ci sono diverse possibilità
man <comando>
- Man è un tool per mostrare le man pages ovvero le pagine del manuale per un programma.
- Ogni pagina tratta nello specifico un singolo programma.
- Premere
Q
per uscire da man
info <comando>
Info è un programma simile a man ma che presenta una struttura meglio organizzata
e collegata tra ogni pagina
Premere Q
per uscire da info
<comando> -h
oppure
<comando> --help
-h
e --h
sono due opzioni molto comuni presenti in quasi ogni software, provare
sempre una delle due opzioni se non si sa bene come usare il comando e non si ha
una pagina di man a disposizione
La Struttura base è del tipo
<comando> OPZIONI ARGOMENTI
Le opzioni possono essere di 4 tipi:
- Estese del tipo
--opzione-estesa
- Estese con parametri del tipo
--opzione-estesa <parametro>
- Brevi del tipo
-o
- Brevi con parametro del tipo
-o <parametro>
- Gli argomenti sono generalmente di tipo posizionale
- Conta l' ordine in cui sono inseriti
Modi in cui si può far dialogare l' utente e il terminale Sono di 3 tipi:
- STDIN
- STDOUT
- STDERR
Stream di Ingresso
Porta alle applicazioni e al sistema operativo i dati immessi
dall’utente tramite una periferica di input ad esempio la tastiera
Stream di Uscita
Stampa a schermo i dati delle applicazioni
Stream di Errore
Stampa a schermo gli errori
Il reindirizzamento permette di controllare dove va l'output di un comando
e da dove arriva l'input di un comando
> Redirezione di STDOUT
>> Appendere STDOUT alla destinazione
tee Copia STDOUT e lo redirige
< Redirezione di STDIN
<< Appendere STDIN alla destinazione
2> Redirezione di STDERR
&1 Puntatore a STDOUT
| redirige lo STDOUT della sorgente sull' STDIN della
destinazione
cat some_file.txt 2>/dev/null
Redirige l' STDERR del comando cat nel cestino
cat < some_file.txt
Redirige l'STDIN del file (il file stesso) al comando cat
ls -lAh | grep txt | tee lista.txt
L' operazione di redirezione può esser fatta in qualunque posizione del comando quindi:
cat foo.txt bar.txt >new.txt
cat >new.txt foo.txt bar.txt
>new.txt cat foo.txt bar.txt
Sono tutti equivalenti
- Sono una particolarità dei sistemi *nix
- Sono programmi che prendono dati dallo standard input e lo reindirizzano sullo standard output
- Esprimono la filosofia UNIX dell' utilizzar tanti piccoli programmi per ottenere un grande output Note: Spiegare filosofia UNIX
grep <testo> [<file>...]
Ricerca di testo. Input: (lista di) file.
sort [<file>...]
Ordina alfabeticamente le linee. Input: (lista di) file.
rev <file>
Inverte l’ordine delle linee di file.
cut [-options] <file>
Seleziona colonne da file.
cat [-options] [<file>...]
Concatena il contenuto di una lista di file.
tail [-options] [<file>]
Mostra le ultime linee provenienti dall' STDIN o da un file di testo
less [-options] <file>
less is more.
- Sed è un editor non interattivo di testi
- Awk è un linguaggio di scripting per manipolare dati testuali
- Sono utilizzati per sviluppare filtri avanzati
sed G file.txt > file.txt
Raddoppia gli spazi del file
awk `length($0) > 16' file.txt
Stampa solo le linee del file con lunghezza maggiore di 16 caratteri
- Nei sistemi *nix tutto è un file
- Un file è chiamato con una qualsiasi sequenza di caratteri (max 255) a eccezione di ‘.’ e ‘..’
- Uno dei comandi principali per gestire file è
ls
ls [-options] [<file> o <directory>...]
Permette di elencare informazioni sui file Le opzioni principali sono:
l
(long format) per ogni file una linea che contiene diritti, numero di link, proprietario del file, gruppo del proprietario, occupazione di disco (blocchi), data e ora dell’ultima modifica o dell’ultimo accesso e nomet
(time) la lista è ordinata per data dell’ultima modifica
u
la lista è ordinata per data dell’ultimo accessor
(reverse order) inverte l’ordinea
(all files) fornisce una lista completa di fileF
(classify) indica anche il tipo di file (eseguibile: *, directory: /, link simbolico: @, FIFO: |, socket: =, niente per file regolari)
mkdir <directory>
Crea una directory
mkdir -p /directory/subdirectory
Crea una directory con sub directory
pwd
Mostra la directory corrente
cd <directory>
Vai alla directory specificata
rmdir <directory>
Elimina una directory
rm -rf <directory>
Elimina una directory
ATTENZIONE QUANDO SI USANO I COMANDI DI RIMOZIONE
touch file.es
Permette di creare un file vuoto
echo "prova" > file.txt
Crea un file con il contenuto dell' STDOUT di echo
cat > file.txt
Permette di creare un file con il contenuto da STDIN, per terminare premere CTRL+D
$EDITOR file.txt
Permette di creare un file aprendo l'editor preferito
cat <file>
more <file>
less <file>
$EDITOR <file>
Sono tutti metodi per Visualizzare il contenuto di un file
cp [-options] <origine> <destinazione>
Permette di copiare un file, con l' opzione -R si può copiare una cartella e i suoi contenuti
mv [-options] <origine> <destinazione>
Permette di spostare un file, è utilizzato anche per rinominare i file
rm [-options] <file>
Elimina un file
ln [-options] <origine> <destinazione>
Permette di creare un link tra due file
l'opzione -s
crea un link simbolico tra i 2 file
- Filesystem Hierarchy Standard (FHS) è uno standard che definisce, all’interno dei sistemi Unix, la struttura e le directory principali dei filesystems
- Non tutte le distro linux seguono il FHS (es. NixOS)
- Il filesystem è organizzato ad albero con una radice
/
detta root
bin
Binari utente essenzialiboot
File statici per l’avviodev
File dei dispositivietc
Configurazioni di sistema (specifiche per host)lib
Librerie condivise essenziali e moduli del kernelmedia
Punto di montaggio dispositivi rimovibilimnt
Punto di montaggio temporaneo dei filesystem
opt
Pacchetti software aggiuntivisbin
Binari di sistema essenzialisrv
Dati forniti dai servizi di sistematmp
File temporaneiusr
Gerarchia secondariavar
Dati variabili
bin
Buona parte dei programmi utenteinclude
Header dei programmi Clib
Librerie per i programmi utentelocal
Gerarchia localesbin
Binari di sistema non essenzialishare
Dati indipendenti dall’architettura
Bash riconosce dei caratteri speciali (wild card)
*
una qualunque stringa di zero o più caratteri in un nome di file?
un qualunque carattere in un nome di file[zfc]
un qualunque carattere, in un nome di file, compreso tra quelli nell'insieme. Anche range di valori: [a-d], esempio:
ls [q-s]*
lista i file con nomi che iniziano con un carattere compreso tra q e s
#
commento fino alla fine della linea\
escape (segnala di non interpretare il carattere successivo come speciale)
Attraverso la shel è possibile gestire i processi
ps [-options]
Manda sullo STDOUT i processi presenti nel sistema in un determinato momento
kill <pid>
Uccide il processo corrispondente a un determinato PID (Process ID)
killall <nome processo>
Uccide tutti i processi che hanno un determinato nome
Un ringraziamento speciale a:
per il supporto fornito
Made with ❤️ using reveal.js
Facebook unixMiB
Sito unixMiB
Github unixMiB
Telegram @unixmib
Telegram @unixmibinfo