Sunrise in the fractal garden

Unix e Zen



Indice

afs

Afs e' questo sistema "magico" che permette di condividere i dischi di tutto il mondo a partire da un'unica "supercartella" chiamata /afs. Ogni computer potrebbe in teoria comparire subito dopo col suo nome di dominio. Ad esempio /afs/cern.ch/. Dopodiche' ci sono le cartelle sul computer remoto che diventano parte integrante del nostro sistema di file dopo che ci siamo allocati con klog username@sito.remoto.
Aggiorna la cache afs su un computer (per riportare subito cambiamenti della cartella indicata) fs flushvolume /afs/sito.remoto/cartella/
Qual'e' lo spazio ancora disponibile nella mia area? fs quota

Aggiungere un disco

Installa il disco collegandolo fisicamente al PC
Partiziona il nuovo disco(se necessario) fdisk o cfdisk
Determina/crea il file speciale associato al nuovo disco dmesgo MAKEDEV
Crea il filesystem sulle partizionimkfs
Controlla il nuovo filesystem fsck
Monta il nuovo filesystem
mount
Modifica /etc/fstab

Ant

Installazione Download in /usr/local/ant
Aggiungi /usr/local/ant/bin a $PATH
setenv ANT_HOME /usr/local/ant
InvocazioneDefinisci nella cartella dove devi fare la compilazione un file build.xml
Dai il comando ant

Al centro c'e' l'hardware...

Volendo visualizzare lo schema di un sistema Unix dovete immaginare una serie di cerchi concentrici con al centro l'hardware. Intorno all'hardware c'e' il kernel. E' inteso che il kernel ha tutti i device driver per comunicare con l'hardware. Intorno al kernel c'e' la shell. Infine il cerchio piu' esterno e' formato dai programmi applicativi.
Per funzionare,un sistema operativo Unix, ha bisogno di almeno un disco con 3 partizioni. Le 3 partizioni sono quella di root che serve per le operazioni essenziali e puo' essere anche molto piccola, la partizione di swap che serve per realizzare la memoria virtuale e deve essere dell'ordine di grandezza della RAM, e infine una partizione utenti contenente tutto il resto.La gerarchia di cartelle di un sistema Unix che si ottiene col comando ls -lR / e' virtuale e la sua corrispondenza con partizioni su disco dipende da come sono stati montati i file system nelle varie partizioni. Inoltre ci sono cartelle che non corrispondono a cartelle su disco:e' il caso della cartella /dev che contiene tutti i device conosciuti dal sistema o della cartella /proc legata ai processi in esecuzione.

Attenzione alle porte!

Ormai tutti sanno che il computer su Internet comunica attraverso un certo numero di porte che come le frequenze di una radio sono numerate 1,2,etc e che alcune frequenze sono riservate ad alcuni servizi come 80 per http (il server Web), 21 per telnet, etc... Ma dove e' descritto tutto questo sotto Unix? Due files di testo /etc/services e /etc/inetd.conf mostrano i vari servizi e la loro eventuale gestione attraverso il demone inetd. Tutta la sicurezza sta nel controllare queste porte. Purtroppo ci sono letteralmente infiniti modi di penetrare, inclusi quelli che saranno scoperti in futuro. Ma e' possibile perlomeno creare una checklist delle principali debolezze. E' quello che fa questo documento riassunto nella tabella che segue:

causa del problemaCome accertarseneCome proteggersi
Installazione di default di Linux ed applicazioni
Account senza password o con password debole
Backup mancanti o fatti male
Troppe porte aperte netstat -lnp dato come root
nmap fa invece lo scan delle porte aperte dall'esterno:
Esempi di uso:
nmap pcba10
nmap 192.135.10.1-255 -p 36794
nmap 192.135.20.1-255 -p 36794
nmap 193.206.185.1-255 -p 36794
Chiudere le porte che non servono
Facile accesso alle utility per l'amministrazione
find / \( ! -fstype nfs \) -type f \( -perm -04000 -o -perm -02000 \) -exec ls -l {} \;
Disabilitare i suid superflui
Mancato filtraggio di pacchetti errati
Monitoraggio incompleto o mancante
Programmi CGI vulnerabiliwhiskercancellare i programmi
Problemi con telnet, rsh, rloginInstalla e usa ssh
Problemi con ftpInstalla ssh e usa scp
Buffer overflow nei servizi RPC
Problemi col programma Sendnail
Problemi col programma Bind
Problemi con LPD (demone per la stampa in remoto)
Problemi con sadmind e mountd
Problemi con SNMP
In generale per diagnosticare quali debolezze ha il vostro computer, potete usare Nessus.

Tripwire e' invece un tool per accertarsi della presenza di hacker.Lo fa rivelando modifiche in file di sistema che non dovrebbero cambiare. Infine un firewall come Guarddog (in effetti un'interfaccia grafica ai file di configurazione di Linux) permette di ridurre al massimo le porte: al limite solo ssh rendendo il vostro computer meno vulnerabile. Qui un interessante documento.

netstat
lista di connessioni
netstat -s -p tcp
statistica sulle connessioni tcp(monitoraggio di attacco Denial of Service)

Comandi Unix

