OMINUX [Il manuale linux dell'omino]

Distribuzione di riferimento - Archlinux

Copyright

Copyright 2007-2008 Lorenzo Campana
e-mail: fungushaggard[chiocciola]yahoo.it


Autori

Lorenzo Campana
Claudio Pisa


Indice...

...


Disclaimer

Gli autori di questo manuale non sono da considerarsi responsabili di eventuali danni a cose o persone causate da un uso irresponsabile di questo manuale.


Licenza d'uso

Puoi scaricare il manuale liberamente e distribuirlo altrettanto liberamente.
Puoi modificare il manuale come vuoi tranne le sezioni Copyright, Autori, Disclaimer e Licenza d'uso.
Puoi anche venderlo e quindi utilizzarlo come fonte di guadagno: in tal caso dovrai devolvere il 30% dei ricavi (al netto delle spese), agli autori del manuale.


Introduzione

Questo manuale vuole essere un utile punto di riferimento per chi muove i primi passi su Linux ed un ottimo promemoria per chi intende utilizzarlo quotidianamente. Per rendere il piu' semplice possibile l'apprendimento di ogni cosa, ogni argomento sara' trattato nel momento piu' opportuno. Cerchero' di rendere la trattazione semplice ed esauriente senza dilungarmi eccessivamente in dettagli che possano far perdere di mira l'obiettivo del manuale. Scrivo questo manuale per colmare le mie lacune, aprirmi nuove prospettive di lavoro ed al tempo stesso lasciare qualcosa di utile a chi, come me, ha voglia di imparare cose nuove.


Ringraziamenti

Ringrazio il Marians e tutte le fonti che ho trovato sul web e che non ricordo una ad una... ringrazio i forum di slacky.it ed archlinux.it, ringrazio i linuxiani del Sabazia Lug ma piu' di tutti ringrazio il Clauz che ha sempre tante cose da insegnarmi e senza il quale questo tutorial non esisterebbe. :)


Distribuzioni

Se gia' avete le idee chiare su quale distribuzione utilizzare potete saltare direttamente al prossimo capitolo.
Nel panorama attuale si sono fatte strada parecchie distribuzioni e navigando per il web potrete trovare diversi pareri, talvolta anche discordanti su quale sia piu' performante, quale piu' semplice, quale piu' sicura... Avendo installato svariate distribuzioni vi do il mio: per quanto riguarda la semplicita', ci tengo subito a smentire che alcune distribuzioni siano piu' semplici di altre... si tratta solo di imparare qualche comando e sono tutte semplici... anzi, quelle con un'installazione un po' piu' "spartana" sono proprio quelle che vi permettono di imparare piu' cose... e vedrete che non sara' affatto complicato... basta seguire le istruzioni. :)
Quale distro sia piu' sicura non ve lo saprei ancora dire... sono niubbo anch'io... e comunque un bravo amministratore sa come rendere sicura qualsiasi distro... su due cose invece posso consigliarvi: la prima e' di trovare una distro che riconosca tutto il vostro hardware... (e spero che la troviate... poiche' non sempre e' semplice far funzionare tutte le periferiche... e non sempre si ha la voglia ed il tempo di mettersi li ore ed ore per cercare di capire come far funzionare tutto), la seconda e' di trovare una distribuzione "leggera" perche', soprattutto per chi la utilizza su portatile, e' noioso star ad aspettare che si avvii. Dunque, per quanto mi riguarda, posso dire che le distribuzioni che mi hanno colpito di piu' sono: Slackware ed Archlinux (le ho installate tutte e due sul mio bel portatile). Se stavate pensando ad ubuntu, che e' una delle distro che va per la maggiore, e' una distro che ha sicuramente un ottimo supporto hardware ma, rispetto alle altre due direi che e' un po' meno performante. La Slackware e' la tipica distribuzione di chi ha molta voglia di imparare - spesso nei libri si fa riferimento ad essa (ma per imparare tutte le distribuzioni vanno bene) - direi anche che e' molto piu' semplice di quello che si crede, stabile, concreta, funzionante con un'ottima community italiana [www.slacky.it], insomma e' un prodotto veramente eccellente (per iniziare vi consiglio questa). La Archlinux (da non confondere con Arklinux che e' un'altra distribuzione), e' la piu' spartana e presenta un po' di cose da configurare a mano... ma nulla di complesso (sul sito www.archlinux.it troverete tutte le istruzioni). Come la slackware e' molto performante ed in piu' ha un gestore di pacchetti "pacman" che la rende veramente efficiente e semplice da aggiornare. Comunque se avete una connessione lenta e' da preferire la Slackware in quanto la Archlinux, al termine dell'installazione va aggiornata via internet... comunque, se avrete la possibilita' di provarla la apprezzerete al pari della slackware e forse anche di piu'. In questo manuale faro' spesso riferimento alla Archlinux... per cui, qualora decidiate di installarla anche voi, vi sara' piu' semplice seguire ogni passo. Se invece avete un pc molto vecchio, provate la DSL (Damn Small Linux), una distribuzione leggera leggera senza troppe pretese. Fatta questa carrellata non vi rimane che scegliere. Le mie preferenze gia' le sapete. :)


Cenni preliminari

Per prima cosa, prima di installare la distro scelta, e' bene che prendiate confidenza con alcuni comandi basilari; il mio consiglio e' di procurarvi una ubuntu-live (una distro live parte da cd senza bisogno di installarla). Inserite il cd, Riavviate il pc, entrate nel bios (di solito si entra con F2 oppure Ctrl o anche F12 - dipende dal vostro pc), settate il boot da cd-rom, e fate partire la vostra bella live. Per prima cosa aprite il terminale dei comandi e scrivete "cd /" (senza virgolette) e date enter (enter va dato dopo ogni comando). Il comando cd (chiama chiama la directory / "dove e' installato il vostro sistema per capirci"). Scrivete "ls" (col comando ls il pc visualizzera' tutti i file e le cartelle che stanno all'interno di /). Come potete notare a prima vista la struttura ad albero del filesystem e' diversa da quella di windows... non ci sono le lettere C: D: E: ad identificare le partizioni... esse sono invece identificate con sda1, sda2... oppure hda1, hda2 (a seconda di quale distribuzione live stiate utilizzando). L'output di ls all'inizio potra' sembrarvi un po' caotico ma poi ci prenderete la mano... una delle difficolta' iniziali e' proprio quella di non sapere come orientarsi all'interno di tutte quelle cartelle... cosa c'e' all'interno di ogni cartella? dove andare per fare cosa? Ve ne parlero' nei prossimi capitoli... intanto esercitiamoci un po' con i comandi appena spiegati... mettiamo che vogliamo entrare nella cartella home: ci bastera' digitare cd home. digitando ls vedremo il contenuto della cartella home. Per tornare indietro di una cartella digiteremo "cd .." se invece vogliamo tornare alla radice digiteremo "cd /" e se invece vogliamo tornare alla "home directory" (non la cartella home - ma la directory di partenza) sara' sufficiente digitare "cd".
"cd /etc/rc.d" per andare in un sol colpo nella cartella rc.d. Per vedere i file in una directory scriviamo "ls", se vogliamo vedere anche i file nascosti scriveremo "ls -a". NOTA: linux e' case-sensitive "cd /etc" e' diverso da "cd /ETC" porre sempre attenzione a maiuscole e minuscole.
Ecco alcuni semplici comandi (nei prossimi capitoli ne faro' una trattazione piu' dettagliata):

mkdir ugo

crea una directory di nome ugo all'interno della directory corrente

rmdir ugo

rimuove la directory ugo - solo se e' vuota

touch ugo

crea un file di nome ugo

rm ugo

rimuove il file ugo

cp /paperino /home/donalduck

copia il file paperino nella dir home rinominandolo in donalduck

mv /paperino /home/donalduck

sposta il file paperino nella dir home rinominandolo in donalduck

less

usato in combinazione con altri comandi permette di visualizzare la schermata un po' per volta permettendo lo spostamento coi cursori freccetta. "q" per uscire

find -name pi*

cerca i file che iniziano per "pi" nella dir corrente ed in tutte le sottodirectory

