Cos’è il terminale?
Il teminale, anche noto come shell, è l’ambiente di lavoro che permette di impartire comandi al computer. I comandi vengono inviati come stringhe testuali. Il computer risponderà con stringhe testuali o con l’esucuzione di applicazioni grafiche.
Ogni volta che eseguo un programma del mio ambiente desktop o semplicemente esploro le directories con Nautilus, ad un livello più basso vengono eseguiti dei comandi. Possiamo in questo senso immaginare il terminale come uno “strato” interposto fra l’interfaccia utente che utilizziamo quotidianamente e il kernel.
La shell è anche un vero e proprio ambiente di programmazione, oltre che un interprete di comandi, con cui è possibile realizzare script per automatizzare operazioni anche complesse e ripetitive ed è altamente configurabile.
Perchè utilizzare una shell quando posso disporre di interfacce utente che permettono di fare le medesime cose?
Perchè permette di capire meglio come funziona il pc, cosa stiamo facendo e come risponde il sistema ai comandi che impartiamo
- Perchè vi sono casi in cui l’utilizzo del terminale è l’unico sistema per risolvere eventuali problemi che potrebbero insorgere (es: non viene riconosciuta la scheda video, devo lavorare su una macchina remota, ecc.)
- Perchè con il terminale si lavora più velocemente. Non ci credete? ….vedremo, chi vincerà la gara che faremo a fine corso 😉
- Perchè in molti casi usare il terminale è la via più rapida
Tipi di shell
Esistono diversi tipi di shell ognuna delle quali dispone di un proprio set di comandi e di regole sintattiche non sempre simili e compatibili.
L’elenco delle shells disponibili sul proprio sistema è consultabile sul file
/etc/shells
La shell maggiormente utilizzata e predefinita nella maggior parte delle distribuzioni Linux è la BASH, acronimo di Bourne Again SHell. In questo corso ci concentreremo su bash.
Apriamo la shell
Dal menu Applicazioni>Accessori di Ubuntu è possibile aprire un terminale. Si tratta di un terminale grafico che è generalmente il più utilizzato.
Ecco come si presenta il terminale una volta aperto:
max@LaPimpa:~$
La riga che compare sul terminale mi fornisce alcune utili informazioni: Chi sono (nell’esempio sopra Max), su quale macchina sono (nell’esempio sopra LaPimpa). Successivamente al simbolo dei due punti mi viene riportato in quale directory del filesystem mi trovo. La tilde (~) indica che mi trovo all’interno della mia home directory, ovvero /home/max. Di seguito al simbolo del dollaro ($) potrò iniziare ad impartire i comandi. In alcuni casi il simbolo del dollaro può essere sostituito dal simbolo del cancelletto (#) ad indicare che abbiamo effettuato il login come root e quindi dobbiamo prestare attenzione.
La struttura dei comandi ricalca normalmente lo schema:
comando [argomenti] [oggetto del comando]
Non tutti i comandi necessitano di argomenti o oggetti. Il comando viene eseguito quando premo il tasto INVIO. Proviamo ad eseguire il seguente comando, premendo al termine INVIO:
echo Hello world
Il comando echo stampa su una riga vuota del terminale tutto quello che segue il comando stesso.
Autocompletamento dei comandi
Bash fornisce un utile sistema di autocompletamento ed esplorazione dei comandi. Se scrivo sul terminale una qualunque lettera e successivamente premo 2 volte il tasto tab, mi verrà restituito l’elenco completo dei comandi che iniziano con la lettera che ho premuto. Se scrivo ad esempio “ec” e premo tab, mi verrà scritto automaticamente il comando echo.
I comandi fondamentali
I comandi che dobbiamo conoscere per poter lavorare agevolmente con il terminale non sono molti e sono comunque sempre ben documentati. Sarà tuttavia necessario acquisire dimestichezza con questi semplici comandi. All’inizio di ogni sezione troverai una tabella nella quale saranno riassunti i comandi descritti più approfonditamente nella sezione.
Esploriamo il filesystem
Comandi fondamentali per l’esplorazione del filesystem | ||
---|---|---|
Comando | Descrizione | Opzioni principali o esempi |
ls |
Restituisce la lista dei file e delle directory contenuti nella posizione in cui il comando viene eseguito | -l: restituisce una lista più dettagliata (privilegi di accesso, dimensione data ecc.); -a: Mostra anche il file nascosti |
man [comando] |
Restituisce il manuale del comando. Es. man ls visualizza il manuale di ls | |
cd [nomecartella] |
Change directory: permette di cambiare directory. Se mi trovo nella home e digito cd Scrivania mi sposterò all’interno della cartella scrivania. | cd ~: va nella home dell’utente; cd ..: va indietro di una direcory; cd –: va nella directory precdedente; cd /tmp: usando il percorso assoluto del filesystem si sposta dentro la cartella /tmp. |
mkdir [nomecartella] |
Crea una directory. | |
cp [fileorigine] [filedestinazione] |
Copia un file da una destinazione ad un’altra | -r se si vuole copiare una cartella è necessario usare l’opzione -r. E’ possibile usare * per omettere alcune parti del nome (es. cp *jpg /tmp/ copia tutti i jpg nella cartella /tmp). |
mv [fileorigine] [filedestinazione] |
Sposta un file o una cartella dalla posizione di origine alla posizione di destinazione. |
Nella categoria dei comandi necessari rientrano certamente i comandi di esplorazione e gestione del filesystem, ovvero i comandi che ci permettono di visualizzare il contenuto di una directory, che ci permettono di copiare o spostare file, che ci permettono di creare nuovi file e directory.
Lista dei file e delle directory
max@LaPimpa:~/Desktop$ ls armandone.png
E’ il comando che restituisce l’elenco dei files e delle cartelle contenuti nella directory in cui ci troviamo, nel caso specifico dell’esempio: ~/Desktop ovvero /home/max/Desktop. Su Ubuntu, con il profilo colore standard, le directories vengono rappresentate in blu, i files in nero, i link simbolici in azzurro e gli eseguibili in verde. Se aggiungiamo l’opzione -la, l’output del comando ls diventa decisamente più interessante:
max@LaPimpa:~/Desktop$ ls -la drwxr-xr-x 2 mbarbieri mbarbieri 4096 2008-01-10 10:32 . drwxr-xr-x 27 mbarbieri mbarbieri 4096 2008-04-08 09:07 .. -rw-r--r-- 1 mbarbieri mbarbieri 138379 2007-07-11 12:29 armandone.png
Con il comando ls -la sono presenti le directory . e ..
Il singolo punto rappresenta la directory attuale (in cui ci troviamo), invece la directory con due punti rappresenta la directory madre della directory in cui ci troviamo.
La “d” all’estrema sinistra indica che si tratta di una cartella. I 9 caratteri successivi indicano i privilegi di accesso rispettivamente del proprietario, del gruppo e di tutti gli altri utenti. rwx indica che la cartella è accessibile in lettura (r), scrittura (w) ed esecuzione (x). Procedendo verso destra troviamo il numero dei files contenuti (????), il proprietario, il gruppo di appartenenza, la dimensione, la data e il nome.
Manuale dei comandi
Ciascun comando dispone di un manuale in linea. Il manuale di ciascun comando si consulta scrivendo man [nome comando]. Se ad esempio scrivo:
man ls
otterrò il manuale del comando ls. Per uscire dal manuale basta premere il tasto q.
Muoversi nel filesystem
Per muoversi all’interno dell’albero del filesystem si utilizza il comando cd (Change Directory). La sintassi più comune del comando è cd [cartella di destinazione]. Ad esempio:
max@LaPimpa:~$ cd Desktop max@LaPimpa:~/Desktop$
permette di spostarsi nel desktop. Da notare che il completamento automatico visto per i comandi funziona anche con l’oggetto del comando. Se voglio spostarmi nella directory padre il comando è:
max@LaPimpa:~/Desktop$ cd .. max@LaPimpa:~$
Il comando cd accetta diverse varianti particolari che in alcuni casi possono essere utili:
- cd Senza argomenti o oggetti permette di spostarsi all’interno della home directory dell’utente corrente
- cd [directory] Entra nella directory. Il nome della directory può essere specificato in modo assoluto o relativo. Se ad esempio sono nella mia home directory e voglio entrare nel desktop posso usare il percoso relativo cd Desktop o il percorso assoluto cd /home/max/Desktop
- cd – Torna nella directory in cui si era precedentemente
Creare una directory
Il comando per creare una directory è mkdir. La sua sintassi è mkdir [nome cartella]. Ad esempio:
max@LaPimpa:~$ mkdir pippo
creerà la cartella pippo all’interno della home directory di max.
Copia di files e cartelle
Per copiare files e cartelle si utilizza il comando cp. La sua sintassi è cp [opzioni] [sorgente] [destinazione]. Vediamo l’esempio seguente.
max@LaPimpa:~/cartoni$ ls aurora.dsn cusco.dsn dreamworks nemo.dsn shrek.dmw cenerentola.dsn disney fiona.dmw paccia.dsn spirit.dmk
All’interno della cartella cartoni ho due sottocartelle (dreamworks e disney) e 8 files. Voglio copiare i files con estensione .dns nella cartella disney e i files con estensione .dmk nella cartella deamworks.
Abbiamo diverse possibilità di approccio per svolgere il lavoro.
1) Copiamo i files uno alla volta
cp aurora.dsn disney
2) Copiamo i files selezionandoli in base all’estensione utilizzando il simbolo * prima dell’estensione
cp *.dsn disney cp *.dmw dreamworks
Se vogliamo copiare una intera directory è necessario aggiungere l’opzione -r al comando. Ad esempio:
cp -r disney ../
copia la cartella disney nella directory padre.
Spostare files e cartelle
Per spostare files il comando è mv. La sintassi è analoga a cp. Come nell’esempio precedente, se voglio spostare i files nelle due cartelle in base all’estensione i comandi saranno:
mv *.dsn disney mv *.dmw dreamworks
E’ possibile usare il comando mv anche per rinominare file o cartelle. Ad esempio, il comando
mv fiona.dmw ciuchino.dmw
rinomina il file fiona.dmw in ciuchino.dmw.
Cancellare cartelle o directory in modo ricorsivo o singoli file
AVVERTENZA: usando il comando rm non sposto le directory o i file nel cestino ma li cancello direttamente.
Per le directory: se necessario coi privilegi di root digito
rm -r nomedellacartelladacancellare
oppure
rm -R nomedellacartelladacancellare
oppure
rm -f nomedellacartelladacancellare
rm -rf nomedellacartelladacancellare
poi premo invio.
ATTENZIONE: gli ultimi due metodi possono essere PERICOLOSI in quanto l’opzione f elimina le eventuali richieste di conferma. In caso di cancellazione errata non resta che tentare di ricorrere al software libero photorec.
Se voglio cancellare un singolo file basta usare in comando rm senza opzioni seguito dal nome del file.
rm nomedelfilecancellare
Gestore software (APT)
Nei sistemi Debian derivati uno dei metodi per installare, disinstallere e aggiornare software è quello di utilizzare il comando apt (Advanced Packaging Tool). APT è utilizzabile da riga di comando attraverso la shell oppure attraverso interfaccia grafica (GUI): Debian e Ubuntu utilizzano Synaptic (in Debian si può trovare sotto a Desktop > Amministrazione > Gestore pacchetti Synaptic, in Ubuntu sotto a Sistema > Amministrazione > Gestore pacchetti Synaptic)
La potenza di APT è di poter utilizzare diverse sorgenti contemporaneamente per reperire il software, come risorse remote (http, ftp) e locali (hard disk, cdrom, dvd). Il file di configurazione di queste sorgenti è il file source.list all’interno di /etc/apt/. Per visualizzarlo:
vim /etc/apt/sources.list
(per utilizzare vim leggere la guida sopravvivere con vim)
esempio del contenuto di source.list in Ubuntu 7.10:
# deb cdrom:[Ubuntu 7.10 _Gutsy Gibbon_ - Release i386 (20071016)]/ gutsy main restricted # See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to # newer versions of the distribution. deb http://it.archive.ubuntu.com/ubuntu/ gutsy main restricted deb-src http://it.archive.ubuntu.com/ubuntu/ gutsy main restricted ## Major bug fix updates produced after the final release of the ## distribution. deb http://it.archive.ubuntu.com/ubuntu/ gutsy-updates main restricted deb-src http://it.archive.ubuntu.com/ubuntu/ gutsy-updates main restricted ## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu ## team, and may not be under a free licence. Please satisfy yourself as to ## your rights to use the software. Also, please note that software in ## universe WILL NOT receive any review or updates from the Ubuntu security ## team. deb http://it.archive.ubuntu.com/ubuntu/ gutsy universe deb-src http://it.archive.ubuntu.com/ubuntu/ gutsy universe deb http://it.archive.ubuntu.com/ubuntu/ gutsy-updates universe deb-src http://it.archive.ubuntu.com/ubuntu/ gutsy-updates universe ## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu ## team, and may not be under a free licence. Please satisfy yourself as to ## your rights to use the software. Also, please note that software in ## multiverse WILL NOT receive any review or updates from the Ubuntu ## security team. deb http://it.archive.ubuntu.com/ubuntu/ gutsy multiverse deb-src http://it.archive.ubuntu.com/ubuntu/ gutsy multiverse deb http://it.archive.ubuntu.com/ubuntu/ gutsy-updates multiverse deb-src http://it.archive.ubuntu.com/ubuntu/ gutsy-updates multiverse ## Uncomment the following two lines to add software from the 'backports' ## repository. ## N.B. software from this repository may not have been tested as ## extensively as that contained in the main release, although it includes ## newer versions of some applications which may provide useful features. ## Also, please note that software in backports WILL NOT receive any review ## or updates from the Ubuntu security team. deb http://it.archive.ubuntu.com/ubuntu/ gutsy-backports main restricted universe multiverse deb-src http://it.archive.ubuntu.com/ubuntu/ gutsy-backports main restricted universe multiverse ## Uncomment the following two lines to add software from Canonical's ## 'partner' repository. This software is not part of Ubuntu, but is ## offered by Canonical and the respective vendors as a service to Ubuntu ## users. deb http://archive.canonical.com/ubuntu gutsy partner deb-src http://archive.canonical.com/ubuntu gutsy partner deb http://security.ubuntu.com/ubuntu gutsy-security main restricted deb-src http://security.ubuntu.com/ubuntu gutsy-security main restricted deb http://security.ubuntu.com/ubuntu gutsy-security universe deb-src http://security.ubuntu.com/ubuntu gutsy-security universe deb http://security.ubuntu.com/ubuntu gutsy-security multiverse deb-src http://security.ubuntu.com/ubuntu gutsy-security multiverse #Medibuntu deb http://packages.medibuntu.org/ gutsy free non-free deb http://it.archive.ubuntu.com/ubuntu/ gutsy-proposed restricted main multiverse universe
La prima riga rappresenta la risorsa CDROM che è stata disabilitata con # detto anche commento, utilizzato anche nelle righe di informazione che non devono essere interpretate dal sistema ma tralasciate. Le altre righe rappresentano risorse remote supportate o meno dall’Ubuntu team. Tutte queste risorse sono dette anche repository.
apt-get update
Queste risorse (repository) vengono continuamente modificate grazie al costante lavoro della comunità che aggiunge e aggiorna i software presenti. Per aggiornare i repository sul nostro sistema, quindi per avere disponibilità di nuovo software, basta digitare:
apt-get update
apt-get upgrade
Dopo aver lanciato apt-get update per verificare la disponibilità di nuovi aggiornamenti basta digitare:
apt-get upgrade
il sistema restituirà un messaggio con l’elenco dei pacchetti aggiornabili, la dimensione dei file da scaricare, lo spazio da utlizzare sul computer e la possibilità di continuare con l’aggiornamento o meno digitando s o n (si o no).
apt-get dist-upgrade
Può capitare che alcuni pacchetti vengano trattenuti (kept back). Questo significa che esistono nuove versioni di questi pacchetti ma che non saranno installate per qualche ragione. Motivi possibili sono la presenza di dipendenze che non possono essere soddisfatte (uno dei pacchetti da cui dipende non è disponibile per il download) o nuove dipendenze (il pacchetto ha aggiunto una nuova dipendenza nell’ultima versione).
Non c’è una soluzione semplice nel primo caso. Nel secondo caso è sufficiente lanciare apt-get install per il pacchetto in questione e le dipendenze saranno risolte. Una soluzione altrettanto valida è usare:
apt-get dist-upgrade.
L’opzione dist-upgrade viene anche utilizzata per aggiornare l’intero sistema ad una nuova versione.
apt-cache
Da riga di comando per cercare un pacchetto è sufficiente digitare il comando apt-cache in questo modo:
apt-cache search [nome pacchetto]
al posto di [nome pacchetto] inseriremo il nome del software da cercare (o parte del nome o una parola che è presente nella descrizione del pacchetto). Ad esempio:
apt-cache search "cad system"
In Ubuntu l’output restituito sarà:
libqcad0-dev - Qcad development headers and static libraries qcad - A professional CAD System qcad-doc - Qcad Documentation electric - electrical CAD system sagcad-doc - sagCAD documentation
cioè tutti i pacchetti che hanno nel nome o nella loro descrizione la parola cad e la parola system. (attenzione: senza le “” trovo tutti pacchetti con la parola cad o la parola system).
Per avere informazioni su un determinato pacchetto, come ad esempio la versione e le dipendenze necessarie, basta digirare:
apt-cache showpkg [nome pacchetto]
qui al posto di [nome pacchetto] inseriremo il nome esatto del software che ci interessa cercare.
apt-get install
La procedura per installare un pacchetto da riga di comando è la seguente:
apt-get install [nome pacchetto]
dove al posto di [nome pacchetto] andrà inserito il nome del pacchetto da installare. Se il pacchetto necessita di ulteriore software per soddisfare alcune dipendenze apt restituirà un output con ulteriori indicazioni e la possibilità di continuare o meno.
apt-get remove
La procedura per disinstallare un pacchetto da riga di comando è la seguente:
apt-get remove [nome pacchetto]
dove al posto di [nome pacchetto] andrà inserito il nome del pacchetto da disinstallare.
apt-get clean
Quando si installa un pacchetto, APT recupera tutti i file necessari delle sorgenti specificate in /etc/apt/sources.list e li immagazzina in un archivio locale (/var/cache/apt/archives/) e poi procede con l’installazione. Con il tempo l’archivio locale cresce e può occupare molto spazio sul disco. Con l’opzione:
apt-get clean
vengono eliminati tutti i pacchetti scaricati nell’archivio locale. Se si volesse reinstallare un pacchetto APT dovrà nuovamente scaricarlo.
apt-get autoclean
Con il comando:
apt-get autoclean
si cancellano dall’archivio locale solo i file che non possono più essere scaricati (come ad esempio i pacchetti obsoleti quindi inutili al sistema).
altro…
Provate a digitare:
apt-get moo
Risorse e processi del sistema
TOP
Come possiamo visualizzare i processi e le applicazioni che stanno girando sul nostro sistema? Basta digitare da terminale il comando:
top
In questo modo vengono mostrati i processi che occupano più CPU. Esempio di top:
top - 12:00:00 up 2:37, 3 users, load average: 0.15, 0.38, 0.45 Tasks: 114 total, 1 running, 113 sleeping, 0 stopped, 0 zombie Cpu(s): 2.2%us, 0.6%sy, 0.0%ni, 97.1%id, 0.0%wa, 0.1%hi, 0.0%si, 0.0%st Mem: 766320k total, 677564k used, 88756k free, 34896k buffers Swap: 995988k total, 211060k used, 784928k free, 284044k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 5069 root 15 0 267m 58m 6832 S 0.9 7.9 7:47.59 Xorg 6260 alle 15 0 64036 9224 7140 S 0.7 1.2 0:03.15 gnome-terminal 6715 alle 15 0 186m 71m 21m S 0.2 9.6 3:16.22 firefox-bin 7640 alle 15 0 2364 1156 876 R 0.2 0.2 0:00.06 top 4613 haldaemo 15 0 3260 1236 1084 S 0.1 0.2 0:02.83 hald-addon-stor 5573 alle 15 0 18544 5180 3728 S 0.1 0.7 0:44.62 compiz.real 5582 alle 15 0 20368 5036 4324 S 0.1 0.7 0:12.08 gnome-screensav 1 root 18 0 2948 1768 484 S 0.0 0.2 0:02.51 init 2 root 10 -5 0 0 0 S 0.0 0.0 0:00.00 kthreadd
Nella prima parte il sistema ci offre qualche informazione, come l’ora, gli utenti collegati, i carichi e lo stato dei processi, e l’utilizzo della CPU e delle memorie (RAM e SWAP). Nella seconda parte, in ordine di utilizzo CPU, abbiamo le varie applicazioni che girano in questo momento sul nostro sistema. Per ogni riga, fra le varie informazioni, possiamo distinguere il numero del processo (PID), l’utilizzatore (USER), la percentuale utilizzata di CPU e di memoria, e il nome del programma in questione. Top viene aggiornato in tempo reale ogni 3 secondi, mentre con l’opzione:
top -d n
possiamo modificare il tempo di aggiornamento. (al posto di n metteremo un numero che corrisponde ai secondi voluti).
Con l’opzione
top -U [utente]
si visualizzano solo i processi di un determinato utente (al posto di [utente] scriveremo il nome dell’utente desiderato).
ps aux
Vogliamo vedere se un programma o un servizio sta girando sulla nostra macchina ma occupa troppa poca CPU per essere visualizzato con top? Da terminale digitiamo:
ps aux | grep [applicazione]
Esempio: se digito ps aux | grep cron ricevo come output queste due righe:
root 5215 0.0 0.1 2336 900 ? Ss 09:23 0:00 /usr/sbin/cron alle 7774 0.0 0.1 2992 784 pts/1 S+ 13:14 0:00 grep cron
la prima è quella che ci interessa, la seconda è la ricerca che si sta effettuando. Cioè la prima riga ci dice che il servizio cron è attivo per l’utente root con PID 5215 e la seconda è la ricerca appena effettuata con ps aux e grep. (Vedere la sezione Pipe).
pstree
I servizi attivi sul sistema possono anche essere visualizzati con il comando pstree che rimanderà un output “ad albero” come nell’esempio:
caronte:/var/www# pstree init-+-apache2---8*[apache2] |-cron |-events/0-+-aio/0 | |-kblockd/0 | |-khelper | |-kmirrord/0 | `-2*[pdflush] |-6*[getty] |-inetd |-khubd |-kjournald |-klogd |-kseriod |-ksoftirqd/0 |-kswapd0 |-lpd |-miniserv.pl |-mysqld_safe-+-logger | `-mysqld---14*[{mysqld}] |-portmap |-python |-rpc.statd |-sendmail-mta |-sshd---sshd---sshd---bash---su---bash---pstree `-syslogd
è interessante vedere che dal servizio ssh è stato lanciato proprio il comando pstree.
Terminare un processo
Può capire che un programma non si comporti come voluto e che non si riesca a chiuderlo graficamente. Per poterlo chiudere in modo forzato ed essere sicuri che questo sia avvenuto occorre utilizzare il terminale. Mettiamo ad esempio che Firefox non risponda più e non si riesca ad uscire; basta digitare top da riga di comando, visualizzare il numero del processo (PID) e l’utilizzatore (USER)… a questo punto mettiamo che il PID del nostro Firefox sia 6715, digitiamo:
kill 6715
e in questo modo terminiamo l’applicazione. Se non dovesse essere sufficiente aggiungiamo l’opzione -9 per chiudere brutalmente l’applicazione:
kill -9 6715
Se invece vogliamo terminare una serie di processi uguali basta digitare:
killall [applicazione]
al posto di [applicazione] metteremo il nome del programma da terminare. E’ comodo ad esempio quando Firefox ci dice che un’altra istanza è stata lanciata con lo stesso utente e non può essere aperto.
nota importante
kill e killall terminano in modo forzato i programmi quindi occorre controllare se il PID corrisponde al programma che vogliamo veramente chiudere e ricordarci che le modifiche che si stavano facendo non verranno salvate.
Eccoci alla sezione dei “trucchetti”: come fare prima e meglio!
History
Ogni shell ha un file (~/.bash_history) nel quale scrive gli ultimi comandi che abbiamo digitato. Il modo più semplice per navigare nella history è utilizzando la “frecceta su” e la “freccetta giù”.
Esistono altri modi per utilizzare questa storia: ad esempio, se abbiamo digitato un comando molto lungo, possiamo evitare di riscriverlo tutto semplicemente mettendo ! prima del comando:
luca@geronimo:/$ ls -lha luca@geronimo:~/Desktop$ ls -lha total 222M drwxr-xr-x 5 luca luca 4.0K 2008-04-16 16:07 . drwxr-xr-x 97 luca luca 12K 2008-04-16 16:56 .. drwxr-xr-x 6 luca luca 4.0K 2008-04-16 12:12 Foto -rw-r--r-- 1 luca luca 127K 2008-01-12 15:56 Grassman.nb -rw-r--r-- 1 luca luca 2.8K 2007-04-22 17:10 isingHB2.m -rw-r--r-- 1 luca luca 11K 2007-11-07 23:13 labteo3(2).nb -rw-r--r-- 1 luca luca 3.7K 2007-11-04 11:25 labteo3.nb -rw-r--r-- 1 luca luca 26K 2007-08-10 16:37 lab-teo-ex2007.pdf luca@geronimo:~/Desktop$ !ls ls -lha total 222M drwxr-xr-x 5 luca luca 4.0K 2008-04-16 16:07 . drwxr-xr-x 97 luca luca 12K 2008-04-16 16:56 .. drwxr-xr-x 6 luca luca 4.0K 2008-04-16 12:12 Foto -rw-r--r-- 1 luca luca 127K 2008-01-12 15:56 Grassman.nb -rw-r--r-- 1 luca luca 2.8K 2007-04-22 17:10 isingHB2.m -rw-r--r-- 1 luca luca 11K 2007-11-07 23:13 labteo3(2).nb -rw-r--r-- 1 luca luca 3.7K 2007-11-04 11:25 labteo3.nb -rw-r--r-- 1 luca luca 26K 2007-08-10 16:37 lab-teo-ex2007.pdf
Elimina cronologia Bash
Da terminale digito:
history -c
poi premo enter o invio.
Non sempre il predetto metodo funziona. Per essere più sicuri è meglio usare
cat /dev/null > ~/.bash_history && history -c && exit
poi premo enter o invio.
Concatenazione di comandi
Quante volte avreste voluto lanciare l’aggiornamento dei pacchetti e poi andarvene via sicuri che al trmine il pc si sarebbe spento da solo??? Ebbene, ora potrete!!
Esistono tre operatori molto importanti: &, &&, ;
- & manda in background il primo programma, permettendo al secondo di essere eseguito in contemporanea:
geronimo:/home/luca# apt-get update & ls
- && esegue il secondo programma al termine del primo ma solo se il primo non genera errori:
geronimo:/home/luca# apt-get update && apt-get upgrade
- ; esegue il secondo programma al termine del primo, anche se ci sono stati degli errori:
geronimo:/home/luca# apt-get update && apt-get upgrade ; halt
Redirezione dell’output
Quante volte vi sarete chiesti come fare per salvare su un file di testo l’elenco di ciò che è contenuto in una cartella…??? O salvare gli insulti che vi sputa il compilatore quando cercate di compilare il kernel? Ebbene, con Linux tutto ciò richiede una riga!
Stream di input e output
Il terminale ha tre stream: l’input (da tastiera) e due output (uno “normale” e uno per gli errori). I due output in generale scrivono sul terminale, ma si può anche decidere di mandarli su un file. Ad esempio, se vogliamo scrivere su un testo tutti i nomi dei file in una directory, ci basta fare
luca@geronimo:/$ ls > elenco.txt
e in elenco.txt troveremo:
luca@geronimo:/$ cat elenco.txt bin boot dev etc home initrd lib lost+found media mnt proc root sbin sys tmp usr var
Abbiamo quindi reindirizzato l’output su file!!
Esiste però un altro output, quello per gli errori. Per reindirizare questo stream, dobbiamo fare
luca@geronimo:~$ ls file_non_esistente 2> errors.txt
e in errors.txt troveremmo
luca@geronimo:~$ cat errors.txt ls: cannot access file_non_esistente.txt: No such file or directory
Questo può essere utile per tenere traccia degli errori che possono generare alcuni programmi in compilazione (e malauguratamente anche in esecuzione…).
Possiamo anche mandarne uno da una parte e l’altro dall’altra:
luca@geronimo:~$ ls file_non_esistente ./ > elenco.txt 2> error.txt luca@geronimo:~$ cat elenco.txt ./: amsn_received Books Desktop GNUstep Photos Pictures luca@geronimo:~$ cat error.txt ls: cannot access file_non_esistente: No such file or directory
Semplice, no?
Pipe
In altri casi, può essere utile riversare l’output di un programma nell’input di un altro. Questo giochetto è implementato in bash con la pipe “|”. Ecco un esempio:
luca@geronimo:~$ lsmod |grep nv nvidia 7807264 27 i2c_core 19680 1 nvidia agpgart 29896 2 nvidia,intel_agp
Nell’esempio il comando lsmod viene riversato come input del comando grep che si occupa di filtrarlo.