comando Unix comando equivalente in altri sistemi operativi a cosa serveAnnotazioni
cattype, append"concatenate" cioe' mostrare un file al terminale, concatenare piu' file insieme
cat filedamostrare
cat filedaappendere >> file
cat file1 file2 file3 > fileunico
chmodset protection
chmod ugo+rwx file
aggiunge un permesso
chmod ugo-rwx file
toglie un permesso
chmod xxx file
(xxx cifre ottali) imposta tutti i permessi
cdcd
cpcopy
cutestrai colonne
dateimposta data e oraDeve essere dato da root
filelista il tipo di file
gnumericexceledit excel documents
grepsearch
historylista gli ultimi comandi dati
!stringa 
richiama il comando che comincia con stringa
!n 
richiama il comando n nella lista
set history=n
cambia le dimensioni del buffer che memorizza i comandi
lpr -Pnomestampante filePRINT/PRINTER=nomestampante fileStampa filePer trovare i nomi delle stampanti dai cat /etc/printcap
ln
ln -s file1 file2
crea file2 come collegamento a file1 (gia' esistente)
lsdir
more
mvrename
nlCome cat ma aggiunge il numero di linea a ogni riga listata
od dump (ottale) di un filepossibili anche dump esadecimale,ascii,etc
pasteaggiungi colonne
pwdsho defper sapere in che cartella siamo
rehashse si sono aggiunti nuovi comandi nelle cartelle indicate in $PATH, occorre dare questo comando perche' siano accessibiliComando csh
rmerase o delete
statlista le caratteristiche di un file
sort
tail
uniq
wcconta numero righe in un file
where
where progname
Dove si trova il programma progname
xdvi vedere file TeX dvi
xload fai vedere il grafico del carico del sistema
xxd dump esadecimale di un file
Inserimento in un comando della `stringa risultato di un altro comando `Basta includere il comando tra apici all'indietro ( ` ).Ad esempio se il file pidfile contiene il pid di un programma che vogliamo ammazzare, allora possiamo scrivere
kill -9  `cat pidfile`
> (dirottamento di output su un file)/out=temp.liscomando > temp.lis
comando >& temp.lis
La seconda forma e' necessaria se si vuole dirottare su file tutti i messaggi. In bash si scrive:
comando > temp.lis 2>&1
E' possibile scrivere nella stessa riga piu' comandi separandoli con ";". Ad esempio:
sed 's/\/zitobin/http:\/\/pcba10\.ba\.infn\.it\/cgi-bin/g' lez2.html > temp.html ; mv -f temp.html lez2.html ; chmod 644 lez2.html
Esempi di esecuzione su macchina Linux utilizzando questo file
ls -l log.txt
-rw-r--r-- 1 zito xu 1252902 Mar 7 15:15 log.txt
file log.txt
log.txt: ASCII text
wc log.txt
12026 120259 1252902 log.txt
tail log.txt
dhcp-207-225-sth.fccj.cc.fl.us - - [06/Mar/2001:23:53:46 +0100] "GET /www/icones /phone.gif HTTP/1.1" 200 334 ouc155.chillicothe.ohiou.edu - - [06/Mar/2001:23:53:49 +0100] "GET /www/wfractal .html HTTP/1.1" 200 417 sdn-ar-002florlap268.dialsprint.net - - [06/Mar/2001:23:55:36 +0100] "GET /~gela o/tina.html HTTP/1.0" 200 7107 sdn-ar-002florlap268.dialsprint.net - - [06/Mar/2001:23:55:39 +0100] "GET /slt/r evenge/modotti.jpeg HTTP/1.0" 404 289 sdn-ar-002florlap268.dialsprint.net - - [06/Mar/2001:23:55:39 +0100] "GET /slt/s illytomte.c.gif HTTP/1.0" 404 285 sdn-ar-002florlap268.dialsprint.net - - [06/Mar/2001:23:56:11 +0100] "GET /slt/r evenge/modotti.jpeg HTTP/1.0" 404 289 sdn-ar-002florlap268.dialsprint.net - - [06/Mar/2001:23:56:11 +0100] "GET /slt/s illytomte.c.gif HTTP/1.0" 404 285 62.98.7.50 - - [07/Mar/2001:00:01:08 +0100] "GET /icons/blank.gif HTTP/1.1" 304 - 62.98.7.50 - - [07/Mar/2001:00:01:08 +0100] "GET /icons/unknown.gif HTTP/1.1" 30 4 - 62.98.7.50 - - [07/Mar/2001:00:01:08 +0100] "GET /icons/back.gif HTTP/1.1" 304 -

Configurazione del sistema e i suoi files

Sotto Unix tutto e' file. Tutto il sistema viene governato attraverso una serie di file di testo che possono essere modificati quasi tutti a mano. Questi files che spesso hanno il nome nomeprogramma.conf legato al programma che li usa, si trovano quasi tutti sotto /etc/
I dispositivi di i/o sono anch'essi files (i file speciali della cartella dev). Questi hanno un codice "b" o "c" a seconda che si tratti di block o character devices. Tipici block devices sono i dischi che si possono accedere in maniera casuale, mentre i character device si accedono in maniera sequenziale.
Anche file sono considerati i socket delle "prese di comunicazione" che permettono lo scambio di informazioni tra programmi su computer diversi.
Altri esempi di file sono i crontab in /var/spool/.
Principali cartelle
/etcfile di configurazione del sistema
/sbinbinari necessari per lo startup del sistema( non hanno librerie da caricare).
/bin , /usr/bin/ , /usr/local/bin/Altri binari
/var/file di log, socket, file con variazioni quotidiane
/var/spool/crontab , spool di stampa, mailbox
/usr/src/linux/Documentation/Documentazione
File di configurazione
Startup e configurazione del kernel /etc/inittab , /etc/sysconfigtab
Runlevels /etc/rc.dPossono essere modificati dal tool grafico SYSV da control-panel
Partizioni e filesystem/etc/fstab, /proc/partitions
Devices/proc/devicesVedi anche qui
Gestione utenti/etc/passwd , /etc/group , /etc/shadow
servizi di rete /etc/hosts, /etc/networks, /etc/inetd.conf, /etc/services, /etc/protocols Possono essere modificati da control-panel
Stampanti/etc/printcapPuo' essere gestito da control-panel
Sottosistema di log /etc/logrotate.conf
/etc/logrotate.d
ssh~/.ssh/

Cups

Cups sta per Common Unix Printing System ed e' un software fornito sotto la licenza GNU per risolvere il problema della stampa su una macchina Unix/Linux. Il cuore di Cups e' un server Web tipo Apache .Potete connettervi usando la password di root e gestire stampanti e code di stampa direttamente dal Web.La documentazione la trovate su documentation.htmlDal punto di vista dell'utente esso accetta tutti i normali comandi di stampa .Questi erano serviti prima di Cups da un demone di stampa(lpd) che rispondeva ai comandi lp(System V) e lpr(Berkeley).System V e Berkeley sono due versioni storiche di Unix, ma Linux (senza Cups) usa lpr.La gestione delle code di stampa veniva fatta attraverso dei file di spool disposti nelle cartelle /var/spool/lpd.C'erano piu' code per stampante.
lpstat -p -d -o
Lista di stampanti disponibili e job di stampa in coda
lpr filename
Stampa filename sulla stampante predefinita
lpr -o landscape
lpr -o sides=two-sided-short-edge
lpr -o sides=two-sided-long-edge
lpr -o page-ranges=1-10
Stampa con opzioni varie
xpp
Richiamo di un'interfaccia grafica per facilitare la specifica di opzioni di stampa.
nets-xpp
Richiamo di Cups con interfaccia grafica in Netscape.
lprm num_job
Per cancellare un job dalla coda di stampa

C++

Essendo il linguaggio C stato creato proprio per scrivere il sistema operativo Unix, ed essendo il C++ l'evoluzione ad oggetti di C, non c'e' dubbio che il C++ sia il linguaggio per eccellenza delle macchine Unix/Linux. Il compilatore di riferimento e' quello GNU. Esso viene richiamato con gcc o g++ a seconda che si vogliano compilare programmi stile C o C++. Ma in effetti il compilatore e' unico.Purtroppo i compilatori evolvono in continuazione e le nuove versioni non sempre sono compatibili con le vecchie. Ci sono delle buone ragioni per dover cambiare ma la cosa non e' facile. Uno di questi passaggi e' quello tra egcs 2.91.66 ed egcs 2.95.2 .
gcc -v
Per conoscere la versione installata

Demoni

I demoni Unix sono i programmi fatti partire a bootstrap che rimangono poi sempre in esecuzione. Essi non sono percio' collegati a un particolare utente e terminale.Assieme costuituiscono un formidabile gruppo di geni della macchina pronti a servirci in tutte le nostre necessita'.Nell'uscita del comando ps -eaf essi compaiono subito dopo il processo init di numero 1, come processi fatti partire dal processo stesso (quindi con un 1 in terza colonna).Come sa il sistema quali demoni far partire? Come avviene in molti casi in Unix, la configurazione viene fatta aggiungendo 2 file di testo per demone con un nome speciale in una speciale cartella. Il file di testo sndemone contiene lo script di partenza, kndemone lo script di terminazione. Queste cartelle vanno create per ogni runlevel del sistema operativo. Un run level e' una delle modalita' di run che si sceglie all'inizio ed e' indicata da un numero (0:halt,1:singolo utente(si indica anche con "s"),2:multiutente senza rete, 3:multiutente con rete, 5:multiutente con rete e interfaccia frafica, 6:reboot). Ad esempio il computer prima visto stava girando in runlevel 5 e la cartella usata per i demoni era la /etc/rc.d/rc5.d/ .I demoni sono fatti partire dal processo init in ordine alfabetico dei file s*.Se volete far partire un nuovo demone basta aggiungere due nuovi files in questa cartella col nome appropriato.
Quando init fa partire un demone invia allo script la stringa "start". Quando invece lo stoppa (allo shutdown) invia la stringa "stop". Per questo spesso i 2 programmi sndemone e kndemone sono dei link allo stesso programma che reagisce opportunamente alle stringhe start e stop.Questo programma viene messo nella cartella /etc/rc.d/init.d.Ad esempio Apache fornisce lo script apachectl gia' pronto che puo essere inserito in questa directory. Dovunque poi e' necessario usare lo script si definisce con un link:
ln -s  ../init.d/apachectl S96apache  
Da root e' possibile passare da un runlevel all'altro dando il comando
init numerolivello
. Da notare che il passaggio da un livello all'altro comporta sia start che stop di servizi. Solo il passaggio al livello 0 comporta la disattivazione di tutti i servizi. Lo spegnimento del computer ottenuta col comando
shutdown -h now 
e' diverso come effetti da
init 0
in quanto provoca un kill immediato di tutti i servizi.
Possiamo definire, se lo riteniamo necessario, altri runlevel impostando opportunamente /etc/inittab e introducendo nuove cartelle rc.d.
Un demone molto particolare e' quello chiamato inetd : questo e' un "super server" collegato ai servizi TCP/IP e viene introdotto per limitare il numero di demoni in esecuzione contemporanea. In pratica se un particolare servizio sara' usato poche volte durante il giorno, e' inutile farlo partire come un demone a parte, ma lo si puo' definire come un servizio inetd. Il demone inetd fara' in modo da far partire il servizio relativo quando viene richiesto. Uno speciale file /etc/inetd.conf lista i servizi da far andare sotto inetd. Si parla percio' di demoni inetd in contrapposizione di quelli standalone.
Un altro demone particolare e' cron che provvede ad eseguire dei comandi a tempo per i singoli utenti seguendo le direttive dei file crontab dei singoli utenti.
crontab -lDato da root permette di conoscere tutti i task fatti partire periodicamente dal sistema.

find e locate

I comandi find e locate permettono di trovare ambedue dei file nelle cartelle su disco ma lavorano in maniera completamente diversa. find fa la ricerca cartella per cartella ed e' percio' lento ma i suoi risultati sono sempre corretti. locate usa un database ritornando il risultato in maniera velocissima. Ma dato che il database e' aggiornato solo una volta al giorno da un cron job che richiama l'apposito comando di aggiornamento updatedb, i suoi risultati possono essere sbagliati.
find . -type d
Lista i nomi di tutte le cartelle
find . -name "*.java"
Trova tutti i file .java a partire dalla cartella dove ci troviamoSenza gli apici puo' creare problemi.
find . -atime -2
Lista files che hanno avuto accessi negli ultimi 2 giorni
find . -ctime -2
Lista files che sono stati modificati negli ultimi 2 giorni
find $HOME -size +1000000c
Lista files di dimensione maggiore di 1M
find $HOME -size +1000000c -ls
Esegui il comando ls su tutti i files di dimensione maggiore di 1M
 find . -ctime -1 -maxdepth 1
Lista i files della directory dove ci troviamo modificati nelle ultime 24 ore.
sh -c 'find / -name access_log  2> /dev/null'
Trova l'access log di Apache Nota il 2> per eliminare tutti i messaggi di errore. Inoltre lo strano modo di scrivere il comando che altrimenti non funzionerebbe con la shell tcsh.
find -name "*.ps" -exec ps2pdf {} \;
Esegui il comando ps2pdf su tutti i file di tipo ps
locate stringaLista tutti i file e le cartelle nel cui nome compare la stringa data. Il nome di un file comprende il cammino completo.

gdb

gdb e' il debugger sotto Unix.Anche se ora ha una bellissima interfaccia grafica sotto forma del programma DDD,e' bene conoscerne almeno le principali istruzioni.Se volete usarlo dovete fare 2 cose importanti:
  1. Compilare con l'opzione -g
  2. Definire con un comando
    dir cartella1:cartella2:  cartellan
    le cartelle dove gdb deve cercare i sorgenti
Se un file dddcommand contiene questo e altri eventuali comandi iniziali, potete far partire il debugger con:
gdb -x dddcommand programma_da_debuggare
All'inizio potete dare subito il comando run in modo da far cominciare l'esecuzione. Interrompete con CTRL_C quando volete intervenire col debugger. Per riprendere l'esecuzione date il comando c(ontinue) due volte se necessario. Ed ecco le principali istruzioni:
Per inserire un breakpoint all'inizio del mainb main
Per posizionarvi sulla classe Pippol Pippo
Per posizionarvi alla funzione pluto della classe Pippol Pippo.pluto
Per andare avanti nella lista l
Per andare indietro nella lista l -
Per posizionarvi alla riga n l n
Per creare un breakpoint alla riga nb n
Per stampare una variabilep variabile
Per stampare il tipo di una variabilept variabile
Per stampare il valore di un'espressionep espressione
Per stampare n elementi di un arrayp *array@n
Per stampare l'indirizzo di una funzionep nomefunzione
Per eseguire la prossima istruziones
Per ottenere informazioni sullo stackinfo stack
Per ottenere informazioni sull'indirizzo dell'ultima istruzioneinfo register eip
Per ottenere il dump assembler di una funzione disas nomefunzione
Se si vuole esaminare un core dump usare gdb -q -c core dove core e' il nome del file contenente il core dump.

gimp

Gimp e' il Photoshop di Linux.
Grokking the GIMP libro disponibile online.

Trucchi
Correggere un'immagine usando i livelliSeleziona Image->Colors->Levels ; clicca su "Auto"
Creare l'immagine favicon.ico richiesta da IECrea un'immagine delle giuste dimensioni (32x32 pixel) e salvala in formato ppm. Poi usa ppmtowinicon per trasformarlo nel formato adatto.
Creare l'immagine speculare di un layer o una selezione Seleziona il tool flip e clicca sul layer o la selezione.
Creare la texture di un sassoCrea un nuovo layer bianco; filters->render->clouds->plasma ;image->colors->desaturate;Clicca sul tool "Fill with color" e imposta opacity:80 Mode:Multiply Threshold:190 ; Definisci il colore #ff9010;Esegui il fill; Filters->map->bump map usando lo stesso layer come "bump map"
Creare una gif animata Carica le immagini dell'animazione in differenti layer. Ordina i layer in maniera opportuna; prova l'animazione con Filters->Animation->Animation Playback ;Quando l'animazione e' Ok, Filters->Animation->Animation Optimize ; Ora clicca sull'immagine Image->Mode->Indexed (elimina il dithering); Ora procedi al salvataggio come gif selezionando "Animazione". A questo punto potete guardare l'animazione con un browser per controllarla.
Creare una selezione complessa formata da molte selezioni Procedi dalla seconda selezione in poi tenendo premuto il tasto di SHIFT. Potete anche deselezionare una parte di una selezione usando CTRL durante l'operazione.
Creare un pattern che puo' tessellare uno sfondo(1) Seleziona Image e quindi Transforms ed infine offset
Creare un pattern che puo' tessellare uno sfondo(2) Seleziona Filters->Map->Make seamless
Creare un testo colorato galleggiante sullo sfondo Crea una nuova immagine abbastanza grande da contenere il testo. Con CTRL-L fai apparire la finestra dei layer e clicca sul tasto "New layer" per creare un altro layer oltre allo sfondo. Usando il tool "Text" crea il testo e fissalo a questo layer. Ora duplica questo layer. Seleziona "New layer" e applica Filter->Blur->Gaussian sperimentando con vari valori (circa 1/10 della dimensione della fonte). Ora usa il tool "Move layers" per spostare l'ombra in modo da creare l'effetto. Infine seleziona "New Layer copy" e "Keep Trans.". A questo punto puoi usare i tool di "Fill" per colorare a piacimento il testo con un singolo colore, un gradiente o un pattern.
Dare al layer 1 la stessa forma dell'immagine del layer 2Clicca col tasto destro sul layer2(nella finestra dei layer) selezionando Alpha to Selection; Attivate l'immagine del layer 1; Select->Invert; CTRL-K
Definire un nuovo patternSalva l'immagine con l'estensione .pat e muovi nella cartella .gimp/patterns/
Dove trovo il controllo livelli e curve in gimpImage->Colors->Levels ; Image->Colors->Curves
Estrarre i colori da un'immagine per sostituirli a quelli di un'altraImage->Mode->Indexed ; Ora nella finestra "Palette" cliccate su Edit. Poi selezionate "New" poi "Import" e quindi "Indexed Palette" del'immagine da cui volete copiare i colori.Ora avete i colori da copiare in una palette. Se volete utilizzarli in un'altra immagine non dovete fare altro che trasformare l'immagine in "Indexed" (ALT-I) "Use Custom Palette" e selezionate la paletta dell'altra immagine.
Fare un foto ritoccoUsa il tool Paint using pattern or image region. Tenendo premuto "CTRL" seleziona la parte di immagine(buona) da usare nel fotoritocco. Dopodiche' usa il tool come un pennello per fare il fotoritocco. Una croce ti indica i pixel che sono copiati. Richiede un po' di addestramento manuale ma funziona ottimamente per eliminare macchie e altre imperfezioni.
Fare la gamma correction di un'immagineUsa il menu Image->Colors->Levels.Il valore di mezzo degli "Input Values" corrisponde alla Gamma correction.
Provare velocemente la colorazione con diversi gradientiSeleziona Filters, Color, Map, Gradient map. Ora clicca sul gradiente nel toolbox e dovrebbe comparire la finestra con tutti i gradienti(lo stesso effetto si ottiene con CTRL-G). Scegli un nuovo gradiente. Vai sulla figura e clicca ALT-F . Ripeti per tutti i gradineti che vuoi provare. Se un gradiente va quasi bene, clicca sopra nella finestra del gradiente e prova a modificarlo.
Rendere effettive le selezioni fatte con i tool "Select using Bezier" e "Select using shapes"Ambedue queste selezioni richiedono la scelta di una serie di punti ma non e' intuitivo cosa fare per renderle effettive. Nel primo caso: andare nella finestra dei "layers" selezionare "Path" e cliccare su "Path to selection". Nel secondo caso basta cliccare all'interno della selezione.
Rendere trasparente un colore di un'immagine Seleziona Select e quindi By Color. Clicca un punto dell'immagine del colore che interessa.Ora vai su Edit e seleziona clear
Riempire una selezione con un patternTrascina il pattern sulla selezione col tasto centrale del mouse premuto.
Ruotare un layer di un angolo arbitrario Seleziona tools e quindi Transform tools ed infine transform
Salvare e poi riprendere una selezioneDopo aver fatto la selezione: Select->Save to channel . Per riprenderla , vai nei canali e seleziona la maschera salvata. Quindi clicca sul cerchietto "Channel to Selection"
Separare un'immagine dallo sfondoUsa la "bacchetta magica" (Select contiguous regions) ,provando con diversi "tresholds" finche' facendo CTRL-X lo sfondo e solo lo sfondo scompare.
Tessellare un layer con un patternSeleziona il pattern, poi scegli il tool Fill with a color or a pattern dopo averne modificate le proprieta' in modo da usare un pattern per il fill.
Usare nell'immagine 2 i colori dell'immagine 1Seleziona immagine 2; Image->Mode->Indexed "Use CustomPalette" "New" "Import" Seleziona immagine 1.
Vedere un solo layer escludendo gli altriClicca sull'occhio tenendo il tasto SHIFT premuto.

gpg

gpg sta per Gnupg ed e' una specie di versione open source del famoso PGP(Pretty Good Privacy). Con la tecnica della coppia di chiavi (pubblica e privata), vi permette di crittare file per voi stessi o di inviare file crittati a corrispondenti. Per inviare un file crittato a un corrispondente bisogna procurarsi (importare) la sua chiave pubblica. Cosi' voi dovete esportare la vostra chiave a tutti quelli che vogliono inviare dei file.
gpg --gen-keycreare la vostra coppia di chiavi Non scordarsi la passphrase altrimenti non potrete piu' usare le vostre chiavi!
gpg --list-secret-keys
gpg --list-keys
gpg --armor --output pubkey.txt --export 'Nome Cognome'generare un file contenente la vostra chiave pubblica pronta da inviare ai vostri corrispondenti o da salvare su un supporto di backup
gpg -ao my-pgp-private.key --export-secret-keys keyid generare un file contenente la vostra chiave privata per salvarla su un supporto di backupLa keyid viene listata dal comando gpg --list-secret-keys. Una volta salvato il file su una memoria di backup, ricordarsi di cancellarlo.
gpg -e -r 'Il tuo nome' -o nomefile.gpg nomefile critta un tuo file
gpg --output nomefile --decrypt nomefile.gpgDecritta un file crittato da te stesso

Installazione di software

L'installazione di programmi con pacchetti rpm facilita di molto le cose in quanto tutto viene fatto in maniera automatica e ,attraverso un database di pacchetti, registrato per facilitare gli aggiornamenti. Invece i file tar (tarball) magari compressi, sono un modo facile per ricostruire interi alberi di file.

rpm -i nomefilerpmPer installare un pacchetto(programma)
rpm -e nomeprogrammaPer disinstallare un programma installato con rpm
rpm -U nomefilerpmPer aggiornare un programma installato con rpm
rpm -qaPer conoscere i nomi di tutti i programmi installati con rpm
rpm -qf nomefilePer sapere a quale pacchetto appartiene un file
rpm -qplR nomefilerpm per sapere da quale pacchetti dipende e quale files installera' un programma rpm
tar xfvz file.tar.gz
tar cvfz file.tar.gz nomecartella
Estrazione e creazione di tarball compressa (funziona solo su Linux).Dare come nome di cartella l'indirizzo relativo invece di quello assoluto cioe' "etc" invece di "/etc" per permettere la rilocazione dei file.
tar tvf nometarball
tar xvf nometarball
tar cvf nometarball nomecartella
Per listare,estrarre e creare una tarball. Per i nomi delle cartelle vale la stessa cosa detta sopra.

Installazione di software da Internet a partire dal sorgente

Esemplificazione con mysql:
  1. Trova su Internet il file da copiare con Netscape.Copia il link.
  2. wget http://www.mysql.com/Downloads/MySQL-3.23/mysql-3.23.36.tar.gz
  3. tar -zxvf mysql-3.23.36.tar.gz
  4. cd mysql-3.23.36
  5. ./configure --prefix=/usr/local/mysql
  6. make
  7. su
  8. make install
Se devi rifare l'installazione da 5, allora ricordati di cancellare i file creati da configure con:
rm config.cache

jdb

jdb il debugger Java.Per poterlo usare conviene compilare con
javac -g 
. Per farlo partire dare: jdb Nomeclasse invece di java Nomeclasse Ed ecco le principali istruzioni:
Per inserire un breakpoint all'inizio del main stop in Nomeclasse.main
Per inserire un breakpoint all'inizio di un metodo stop in Nomeclasse.nomemetodo
Per far partire l'esecuzionerun
Per far continuare l'esecuzionecont
Per listare le istruzioni vicino a quella in esecuzionelist
Per listare l'istruzione n e seguentilist n
Per creare un breakpoint alla riga nstop at Nomeclasse:n
Per stampare una variabileprint variabile
Per stampare tutte le variabili localilocals
Per eseguire la prossima istruzionestep
Per eseguire la prossima istruzione senza saltare all'interno di un metodonext

Librerie shared

Quando un programma e' linkato con delle librerie shared, queste non sono incluse nel modulo eseguibile, ma il programma si annota per cosi' dire quello che deve caricare e lo carica sul momento, all'atto dell'esecuzione. Questo viene fatto per evitare di avere programmi enormi in esecuzione, tutti con la propria copia delle librerie piu' comuni.
ldd nome_modulo_eseguibile
lista delle librerie shared richiamate
ls /etc/ld.so.conf
Cartelle dove avviene la ricerca delle librerie shared
printenv LD_LIBRARY_PATH
altre cartelle da ricercare

Magic pipe

Alla base di Unix c'e' l'idea di stream.L'input/output e' tutto fatto usando gli stream. Due processi possono comunicare attraverso uno stream. E' questo alla base del pipe:l'output di un processo e' attaccato attraverso un stream di dati all'input di un altro processo. A livello di comandi Unix questo si indica col carattere "|", intendendo con questo che l'output di un comando puo' essere inviato al comando successivo. Si e' realizzata cosi' una "connessione" tra i due comandi : in inglese "pipe".
Esempi di uso col file log.txt che contiene la lista degli accessi a un Web server in circa 24 ore. Esempi di uso con questo file di testo.Lista ordinata delle parole con conteggio delle stesse.
cat testo.txt | tr ' ,' '\n' | sort | uniq -c | sort -n

Altri esempi:

Monitoraggio del sistema

Versione del sistema operativo
uname -r (kernel)
Lista di CPU cores
cat /proc/cpuinfo
Hardware
/sbin/lspci -vv 
Questo documento da ulteriori spiegazioni.
Spazio e partizioni su disco
df
cfdisk 
Lista dei messaggi di boot
dmesg
Lista dei processi ps -eaf oppure ps ax(piu' veloce)
Percento risorse usate adesso e processi piu' attivi
top
Esempio di output
Uso memoria virtuale
vmstat 1
Connessioni di rete aperte in questo momento
netstat
netstat -na |grep -i listen
netstat -na |grep -i established
Il secondo comando ci dice quali demoni stanno ascoltando alle varie porte, il terzo quali connessioni con l'esterno sono aperte in questo momento
Pacchetti che passano dalla scheda di rete
tcpdump
tcpdump -n
Col secondo comando si evitano i paccheti generati da tcpdump stesso per trasformare i numeri tcp/ip in nomi
Stato rete
ping -f nomecomputer
Indirizzo IP e traffico di rete
/sbin/ifconfig
Files e connessioni (socket) aperte adesso
lsof
fuser -v .
Monitoraggio con SNMPProgramma MRTG Multi Router Traffic GrapherEsempio di report
Lista utenti collegatiwho o w:quest'ultimo da' piu' informazioni.
last -100 da la storia degli ultimi 100 collegamenti
Dimensione dell'albero a partire da una cartella du -ks nomecartella
Traffico NFS nfsstat -n -c -i 1
Ultimi messaggi di sistema
tail -f /var/log/messages
Messaggi su tutti i log di sistema /var/log/
Librerie e programmi installatirpm -qaLinux Red Hat
Sono stato bucato?
chkrootkit
Vedi qui per l'installazione. Da fare ogni settimana.Disponibile localmente su /afs/caspur.it/project/sec/unix/

MySQL

groupadd mysql
useradd -g mysql mysql
Aggiungiamo un utente mysql per far girare il database da un utente non privilegiato.
./configure --prefix=/usr/local/mysql
make
su
make install
scripts/mysql_install_db
chown -R mysql.mysql /usr/local/mysql
Installazione di MySQL
/usr/local/bin/safe_mysqld --user=mysql &
Far partire il data base
cp support-files/mysql.server /etc/init.d
ln -s /etc/init.d/mysql.server /etc/rc.d/rc3.d/s99mysql
ln -s /etc/init.d/mysql.server /etc/rc.d/rc0.d/s01mysql
Inclusione di mysql tra i processi da far partire a bootstrap e far terminare a shutdown
/usr/local/mysql/bin/mysql -uroot -p mysql
GRANT ALL PRIVILEGES ON Persone.* TO pippo@localhost
  IDENTIFIED BY 'password'; 
Crea un utente pippo con tutti i privilegi sul database Persone
Alla fine dare
/usr/local/mysql/bin/mysqladmin -uroot -p  reload 
per aggiornare le impostazioni del database in esecuzione.
/usr/local/mysql/bin/mysql -uroot -p mysql
GRANT SELECT,UPDATE ON Persone.* TO pluto@localhost
  IDENTIFIED BY 'password'; 
Crea un utente pluto con i soli privilegi di Select e Update sul database Persone
Alla fine dare
/usr/local/mysql/bin/mysqladmin -uroot -p  reload 
per aggiornare le impostazioni del database in esecuzione.
/usr/local/mysql/bin/mysql -uroot -p mysql
DELETE FROM mysql.user WHERE User = 'pluto';
  FLUSH PRIVILEGES;
Cancella l'utente pluto
/usr/local/mysql/bin/mysqladmin -uroot -p create Persone
Crea il database Persone
telnet nomecomputer 3306
Per conoscere la versione di MySQL in uso
Monitoraggio MySql
Quanti e quali databases?show databases;
/user/local/mysql/bin/mysqlshow -uroot -p
Dimensioni dei databases?ls -lR /user/local/mysql/data/ | more
du -k /user/local/mysql/data | sort -r -n | less
status/user/local/mysql/bin/mysqladmin -uroot -p version
status
extended-status
variables
show status;
Messaggi di erroretail -f /user/local/mysql/data/al1.ba.infn.it.err
Quante tabelle sono aperte e a quali database appartengono? /user/local/mysql/bin/mysqlshow -uroot -p status da il numero di tabelle aperte e il numero di threads
/user/local/mysql/bin/mysqlshow -uroot -p processlist da la lista dei processi con i database che ognuno di essi gestisce . Le ultime query sono state fatte ai database con time di sleep piu' basso.
Numero di queries al secondo /user/local/mysql/bin/mysqlshow -uroot -p status calcola questions/uptime
Monitoraggio minimo continuo tipo topProvate a far girare questo script shell, dovreste ottenere ogni 10 secondi questa schermata

Pine

Copiare tutti i messaggi di inbox nella cartella "saved-messages" Selezionali tutti con ; quindi A. Scrivi A S e seleziona la cartella di destinazione.
Eliminare i famigerati messaggi Sircam Hi ...Aggiungi in Setup Rules la regola testo="Hi .."
Eliminare tutti i messaggi marcati con D Usa il comando eXpunge
Impostare un viewer per application/pincopallino edita ~/.mailcap aggiungendo
application/pincopallino;/path/viewer %s
Far partire pine in modo che mostri all'inizio subito i messaggi nella INBOX pine -i

procmail

File di configurazione .procmailrc
monitorare il filtraggio di spam tail -n 20 -f pmlog
procmail recipe per eliminare mail con una frase data nel messaggio
:0B:
* ()\<hr size="1" noshade> 
/dev/null
Notate l'uso di () come escape character di <
Statistiche senza modificare il logmailstat -k pmlog
Statistiche e azzeramento del log previa copia su pmlog.oldmailstat pmlog

PROCMAIL QUICK START

Python

Python puo' essere considerato come il "Basic" dei sistemi Linux, considerando la sua relativa facilita' e la sua interattivita'. Scrivete python e il linguaggio e' pronto a eseguire i vostri comandi. Potete cosi' divertirvi a scrivere e vedere immediatamente eseguiti tutti i vostri comandi. Oppure potete memorizzare una sequenza di comandi in un file pippo.py e poi farlo eseguire scrivendo python pippo.py.Meglio ancora potete creare dei moduli contenenti definizioni di nuovi comandi e poi richiamarli con l'istruzione import nomemodulo. Il Phyton tutorial da' molti esempi da tentare per entrare nel linguaggio. Ma la potenza dello stesso e' dovuta alla libreria di moduli gia' pronti da usare.
ComandoAzione prodotta dal comandoAnnotazioni
import moduleImporta il modulo indicatoIl nome del file contenente il modulo deve terminare con .py
dir(modulo)Lista tutte le definizioni presenti in un modulo importatodir() ritorna tutte le definizioni nel modulo nel quale ci troviamo
from module import lista di nomi separati da virgolaImporta le definizioni dal modulo indicatoI nomi indicati (definiti nel modulo) possono essere usati senza bisogno di usare la notazione modulo.nome. E' possibile usare * per importare tutte le definizioni.
Ctrl+DUscire da phyton

Trucchi
indicare a python da quale directory caricare una nuova libreria setenv PYTHONPATH directory
oppure aggiungere subito dopo import sys
sys.path.append(directory)
processare la lista dei file di tipo jpg in una directory creando un file xml con una riga per ogni file
find -name "*.jpg" | python createxml.py
Definire lo script python createxml in questo modo:
import mimetypes
import os.path
import sys
for line in sys.stdin:
        filename = os.path.normpath(line[:-1])
	if filename == '.' or not os.path.isfile(filename):
	   continue # Skip this, because it's not a file.
	print "<image url=\""+filename+"\" title=\""+filename+"\"/>"
	

Regexp,Regular Expression, Espressioni Regolari : mini tutorial

Non potete dire di conoscere Unix se non sapete scrivere le famigerate regexp che vengono usate un po' dappertutto.
Una prima considerazione:una regexp e' un programma completo nonostante la sua brevita'.Dovete percio' affrontarla come si affronta un programma:dovete svilupparla e testarla passo a passo.
Cosa fa' "un programma regexp" ? Lavora su un testo sul quale puo' fare 3 cose:
  1. Ritrovare tutte le configurazioni di un certo tipo(pattern match in inglese)
  2. Estrarre tutti i pattern ritrovati in un testo
  3. Sostituire un pattern con un'altro
Le operazioni 1 e 2 vengono fatte contemporaneamente col comando:
/regexp/
L'operazione 3 con
s/regexp1/regexp2/
La stringa di testo su cui lavora la regexp dipende dal contesto e cosi' le variabili che contengono le stringhe estratte. Ad esempio in Perl si puo' caricare nella variabile $_ la stringa su cui lavorare, estrarre con
$quanti=/regexp/
0 o piu' stringhe il cui numero e' ritornato da $quanti e il cui valore e' tornato da $1 $2 ...
In vi
s/regexp1/regexp2/
agisce sulla riga corrente. Le strighe estratte sono contenute in \1 \2 ... Se invece scriviamo
%s/regexp1/regexp2/g
possiamo agire su tutto il file.
Ma procediamo con ordine ...
La piu' semplice regexp consiste nello scrivere la stringa da confrontare:
s/pippo/pluto/
sostituisce "pluto" a "pippo". Ma attenzione! Anche a questo livello c'e' una piccola complessita':la stringa non puo' contenere i 14 caratteri riservati in Perl(metacaratteri) ^ $ . + \ [ ] * ? | { } ( )
Se intendete scrivere proprio questi caratteri, allora dovete precederli con \ : ad esempio /pippo\.com/ Ed ecco il significato dei metacaratteri:
metacaratteresignificatoesempiocommenti
.ogni carattere eccetto \n
\dogni carattere numerico
\Dogni carattere non numerico
[ ]ogni carattere incluso nelle parentesi
[^ ]ogni carattere non incluso nelle parentesi
[ - ]ogni carattere nell'intervallo
*zero o piu ripetizioni del carattere precedente
+uno o piu ripetizioni del carattere precedente
?zero o uno ripetizioni del carattere precedente
{n}n ripetizioni
{n,}n o piu' ripetizioni
{n,m}n o piu' ripetizioni con un massimo di m
^posizione inizio della stringa
$posizione fine della stringa
|la regexp precedente oppure la regexp seguente
(regexp )la regexp puo' essere trattata come un unico carattere Le parentesi tonde permettono anche di estrarre una parte del pattern. Questa viene assegnata alle variabili $1 , $2 ,
Per chi conosce la sintassi dei linguaggi di programmazione, esiste una definizione rigorosa di regexp.
  1. Una regexp e' una serie di "rami" separati dall'operatore | di alternativa.
  2. Un ramo e' uno o piu' "pezzi" concatenati.
  3. Un pezzo e' un atomo seguito da un indicatore di ripetizione
  4. Un atomo e' un singolo carattere oppure una regexp racchiusa tra parentesi tonde oppure un pattern estratto da una (regexp) precedente.

Il modo migliore per riuscire a trovare la regexp che risolve il vostro problema e' di sperimentare con un programma come vi ,sed o egrep provando diverse formule sempre piu' complesse finche' non avete trovato quella che fa al caso vostro. A quel punto potete copiarla nel programma Perl o altro dove vi serve.Attenzione pero': tra le varie implementazioni ci sono piccole differenze.Ad esempio in vi i metacaratteri sono solo ] ^ $ } , gli altri caratteri vanno scritti con \ davanti.
Esempio Trovare la regexp che permette di estrarre da un file di URL di ricerche fatte con vari motori,le parole chiavi usate nelle ricerche.
Cominciamo con google che si presenta in questo modo:
9 2 103 22 9 5  host215-252.pool212171.interbusiness.it 212.171.252.215  3796http://www.google.it/search?hl=it&ie=UTF-8&oe=UTF-8&q=salvare database mysql asp&btnG=Cerca con Google&lr=lang_it http://www.ba.infn.it/~zito/corso/webdata.html 
Smanettando con vi troviamo che:
s/q=[^&]*&/bingo/
funziona.Ora passiamo a righe del tipo:
9 2 103 22 21 1  dt0b2nc0.tampabay.rr.com 24.92.28.192  799http://search.yahoo.com/search?p=method of Loci http://www.ba.infn.it/~zito/loci.html
s/p=.*http/p=bingohttp/
Cosi' scopriamo che abbiamo bisogno di:
s/qs=[^&]*&/bingo/
per le query su Virgilio.Di
s/key=[^&]*&/bingo/
per Tiscali. A questo punto ci siamo quasi:dobbiamo combinare le varie alternative in un'unica regexp e possiamo cominciare a provare con un programma Perl:
$quanti=/(qs|key|q|p)=[^&]*(&|http)/; 
Ora non ci resta che estrarre le parole chiavi inserendo un ulteriore gruppo di parentesi tonde:
/(qs|key|q|p)=([^&]*)(&|http)/
Il programma completo Perl e' il seguente:
#!/usr/bin/perl
$guestbook = "/home/zito/temp/source/filexp.txt";
open (IN, $guestbook) || die "Can't open $guestbook";
@content = <IN>
close (IN);
$numvis = @content;
$count = 0;
while($count < $numvis) {
   $entry = @content[$count];
   $_=$entry;
   $quanti=/(qs|key|q|p)=([^&]*)(&|http)/;
        if($quanti>0){print "$2\n";}
   $count++;
   }