"|" la pipe (serve per combinare piu' comandi insieme) ad es:

find -name pi* | less

visualizza tutti i file che iniziano per "pi" permettendo di sportarsi coi tasti cursore

man rm

visualizza le istruzioni per utilizzare al meglio il comando rm (man puo' essere utilizzato per qualsiasi comando)

rm --help

come per man "--help" ci offre informazioni utili sui comandi.

Per arrestare un comando digitate Ctrl-c; Ctrl-d per chiudere un programma
Il tasto TAB: il tasto tab esegue un completamento automatico di cio' che stiamo scrivendo: se ad es scriviamo cd /h e digitiamo tab il pc completera' il testo scrivendo cd /home
Per ridigitare gli ultimi comandi e' sufficiente riesumarli coi tasti freccia.
Il tasto Tab velocizza molto il lavoro ed e' utile per aiutarci a ricordare comandi di cui ricordiamo solo l'incipit
Se dobbiamo modificare un file useremo vim (un utilissimo editor di testo)
volendo modificare il file "ugo" digitiamo "vim ugo" (vim funziona in piu' modalita' - per entrare in modalita' inserimento digitiamo "i" da questo momento potrete digitare testo e cancellarlo come in un banalissimo notepad; per salvare il documento dovrete tornare in modalita' comando digitando il tasto "Esc" e di seguito digitare ":w!" se volete salvare ed uscire ":x!" se volete uscire senza salvare ":q!"
Per ora puo' bastare... prendete confidenza con i comandi sopra citati... vi potranno essere utili durante l'installazione della vostra distro per effettuare piccole modifiche ai file di configurazione.



Struttura ad albero del file system

Su linux il file system e' organizzato in maniera tale che le directory contengano file dello stesso tipo... All'interno di / possiamo trovare diverse directory: bin, boot, dev, etc, home, lib, mnt, proc, root, sbin, tmp, usr, var. Ognuna di queste directory ha uno scopo preciso; in questo capitolo delineero' il contenuto delle suddette directory e del perche' creare piu' o meno partizioni. Dunque, bisogna precisare che per computer personali molto probabilmente una partizione di / piu' una di swap andra' benissimo, ma diciamo anche che una configurazione raccomandabile per chi vuole fare le cose precise e per un sistema multiutente potrebbe essere questo: una partizione di swap (in genere grande il doppio della RAM) una partizione di / (contenente /boot, /etc, /bin, /sbin, /lib , /dev, /mnt, /proc, /root) una partizione per /usr (contiene i programmi che l'utente installa e diversi sorgenti) una partizione per /home (contiene le home dei vari utenti) una partizione per /var (contiene file di log destinati ad aumentare di dimensioni nel tempo) una partizione per /tmp (contiene file temporanei) Un file system cosi' organizzato soffre meno la frammentazione, non corre il rischio che i file in /var vadano a "riempire" tutto l'hard disk e permette di mantenere salvi i dati memorizzati in /home ed /usr nel caso di reinstallazione del sistema. Ecco dunque una breve descrizione del contenuto delle directory: /bin e /sbin contengono i programmi di sistema, dentro /boot ci sono i file necessari al funzionamento del boot loader installato (lilo o grub), in /dev sono contenuti i device (i file che permettono di far comunicare il pc con le varie periferiche), nella cartella /etc ci sono i file di configurazione (potra' capitare spesso di doverli editare tramite vim, nano o l'editor che preferite... io consiglio vim), la cartella home contiene i documenti degli utenti che utilizzano la postazione (utente per utente), la cartella /root contiene i file del superutente, la cartella /lib contiene le librerie condivise necessarie al funzionamento dei programmi in /bin ed /usr/bin, /mnt e' utilizzato come mount point per i device removibili (cdrom, pendrive...), /proc viene utilizzato come mount point del proc-filesystem il quale permette di recuperare informazioni sul sistema e sui processi, /tmp e' utilizzata dal sistema per il salvataggio di file temporanei dei vari programmi, e' scrivibile da tutti gli utenti e, pertanto, puo' esssere utilizzata per "parcheggiare" dei file; si svuota ad ogni reboot; la cartella /usr contiene il software utente organizzato in diverse sottocartelle: [bin - che contiene i comandi, man ed info - che contengono la documentazione......], infine la directory /var contiene i file di log, le mail le news...


Installazione

Se avete gia' installato la vostra distro, potete saltare al capitolo successivo.
Una volta che avrete scelto che distribuzione utilizzare, bisognera' reperirla ed installarla. Se avete una connessione lenta il mio consiglio e' di acquistarla in edicola con linux-pro, o di acquistare il cd presso il sito - la spesa e' di pochi euro. Non mi dilunghero' troppo sull'installazione in quanto per ogni distribuzione la procedura e' differente. Vediamo di delineare alcune linee generali: volendo, potreste togliere windows e mettere linux, ma la maggior parte degli utenti probabilmente vorra' far coesistere i due sistemi operativi... dunque... potete usare partition magic per partizionare il vostro pc senza rimuovere windows oppure dare una bella rinfrescata al vostro pc ripartendo da zero.
Inserite il cd di windows e riavviate il pc; (windows va installato per primo - altrimenti avrete problemi per far partire linux). Quando windows ve lo chiedera', ditegli di creare tre partizioni: sulla prima - la partizione primaria - verra' installato windows: quando vi chiedera' quale file sistem utilizzare, scegliete FAT32. La seconda sara' una partizione di scambio - potrete formattarla al termine dell'installazione di windows; andate su risorse del computer, cliccate col tasto destro del mouse su D: e formattatelo in FAT32... su C: dovrebbe esserci windows mentre E: non c'e' bisogno di formattarlo in quanto lo formatteremo con linux. Nota: le lettere sul vostro pc potrebbero essere diverse... comunque bastera' cliccarci per capire quali partizioni non sono state ancora formattate.
A questo punto inserite il cd di linux e riavviate... seguite le istruzioni di linux... battete enter quando ve lo chiede, se non avete esigenze particolari mettete il kernel di default... quando vi sara' mostrato il prompt dei comandi, effettuate il login se ve lo chiede - su login entrate mettendo root - "root" e' il superutente... quello che puo' fare qualsiasi cosa". A questo punto digitate cfdisk: in questo modo potrete visualizzare le vostre partizioni: le prime due in FAT32 non andranno toccate... la terza eliminatela e create due nuove partizioni logiche una di 512 Mb e l'altra col rimanente spazio - quella di 512 Mb e' la partizione di swap (scegliete type: 83), mentre l'altra e' quella su cui andra' montato il sistema (type: 82) fate write per entrambe ed uscite.... digitate setup e date enter oppure arch/setup se state installando Archlinux e per il resto seguite la logica, le istruzioni, la guida sul sito... Ora se tutto e' andato per il meglio ed avete configurato i file come spiegato nella guida online... se avrete creato un nuovo utente con cui loggarvi e tutto il resto, potrete dare startx e dovrebbe avviarsi l'interfaccia grafica... ci sono diverse interfacce tra cui potete scegliere... io mi trovo bene con la fluxbox semplice ed essenziale... se volete qualcosa di piu' simile a windows potrete installare kde o gnome... ma anche tutti e tre... poi potrete far partire di volta in volta quello ke volete...


Combinazioni di tasti

Su linux spesso puo' tornare utile digitare alcuni caratteri che non sono presenti sulla tastiera; di seguito le combinazioni per ottenere il carattere dopo l'uguale

Alt-Gr+ì = ~

Alt-Gr+Shift+è = {

Alt-Gr+Shift++ = }

Alt-Gr+' = `


I singoli apici sono utili negli script ed in programmazione poiche', a differenza dei doppi apici ("), permettono di processare cio' che si trova al loro interno... talvolta puo' capitare di aprire piu' apici annidati uno dentro l'altro: 'blablabla`bla`blablabla'
avere a disposizione due tipologie di apici ci permette di far capire al pc che il secondo apice non e' di chiusura del primo bensi' un argomento annidato. La tilde invece e' molto utilizzata come scorciatoia per identificare la home directory.



Considerazioni sulla codifica

Quale codifica utilizzare nella stesura dei propri documenti? Esistono diversi tipi di codifica; lo standard e' rappresentato da unicode (al piu' rappresentato dal sistema di codifica UTF-8), pero' spesso troviamo documenti prodotti con altre codifiche... ANSI, iso-8859-1...... dunque vediamo di fare chiarezza: se stessimo sotto windows e stessimo creando un documento html scrivendolo ad esempio col blocco note: al momento del salvataggio dovremmo scegliere la codifica... se non lo facessimo il blocco note salvera' il nostro documento utilizzando la codifica di default (che per il blocco note e' la ANSI) Il set di caratteri windows-1252 e' noto anche come set ANSI (la microsoft ha creato il set windows-1252 basandosi su specifiche ansi ma non e' mai stato approvato dalla ANSI... purtuttavia ne prende il nome). Successivamente dalle specifiche ANSI e' nato l'iso-8859-1 che si discosta da windows-1252 per pochi caratteri... e' per questa ragione che quando creiamo una pagina html e diciamo al browser di decodificarla tramite il tag <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1> la codifica avviene correttamente anche se in realta' il salvataggio del documento e' stato fatto con la codifica ansi. In linea generale, per non avere problemi, bisogna fare in modo che la codifica utilizzata per la lettura di un documento sia uguale alla codifica utilizzata per scriverlo. La iso-8859-1 viene anche detta iso-latin-1 (che a sua volta differisce di poco dalla iso-8859-15, anche detta iso-latin-9, a cui e' stato aggiunto il simbolo dell'euro e poco altro). Sia la ansi che la iso-8859-1 sono dei superset della codifica ascii. I documenti creati con gli editor di linux vengono salvati di default con la codifica UTF-8 che, come ho gia' detto, rappresenta lo standard a cui tutti dovrebbero adeguarsi. Non sapendo quale codifica fosse meglio utilizzare, avevo iniziato a scrivere questa stessa guida salvandola in iso-8859-1... quando poi ho voluto condividerla tramite svn (a fine manuale e' spiegato cosa e' svn), copiandola nel repository ho potuto notare che i caratteri accentati venivano visualizzati male: cio' e' dovuto al fatto che la codifica in lettura dal repository avviene tramite UTF-8; dato che anche la UTF-8 e' un superset del charset ascii ho ovviato al problema sostituendo i caratteri accentati con caratteri ascii seguiti da un'apostrofo e risalvando il documento con codifica UTF-8. UTF-8 utilizza spazi di memoria differenti a seconda dei caratteri che vengono rappresentati: usa 1 byte per memorizzare caratteri ascii, 2 byte per altri 1920 caratteri (romano, greco, cirillico...), 3 byte per altri 63488 caratteri tra cui gli ideogrammi. Dunque per noi occidentali e' conveniente utilizzare UTF-8 in quanto utilizza 1 solo byte per la maggior parte dei caratteri utilizzati; ad un cinese converrebbe invece la codifica UTF-16 in quanto memorizza i primi 65536 caratteri in due byte ed i rimanenti caratteri in 4 byte (gli ideogrammi con la UTF-16 vengono memorizzati su due byte mentre con la UTF-8 vengono memorizzati su tre byte). In linea di principio la cosa piu' conveniente per noi occidentali e' produrre documenti in UTF-8 cercando di utilizzare per lo piu' il set ascii.


Comandi di ridirezione e cenni di scripting

I comandi che seguono espletano la loro utilita' in combinazione con gli altri comandi; dategli un'occhiata e ritornateci quando ne avrete necessita'. Per comodita' vediamone l'utilizzo in combinazione con ls

ls > file1

crea il file1 ed inserisce al suo interno l'output di ls

ls -l >> file1

aggiunge il nuovo output in coda al file1, senza cancellarne i contenuti

ls /directorychenonesiste 2> /dev/null

ridirige gli errori su /dev/null in modo tale da non renderli visibili (la directory /dev/null assorbe tutto cio' che gli viene inviato... funziona un po' come un buco nero)

ls > file1 2> /dev/null

manda l'output su file1 e gli eventuali errori su /dev/null

ls >& file1

manda l'output su file1 (compresi gli eventuali errori)

cat < file1

ridirige il contenuto di file1 al comando cat che lo visualizza su schermo

ls | grep "*.txt"

passa l'output di ls a grep che lo filtra secondo la ricerca impostata

Per eseguire piu' comandi in maniera sequenziale si usa il ";" ogni comando verra' eseguito solo dopo che il precedente e' terminato

ping www.google.it;ls

ls partira' solo nel momento in cui terminerete il ping tramite CTRL+c

Per eseguire piu' comandi in maniera simultanea si usa il "&"

> file_di_prova

creiamo un file

vim file_di_prova

editiamolo con vim e scriviamo quanto segue:

#!/bin/sh
ls&
ls -l

la prima riga indica che il file e' avviabile utilizzando la shell bash

chmod u+x file_di_prova

rendiamo il file eseguibile

./file_di_prova

lo facciamo partire

Abbiamo appena creato un piccolo script bash: ogni volta che avremo necessita' di eseguire parecchi comandi di seguito, per semplificarci la vita, potremmo crearci uno script: creiamo un file, inseriamo la dichiarazione che e' un file valido per la shell #!/bin/sh, inseriamo tutti i comandi che ci interessano, lo salviamo e lo rendiamo eseguibile. Quando ne avremo necessita', ci bastera' avviare il file per far partire tutti i comandi in esso contenuti.
Racchiudendo piu' comandi tra parentesi tonde, questi verranno eseguiti come se fosse un unico comando:

(comando1 ; comando2) | comando3


SU - SUDO

Molti comandi per poter funzionare necessitano di essere digitati da root;

su

per diventare root

su paperino

per loggarci con nomeutente "paperino"

Volendo minimizzare l'utilizzo di sessioni come root, per non incombere in possibili errori o per questioni di sicurezza, e' possibile utilizzare il comando "sudo".
Prima di tutto dobbiamo abilitare l'utente paperino all'utilizzo di tale comando...

su
visudo

da root lanciamo "visudo" (che apre il file di configurazione di sudo tramite vim) ed inseriamo una nuova riga:
paperino ALL=(ALL) SETENV: ALL
:x! - salviamo ed usciamo
da questo momento l'utente paperino e' abilitato ad utilizzare il comando "sudo"... ogni volta gli verra' chiesta la password di root

Volendo un sistema "rootless"

sudo passwd -l root

per disabilitare l'utente root

sudo passwd root

per riabilitarlo (nel caso si preferisca utilizzarlo)

Se al posto di "SETENV" mettessimo "NOPASSWD" l'utente paperino potra' utilizzare sudo senza bisogno di inserire alcuna password. Possiamo anche far in modo che paperino possa utilizzare solo alcuni comandi da sudo ad es:
paperino ALL=(ALL) NOPASSWD: /sbin/poweroff


Comandi di uso frequente

Ora che abbiamo preso confidenza col sistema, vediamo di elencare i comandi che spesso utilizzeremo:

cd /home/ugo

cambia directory - in questo caso ci spostiamo in /home/ugo

cd ..

risale di un livello - in questo caso da /home/ugo risaliremo in /home

cd ../..

risale di due livelli - con la stessa logica si possono risalire piu' livelli

cd

dato senza alcun argomento ci sposta nella home directory

cd ~utente

mi sposta nella home directory dell'utente

pwd

visualizza il percorso della directory corrente

ls

visualizza il contenuto della directory corrente

ls -F

distingue i file dalle directory

ls -l

visualizza i permessi, il proprietario, il gruppo, la dimensione, e la data di modifica

ls -a

mostra file e directory nascoste

ls -t

visualizza file e cartelle in ordine di modifica

ls -R

mostra file e cartelle della directory e di tutte le sottodirectory

ls *.sh

visualizza tutti i file con estensione ".sh"

ls -li

visualizza il numero di inode o blocchi fisici occupati dai file

ls *[0-9]*

mostra file e cartelle che contengono numeri

touch file1

crea un file di nome "file1"

>file1

come il comando touch: crea un file di nome "file1"

touch -t 0712130000 file1

modifica il timestamp del file1 impostando la data al 13 dic 07

mkdir ugo

crea una cartella di nome "ugo"

mkdir paperone/paperino

crea la sottodirectory "paperino" all'interno della directory "paperone"

mkdir -p paperone/paperino/quiquoqua

crea una gerarchia di directory nidificate con un solo comando

mkdir dir1 dir2

crea le directory "dir1" e "dir2" con un solo comando

rm -f file1

cancella il file1 senza chiedere conferma (-f)

rm -rf dir1

cancella "dir1" e tutto il suo contenuto (-r), senza chiedere conferma (-f)

rm file1 file2

elimina due file in un sol colpo

rm -rf dir1 dir2

elimina due directory in un sol colpo

shred file1

cancella, in maniera da non poter essere recuperato, il contenuto di un file senza eliminarlo. In pratica sovrascrive il file per 25 volte rendendolo illegibile ed inutilizzabile

shred -vun50 file1

cancella il contenuto del file effettuando 50 passaggi (n50), in maniera verbosa (v), ed eliminando il file del tutto (u)

mv file1 file_nuovo

rinomina file1 in file_nuovo

mv /file1 /home/file_nuovo

sposta e rinomina il file1 su /home/file_nuovo

mv -r dir1 dir2

sposta e rinomina una directory da dir1 a dir2

cp file1 copia_file1

crea una copia del file1 chiamandola copia_file1

cp /home/file1 .

copia il file1 nella directory corrente (.)

cp -r dir1/* dir2/

copia il contenuto di dir1 dentro a dir2

cp -r dir1 dir2

copia dir1 e tutto il suo contenuto in dir2

cp -rp dir1 dir2

effettua la copia preservando i permessi (-p)

ln file1 link_file1

crea un link fisico denominato "link_file1" collegato al file1

NB: viene creato un link hard con il medesimo inode del file principale; in pratica quel file esistera' fintanto che esistera' almeno un link fisico (anche se il file d'origine viene cancellato) - i link fisici possono esistere solo all'interno della medesima partizione.

ln -s file1 link_file1

crea un link simbolico denominato "link_file1" collegato al file1

split - divide un filegrande in piu' filepiccolo aggiungendo una lettera ai file splittati (filepiccoloA, filepiccoloB...)

split -b 1m bigfile filepic

divide bigfile in file piccoli da 1 Mb

split -b 500k bigfile filepic

divide bigfile in file piccoli da 500 Kb

cat filepic* > bigfile

ricompone il file grande

file file1

restituisce il tipo di file

diff file1 file2

confronta due file di testo e mostra le differenze
per ogni riga in cui sono state effettuate mofiche mostra il simbolo "<" seguito dalla riga tolta e sotto il simbolo ">" seguito dalla riga con cui e' stata rimpiazzata. Per le righe aggiunte o tolte, mostra semplicemente cosa e' stato aggiunto o tolto

cmp file1 file2

confronta due file bit a bit dicendo dove iniziano le differenze



MOUNT

Il comando mount/umount permette di montare/smontare una periferica per poterla utilizzare (cd-rom, partizione, pennetta...);
nel file /etc/fstab e' possibile visualizzare cio' che il pc monta all'avvio, ad es una riga simile alla seguente:
/dev/sda9 / ext3 defaults 0 1
sta ad indicare che la partizione sda9 (indicata nel device /dev/sda9), viene montata nella directory / tramite file sistem ext3 (l'1 finale indica che vengono effettuati controlli sull'integrita').
Una riga come quella che segue:
/dev/sda5 /sda5 vfat rw,quiet,gid=100,umask=007 0 0
indica invece che viene montata la partizione sda5 in /sda5 tramite file sistem fat32 (vfat), ed e' possibile leggere e scrvere file all'interno della suddetta partizione, i file appartengono al gruppo users (gid=100), e un'umask 007 corrisponde a un chmod 770, ovvero per ogni file della partizione, permessi di lettura, scrittura ed esecuzione per proprietario e gruppo, e nessun permesso per tutti gli altri.
di solito le periferiche vengono montate all'interno della directory /mnt ma nessuno ci vieta di montarle dove vogliamo noi (nell'esempio precedente la partizione sda5 e' stata messa in /sda5 invece che in /mnt/sda5).
il cd-rom, pur presente in fstab, non viene montato in maniera automatica, ma dovremo montarlo/smontarlo noi ogni volta che inseriamo/togliamo un cd digitando sul terminale:

mount /mnt/cdrom
umount /mnt/cdrom


Penna usb - per montare la pennetta, se non abbiamo aggiunto l'opportuna riga in fstab, dopo aver verificato tramite: tail -f /var/log/messages.log come viene riconosciuta (nel mio caso sdb1), digitiamo da console:

mkdir /tmp/sdb1
mount -t vfat /dev/sdb1 /tmp/sdb1

Questa e' una soluzione temporanea, infatti se creo la directory dentro /tmp essa viene cancellata ad ogni riavvio. Per una soluzione piu' definitiva bisogna modificare /etc/fstab...

vim /etc/fstab
/dev/sdb1 /mnt/sdb1 vfat rw,user,noauto,gid=100,uid=paperino

aggiungo una riga in /etc/fstab come sopra indicato

mkdir /mnt/sdb1

creo la relativa directory

mount /mnt/sdb1

per montarla



Ricerca di file e stringhe

find / -name ugo

cerca file e directory di nome ugo a partire dalla radice "/"

find / -mmin 15

cerca file e directory modificati esattamente da 15 minuti

find / -mmin -15

cerca file e directory modificati da meno di 15 minuti

find / -mmin +15

cerca file e directory modificati da piu' di 15 minuti

find / -mtime 0

cerca file e directory modificati nelle ultime 24 ore

find / -mtime 2

cerca file e directory modificati negli ultimi due giorni

find / -user paperino

cerca file e directory appartenenti all'utente paperino

find / -type f "*.txt"

cerca tutti i file di testo ma non le directory

find / -type f -size +1000k

cerca i file piu' grandi di 1000 Kb, ma non le directory

find / -type f -size -1000k

cerca i file piu' piccoli di 1000 Kb, ma non le directory

find / -group gruppo1

cerca file e directory appartenenti al gruppo "gruppo1"

find / -perm -r--r--r--

cerca file e directory i cui permessi siano 444 (-r--r--r--)

find /home -perm 777

cerca file e directory i cui permessi siano 777, all'interno di /home

Per capire meglio il find con l'opzione -perm, leggere la sezione della presente guida dedicata ai permessi

find / -perm +006

Cerca tutti i file e le directory i cui permessi in almeno una terzina almeno un bit coincida con quello della maschera (in questo caso 006) in questo esempio verranno trovati file ad es: xx4, xx2, xx6, xx5, xx3, xx7 (ma non xx1, xx0)
rwx rwx rwx
010 010 100 ---> ad es: 224
000 000 110 ---> confrontato con 006
-----------
--- --- 1-- ---> risulta ok poiche' nella terza terzina il 1° bit alzato ad 1 coincide

find / -perm -006

Cerca tutti i file e le directory in cui nei permessi di tutte e tre le terzine ci siano almeno gli stessi bit alzati ad 1 che ci sono nella maschera (in questo caso 006) in questo esempio verranno trovati soltanto i file xx6, xx7 (xx4 ad es non va bene poiche' rispetto alla maschera ha un bit in meno alzato ad 1)
rwx rwx rwx
010 010 100 ---> ad es: 224
000 000 110 ---> confrontato con 006
-----------
111 111 1-1 ---> non va bene poiche' nella 3° terzina il secondo bit non e' alzato ad 1 come nella maschera

find /home -name *.bin

cerca, all'interno della directory /home, tutti i file con estensione ".bin" FIND - Cercare all'interno della directory '/home' tutti file che iniziano per ./. e che non contengano altri / (quindi evita le subdirectory)

find / -regex '\./\.[^/]+

cerca tutti i file che iniziano per ./. e non contengano altri / (evita quindi le subdirectory)
tramite # find /home -name ".*" - si sarebbe ottenuto un risultato analogo (-name accetta espressioni regolari per il nome; -regex accetta espressioni regolari relative al path

find / -name *.rpm -exec chmod 755 {} ;

cerca tutti i file con estensione .rpm e ne modifica i permessi

find / -name *.rpm -xdev

cerca tutti i file con estensione .rpm ignorando partizioni rimovibili: cd-rom, pennette usb...

Il comando "find" permette di intraprendere delle azioni sui file trovati:
-print - e' l'azione di default, invia a schermo l'output della ricerca
-fprint file1 - l'output della ricerca viene inviato al file1
-exec com {} \; - esegue il comando "com" sui file trovati. Il comando e' sempre seguito da "{}" e viene chiuso con "\;"
di seguito alcuni esempi:
-ok com {} \; - analogo al precedente ma chiede conferma prima di eseguire il comando

find /home/paperino -name "*.txt" -exec cp {} /tmp/fileditesto \;

cerca tutti i file di testo in /home/paperino e li copia in /tmp/fileditesto

find /home/paperino -name "*.txt" -ok rm {} \;

cerca tutti i file di testo in /home/paperino e chiede conferma prima di cancellarli

find / -perm 777 -fprint /tmp/sprotetti

cerca tutti i file con permesso 777 e ne fa una lista

find / -perm -002 -fprint /tmp/file_scrivibili

fa una lista dei file scrivibili da tutti gli utenti

find / -perm -4000 -fprint /tmp/file_setuid

fa una lista di tutti i file SETUID

find / -name "*.txt" -exec tar rf archivio.tar {} \;

cerca tutti i file ".txt" e li aggiunge ad un archivio (vedi sezione sugli archivi)

grep paperino /home/paperopoli

seleziona tutte le righe che contengono la parola "paperino" all'interno dei file che stanno in /home/paperopoli

grep ^pa /home/paperopoli

seleziona tutte le righe che cominciano con "pa"

grep "pa." /home/paperopoli

seleziona tutte le righe che contengono parole che cominciano con "pa"

grep ".o" /home/paperopoli

seleziona tutte le righe che contengono parole che finiscono per "o"

grep ".u." /home/paperopoli

seleziona tutte le righe che contengono parole con la lettera "u"

grep [u] /home/paperopoli

seleziona tutte le righe che contengano parole con la lettera "u"

grep [0-9] /home/paperopoli

seleziona tutte le righe che contengono numeri

grep -r pa /home/paperopoli/*

estende la ricerca della stringa "pa" a tutti i file e sottodirectory di /home/paperopoli

grep paperino /home/paperopoli/file1 /home/paperopoli/file2 /home/paperopoli/file3

cerca le righe che contengono "paperino" solo all'interno dei file (file1, file2 e file3) in /home/paperopoli

grep "." /home/paperopoli/file1 /home/paperopoli/file2 /home/paperopoli/file3

estrapola tutto il testo contenuto nei file (file1, file2 e file3) in /home/paperopoli

grep "." /home/paperopoli/* --exclude file3

estrapola tutto il testo contenuto nei file contenuti in /home/paperopoli ad eccezione di file3

egrep 'espressione_regolare' file1
grep -e 'espressione regolare' file1

per sfruttare al pieno la potenza delle espressioni regolari si utilizza egrep o (grep -e)

whereis halt

visualizza la localizzazione di un file binario, sorgente o man... ad es. del file "halt"

which vi

mostra il path completo di un file binario/eseguibile, ad es. del programma "vi"



Espressioni regolari

Spesso puo' capitare di dover cercare particolari stringhe in una grossa mole di testo... a questo scopo vengono in aiuto le espressioni regolari... in seguito vedrete che potrete utilizzarle in combo con molti comandi... intanto dategli un'occhiata veloce per poi tornarci.
Uno dei comandi che supporta bene le espressioni regolari e' EGREP; faremo pertanto riferimento ad esso nella seguente esercitazione... teniamo presente comunque che e' possibile utilizzare espressioni regolari all'interno di perl, php, python... in ognuno con delle piccole differenze... cerchiamo quindi di iniziare col comprenderne il meccanismo
NOTA: anche da dentro vim e' possibile utilizzare espressioni regolari (ad es. quando effettuiamo una ricerca), ma le notazioni differiscono leggermente per cui bisogna fare un po' di tentativi (specie con slash e backslash) per trovare la giusta notazione.

> qqqqq

creiamo un file di testo

apriamolo con vim ed inseriamo un po' di numeri esadecimali, qualche indirizzo e-mail, dei numeri di telefono, nomi e cognomi associati a numeri di telefono, dei tag html e salviamo il file.

egrep 'espressione_regolare' qqqqq

per estrarre le parti di testo che ci interessano.
di seguito delineero' come creare le espressioni regolari

le parentesi quadre [] permettono di verificare che siano presenti classi di caratteri, ovvero un elenco di possibili caratteri da includere nella ricerca, presi uno alla volta; ad es:

ac
a-c
[a-c]

la prima cerca le stringhe in cui compaiono una "a" seguita da una "c" la seconda cerca le stringhe in cui compare "a-c" scritto cosi' com'e', mentre la terza seleziona i paragrafi in cui e' presente almeno una "a" o una "b" oppure una "c"
NOTA: egrep seleziona per righe o paragrafi... se quindi scriviamo: egrep 'ciao' qqqqq - esso selezionera' tutte le righe o paragrafi contenenti la parola ciao e non 'soltanto ciao'
Il metacarattere "." sta per "un qualsiasi carattere... compreso un possibile spazio" ad es:

egrep 'c..o'

seleziona tutti i paragrafi che contengono almeno una parola che inizia per "c" seguita da due lettere o spazi e finisce per "o" volendo estrarre i termini equivalenti a "c..o" da tutto il testo, bisognera' creare un piccolo script:

for i in `grep -e 'c..o' qqqqq`; do echo $i | grep -e 'c..o'; done


'[a-zA-Zàèéìòù]'

individua tutte le lettere minuscole, maiuscole piu' i caratteri accentati

'[a-fA-F0-9]'

individua le lettere minuscole da a ad f, le maiuscole ed i numeri (in pratica le sequenze esadecimali)

'[A-Z]'

individua i paragrafi in cui c'e' una lettera maiuscola

'[A-Z]{2}'

individua i paragrafi che contengono due maiuscole affiancate; i numeri nelle parentesi graffe indicano le ripetizioni; in questo caso ripete 2 volte il carattere maiuscolo indicato da [A-Z]

'[a-zA-Z0-9]\+@' qqqqq | sed -e 's/.* //g'

estrae gli indirizzi e-mail ed invia l'output a sed (verso la fine della guida c'e' una sezione riferita a sed che permettera' di comprenderlo meglio

for i in `grep -e '[a-z]@' qqqqq`; do echo $i | grep -e '[a-z]@'; done

ci permette di ottenere lo stesso risultato ottenuto con l'uso di sed

for i in `grep -e '#[0-9a-fA-F]' qqqqq`; do echo $i | grep -e '#[a-f0-9]\{6\}$'; done

in questo caso viene estratta la riga contenente numeri esadecimali che, passata ad echo restituisce solo i numeri composti da 6 cifre

for i in `grep -e '#[0-9a-fA-F]' qqqqq`; do echo $i | grep -e '#[a-f0-9]\{3\}$'; done

come sopra, ma verrano visualizzati solo i numeri di tre cifre (nel capitolo sugli script verranno esaminati meglio i cicli e le variabili)

'^Ciao' - trova i paragrafi che iniziano per Ciao. "^" se posto all'interno di una classe la nega:


'<[^<>]+>

estrae le righe contenenti dei tag html; in pratica cerca le stringhe che iniziano per < proseguono con un carattere che sia diverso da < o > e terminano con >

'buonanotte$'

trova i paragrafi che finiscono per "buonanotte"

'^paperino$'

trova le righe che contengono esclusivamente la parola "paperino"

'[a-z]*'

seleziona le righe in cui un'occorrenza e' ripetuta zero o piu' volte "*": in questo caso seleziona le righe che contengono testo minuscolo

'<h[1-6]>'

seleziona le righe contenenti i tag dei titoli nel codice html (h1, h2, h3...h6)
Le parentesi tonde hanno la funzione di raggruppare piu' caratteri in un blocco o sottoespressione

'\(tel:\)\|\(nome:\)\|\(e-mail:\)'

estrae le righe contenenti nome, tel o e-mail
La pipe "|" e' l'equivalente dell'OR logico
Il "*" indica di ripetere da 0 ad "n" volte il carattere o blocco ke lo precede, mentre il "+" indica di ripetere da 1 ad "n" volte il carattere o blocco che lo precede

'br*'

selezionera' "br", "brr", "brrr".... ma anche soltanto "b"

'br+'

selezionera' "br", "brr", "brrr"....
Quindi l'espressione:
'(paperino)+'
equivale all'espressione:
'(paperino)(paperino)*'

'.*'

seleziona tutto il testo
Sapendo di voler trovare la parola "prrrrrr" con 6 erre, potremmo anche scrivere:

'pr{6}'


volendo invece trovare un intervallo di "pernacchie" che va da 2 a 6 erre:

'pr{2,6}'


'pr{2,}'

selezionera' invece le pernacchie con un minimo di 2erre ad un massimo indefinito
Il "?" indica che il carattere o il blocco che lo precede e' opzionale:

'bacc?o'

trovera' i termini "bacco" e "baco"

'moto(cross)?'

trovera' i termini "moto" e "motocross"

'(moto)?cross'

trovera' "cross" e "motocross"
Il "?" messo davanti ad un metacarattere quantificatore rende meno "avida" la selezione:

'(ha)+'

troverebbe hahahahaha mentre # '(ha)+?' selezionerebbe solo il primo ha di hahahahaha
a volte viene quindi usato nelle combinazioni: +? *? ?? {n,m}?
Quando un metacarattere e' preceduto da "\" perde il suo significato di metacarattere, ad es:

'^(0|[1-9][0-9]*)(\.[0-9]+)?$'

indica un numero in cui la prima parte rappresenta l'intero e la seconda parte il decimale; il punto preceduto da \ perde la funzione di metacarattere e viene visto come punto vero e proprio.

'\\'

per trovare del testo contenente una \
Cosi' come lo \ messo prima di un metacarattere gli fa perdere la funzione di metacarattere, invece, anteponendolo ad alcuni normali caratteri, questi diventano caratteri speciali
'\n'
cerca una nuova linea;
'\s'
trova un qualunque tipo di spazio;
'\w'
un qualunque carattere alfanumerico;
'\b'
e' un limitatore di parola, ad es
'\bpera\b'
in "la papera mangia una pera" evidenziera' pera ma non papera
Il risultato dei blocchi creati con () crea dei riferimenti che possono essere ripetuti mediante \1, \2, \3...

'(p)a\1'

trovera' paperino, paperone, paperoga, pappa

'(p)a\1\1'

trovera' soltanto pappa (in quanto il riferimento del risultato del blocco (p) e' stato ripetuto due volte)

'(p)(a)\1er\2

trovera' "papera"
NOTA:
'([AOMR]+)'
e' diverso da
'([AOMR])+'
nel primo caso viene cercato: roma, orma, ramo.... nel secondo viene cercato a,o,m,r. Quindi quando utilizzeremo un riferimento \1 fare attenzione a come mettere le parentesi poiche' il riferimento alla prima espressione e' diverso da quello della seconda... anche se poi probabilmente troveremo le stesse parole. Il riferimento riprende dal buffer di memoria il risultato dell'espressione ma non l'espressione stessa.
Alcuni esempi interessanti:

'^$'

indica qualunque linea vuota

'} *$'

indica una linea che finisce per "}" seguito da 0 o piu' spazi (dopo } c'e' uno spazio e * in questo caso agisce su quello)

'^[Cc]iao+$'

trova tutte le righe che contengono solo la parola ciao o ciaoo o ciaooo.... con iniziale maiuscola o minuscola


Compressione ed archivi

compress ugo.txt
uncompress ugo.z

zip ugo.zip ugo.txt
unzip ugo.zip

gzip ugo.txt
gunzip ugo.gz

bzip2 ugo.txt
bunzip2 ugo.bz2

unrar x ugo.rar

tar cf miniarchivio.tar file1 file2 file3

(crea miniarchivio.tar raccogliendo file1 file2 e file3)

tar cf raccolta.tar /home/ricette

(crea l'archivio raccolta.tar)

tar rf raccolta.tar /home/nuova_ricetta

(aggiunge "nuova_ricetta" alla raccolta.tar)

tar tf raccolta.tar

(mostra il contenuto di raccolta.tar)

tar xf raccolta.tar

(estrae l'archivio)

tar cvpf raccolta.tar /home/ricette

(crea l'archivio raccolta.tar in maniera verbosa e ne mantiene i permessi)

tar xvpf raccolta.tar

(estrae l'archivio)

tar zcf raccolta.tar.gz /home/ricette

(archivia e comprime la cartella ricette in raccolta.tar.gz)

tar ztf raccolta.tar.gz

(mostra il contenuto della raccolta)

tar zxf raccolta.tar.gz

(estrae e decomprime l'archivio)

tar jcf raccolta.tar.bz2 /home/ricette

(archivia e comprime la cartella ricette in raccolta.tar.bz2)

tar jtf raccolta.tar.bz2

(mostra il contenuto della raccolta)

tar jxf raccolta.tar.bz2

(estrae e decomprime l'archivio)

tar cf raccolta.tar /home/ricette --exclude /home/ricette/torte

(archivia la cartella ricette escludendo la subdirectory torte)

tar xf raccolta.tar

(estrae l'archivio)


Comandi di visualizzazione

PASTE - Fondere il contenuto di due file e ne mostra il contenuto per colonne:

paste file1 file2

CAT - Visualizzare il contenuto di un file partendo dalla prima riga:
cat file1

cat file1 file2 file3

Stampa a video il contenuto dei tre file uno di seguito all'altro

cat storia1 storia2 storia3 > storie

Crea il file storie dall'unione di piu' file

CAT - Numerare le righe di un file

cat -n file1

TAC - Visualizzare il contenuto di un file partendo dall'ultima riga:

tac file1

LESS - Visualizzare il contenuto di un file lungo e consente di scorrere il file sia in avanti che indietro:

less file1

MORE - Visualizzare il contenuto di un file lungo:

more file1

HEAD - Visualizzare le prime due righe di un file:

head -2 file1

TAIL - Visualizzare le ultime due righe di un file:

tail -2 file1

TAIL - Visualizzare in tempo reale cio' che viene aggiunto ad un file:

tail -f /var/log/messages

WC - conta il numero di caratteri, linee e parole utilizzate in un file:

wc file1

ECHO - Restituisce cio' che scrivo
echo ciao
mi risponde ciao
echo ciao > nuovo_file
mi crea il nuovo_file al cui interno e' scritto ciao
echo blablabla > nuovo_file
mi sostituisce il nuovo_file su cui era scritto ciao con blablabla

SORT - Ordina in maniera alfabetica cio' che gli viene passato:

ls | sort
sort file1
sort file1 > file_ordinato

CUT - permette di estrapolare colonne da un testo
cut -f3 -d: file1 | sort
estrapola la terza colonna usando come delimitatore di colonna il carattere ":" e la ordina in maniera alfabetica
cut -c 5-15 file1
estrapola i caratteri tra il 5° ed il 15° su tutta la colonna


Comandi d'amministrazione ordinaria

Assegnare un nome al pc:

hostname nome_pc

Il comando per ripristinare il Master Boot Record per esempio del disco 'hda' e' il seguente:

grub-install /dev/hda

Arresto del sistema:

shutdown -h now

Oppure:

halt

Oppure:

init 0

Oppure:

poweroff

Arresto programmato del sistema:

shutdown -r ore:minuti &

Cancellare un arresto programmato del sistema:

shutdown -c

Riavvio del sistema:

shutdown -r now

Oppure:

reboot

Oppure:

init 6

Diventare root:

su

Abbondonare la sessione:

logout

Oppure:

exit

Monitorare in tempo reale processi, cpu, ram e swap.

top

Spazio disco
Visualizzare l'elenco delle partizioni:

df -h

Conoscere lo spazio su disco occupato dalla directory 'dir1':

du -sh dir1

Visualizzare la dimensione dei file e delle directory ordinandoli per dimensione:

du -sh * | sort -rn

Visualizzare l'architettura della macchina:

arch

Formattare un floppy disk:
L'opzione '-n' disabilita la verifica dopo la formattazione

fdformat -n /dev/fd0

Creare un dischetto di boot:
Sintassi del comando: --device /dev/fd0 'versione_kernel'

mkbootdisk --device /dev/fd0 2.6.9-1.667

oppure:

cp /boot/vmlinuz /dev/fd0

oppure:

dd if=/boot/vmlinuz-2.6.9-1.667 of=/dev/fd0

oppure, alcune distro forniscono un file immagine sul cd di installazione:

dd if=/mnt/cdrom/images/cdrom.img of=/dev/fd0

Creare una copia dell'MBR(Master Boot Record) su floppy:

dd if=/dev/hda of=/dev/fd0 bs=512 count=1

Ripristinare l'MBR dalla copia di backup salvata su floppy:

dd if=/dev/fd0 of=/dev/hda bs=512 count=1

MKFS - comando che si usa per formattare; volendo formattare una pennetta dare il comando:
mkfs -t vfat /dev/sdb1
(senza montarla)
mkfs -t ext3 /dev/sdb1

mkfs crea il filesystem fat32 nel primo caso, ext3 nel secondo

FSCK - per riparare un filesystem
fsck -t ext3 -a /dev/sda7

ripara il filesystem di tipo ext3 del device /dev/sda7 - al posto di (-a) si puo' utilizzare (-r) in cui verra' chiesta conferma all'utente prima di effettuare la riparazione. Nei casi peggiori puo' essere lanciato anche attraverso una distro live.

MKNOD - per creare un nuovo device (per convenzione dentro /dev)
mknod file1 modo major minor

i modi possibili sono b oppure c, a seconda che il device sia gestito a blocchi o a caratteri
per avere una lista aggiornata dei major number e minor number che identificano i vari device, consultare:
http://www.lanana.org/docs/device-list/


Alcuni file di configurazione

Il file /etc/passwd contiene la lista degli utenti che utilizzano la macchina
Il file /etc/group contiene la lista dei gruppi creati
Il file /etc/rc.conf (presente solo su archlinux) permette di gestire i demoni, la connessione, il nome del pc ed altro
Il file /etc/inittab contiene informazioni riguardo ad init (il primo processo che viene eseguito quando accendiamo il pc), ad es volendo fare in modo di poter spegnere il computer tramite la sequenza di tasti ctrl+alt+del e' sufficiente modificare la seguente riga: ca::ctrlaltdel:/sbin/shutdown -t3 -r now
in: ca::ctrlaltdel:/sbin/shutdown -t1 -h now
e' anche possibile aggiungere console virtuali: esse sono identificate con c1, c2, c3... per aggiungerne una nuova e' sufficiente rifarsi alla precedente
Il file /etc/fstab contiene la lista dei device che possono essere montati
Il file /etc/resolv.conf contiene la lista dei dns a cui ci colleghiamo per risolvere i nomi dei siti durante la navigazione sul web ad es: nameserver 212.245.255.2
Il file /etc/issue contiene il messaggio visualizzato all'avvio di linux prima della richiesta di login
Il file /etc/motd contiene il messaggio visualizzato all'avvio di linux subito dopo aver effettuato il login
Il file /etc/profile contiene diverse cose: l'umask del sistema, vari PATH del sistema, i cursori (PS1 e PS2) ed altro; per quanto riguarda l'umask, da qui e' possibile cambiare l'impostazione di default (nel capitolo che segue viene spiegato in maniera dettagliata l'umask). Su export PATH vengono indicate, separate dai duepunti (:), le directory contenenti dei programmi... i quali, grazie a questa variabile d'ambiente, possono essere lanciati senza bisogno che ne venga specificato il percorso. La riga export PS1='[\u@\h \W]\$ puo' essere modificata... se ad es inseriamo il nostro nome al posto del dollaro oppure un altro simbolo, quando apriremo la shell invece del dollaro al prompt dei comandi ci sara' il nuovo nome o simbolo; la lettera u indica il nome utente, la lettera h indica il nome dell'host e la W indica il percorso il terminale. Il prompt potrebbe apparire cosi':
[Pippo@Archlinux Desktop]$
in PS2, invece, compare il cursore che appare quando un comando e' incompleto... ad es. digitando echo "ciao senza chiudere le virgolette e dando invio, apparira' il cursore di PS2... potremmo quindi scrivere qualcosaltro e chiudere le vigolette: mondo" .... dando invio il comando echo verra' eseguito restituendo ciao mondo (andando a capo).
In /etc/rc.local e' possibile inserire comandi che verranno eseguiti all'avvio, prima del login.
In /etc/profile e' possibile inserire comandi che verranno eseguiti durante il login.
In /home/nome_utente/.bash_profile e' possibile inserire comandi relativi ad un utente specifico che verranno eseguiti subito dopo il login; ad es. se scriviamo startx dentro a .bash_profile di un utente, quando ci loggheremo con quel nome utente partira' automaticamente l'interfaccia grafica.


Gestione di file, utenti e gruppi

Crea o aggiorna un utente sul sistema. Dopo aver digitato il comando basta rispondere alle domande proposte.

adduser

rmuser

rimuove un utente dal sistema

passwd

modifca la password di un utente, se eseguito senza parametri cambia la password dell'utente corrente

CHOWN - cambia proprietario e/o gruppo ad un file o una directory:

chown nuovo_utente nome_file
chown nuovo_utente:nuovo_gruppo nome_file

CHMOD - cambia i permessi sui file e directory. Ad esempio se si vuole rendere una directory scrivibile, leggibile ed eseguibile a tutti gli utenti si deve digitare:
chmod 777 dir1

il primo n° indica l'utente a cui appartiene il file, il 2° indica il gruppo a cui appartiene il file, il 3° tutti gli altri

chmod -Rv 777 dir1

(abilita tutti i permessi in maniera ricorsiva e verbosa)

chmod -h 777 link1

(con l'opzione -h abilita i permessi sul link e non sul file al quale punta il link)
0 - nessun permesso
1 - esecuzione
2 - scrittura
4 - lettura
gli altri numeri (3,5,6,7) si ricavano dalle somme dei numeri di cui sopra:
3 - esecuzione + scrittura
5 - esecuzione + lettura
6 - scrittura + lettura
7 - tutti
Un modo piu' semplice da ricordare e':
r - lettura
w - scrittura
x - esecuzione
quindi le due diciture che seguono sono equivalenti

chmod 700 file1
# chmod +rwx file1

per togliere i permessi si usa il "-" ad es:

chmod -x file1

(toglie il permesso di esecuzione)
e' possibile anche specificare se applicare le modifiche al proprietario (u), agli utenti del gruppo (g), o a tutti gli altri utenti (o); ad esempio:

chmod u=rw,go= file1

(consente la lettura e la scrittura al proprietario, pulisce tutti i permessi per il gruppo e gli altri)

PERMESSI SPECIALI - SUID, SGID, STIKY
attivando il permesso SUID su di un file si fa in modo che chiunque lo esegua ottenga gli stessi privilegi del proprietario. Per ragioni di sicurezza, bisogna fare attenzione quando un file di proprieta' dell'utente root ha il permesso SUID attivato.
Per trovare tutti i file del sistema con SUID attivato:

find / -perm -u+s

solitamente il ping ha il SUID attivato:
ls -l /bin/ping restituira'

-rwsr-xr-x 1 root root 31020 26 ott 11:57 /bin/ping
la "s" nella prima terzina rappresenta il bit SUID impostato
Per attivare il bit SUID sul file1:

chmod 4755 file1

oppure

chmod u+s file1

Per disattivarlo:

chmod 0755 file1

oppure

chmod u-s file1

SGID - SGID analogamente a SUID si usa per le directory anziche' per i file; impostando il bit SGID su di una directory, qualsiasi file creato all'interno della stessa ereditera' lo stesso gruppo di appartenenza della directory; chiunque esegua un file all'interno di una directory con SGID attivato, otterra' gli stessi privilegi del gruppo a cui il file appartiene.
Per attivare il bit SGID alla directory /home/public

chmod 2755 /home/public

oppure

chmod g+s /home/public

Per disattivarlo:

chmod 0755 /home/public

oppure

chmod g-s /home/public

STIKY - La modalita' stiky, applicata ad una directory, consente la cancellazione dei file solo ai legittimi proprietari; un esempio di directory stiky e' /tmp:
ls -l / |grep tmp restituira':

drwxrwxrwt 9 root root 4096 24 gen 20:01 tmp
il carattere "t" nella terza terzina indica che il bit stiky e' impostato.
Per attivare il bit STIKY alla directory /home/ricette

chmod 1777 /home/ricette

oppure

chmod o+t /home/ricette

Per disattivarlo:

chmod 0777 /home/ricette

oppure

chmod o-t /home/ricette

UMASK - setta i permessi di default con cui vengono creati i nuovi file e le nuove cartelle
di default umask e' settato a 022 - per controllare che sia cosi' settato e' sufficiente lanciare:

umask

umask imposta una "maschera" che setta i permessi; nel caso sia impostata a 022 tutte le directory che verranno create avranno i permessi impostati a 755 mentre i file che verranno creati avranno i permessi impostati a 644.
per calcolare i permessi delle directory possiamo fare una seplice sottrazione senza riporto:
777-022=755
per calcolare i permessi dei file:
666-022=644
Possiamo modificare il valore di umask settandolo ad esempio a 077:

umask 077

tutte le directory che creeremo da questo momento avranno permessi settati a 700 mentre i file 600 (la modifica e' relativa solo alla shell che stiamo utilizzando...quindi dopo un logout torneremo all'umask di default). Da notare che in questo caso specifico 6-7=(-1) ma il minimo permesso e' 0 quindi quello che sarebbe 6(-1)(-1) diventa 600. Questo perche' la sottrazione e' un modo un po' improprio di calcolare i permessi ma e' anche il modo piu' veloce per ricavarci i valori. Se volessimo calcolare in altro modo i valori dei permessi: sapendo che r=4 w=2 x=1 il 7 ha tutti i bit alzati ad 1. Effettuando un AND NOT con la mashera impostata si ottiene che: 1-0=1 1-1=0 0-0=0 0-1=0

111 111 111 --->777
000 111 111 --->077
-----------
111 000 000 --->700 per le directory

110 110 110 --->666
000 111 111 --->077
-----------
110 000 000 --->600 per i file

Volendo e' possibile modificare le impostazioni di umask a tutto il sistema in maniera permanente editando il file /etc/profile oppure .bash_profile nella home directory di root per l'umask dei file creati come root. E' anche possibile modificare in maniera permanente le impostazioni di umask della home directory di un solo utente (ad esempio /home/public); in tal caso dovremo invece editare il file .bash_profile presente nella directory /home/public.

GROUPADD/GROUPDEL - Crea/cancella un nuovo gruppo

groupadd nome_gruppo
groupdel nome_gruppo

gpasswd nome_gruppo

per assegnare una password al gruppo

CHGRP - permette di cambiare il gruppo di appartenenza di un file o di una directory

chgrp nome_gruppo file1

Per assegnare/togliere uno o piu' utenti ad un gruppo editiamo il file /etc/group ed aggiungiamo o cancelliamo i nomi degli utenti che ci interessano alla riga relativa al gruppo in questione.

esempi:
Logghiamoci come root e creiamo gli utenti pippo, pluto e paperino con adduser
creiamo il gruppo topolinia tramite groupadd
creiamo la cartella "filecondivisi" con:
mkdir /home/filecondivisi

associamo la cartella appena creata al gruppo topolinia:
chgrp topolinia /home/filecondivisi

diamo i permessi per accedere alla cartella al proprietario ed al gruppo:
chmod 770 /home/filecondivisi

editiamo il file /etc/group ed aggiungiamo pippo e pluto alla riga relativa a topolinia.
Da questo momento pippo e pluto potranno accedere alla cartella file condivisi mentre paperino no.
Per visualizzare come sono settati i permessi:
ls -l

id
- per vedere a quali gruppi abbiamo accesso con l'utente col quale siamo loggati

Abilita la visualizzazione sul terminale di messaggi provenienti da altri utenti tramite il comando write
mesg y
mesg n
(per disabilitare)

who
- mostra l'elenco degli utenti collegati al sistema

WRITE - invia messaggi ad altri utenti.
write nome_utente

ciao come va? CTRL+d

whoami
visualizza lo username dell'utente
hostname
mostra o imposta l'hostname
id
fornisce informazioni su un utente del sistema o se eseguito senza parametri sull'utente corrente


Gestione dei processi

FUSER - restituisce il PID dei processi che tengono occupata una periferica o socket:

fuser /dev/periferica

ps
mostra lo stato dei processi relativi al terminale aperto
ps x
mostra lo stato dei processi di tutto il sistema

KILL - invia un segnale ad un processo, se eseguito senza parametri invia il segnale SIGTERM (termina):

kill PID_processo

KILLALL killa i processi usando il nome:

killall nome_programma

CTRL+z - interrompe momentaneamente un processo attivo nella konsole
per ripristinare il processo:
bg PID
- lo porta in background
fg PID
- lo porta in foreground


Gestione del sistema

clear
pulisce il terminale

CHROOT - cambia la directory di root che normalmente e' impostata a "/". Questo comando risulta particolarmente utile quando si accede al proprio sistema tramite una distro live e si vogliono eseguire comandi sulla propria distro

chroot sda7

Visualizzare le periferiche pci come modem, schede di rete, controller vga e audio:

lspci

Visualizzare le periferiche usb:

lsusb

Visualizzare le periferiche a blocchi/caratteri:

cat /proc/devices

Visualizzare le notifiche di eventuali periferiche rilevate:

dmesg

Elenca i moduli caricati nel kernel
lsmod
lsmod |grep qualcosa
(elenca solo i moduli che interessano)

MODPROBE - carica (scarica) i moduli (o driver se preferite) del kernel
modprobe nome_modulo
# modprobe -r nome_modulo
(per toglierlo)
# modprobe -l
(elenca tutti i moduli del sistema)

Data e orario di sistema.
Visualizzare data e ora:

date

Impostare l'orario, esempio ore 16:00:

date -s 1600

Impostare data e ora.
sintassi del comando: MeseGiornoOreMinutiAnno.Secondi
Nel seguente esempio vogliamo impostare la data 12 Aprile 2007, ore 17 e 00 Minuti e 00 secondi:

date 041217002007.00

per salvare definitavamente le modifiche sul BIOS, eseguire il comando:

clock -w

Gestione di una rete

IFCONFIG - configura le interfaccie di rete. Un esempio del suo uttilizzo puo' essere quello di assegnare un indirizzo ip e una netmask per l'interfaccia eth0 (la prima scheda di rete):

ifconfig eth0 192.168.1.2 netmask 255.255.255.0 broadcast 192.168.1.255

Se fatto seguire dal parametro down disattiva la periferica, con up la attiva:

ifconfig eth0 down
ifconfig eth0 up

ifconfig
mostra le interfacce che sono up
ifconfig -a
mostra tutte le interfacce (sia quelle up che quelle down)

allo stesso modo, per configurare una rete si puo' utilizzare il comando "ip"
ip addr show
mostra le interfacce
ip addr add 10.0.0.1/30 dev eth0
configura il nuovo indirizzo per eth0

Per configurare gli indirizzi in maniera permanente bisogna modificare l'apposito file di configurazione:
/etc/rc.conf - sulla Archlinux
/etc/network/interfaces - sulla debian
/etc/rc.d/rc.inet1.conf - sulla slackware

IWCONFIG - configura le interfaccie di rete wifi. Puo' essere utilizzato ad esempio per associare l'interfaccia wlan0 al vostro access point:

iwconfig wlan0 essid Vostro_AP

Mentre ifconfig configura gli indirizzi di livello 3, iwconfig instaura la connessione a livello 2; un es. tipico di comando per la connessione ad una rete wireless:
iwconfig eth1 essid "nome_AP" channel 1 mode managed enc open key s:ciao

le reti wireless possono lavorare in tre modalita': master, managed, ad-hoc
se l'access point e' configurato come master, il client andra' configurato in mode managed (come nell'esempio sopra), altrimenti e' possibile configurare tutti gli apparati in ad-hoc (ad es. può essere utile per collegare due pc tramite wireless per lo scambio di file nel caso in cui un pc non supporti la modalita' master).
enc open - indica che la rete e' crittografata con chiave wep; il modo piu' comodo per inserire la chiave e' di inserirla come stringa: in questo caso s:ciao. In una rete aperta ci sarebbe stato semplicemente: enc off
Una rete a chiave wep e' facilmente craccabile tramite l'utilizzo dei software kismet ed aircrack.
Una protezione migliore e' data invece dall'utilizzo di una chiave wpa; per collegarsi alla rete protetta con wpa bisogna prima di tutto settare alcuni parametri:
vi etc/wpa_supplicant.conf

ssid --> nome_AP
psk --> chiave
priority -->
quella piu' alta e' quella della rete a cui vogliamo dare la precedenza

a questo punto potremo connetterci con:
wpa_supplicant -c /etc/wpa_supplicant.conf -i eth1 -D wext

wext e' il driver

iwlist eth1 scan
mostra le reti wireless presenti
netstat -an
visualizza lo stato delle porte


Collegamento ad internet tramite router

impostare il dhcp (decommentandolo), ed il corretto indirizzo del gateway su rc.conf
impostare il dns su resolv.conf ad es: nameserver 212.245.255.2 (per essere sicuri che ce ne sia almeno uno funzionante mettiamone piu' di uno)
digitare da console:

ifconfig eth0 up
dhcpcd eth0

pinghiamo uno dei dns e poi pinghiamo google per vedere se funziona:

ping 212.245.255.2 (ctrl+c per fermarlo)
ping www.google.com

E' possibile interrogare i dns anche attraverso dig o nslookup

nslookup www.google.it
dig @212.245.255.2 www.google.com

Per ricostruire i percorsi effettuati dai pacchetti:

traceroute 212.245.255.2
traceroute www.google.com

Per vedere il proprio indirizzo ip:

ifconfig

Mantenere stabile la connessione tra pc e cellulare col bluetooth

Per testare la connessione tra pc e cellulare si utilizza l2ping:

l2ping mac_address_del_cellulare

in alcuni casi puo' essere utile lasciare il comando attivo per tutta la sessione di lavoro, affinche' la connessione tra cellulare e pc rimanga piu' stabile
per conoscere il mac_address_del_cellulare:

hcitool scan

Configurare la stampante

Ogni stampante ha i propri driver per cui bisognera' effettuare una ricerca su internet per trovare i driver da installare: io ho una samsung ml 2010 - per la quale ho scaricato ed installato il driver "splix" da aur.archlinux.org
una volta installato il driver, se non ce l'avete gia', dovrete installare cups; poi daremo: /etc/rc.d/cups start per avviarlo; infine apriremo il browser e digiteremo l'indirizzo http://127.0.0.1:631/ a questo punto dovremo visualizzare una schermata che dovrebbe permetterci di aggiungere la stampante con facilita' e di utilizzarla.

LPR - Per stampare uno o piu' file da riga di comando

lpr -P stampante file1... fileN


lpr -#3 -P stampante file1

per stampare 3 copie del file1

oppure:
cat file1 > /dev/lp

lpc stat
per vedere i nomi delle stampanti disponibili

LPQ - consente la visione dello stato delle code di stampa

lpq -P stampante

LPRM - dato con un trattino, rimuove tutte le code di stampa appartenenti all'utente che l'ha eseguito
lprm -

lprm 31
rimuove la coda associata al job 31 (e' possibile vedere il job tramite lpq)


Configurare la porta ad infrarossi per accedere ad internet col gprs del cellulare

La configurazione della porta ad infrarossi e' cosa assai rognosa che puo' variare da pc a pc, per cui delineo semplicemente alcune linee guida; ci sono due possibili modi di configurare la porta ad infrarossi: FIR o SIR la configurazione FIR e' migliore ma non sempre e' supportata: lo si puo' verificare attraverso il bios controllando per l'appunto se e' impostata su FIR o SIR.
Per prima cosa bisogna scaricare ed installare le irda-utils e talvolta anche il pacchetto smcinit in seguito se utilizziamo Archlinux aggiorniamo il sistema tramite pacman... (non so se serve pero' magari essendo un ottimo package manager potrebbe anche darsi che ci aggiorna le cose che ci servono semplificandoci un po' la vita). Se non e' stato creato il device ircomm0 dovrete crearlo voi ogni volta:

mknod /dev/ircomm0 c 161 0

dopodiche' caricheremo i moduli:

modprobe ircomm
modprobe ircomm-tty
modprobe smc-ircc

puo' anche darsi che questo modulo a voi non vada bene... fate una ricerca su internet oppure provateli tutti:
modprobe -l |grep ir
vi da la lista dei moduli che potete caricare
lsmod
vi da la lista dei moduli che avete gia' caricato

poi provate con:
irattach irda0 -s
per agganciare il dispositivo
ifconfig irda0 up
per attivare la porta
irdadump
per vedere se comunica col cellulare - se non appaiono scritte non funziona e bisogna rivedere qualcosa. Se funziona dobbiamo configurare la connessione tramite ppp o (kppp da kde).


Installare programmi ed aggiornare il sistema

La procedura per installare un programma in qualsiasi distribuzione e' quella di dare entrare nella dictory del programma (dopo aver scompattato il file.tar.gz), e leggere il readme... in linea di massima sara' sufficiente

./configure
make

questa procedura pero' non e' la piu' raccomandabile, in quanto le distribuzioni hanno un loro pachage manager che rende l'installazione e disinstallazione dei programmi piu' sicura e pulita (apt-get in ubuntu e debian, pkgtool su slackware (o swaret che e' il pachage manager non ufficiale ma molto utilizzato poiche' effettua controlli sulle dipendenze), packman e aurbuild su arclinux...

PACMAN - per archlinux
pacman -Sy pacchetto
installa/aggiorna un pacchetto dai repository
pacman -Syu
aggiorna tutti i pacchetti del sistema
pacman -Up percorso_pacchetto
installa/aggiorna un pacchetto da locale
pacman -R pacchetto
rimuove un pacchetto
pacman -Rd pacchetto
rimuove un pacchetto senza controllare le dipendenze
pacman -Si pacchetto
fornisce informazioni sul pacchetto
pacman -Qi pacchetto
se il pacchetto e' installato fornisce maggiori informazioni di -Si
pacman -Ql pacchetto
lista dei file installati da quel pacchetto
pacman -Ss pacchetto
cerca un pacchetto nei repo
pacman -Rs pacchetto
rimuove un pacchetto e le dipendenze non utilizzate da altri programmi
pacman -Rn pacchetto
rimuove un pacchetto ed eventuali backup dello stesso
pacman -Scc
pulisce la cache
pacman -Qi nome_pacchetto_installato |grep Motivo
restituisce il motivo per cui e' stato installato un pacchetto, ovvero se e' stato installato esplicitamente oppure come dipendenza
AUR - per archlinux
quando avete bisogno di un pacchetto non presente nei repo di pacman:
andare su: aur.archlinux.org
scaricare il tarball del pacchetto che ci interessa
scompattarlo, entrare nella cartella e digitare
makepkg

entrare nel package e digitare
pacman -Up nome_pacchetto per installarlo


APT-GET - per debian
PKGTOOL - per slackware
SWARET - per slackware


Ricompilare il kernel

Talvolta per far funzionare alcune periferiche puo' essere utile ricompilare il kernel
la procedura standard e' la seguente:
scarichiamo il nuovo kernel e decompattiamolo dentro una nuova cartella in /usr/src
entriamo nella cartella e digitiamo:

make clean
make mrproper
make menuconfig
make dep
make bzImage
(o anche soltanto make)
make modules
make modules install

spostiamo la nuova immagine nella cartella di boot dandogli un nuovo nome, oppure creiamo un link
mv usr/src/linux/arch/i386/boot/bzImage /boot/nuovo_vmlinuz
ln -s usr/src/linux/arch/i386/boot/bzImage /boot/nuovo_vmlinuz

creiamo una nuova voce dentro al file di configurazione di grub (cosi' se qualcosa va storto possiamo caricare il vecchio kernel)
vim /boot/grub/menu.lst

quello di seguito e' un esempio del mio grub:

# (0) windows
title windows
rootnoverify (hd0,0)
makeactive
chainloader +1

# (1) slackware
title slackware
root (hd0,6)
kernel /boot/vmlinuz-huge-2.6.21.5 root=/dev/sda6 ro
initrd /boot/initrd.gz

# (2) slackware_nuovo
title slackware_nuovo
root (hd0,6)
kernel /boot/nuovo_vmlinuz root=/dev/sda6 ro
initrd /boot/initrd.gz

# (3) archlinux
title archlinux
root (hd0,8)
kernel /boot/vmlinuz26 root=/dev/sda9 ro
initrd /boot/kernel26.img


non sono sicuro che la riga initrd sia necessaria comunque se sulla vostra slackware non e' presente il file /boot/initrd.gz, potete crearlo con:

mkinitrd -c -k 2.6.21.5 -m ext3

una volta salvate tutte le modifiche dare:
grub-install
e riavviare il sistema... ora quando parte grub dovrebbe esserci la voce relativa al nuovo kernel

Se avessimo avuto la necessita' di ricompilare soltanto i muduli la strada e' molto piu' semplice:
make menuconfig
make modules
make modules-install

il tutto mantenendo il kernel in uso, senza bisogno di creare una nuova voce.
Per ricompilare il kernel in Archlinux la procedura e' differente:

RICOMPILARE IL KERNEL SU ARCHLINUX


Cenni su Archlinux

Dopo aver installato la nostra distribuzione preferita: editiamo /etc/rc.conf ed impostiamo:
locale it_IT@euro
hardwareclock localtime
timezone europe/rome
keymap it
usercolor yes
hostname nome_pc


editiamo /etc/pacman.conf e, se serve, decommentiamo la riga include=/etc/pacman.d/current
editiamo /etc/profile e scriviamo export lang="it_IT@euro"
editiamo /etc/pacman.d/current e spostiamo al primo posto il server del garr
configuriamo la connessione ad internet
lanciamo

pacman -Sy
e
pacman -Syu
per aggiornare il sistema (ci impieghera' un po' di tempo - facciamo merenda)
installiamo la fluxbox usando
pacman -S fluxbox
e
pacman -S fluxconf

installiamo gkrellm
pacman -S gkrellm

installiamo le manpages in italiano:
pacman -S man-pages-it

installiamo firefox:
pacman -S firefox-i18n

installiamo rox:
pacman -S rox

se vogliamo installiamo la kdemod (dobbiamo prima aggiungere il server in /etc/pacman.d/current):
[kdemod]
server=http://kdemod.atx.cx/repo/current/i686

e poi lanciamo
pacman -S kdemod-complete
e
pacman -S kde-i18n-it

pacman -Sl kdemod
per vedere la lista dei pacchetti disponibili che vogliamo installare
installiamo i driver per il sonoro:
pacman -S alsa-utils

pacman -S koffice
per l'office

aggiungere un nuovo utente con adduser
editiamo /etc/group ed aggiungiamo il nome dell'utente creato accanto a: video, audio, floppy, storage, optical, power
lanciamo
xorgconfig
: verra' creato il file .xinitrc all'interno delle home directory degli utenti che utilizzano il sistema; editarlo e decommentare l'interfaccia che vogliamo far partire quando digitiamo
startx
(in questo caso fluxbox oppure kdemod) aggiungere la riga gkrellm & per avviarlo insieme alla fluxbox (ovviamente dovremo commentarlo nel caso si usi la kde)

una volta avviata l'interfaccia grafica (avendo digitato
startx
), digitiamo da konsole
alsaconf
e poi
alsamixer
per attivare il sonoro ed aggiungiamo alsa tra i demoni in /etc/rc.conf
se utilizzate il bluetooth bisognera' aggiungere anche i demoni dbus e bluetooth (vedremo poi come configurarlo)

se e' stata fatta l'installazione minima probabilmente sara' utile:
pacman -S xf86-input-mouse
pacman -S xf86-input-keyboard
pacman -S cpufrequtils
pacman -Ss xf86-video | less

io ho una ati:

pacman -S xf86-video-ati
xorgconfig
mv /root/xorg.conf.new /etc/X11/xorg.conf
pacman -S xterm
pacman -S ttf-ms-fonts
pacman -S ttf-dejavu
pacman -S ttf-bitstream-vera

FLUXBOX

Una volta fatta partire la nostra fluxbox dobbiamo rigenerare il menu tramite il comando:

fluxbox-generate_menu

che poi andremo a modificare secondo le nostre esigenze da fluxboxmenu oppure editando:
vim /.fluxbox/menu

editiamo allo stesso modo il file
vim /.fluxbox/keys
per sistemare le scorciatoie da tastiera.
infine settiamo un'immagine di sfondo con
fbsetbg -a percorso_immagine

se l'immagine non viene caricata correttamente ad ogni avvio, editare /.fluxbox/init ed aggiungere o modificare la seguente riga:
session.screen0.rootCommand: fbsetbg -1
oppure
session.screen0.rootCommand: fbsetbg -a percorso_immagine


Demoni

Determinati servizi, per funzionare correttamente, hanno bisogno che i relativi "demoni" siano attivi; i demoni si trovano nella cartella /etc/rc.d, mentre nella debian e nella slackware si trovano in /etc/init.d
Normalmente, per essere avviati o fermati, supportano i comandi "start", "stop" e "restart" (che altro non e' che uno stop seguito da uno start).
Per attivare un demone posizionarsi in /etc/rc.d o /etc/init.d (a seconda della distribuzione) ed eseguire:

./nome_del_demone restart

il ./ serve per indicare la directory corrente.
Per attivare il demone in modo che venga attivato all'avvio:
chmod +x nome_del_demone

Se utilizzate la Archlinux invece del chmod dovrete semplicemente editare il file rc.conf ed indicare nell'apposita sezione i nomi dei demoni che volete vengano caricati all'avvio:

vim /etc/rc.conf

BACKUP DEL SISTEMA

Per creare un backup di tutto il sistema, avviamo il pc con un'altra distro o con una distro live

tar cvpf backup_archlinux.tar /sda9

volendo creare l'archivio dell'intera partizione bit a bit:

dd if=/dev/sda9 of=backup_archlinux

RSYNC E CRON - comando che permette di effettuare la sincronizzazione tra due directory
per fare ad es. il backup della cartella /home nella cartella /backup_giornaliero utilizzeremo:
rsync -avz --delete /home /backup_giornaliero

in questo caso rsync funzionera' in maniera simile al comando "cp" con la differenza che ogni volta che rifaremo l'rsync verranno modificate soltanto le differenze. L'opzione -z velocizza le operazioni di sincronizzazione in quanto i dati vengono inviati a backup_giornaliero in maniera compressa (il backup pero' non e' compresso). Rsync manifesta la sua vera utilita' in combinazione con cron ed ssh per il backup tra un pc e l'altro automatizzato da cron stesso.
In archlinux e' possibile utilizzare cron in maniera molto semplice: se vogliamo ad es che il backup venga eseguito giornalmente senza bisogno di impartire comandi: dovremo editare il file /etc/cron.daily ed inserirvi lo script desiderato (in questo caso
rsync -avz --delete /home /backup_giornaliero
). E' intuitivo che potremo servirci anche dei file /etc/cron.hourly, /etc/cron.mothly e /etc/cron.weekly a seconda di quanto spesso vorremo che lo script in questione venga eseguito.
Piu' in generale e' possibile editare cron tramite il comando:
crontab -e

ed inserirvi l'apposito script... ad es:

0 0 23 * * * root rsync -avz --delete /home /backup_giornaliero

questo indica di eseguire l'rsync tutti i giorni alle 23.00

0 0 2 * * 0 root rsync -avz --delete /home /backupsettimanale

ogni domenica alle 2 del mattino parte il backupsettimanale

0 0 5 1 * * root rsync -avz --delete /home /backup_mensile

ogni 1 del mese alle 5 del mattino parte il backup_mensile
NB: ovviamente dovremo prima creare le directory (backup_giornaliero, backupsettimanale e backup_mensile)
se volessimo effettuare un backup attraverso una rete (pubblica o privata), dal pc_paperone digiteremo:
rsync -avz --delete /home/paperone paolino@pc_paperino:/home/paperino/

il collegamento avverra' automaticamente tramite ssh (vedi la sezione su ssh)
Volendo un livello di sicurezza estremo potremo fare in modo che vengano accettate connessioni solo da pc_paperino; editeremo pertanto il file /etc/hosts.deny
ALL:ALL - che nega ogni connessione
ed il file /etc/hosts.allow
sshd: "ip_di_pc_paperino" - che indica le eccezioni ad hosts.deny
Ora, se volessimo effettuare automatizzare il backup attraverso la rete, dovremo fare in modo che quando cron avvia il backup, ssh non richieda la password.
ssh-keygen -t rsa
generiamo la chiave pubblica
scp /home/paperone/.ssh/id_rsa.pub paolino@pc_paperino:/home/paperino/
copiamo la chiave su pc_paperino
ssh paolino@pc_paperino "cat /home/paperino/id_rsa.pub >> /home/paperino/.ssh/authorized_keys"
creiamo il file /home/paperino/.ssh/autorized_keys e vi accodiamo il contenuto di id_rsa.pub
a questo punto:
crontab -e

0 0 23 * * * root rsync -avz --delete /home/paperone paolino@pc_paperino:/home/paperino/
NB: al posto di pc_paperino dovremo sempre utilizzare l'indirizzo ip di pc_paperino... a meno che non avremo associato l'indirizzo al nome in questione; ad es.
vim /etc/hosts

192.168.0.10 pc_paperino
Volendo infine essere informati se il backup e' avvenuto potremmo farci inviare una mail:
0 0 23 * * * root rsync -avz --delete /home/paperone paolino@pc_paperino:/home/paperino/ | mail paperone@yahoo.it -s "log-backup"
NB: per poter utilizzare a buon fine il comando mail dovremo aver installato un server di posta a scelta tra: sendmail, qmail, postfix, exim... ed aver avviato il relativo demone.


INTEGRITA' DEL SISTEMA

L'amministratore di sitema e' tenuto a controllare che nessuno dei file di sistema venga manomesso. Un metodo semplice per effettuare questo controllo e' di utilizzare il comando md5sum.
Quando il sistema e' fresco di installazione e siamo quindi sicuri che nulla sia stato manomesso:

md5sum file1 > codicefile1

tale comando genera un codice per il file1 che salveremo nel file codicefile1; se in un secondo momento volessimo verificare che il file1 non sia stato manomesso:
md5sum -c codicefile1

ovviamente in un sistema i file da controllare sono molti ed e' impensabile di verificarli uno ad uno; a tale scopo creiamo un file di testo nel quale scriveremo un elenco dei file di cui ci interessa effettuare il checksum:
/bin/*
/boot/vmlinuz*
/boot/grub/menu.lst
/etc/fstab
/etc/hosts.allow
/etc/hosts.deny
/etc/inetd.conf
/etc/login.access
/etc/login.defs
/etc/securetty
/etc/serial.conf
/etc/services
/sbin/*
/usr/bin/*
/usr/local/admin/*
/usr/local/sbin/*
/usr/sbin/*

e salviamolo ad es. come /etc/elencochk.conf
creiamo poi uno script che generi i checksum leggendoli da /etc/elencochk.conf e che li salvi nel file CHECKSUM_FILE:

#! /bin/sh
CONFIG_FILE=/etc/elencochk.conf
CHECKSUM_FILE=/usr/secure/checksums

for i in `cat $CONFIG_FILE`; do
if [ ! -d $i ]; then
/usr/bin/md5sum $i >>$CHECKSUM_FILE;
fi;
done;


il [ equivale al comando test (man test)...
[ -d file ]: restituisce vero se file esiste ed e' una directory.
Invece il ! e' la negazione
[ ! -d file ]: restituisce falso se file esiste ed e' una directory. In pratica gli dice di non fare l'md5 delle directory (non si puo' fare).

Per controllare che tutto sia ok, ci bastera' dare:
md5sum -c CHECKSUM_FILE

Ovviamente dovremo avere cura di salvare il CHECKSUM_FILE su un supporto esterno in maniera tale che non possa essere manomesso... allo stesso modo dovremo salvarci anche il binario del programma md5sum perche' se venisse manomesso il programma di controllo, tutti i controlli sarebbero sballati. Una buona politica di backup del sistema (da tenere anch'essi su supporto esterno - cd o floppy protetto da scrittura) ci permettera' di risolvere problemi di qualsiasi genere... ripristinando il sistema alla normalita' ed avendo cura successivamente di aggiornare i programmi che presentano falle. Volendo possiamo automatizzare il checksum tramite cron in maniera che venga fatto un controllo periodico e venga inviato un report via mail al sistemista.


Utilizzare un pc da remoto

SSH - Se volessimo accedere al pc dell'ufficio comodamente da casa dobbiamo utilizzare il comando ssh.
Prima di tutto bisogna attivare il demone sshd, seconda cosa dobbiamo avere un account sul pc al quale vogliamo accedere... supponiamo di avere un account di nome ugo:

ssh ugo@indirizzo_ip_del_pc_remoto

ora e' possibile impartire i comandi sul pc remoto :)

SCP - e' un'implementazione di ssh che permette di copiare un file nel pc remoto o tra pc remoti:

scp file1 ugo@indirizzo_ip_del_pc_remoto: /home/ugo/file1

SFTP - e' un'implementazione di ssh che permette lo scambio di file tra pc:

sftp username@indirizzo_ip_del_pc_remoto

SCREEN - e' un piccolo programma che apre sessioni con interfaccia testuale, molto utile quando lavoriamo su un pc remoto. Permette di aprire piu' aree di lavoro in cui i processi rimarranno attivi anche in caso di sconnessione dal pc remoto.
screen
apre una sessione
ctrl-a d
esci da screen senza chiuderlo
screen -r
riapri la vecchia sessione di screen

Se avessimo aperto piu' sessioni di screen e lasciate in background, ad es:
screen
ctrl-a d
screen
ctrl-a d

per poter riaprire la sessione desiderata:
screen -ls

e poi
screen -r
[seguito dal PID della sessione che vogliamo aprire]
Se invece una sessione di screen non ci interessa piu' possiamo killarla:

kill [PID]

Volendo lanciare una sessione e contemporaneamente salvare l'output in un file:

screen nome_processo &> ~/screenlog.txt

Ipotizzando di aprire una sola sessione di screen, possiamo lavorare su piu' aree di lavoro:
screen

ctrl-a c
per creare una nuova area di lavoro
ctrl-a A
per dare un nome all'area di lavoro corrente
ctrl-a "
per visualizzare l'elenco delle aree di lavoro
ctrl-a 0,1,2...
per richiamare l'area di lavoro desiderata
ctrl-a spazio
per passare all'area di lavoro successiva a quella corrente

Infine se volessimo copiare una parte di cio' che e' scritto in un'area di lavoro:
ctrl-a [
ci si sposta col cursore all'inizio dell'area da selezionare e premiamo spazio. Ci si sposta fino alla fine del testo da selezionare e si preme nuovamente spazio.
Per incollare il testo cosi' selezionato, apriamo vim in modalita' inserimento oppure una nuova area di lavoro e digitiamo:

ctrl-a ]

LAMP - LAPP

LAMP e' acronimo di (linux, apache, mysql, php); LAPP utilizza postgres al posto di mysql.
Vediamo come installare e configurare il tutto.

pacman -Sy apache php mysql libxml2

/etc/rc.d/httpd restart

per avviare il servizio del server apache

127.0.0.1 localhost.localdomain localhost Paperino

se fallisce editate /etc/hosts ed aggiungete l'hostname del vostro pc in coda alla riga che inizia per 127.0.0.1 (come mostrato sopra)

aprire il browser e digitare http://localhost
se tutto funzia dovrebbe essere possibile vedere la schermata di apache

vim /etc/httpd/conf/httpd.conf

apro il file di configurazione di apache (il percorso e' riferito alla archlinux, in altre distro potrebbe essere differente)

#LoadModule unique_id_module modules/mod_unique_id.so

commentiamo la riga come sopra

di default il percorso dei documenti php ed html sono settati nella riga: DocumentRoot "/home/httpd/html" volendo e' possibile specificare un altro percorso (magari relativo ad una cartella che abbiamo creato per l'occasione)... oppure si puo' creare un link simbolico che punta ad un altra cartella:

ln -s /home/paperino/pubblico/ /home/httpd/html/paperinopub

nel tal caso verranno rese pubbliche sia /home/httpd/html sia /home/paperino/pubblico

ServerName 0.0.0.0:80

per far si che apache ascolti su tutte le interfacce di rete (qualunque sia l'ip), decommentare la riga relativa al ServerName e mettere 0.0.0.0

LoadModule php5_module modules/libphp5.so

decommentiamo la suddetta riga per abilitare il php

:x!

salviamo ed usciamo da vim

pacman -Sy libpng libjpeg freetype2

Installiamo le librerie grafiche utili ad es. per i CMS (un buon CMS e' flatnuke - i CMS sono degli strumenti per la creazione di siti)

vim /etc/php/php.ini
extension=gd.so

abilitiamo le librerie grafiche gd - editiamo /etc/php/php.ini e togliamo il ";" da ";extension=gd.so"

Una volta avviato il server sara' possibile vederlo dal proprio pc aprendo il browser e digitando "localhost" sulla barra degli indirizzi. Se vogliamo invece collegarci al pc da un'altra macchina attraverso internet, dovremo digitare sulla barra degli indirizzi l'indirizzo ip con il quale il server e' connesso ad internet. Dato che ricordarsi l'indirizzo ip e' un po' scomodo, e' possibile utilizzare un servizio gratuito che ci fornisce un ip di terzo livello: bisogna registrarsi su www.dyndns.it loggarsi, cliccare su nuovo host dinamico ed associare un nome al nostro attuale indirizzo ip... ne uscira' un nome sul tipo di: paperino.homepc.it (da questo momento per accedere al nostro server digiteremo sulla barra degli indirizzi del browser paperino.homepc.it) - ovviamente ogni volta che chiuderemo la connessione e ne apriremo un altra dovremo tornare sul sito ed associare il nuovo ip, assegnatoci dal provider per la nuova sessione, al nome scelto.

chown -r nobody:nobody /home/httpd
chmod 750 /home/httpd
chmod -r 640 /home/httpd/*

Volendo una maggiore sicurezza sulla cartella che rendiamo pubblica, e' consigliabile assegnarla all'utente "nobody", gruppo "nobody"

vim /etc/php/php.ini
;extension=mysql.so

abilitiamo il supporto per mysql in php.ini togliendo il ";" dalla suddetta riga

vim /etc/my.cnf
#skip-networking

per far si che mysql sia in ascolto su tutta la rete e potervi quindi accedere da un'altra macchina, editare my.cnf e commentare la riga come sopra

/etc/rc.d/mysqld start

avvia il servizio

/usr/bin/mysqladmin -u root password paperino

settiamo la password di root di mysql

mysql -p -u root

accedo come root su mysql: dovrei visualizzare il prompt di mysql
quit - per uscire

Un tool grafico che viene spesso utilizzato e' phpmyadmin... (ma non mi dilunghero' nella sua configurazione in quanto useremo la riga di comando). Altro tool che vale la pena di menzionare e' "tora" (utile nella gestione di oracle, ma utilizzabile anche con mysql e postgresql).

Se al posto di mysql volessimo utilizzare postgresql:

pacman -Sy postgresql

/etc/rc.d/postgresql start

avvia il servizio

vim /var/lib/postgres/data/postgresql.conf

decommentare la riga:
listen_addresses = 'localhost'

/var/lib/postgres/data/pg_hba.conf

controlliamo che tutto sia configurato come segue:
# IPv4 local connections:
host all all 127.0.0.1/32 trust
volendo e' possibile specificare un altro ip per rendere disponibile postgresql sul client desiderato

/etc/rc.d/postgresql restart


consideriamo che per funzionare postgresql ha bisogno che la porta 5432 sia aperta. Verificare che non ci siano blocchi sui seguenti file:
/etc/services
/etc/hosts
/etc/hosts.allow

vim /etc/php.ini

eliminare il ";" da:
;extension=pgsql.so

/etc/rc.d/httpd restart

su root
su - postgres

accedo come postgres

createuser -DRSP paperino

aggiungo l'utente "paperino"

createdb -O paperino paperopolidb

creo il database "paperopolidb" di cui paperino avra' i privilegi

exit - per uscire

Volendo disporre anche di un tool grafico installeremo pgadmin3: pacman -Sy pgadmin3
pgadmin3 - per farlo partire... poi giocherellateci un po' sembra un bel programmino...


Mysql

Ora che abbiamo installato mysql e postgresql, siamo pronti per utilizzarli; mysql cosi' come postgres o anche oracle utilizzano dei dialetti del linguaggio sql per gestire i propri database; vedremo quindi come lavore con ognuno di essi.

mysql -p -u root

apre la sessione

show databases;

mostra i databases esistenti (ogni comando termina con ";" non dimentichiamolo)

create database paperopoli;

crea il database "paperopoli"

create database topolinia;

crea il database "topolinia"

show databases;

verifichiamo che i nuovi database sono stati aggiunti alla lista dei databases esistenti

drop database topolinia;

elimina il database "topolinia"

show databases;

verifichiamo che topolinia sia stato eliminato

use paperopoli;

per poter lavorare su di uno dei databases presenti dobbiamo prima selezionarlo col comando "use"

show tables;

mostra i contenuti del database selezionato. essendo stato appena creato ovviamente e' vuoto.

Creiamo la nostra prima tabella:

create table personaggi (
nome varchar(20),
animale varchar(20),
telefono int(10)
);

create table oggetti ( oggetto varchar(20), valore varchar(20) );

creiamo anche la tabella "oggetti"

show tables;

verifichiamo che le tabelle siano state create

describe personaggi;

verifichiamo anche che la struttura della tabella "personaggi" sia corretta

describe oggetti;

controlliamo anche la tabella "oggetti"

drop table oggetti;

elimina la tabella oggetti

show tables;

verifichiamo che la tabella oggetti sia stata eliminata

create table test.nomi ( nome varchar(20) );

creo la tabella "nomi" in un db differente da quello attualmente selezionato con "use": in questo caso nel db "test"

create table nomi (
id int(4) not null,
nome varchar(20) not null,
cognome varchar(20) not null,
unique (id),
index (nome, cognome));

vengono indicizzati i campi: id, cognome, nome. "unique" indica che non possono esistere due campi con lo stesso id.

create temporary table esempio ( id int(4) );

crea una cartella che verra' cancellata quando mi disconnetto. E' visibile solo al client che la crea, quindi vari client possono creare tabelle temporanee con lo stesso nome.

drop table nomi, esempio;

per cancellare piu' tabelle con un solo comando.

create table contatti (
id int(4) not null, cognome varchar(20) not null );

creo una nuova tabella

alter table contatti add telefono char(30);

aggiunge il campo relativo al telefono

alter table contatti add indirizzo char(30) after cognome;

aggiunge il campo indirizzo subito dopo il campo cognome

alter table contatti modify indirizzo varchar(50) not null;

modifica il campo indirizzo - come sempre: "describe contatti" per vedere le modifiche

alter table contatti change indirizzo residenza char(40);

rinomina il campo indirizzo in residenza coi nuovi attributi

alter table contatti rename to rubrica

rinomina la tabella

alter table rubrica drop residenza;

elimina un campo

alter table rubrica rename to contatti,
add cellulare char(30) after telefono,
modify if exists nome char(20) after cognome;

e' possibile fare piu' cose come su indicato in un unica soluzione

Per definire un indice possiamo usare indifferentemente le parole chiave: "index" o "key". Esistono 4 tipi di indici: (non unici - ammettono valori duplicati), (unici - non ammettono valori duplicati), (chiave primaria - non ammettono valori duplicati ne valori nulli), (full text - progettato per velocizzare la ricerca di testo). In un db di grandi dimensioni e' utile definire degli indici per ottimizzare l'accesso ai dati in quanto il pc effettuera' le ricerche sugli indici anziche' campo per campo.

create teble if not exists pianeti (
id int(4) not null,
pianeta varchar(30) not null, costellazione varchar(30) not null, cometa varchar(30) not null, universo varchar(30) not null, index (pianeta, costellazione));

Indicizzo i campi pianeta e costellazione.

index oggetticelesti (pianeta, costellazione);

in questo modo assegno un nome ad un indice, in questo caso: "oggetticelesti"
non e' possibile assegnare un nome alla chiave primaria. Puo' essere creata una sola chiave primaria per tabella.

unique cometa (cometa);

crea un indice unico di nome "cometa" per il campo "cometa" (non ammette valori duplicati)

primary key (id);

crea la chiave primaria (non ammette valori duplicati o nulli). Nel caso specifico avrei ottenuto lo stesso risultato con:
unique (id);
in quanto il requisito "not null" era già stato specificato nella creazione del campo.

primary key (ipaddress, username);

Una chiave primaria, cosi' come un indice unico, puo' comprendere piu' colonne. Nel caso, ad es, si debbano indicizzare utenti ed indirizzi ip: "cosi' come da un ip possono connettersi piu' utenti, ogni utente potrebbe connettersi con diversi ip).

id int(4) not null unique;
id int(4) not null primary key;

se l'indice unico, o anche la chiave primaria, comprende una sola colonna, lo si puo' specificare insieme alla definizione della colonna stessa.

create table paesi (
id int(4) not null,
stato varchar(30),
regione varchar(30),
città varchar(30),
comune varchar(30));


PostgreSQL

comandi postgresql


Altri programmi utili

VIM - editor di testo molto potente

vim file1

siamo in modalita' comando: (e' possibile spostarsi coi tasti freccia o con le lettere h,j,k,l)
G
per spostarsi alla fine del testo
1G
per spostarsi all'inizio del testo
25G
per spostarsi alla 25° riga
dd
cancella la riga corrente
d}
cancella il paragrafo che segue
ynw
copia n parole nel buffer
u
annulla l'ultima modifica (digitare piu' volte per annullare piu' cose)
/espressione_regolare
per ricercare una parola o parte di testo nel documento (invio per proseguire)
tasti cursore per spostarsi come di consueto

i
per entrare in modalita' inserimento (e' possibile inserire e cancellare testo come in un normale editor)
Esc
per tornare in modalita' comando

:
entra in modalita' ":"
:q!
esce senza salvare
:w
salva il file
:w paperino
salva il file chiamandolo "paperino"
:x!
salva il file ed esce
:wq!
salva il file ed esce
:r file1
inserisce il testo del file1 nella posizione corrente del file che stiamo editando
:%s/vecchia_stringa/nuova_stringa/g
sostituisce su tutto il testo le stringhe vecchia_stringa con nuova_stringa
:%s/nome.*\ntel/pippo/g
sostituisce le righe che vanno dalla parola nome alla parola tel con pippo su tutto il documento; \n indica l'andata a capo

v
per entrare in modalita' selezione (spostarsi coi tasti freccia per selezionare del testo)
y
per copiare il testo selezionato
d
per tagliare il testo selezionato
p
per incollare il testo nella posizione desiderata

Per incollare del testo (preso ad esempio da un browser o altro): selezionare il testo, aprire vim, entrare in modalita' inserimento e fare clic col tasto centrale del mouse (oppure con ambo i tasti - destro e sinistro - se non si dispone del tasto centrale).
Oppure selezionare il testo, digitare CTRL+c, aprire vim in modo inserimento e digitare SHIFT+INS.

LFTP - per caricare file sul web
lftp username@miosito:2121

inserisci la password e sei dentro:
mput file1
per trasferire un file
mget file1
per scaricare un file
mirror -R percorso_cartella_locale percorso_cartella_remota
per trasferire una cartella e tutto il contenuto
mirror percorso_cartella_remota percorso_cartella_locale
per scaricare una cartella e tutto il contenuto
help
per vedere la lista dei comandi
help nome_comando
per informazioni piu' specifiche

RTORRENT - per scaricare file condivisi dagli internetnauti
rtorrent

premere il pulsante backspace e digitare il percorso del file.torrent salvato in precedenza sul pc, quindi premere invio
selezionare il file coi tasti freccia e premere ctrl-s per avviare il download
i tasti a,s,d incrementano la velocita' di upload; z,x,c la diminuiscono
i tasti A,S,D incrementano la velocita' di download; Z,X,C la diminuiscono
ctrl-d ferma il download; una pressione ulteriore di ctrl-d cancella il processo
ctrl-q chiude il programma

WGET - per il download di file o il mirror di interi siti
wget [opzioni] [URL]

per scaricare un semplice file e' sufficiente digitare wget seguito dall'URL del file
wget -r -p http://www.nomepagina.html
per scaricare una pagina html ed i file che servono a visualizzarla
per scaricare solo le immagini collegate in primo livello ad una pagina:
wget -Sr -l 1 -A gif,jpg http://www.nomesito.it

se invece volessimo scaricare tutto un livello tranne le directory img1, img2 ed img3
wget -Sr -l 1 -X "img*" http://www.nomesito.it

se invece volessimo effettuare il mirror di un sito
wget -m -t0 http://www.nomedelsitodamirrorare.it
(-t0 tenta un numero infinito di volte nel caso si interrompe)
oppure per effettuare un mirror col livello di profondita' a scelta:
wget -F -c -w 1 -r -L -k -l 1 http://www.nomedelsitodamirrorare.it

-F forza il recupero dei link relativi dal file (considera il file come HTML)
-c continua il download di file parziali. in caso il file da salvare esista gia' rinomina il nuovo file [FILENAME.EXT].1
-w XX fa una pausa di XX secondi tra un file e l'altro
-r recurse folder
-L segue solo i link relativi
-k converte i link nelle pagine scaricate per rendere il sito navigabile in locale
-l livello di profondita' in cui seguire i link, di default e impostato a 5
per scaricare piu' pagine html posso creare una lista di indirizzi col mio editor di testo salvarla come ListaUrl.txt e:
wget -i ListaUrl.txt

Per scaricare un file, con possibilita' di recupero (opzione -c) partendo dal file di log generato (opzione -o).
wget -c -o [log-file] [URL]

-b per eseguirlo in background; ad es:

wget -c -b -o disc1-log ftp://ftp.sito.com/i386-disc1.iso

MASTERIZZARE CD da riga di comando
Apriamo il cassetto del cdrom:
eject cdrom

creiamo l'immagine ISO della cartella da masterizzare
mkisofs -RJ -o nome_immagine cartella_da_masterizzare

-l Consente di utilizzare nome di file lunghi fino a 31 caratteri
-J Consente di utilizzare le estensioni Joliet.
-o Consente di specificare il nome del file sul quale verra' salvata l'immagine ISO prodotta
-R Consente di utilizzare le RockRidge per mantenere i permessi sui file
-V Consente di specificare un'etichetta di volume.
esempio:
mkisofs -RJl -o /home/ugo/Desktop/cd_prova.iso /dev/cdrom


masterizziamo l'immagine sul CD/DVD
cdrecord -v dev=1,0,0 speed=32 driveropts=burnfree -tao -eject nome_immagine

La velocita' puo' essere modificata in relazione al vostro masterizzatore
Per scoprire il numero identificativo del vostro masterizzatore (in questo caso 1,0,0):
cdrecord -scanbus

Un metodo semplice e alternativo per creare un'immagine di un cd:
dd if=/dev/cdrom of=immagine.img

nel dettaglio:
cdrecord [opzioni generali] dev=device [opzioni traccia] immagine

opzioni generali:
blank=all - per cancellare i cd-rw; per una cancellazione veloce: blank=fast
-force - forza la scrittura (utile ad es. quando non riusciamo a cancellare un cd riscrivibile)
-v - modalita' prolissa
-dummy - fa una simulazione del processo di scrittura
-multi - scrive una sessione di un cd multisessione
-nofix - non finalizza il disco al termine della scrittura
-pad - per masterizzare file .wav in cd audio
driveropts=burnfree - da usare se il masterizzatore e' burnproof (fate un cd di prova per verificarlo)
esempi:
controllo della iso (da effettuare prima di fare il burn)
mount -t iso9660 nome.iso /dir1 -o loop


scrittura di tracce audio: Scrive i file track1.wav, track2.wav... in formato CD-DA
cdrecord -v -eject driveropts=burnfree speed=32 dev=1,0,0 -pad -audio track*.wav

scrittura dati:
cdrecord -eject driveropts=burnfree speed=32 dev=1,0,0 -v -data nome.iso

scrittura cd misti:
cdrecord -eject driveropts=burnfree speed=32 dev=1,0,0 -v -data nome.iso -audio track*.wav

formattare un cd-rw:

cdrecord dev=1,0,0 blank=all speed=32

CDPARANOIA - si usa per estrarre tracce audio da un cd musicale in formato .wav
cdparanoia -B "1-"
- estrae tutto il cd creando un file .wav per ogni traccia
cdparanoia -B "3" beethoven.wav
- estrae soltanto la traccia 3 e la nomina beethoven.wav
cdparanoia "1-"
- estrae tutto il cd in un unico file di nome (di default): cdda.wav
cdparanoia "2-5"
- estrae le tracce 2,3,4,5 in un unico file: cdda.wav
cdparanoia "1-" tutto_anglagard.wav
- estrae il cd in un unico file di nome tutto_anglagard.wav
cdparanoia -vsQ
- restituisce informazioni sul CD-ROM e sulle tracce presenti sul cd
in alternativa a cdparanoia si puo' utilizzare cdda2wav (anche se cdparanoia e' leggermente migliore); il pregio di cdda2wav e' che permette di nominare le tracce del cd scaricandole da internet (dal database di cddb). Dato che cdda2wav supporta anche le librerie paranoia e' consigliabile usarlo come di seguito:
cdda2wav dev=1,0,0 cddb=0 --alltraks -paranoia

volendo trasformare in mp3 i file .wav useremo lame:
lame -h -b 224 file_wav file_mp3
- (-h imposta la qualita' di estrazione molto alta e -b 224 e' il bitrate)
per trasformare una lista di wav in mp3:
for i in *.wav; do lame -h -b 224 $i "$i".mp3; done

un programma semplice e carino per ascoltare i vostri brani e' mp3blaster; provatelo!!!

pacman -S mp3blaster

CONVERTIRE FILE CHM TO PDF o HTML

Pacman -Sy libchm htmldoc

scarico i pacchetti

exstract_chmLib esempio.chm outdir

trasformo il file chm in tanti file html

htmldoc

avvio htmldoc con cui potro' ottenere un unico file html o un pdf

LINKS - e' un browser testuale molto semplice da usare.
premere il tasto g e digitare l'indirizzo a cui si vuole accedere seguito da invio
muoversi con freccia su e freccia giu' all'interno dei siti e cliccare tramite freccia destra

ASPELL - (spell e ispell sono le vecchie versioni) permette di effettuare il controllo ortografico su di un file.
pacman -S aspell-it
- per scaricare il dizionario in italiano
aspell -c file1
- potrete effettuare le correzioni in maniera immediata pigiando i pulsanti seguendo lo schema in italiano che si apre sul terminale.

FIGLET - e' un comando che permette di scrivere in codice ascii secondo diversi stili:
pacman -S figlet

figlist
- restituisce la lista dei font installati
figlet -f nomefont parola
- converte la parola col font scelto
su http://www.figlet.org e' possibile trovare nuovi font da scaricare... ovviamente e' anche possibile editarli e crearne di nuovi secondo la vostra fantasia. I font sono in formato .flf e vanno copiati nella directory: /usr/share/figlet/fonts
questo e' un esempio di ascii art:
.__  .__
|  | |__| ____  __ _____  ___
|  | |  |/    \|  |  \  \/  /
|  |_|  |   |  \  |  />    <
|____/__|___|  /____//__/\_ \
             \/            \/

SUBVERSION - Questa guida l'ho scritta in html avvalendomi, per comodita', dell'editor Quanta ma, come sempre, va benissimo anche vi... Successivamente l'ho condivisa tramite subversion affinche' anche altri potessero dare il loro contributo. Subversion non e' altro che un repository che permette di condividere uno o piu' file; se si dispone di un piccolo server apache, e' possibile configurarle il repo sul proprio pc, altrimenti ci si affida a dei servizi online sul genere di assembla: www.assembla.com. Per prima cosa scarichiamo subversion:
pacman -S subversion

poi registriamoci su www.assembla.com
ora siamo pronti per caricare nel repo il nostro primo file:
svn import -m "primo ingresso" file1 http://svn2.assembla.com/svn/file1

il comando svn import si da solo al primo ingresso...in seguito aggiorneremo tramite il comando commit
a questo punto ci ricreiamo la copia in locale del o dei file su cui lavoreremo:
svn checkout http://svn2.assembla.com/svn/file1

anche il checkout viene effettuato una sola volta
D'ora in avanti ogni volta che dovremo effettuare delle modifiche al file in questione effettueremo prima l'update per aggiornare il file in locale (nel caso qualche collaboratore abbia effettuato delle aggiunte) e poi, dopo aver effettuato le aggiunte che ci interessavano sul file in questione, provvederemo ad uploadarlo sul repo tramite il comando commit:
cd ~/file1/trunk

svn update http://svn2.assemla.com/svn/file1

svn commit -m "aggiunto paragrafo paperino"

se successivamente volessimo aggiungere un altro file nello stesso trunk del file1:
svn add file2

svn commit -m "aggiunto file 2"

per aggiungere molti file:
svn add *

per rimuovere un file:
svn rm file2

svn commit -m "eliminato file 2"

infine:
svn help
- per maggiori informazioni sui comandi

echo il leone ruggisce > leone
cat leone | awk '{print $3" "$1" "$2}'

finch, vlc
sed, gawk
iptables
route
iproute2
raid, lvm, telnet, netcat, netkit, vmware
le reti
ios cisco, quagga
script bash - cicli e variabili
inviare mail da riga di comando: exim, postfix, (qmail,sendmail e fetchmail), mutt, mail
servizi: dns bind, samba, (kerberos, afs), NFS e NIS

configurare ppp
configurare un collegamento ad internet tramite scheda PCMCIA
configurare bluetooth per collegarsi ad internet col cellulare


Bibliografia

Linux - il sistema operativo free software (Giuseppe Zanetti)
I manuali di linux pro (Mysql 5.0) - Sprea editori
http://www.archlinux.it
http://www.stenoweb.it
http://www.mrwebmaster.it
http://www.gmatte.net
http://maxpiano.altervista.org
http://www.linuxguide.it
...
se ho dimenticato qualcuno, segnalatemelo via email. :)