# end      
e produce questo risultato.

Questo file contiene altri esempi di uso di espressioni regolari con vi e sed.

Altri regexp tutorial vi spiegano il significato di tutti i caratteri speciali.

Cosa vogliamoregexp
Per mettere entro doppi apici un URL
s/href=\([^>]*\)>/href="\1">/

Setuid Binaries

Un binario setuid si comporta in maniera molto diversa di un normale binario.Se voi, utente pippo eseguite un normale programma, allora il programma esegue con i vostri privilegi, anche se magari il file appartiene a root. Invece un programma marcato setuid dal proprietario vi permette di eseguirlo coi privilegi del proprietario (cio' che significa quasi sempre privilegi di root). Si capisce perche' questi programmi sono molto ricercati dagli hacker. Un esempio tipico e' su marcato come setuid dall'owner root.
chmod 6755 filename
fa diventare setuid il programma contenuto in filename
find / -perm -4000
Quali programmi setuid ci sono nel sistema

Le shell

Quando si danno dei comandi in un terminale, i comandi vengono interpretati da un particolare programma detto shell.Il problema e' che esistono molte shell e ci sono alcune sottili differenze nel modo come trattano i comandi. Inoltre se scriviamo una sequenza di comandi da fare eseguire da un file (programmiamo la shell) , la programmazione e' differente a seconda della shell. Per scoprire quale shell state usando date il comando:
echo $SHELL
. Per sapere quali shell sono disponibili date il comando:
cat /etc/shells
/bin/bash /bin/sh /bin/ash /bin/bsh /bin/ksh /bin/tcsh /bin/csh /usr/bin/csh /usr/bin/ksh /usr/bin/rsh /usr/bin/sh /usr/local/bin/bash /usr/local/bin/tcsh /usr/local/bin/zsh
Per cambiare shell di login bisogna invece usare il comand chsh dando una delle shell disponibili.Se volete cambiare shell solo temporaneamente, allora basta dare il nome della shell. Per tornare alla shell precedente basta dare il comando exit.
Le shell si dividono in 2 gruppi principali:shell compatibili Bourne(bash) e shell compatibili csh.Per quanto le shell abbiano molti comandi in comune, ci sono alcuni comandi che sono differenti. Ad esempio rehash e' un comando di csh e non e' disponibile su shell bash.
Tutte le shell eseguono all'inizio i comandi presenti in un particolare file, che potete usare per personalizzare l'uso del computer. Questi file di login sono di solito nella cartella principale ma dato che cominciano col carattere "." possono essere visti solo col comando ls -a. Ad esempio la shell tcsh puo' essere personalizzata col file .tcshrc .

Utenti e la loro gestione

I sistemi Unix sono multiutente e questo ha conseguenze anche nel caso che voi siate l'unico utente della macchina. Dovete per forza conoscere come e' fatta la gestione utenti.
Tutto si basa su 2 file di configurazione /etc/passwd e /etc/group che potete anche editare a mano. Il concetto base e' che avete un certo numero di utenti divisi in vari gruppi. Un utente puo' anche appartenere a piu' gruppi anche se appartiene a un unico gruppo primario. Un gruppo d'altra parte puo' anche avere zero utenti (a parte l'utente root che di diritto fa parte di tutti i gruppi).In generale l'appartenenza a un gruppo indica il fatto di avere certi privilegi. Ogni utente e' identificato da un numero univoco uid e ogni gruppo da un gid. Nel file passwd vengono incluse le informazioni essenziali per ogni utente inclusa la password crittata (a meno di non usare il sistema di sicurezza avanzato detto C2 che raggruppa le password nel file shadow accessibile solo al root).
Nel file group viene indicata tra l'altro l'informazione che un utente appartiene a piu' gruppi(in passwd compare il solo gruppo primario).
Il root,come si e' detto ,appartiene a ogni gruppo avendo tutti i privilegi (ed usando il comando su nomeutente puo' camuffarsi da qualsiasi utente). In generale, a piu' gruppi un utente appartiene, piu' privilegi esso ha. Cioe' i privilegi sono stabiliti in maniera implicita come somma delle risorse accessibili attraverso i gruppi di cui si fa parte. La necessita' di creare tanti gruppi, deriva da questioni di protezione del sistema:se ci fosse solo un utente root allora sarebbe facile sia per un hacker che per lo stesso proprietario , fare dei grossi danni.

L'utente root

L'utente root ha tutti i privilegi e come tale puo' combinare maggiori danni al computer.Per questo e' preferibile lavorare normalmente come utente normale e passare nello stato di superutente solo quando e' necessario. Come esempio di danni e' l'esecuzione di un
rm *
da root in una cartella di sistema che porterebbe a una distruzione di file importanti. Un'altro pericolo e' legato al fatto di usare dei comandi modificati da hacker che possono produrre ,se siete come root, risultati catastrofici. Per lo stesso motivo e' pericoloso mandare in esecuzione programmi come un server Web con i privilegi di root. Infatti Apache subito dopo la partenza fa eseguire tutti i propri processi come un utente nobody senza particolare privilegi per evitare problemi.
su -
diventa utente root passando nella home directory di root

Trucchi

Come fare per ...
Accedere ai caratteri che non sono sulla vostra tastiera Aggiungete nella vostra home directory al file .Xmodmap le righe:
keycode 117 = Mode_switch
add Mod3 = Mode_switch
(il 117 deve riferirsi a un tasto non usato come quello di Windows) Ora date il comando
xmodmap ~/.Xmodmap 
Premendo contemporaneamente il tasto prescelto con altri tasti si accedono ad altri caratteri della fonte che si sta usando
Provate anche a usare "AltGr" con un altro tasto
Avere una lista di tutte le pagine man disponibilixman
Conoscere le fonti e i caratteri disponibilixfontsel
Conoscere il codice corrispondente a un tasto xev
Come avere l'output di un comando sia rediretto su un file che sulla consollels-l |tee temp.lis
Copiare un file conservando i permessicp -p
Copiare con scp un'intero albero di cartellescp -r user@computer:percorso_cartella_radice nome_cartella_destinazione/
Copiare tutti i gif da una cartella Web wget -r -l1 --no-parent -A.gif url_cartella
Dare la priorita' minima a un job che consuma molta memoria renice 19 -p pid
Debuggare un programma Esegui la compilazione del programma con l'opzione -g . Dopo mandato in esecuzione trova il pid del programma e dai l'istruzione
gdb /cammino/programma pid
Disegnare un grafo come questo Esegui il seguente programma perl col comando
./grafo.pl | neato -Tgif -Gcenter -Gsize="6,6" -o grafo.gif
Viene usato graphvis col suo linguaggio di descrizione grafi..
Eseguire un comando su un computer remoto senza allocarsirsh nome computer comando
ssh nomecomputer comando
Eseguire un modulo eseguibile che richiede delle librerie shared senza installare le librerie Usa lo shell wrap-exec per preparare un tar-gz con tutti i file. Copia questo file e quindi dopo averlo decompresso esegui il wrapper (con lo stesso nome del programma originario) che richiama tutte le librerie shared copiate tutte nella stessa cartella.
Fare un diagramma Usa il programma dia
Fare una pagina html con un indice visuale di tutte le immagini contenute in una cartella
montage -geometry 120x120+10+10 -tile 5x100 -background white -label %f *.jpg dir.html
Far partire un programma con la priorita' minima nice +19 comando_che_fa_partire_il_programma
Far ripartire la stampa che sembra bloccata Da root dare lpc quindi status , stop nomecodastampa, start nome codastampa, status
talvolta e' necessario dare abort nomecodastampa invece di stop codastampa
Far scorrere l'output in una finestra terminale senza ricorrere al cursore e al mouse Usa i tasti CTRL+Pageup e CTRL+Pagedown
Far riconoscere i tasti cursore in una finestra set -o emacs or setenv TERM xterm
Fare una copia di una finestra in formato png import ciccio.png
Guardare il contenuto di un documento che Mozilla vuole downloadareScegli come applicazione per leggere il documento /usr/bin/emacs
Installare plugin in MozillaMozilla va fatto partire da root altrimenti la procedura automatica non funziona
Leggere il contenuto di un file .man man nome_del_file
Modificare una stringa in piu' file sed -i "s/pcba10.ba.infn.it\/images/s3.amazonaws.com\/zgfractals/g" frame*.html
Montare un cdrom mount -t auto /dev/cdrom /mnt/cdrom come root.
Ricordati di dare umount /mnt/cdrom
Montare un dischetto msdos mount -t vfat /dev/fd0 /mnt/floppy come root.
Ricordati di dare umount /mnt/floppy e se dice che il device e' busy fare il cd su una cartella diversa di
Permettere un core dump di dimensioni qualsiasi ulimit -c unlimited (comando bash)
Montare una chiave usb Come root crea la cartella /mnt/usbkey. Prova a montare la chiave su /dev/sda1 col comando mount -t vfat /dev/sda1 /mnt/usbkey. Se non funziona riprova con sdb1,sdc1,... fino a trovare quello che funziona. Ora aggiungi a /etc/fstab la riga
/dev/sda1               /mnt/usbkey             vfat user,rw,noauto,umask=0 0 0
Ora come un normale utente puoi montare/smontare la chiave usb con mount/umount /mnt/usbkey
Permettere un core dump di dimensioni qualsiasi ulimit -c unlimited (comando bash)
Preparare un poster da un postscriptScaricare poster e dopo averlo installato con make dare il comando:
 poster -v -iA4 -mA4 -pA0 input.ps > output.ps
(questo comando produce un poster A0 a partire da un A4 suddividendolo in piu' fogli A4)
Recuperare i plugins della vecchia installazione di Mozilla quando si installa quella nuova Provate a copiare tutti i files nella cartella plugins della vecchia nella cartella plugins della nuova. Provate i plugins per vedere se funzionano ancora. Se non funzionano cancellate il file. Questa tecnica di sicuro non funziona con Java run time "javaplugin_oji.so". In questo caso localizzate il file (con "locate javaplugin_oji.so") e poi fate un link (dopo esservi posizionati nella cartella dei plugin) con: ln -s /cammino_del_runtime_java/libjavaplugin_oji.so .
Rinominare tutti i files di una cartella Usa il comando rename Ad esempio:
rename .svg .xml tmap*.svg
cambia l'estensione di tutti i file indicati nell'ultimo argomento da svg a xml
Ripartire senza X-server Ci sono vari modi:
- edita /etc/inittab sostituendo
id:3:initdefault
al posto di
id:5:initdefault
- Quando Lilo chiede cosa scegliete scrivere:
linux init 3
- CTRL_ALT_F1
Sapere dove va caricato l'indirizzo per sfruttare un buffer overflow
./buffo `perl -e 'print "A"x28 . "\x78\x56\x34\x12";'`
Sposta la stringa "12345678" finche' non corrisponde all'indirizzo eip.Il controllo va fatto con gdb sul core dump.
Sapere quali job sono in attesa di stampa per una data stampante remotalpq -Pstampante
Scaricare tutti i file di una cartella accessibile via Web dare il comando wget -r url_della_cartella (perche' la cosa funzioni dando l'url della cartella nel browser si deve ottenere la lista dei file)
Spostare un programma in background CTRL-Z e quindi fg
Trasformare un latex in ps latex file.tex
dvips -o file.ps file
Trovare le cartelle che occupano piu' spazio su discodu -k nomecartellaprincipale|sort -r -n|less
Unzippare e starare un file conservando il file compresso originario e senza creare file intermedigunzip < file.tar.gz | tar xvf -
wget di un documento con un url complesso in un file dal nome semplicewget "url complesso" -O nomefile
Zippare i files di una cartella nel formato accessibile con winzip sotto Windowszip archivio.zip *

Variabili ambiente(environment variable)

Si tratta di variabili il cui valore descrive l'ambiente di lavoro.Queste variabili sono impostate durante il login e il loro valore pilota tutti i programmi usati. I due tipi di shell hanno 2 files differenti per impostare queste variabili: .login per le shell C e .bash_profile per shell bash(questi 2 file di avvio sono eseguiti solo a login).Invece ogni volta che si apre una nuova finestra vengono eseguiti i file di avvio .cshrc per shell C e .bashrc per l'altro gruppo di shell.
Inoltre una delle differenze tra le due famiglie di shell e' proprio nei comandi che impostano/annullano la definizione di una variabile ambiente:
 CSH:  setenv name value
 BASH: export name=value
 
 CSH:  unsetenv name
 BASH: unset name
echo $nome
Per sapere il valore della variabile nome
printenv
Per sapere il valore di tutte le variabili
setenv PATH /usr/xxx:$PATH
Per aggiungere una nuova cartella a PATH
setenv LD_LIBRARY_PATH ${LD_LIBRARY_PATH}:/lib/ssa/
Aggiungere una nuova cartella dove cercare librerie shared

vim

Modificare la stringa xxx in yyy in tutto il testo:%s/xxx/yyy/g
Cancellare tutte le righe contenenti xxx:g /xxx/d
Esegui il comando cmd su tutte le righe che soddisfano address:g address cmdAddress puo' essere % n1,n2 . n $ n1-n n1+n /stringa/ ?stringa?
Cancella tutti i caratteri fino al prossimo carattere apice
d/'
modifica tutti i caratteri fino al prossimo carattere apice
s/'
modifica tutti i caratteri fino alla fine riga
C
cancella tutti i caratteri fino alla fine riga
D
Lista tutte le opzioni per ex
:set all
Lista le opzioni impostate per ex
:set 
Lista il file con i numeri di riga
:set number
set nonumber
tornera' alla modalita' senza numeri di riga
Sapere il numero della riga del cursoreCONTROL_g
Cancella le righe da n1 a n2
:n1,n2 d
Copia le righe da n1 a n2 dopo n3
:n1,n2 m n3
Trasferisci le righe da n1 a n2 dopo n3
:n1,n2 t n3
Sostituisci ogni numero di una o piu' cifre con un "uguale" davanti con la stringa "numero"
:%s/=[0-9][0-9]*/numero/g
Elimina il carattere CONTROL_M alla fine di ogni riga:%s/CONTROL_VCONTROL_M$//Per scrivere CONTROL_M bisogna dare prima CONTROL_V (dice a vi di prendere il carattere che segue cosi' com'e')
Lista tutte le assegnazioni di comandi a caratteri
map
Esegui il comando 16dw su tutte le righe
g/pat/normal 16dw
Provate queste ricerche sul file log.txt
ricerca tutti i numeri(senza punto)
/[0-9][0-9]*
* indica 0 o piu ripetizioni di cifra
ricerca numeri tcp-ip
/[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\
ricerca richieste al server diverse da GET
/+0100] "[A-F,H-Z]

Creazione di un file di comandi SQL a partire dal file esportato da un database.
:%s/'/''/g
Converti gli apici duplicandoli.
:%s/TAB/,'/
Converti il primo tab nei caratteri ,'TAB si scrive premendo il tasto TAB
:%s/TAB/ /
Sostituisci il secondo TAB con uno spazio
:%s/TAB/','/
:%s/TAB/','/
:%s/^\(.*\)/INSERT INTO autore VALUES(\1');/
Completa l'istruzione SQLNotare il copia incolla di tutta la riga \(.*\)
:%s/''/NULL/g
Trasforma in NULL i campi vuoti.

Il file .exrc

Il file .exrc va messo nella home directory ed e' il file di configurazione di vi. Esempio.Quando si da' il comando z tutti gli indirizzi http:// etc seguiti da un apice(') sono cancellati. La sintassi del comando map e' semplice
map carattere comando
ma la sua scrittura nel file .exrc va fatta in una maniera non ovvia: nel nostro caso comando=:s/http.*'/'/; nel file .exrc bisogna scrivere:
map z :s/http.*'/'/ctrlV CR
(Cioe' gli ultimi due caratteri devono essere control+V e CarriageReturn )

Trucchi
Come editare piu' file di seguito senza uscire da vimPer passare da un file all'altro usare edit nuovofile

X server

Tra i vari demoni (programmi che girano in continuazione) di un sistema Unix/Linux grande importanza ha l'X server in quanto permette l'esecuzione di programmi con interfaccia grafica su computer remoti che inviano all'X server informazioni per disegnare la stessa interfaccia.La variabile ambiente DISPLAY indica il nome del computer remoto. Di solito i programmi grafici vengono fatti partire da una finestra di testo creata connettendosi con telnet al computer remoto.
Sui sistemi Linux l'X server e' di solito uno di quelli forniti da XFree86 e il file di configurazione si trova su /etc/X11/XF86Config. Il nome tradizionale del server e' "X" ma di solito questo nome e' linkato al server vero e proprio che si trova in /usr/bin/X11. Ecco un esempio di file di configurazione per far vedere 2 monitor come un'unico monitor sfruttando le possibilita' offerte da TwinView della scheda grafica Nvidia.
xhost +computer
Autorizza computer a inviare grafica al server x
xhost +localhost
Autorizza il server ad accettare grafica da localhost(ad es. finestre aperte da altri utenti che devono dare il comando:
setenv DISPLAY :0.0
xdpyinfo
Stampa le caratteristiche dell'X server del computer indicato dalla variabile ambiente DISPLAY come quello a cui verranno inviati le direttive grafiche.
X -showconfig
X -probeonly
Comandi da usare per trovare la causa di cattivo funzionamento di schede video e monitor.Servono per avere informazioni sul server X usato e sui parametri di scheda video e monitor.
vi /etc/X11/XF86Configfile da editare per cambiare le impostazioni di scheda grafica e monitor.
ln -s /usr/X11R6/bin/XF86_SVGA /usr/X11R6/bin/XPer poter usare il nome generico "X" per richiamare invece "XF86_SVGA"
Bibliografia
Page author Giuseppe Zito: info@zitogiuseppe.com
Last update: