Questo script, se opportunamente adattato al proprio ambiente di lavoro, può essere utile per effettuare il backup su un disco esterno USB (o su un altro dispositivo). Lo script oltre ad effettuare il backup incrementale con rsync verifica che il disco USB sia montato e scrive un file di log con le attività effettuate.
#!/bin/bash SORGENTE="/home/max" # Cosa copiare TARGET="/media/backup" # Dove copiare EXCLUDE="/home/max/.rsync/exclude" # Lista file da escludere TAG="backup" # tag dei log scritti in /var/log/messages # VERIFICA CHE IL DISCO E' MONTATO MOUNTED=$(df | grep $TARGET |awk '{print $6}') if [ "$MOUNTED" == "$TARGET" ] then echo "Il disco è montato: eseguo il backup" logger Inizio backup di $SORGENTE per `hostname` -t $TAG rsync -av --exclude-from=$EXCLUDE $SORGENTE $TARGET/ RSYNCERR=$? logger Fine backup per `hostname` rsync ha restituito $RSYNCERR -t $TAG exit 0 else echo "Il disco non è montato" logger Impossibile eseguire il backup di `hostname` disco non montato -t $TAG exit 1 fi
Git è un sistema di controllo di versione distribuito ideato da Linus Torvalds. Il progetto di Git è la sintesi dell’esperienza di Torvalds nel mantenere un grande progetto di sviluppo distribuito, della sua intima conoscenza delle prestazioni del file system, e di un bisogno urgente di produrre un sistema soddisfacente in poco tempoDa Wikipedia:Git_(software) licenza Creative Commons Attribuzione-Condividi allo stesso modo..
A differenza degli altri VCS (Subversion e compagnia), git considera i propri dati più come una serie di istantanee (snapshot) di un mini filesystem. Ogni volta che si fa un commit, o si salva lo stato del proprio progetto in Git, esso fondamentalmente fa un’immagine di tutti i file in quel momento, salvando un riferimento allo snapshot. La maggior parte delle operazioni in Git, necessitano solo di file e risorse locali per operare. Qualsiasi cosa in Git è controllata, tramite checksum, prima di essere salvata ed è referenziata da un checksum. Questo significa che è impossibile cambiare il contenuto di qualsiasi file o directory senza che Git lo sappiaSintesi da Pro Git licenza Creative Commons Attribuzione-Non commerciale-Condividi allo stesso modo.
Per prima cosa creiamo un progetto di prova. Creiamo la cartella foo all’interno della quale mettiamo 3 file: file1, file2, file3. Spostiamoci nella cartella foo e lanciamo il comando:
git init
In questo modo git viene inizializzato e viene creata la cartella .git che conterrà tutto quello che serve a git per funzionare e per gestire il tuo progetto.
foo |-- file1 |-- file2 |-- file3 `-- .git |-- |--
La prima cosa da fare è configurare git. Possiamo decidere di configurare alcune opzioni in modo globale affinché siano disponibili per tutti i nostri progetti git conservandone altre solo per i progetti locali. Ecco di seguito le principali configurazioni.
Eventualmente l’opzione –global può essere aggiunta anche alle variabili user.nome e user.email per fare in modo che siano valide a livello globale.
Lanciando git senza opzioni otteniamo la lista dei comandi di git. Il manuale di ciascun comando può essere richiamato con
man git-[nome_comando]
Lanciamo il comando
git add .
per aggiungere tutto il progetto sotto il controllo di git, poi iniziamo a fare alcune modifiche ai file. Di seguito puoi trovare i comandi base per “salvare” queste modifiche con un commit e per studiare i log.
Vengono di seguito riportati i comandi fondamentali di gitSu Debian l’auto completamento dei comandi di git è disabilitato. Per abilitarlo seguire la guida Abilitare auto completamento delle opzioni dei comandi
{{#ev:youtube|TJ1gNpcXWo0|560}}
{{#ev:youtube|t8twA6HBAGE|560}}
{{#ev:youtube|cneIZsngU0I|560}}
{{#ev:youtube|vcuuIRYE2Jc|560}}
{{#ev:youtube|mXYSviPZ8tg|560}}
]]>Quella che riportata di seguito è uno procedura testata su Ubuntu 9.04 a 64bit.
Poichè sarà necessario installare software a 32 bit su un sistema a 64, per prima cosa installiamo installiamo le librerie di compatibilità necessarie:
sudo apt-get install ia32-libs
Successivamente scarichiamo il LightScribe System Software package “deb package” e forziamo l’installazione sulla nostra architettura:
sudo dpkg --install --force-architecture lightscribe-1.18.8.1-linux-2.6-intel.deb
Scarichiamo ed installiamo anche il LightScribe Simple Application “deb package”:
sudo dpkg --install --force-architecture lightscribeApplications-1.18.6.1-linux-2.6-intel.deb
e il LaCie 4L Labeler utility “deb package”
sudo dpkg --install --force-architecture 4l_1.0-r6_i386.deb
Ora abbiamo tutto il software necessario per stampare i nostri cd LightScribe. Lanciando il comando 4L-gui verrà infatti eseguita l’utilitì della LaCie.
Per creare un layout grafico professionale potete affidarvi al software di grafica vettoriale Inkscape con il quale è possibile impaginare e creare una grafica del cd di sicuro effetto. Di seguito trovate un template pre-impostato con i limiti di stampa del disco LightScribe che potete usare con Inkscape.
Una volta realizzata la grafica in Inkscape, non dovete fare altro che esportare un bitmap da importare in 4L-gui per la stampa del cd.
]]>Questa guida non ha lo scopo di farvi diventare degli esperti di vim, ma di insegnarvi i comandi fondamentali per poter modificare documenti di testo o files di configurazione.
Per aprire vim basta aprire un terminale, scrivere vim seguito dal nome del file che si intende editare.
$ vim /home/max/testo.txt
Questo comando aprirà il file /home/max/testo.txt con l’editor vim. Se il file non è presente verrà creato al primo salvataggio di vim.
All’apertura del documento vim è in command mode. Se si vuole editarlo è necessario passare all’insert mode premendo il tasto i. A questo punto possiamo editare il file come in un normale editor testuale, con la differenza che non potremo usare il mouse. Per muovere il cursore all’interno del documento in insert mode possiamo usare le frecce.
Una volta modificato il documento, per salvarlo dobbiamo tornare in command mode.
Premiamo il tasto ESC. Tutti i comandi di vim, ad eccezione dei comandi di navigazione all’interno del documento, sono preceduti da due punti (:). Il comando viene scritto nella parte bassa del terminale e viene eseguito quando si preme invio.
Per salvare il documento, dopo aver premuto ESC, scriviamo:
:w
Premiamo invio e il documento sarà salvato.
Se intendiamo fare altre modifiche, premiamo nuovamente i.
Quando siamo soddisfatti del lavoro svolto, possiamo salvare e chiudere il documento. Adiamo in command mode e scriviamo:
:wq
Ecco un comando utile per commentare 100 righe:
:10,110s/^/\#/g
commenta le righe da 10 a 110 aggiungendo a inizio riga il cancelletto
]]>Script che controlla se un determinato servizio (in questo caso apache) è in esecuzione e se non lo è lo riavvia.
#!/bin/bash if $(ps ax | grep apache2 | grep -v grep > /dev/null ) ; then exit ; else /etc/init.d/apache2 restart ; fi
Un altro modo per fare la stessa cosa:
#!/bin/bash TAG="MOTION" CONTROL=$(ps ax | grep motion | grep -v grep | awk '{print $5}') sleep 5 ; if [ -n "$CONTROL" ] then echo "Motion già in esecuzione" ; exit 0 ; else echo "Motion non attivo, RIAVVIO motion!" motion ; logger riavvio servizio non attivo -t $TAG ; exit 1 ; fi
Questo script prende l’output opportunamente filtrato da grep e se la stringa NON è vuota (-n “$CONTROL”) esce perché motion è già in esecuzione, altrimenti riavvia il servizio e riporta con logger un eventuale avvio.
ATTENZIONE: il nome dello script non deve contenere “traccia” del nome del servizio da cercare, grep altrimenti troverà come servizio corrispondente lo stesso script e non funzionerà come ci si aspetterebbe: in questo caso ad esempio sarebbe un errore nominarlo “riavvio_motion”.
Per controllare se un programma è installato possiamo utilizzare il comando aptitude. Se ad esempio vogliamo controllare se è installato zenity possiamo usare il comando
aptitude search zenity
Il comando restituirà un output simile al seguente:
p octave-zenity - simple graphical user interfaces using zen i A zenity - Display graphical dialog boxes from shell i A zenity-common - Display graphical dialog boxes from shell
La “i” all’inizio della riga indica che il programma è installato per cui possiamo utilizzare questa forma per vedere tutti i pacchetti installati:
aptitude search '~i'
Quindi possiamo filtrare maggiormente il risultato: nell’esempio sotto vedremo tutti i pacchetti installati che contengono la parola zenity:
aptitude search '~i zenity'
Possiamo controllare se un programma è installato anche con il comando dpkg tuttavia, mentre aptitude permette di effettuare una vera e propria ricerca sul nome del pacchetto, con dpkg, per avere una risposta sensata dobbiamo scrivere il nome esatto del pacchetto.
dpkg -s zenity
Se il programma è installato il comando restituirà tutti i dettagli del programma (architettura, maintainer, dipendeze ecc). La cosa interessante è che se dopo il comando dpkg eseguiamo il comando
echo $?
otterremo il codice di uscita di dpkg che sarà 0 se il programma è installato e 1 se il programma non è installato. Pertanto dpkg si presta molto bene ad essere utilizzato all’interno di script bash per individuare se un programma è installato o no. Un esempio potrebbe essere il seguente:
dpkg -s zenity &> /dev/null echo $?
che restituisce 0 se zenity è installato e 1 se non è installato
Con questo comando killiamo il processo (PID) di una connessione tcp:
kill -9 `netstat -pn | grep 192.168.1.14 | awk '{print $7}' | sed -n 1p | sed 's/\/apache2//g'`
Vediamo il significato del comando:
ATTENZIONE: il ripristino funziona solo se i pacchetti installati sono esclusivamente liberi ed open source(ad esempio non funziona se ho installato i ttf ms corefonts )!
Con questa riga di comandi concatenati creiamo un file di testo sulla Scrivania che contiene un elenco dei pacchetti attualmente presenti nel PC in uso:
dpkg --get-selections "*" > /home/nomeutente/Scrivania/elenco_pacchetti.txt
in questo file verrà scritto l’elenco dei programmi installati.Se devi ripristinare l’elenco, copia il file sull’altro sistema, poi digita:
dselect update dpkg --set-selections < elenco_pacchetti.txt apt-get -u dselect-upgrade
a questo punto verranno installati tutti i pacchetti: attento però verrà davvero riprodotta la stessa situazione, copiando anche le librerie mancanti… se nella versione nuova qualche pacchetto è diventato obsoleto ti darà errore perché cercherà di installarlo comunque… io userei questa procedura per due distro uguali: non so se è il tuo caso… e controlla il file prodotto prima di procedere, magari usa l’opzione “simulate” con apt-get per fare delle prove… le configurazioni per i programmi utente di solito li trovi nelle tua home… dipende in genere dal programma, potresti salvarti l’intera home e copiarla sul nuovo sistema… le configurazioni di sistema le trovi solitamente in /etc… comunque nelle proprietà di ogni pacchetto ci sono i file installati e dove sono stati installati… secondo me non c’è un modo comune per salvare le configurazioni, ma è una cosa abbastanza semplice: nel caso di cups ad esempio ti basta salvare la cartella che hai in etc per mantenere le stampanti. ATTENZIONE: il ripristino funziona solo se i pacchetti installati sono esclusivamente liberi ed open source(ad esempio non funziona se ho installato i ttf ms corefonts )!
Esiste anche un secondo metodo per elencare i pacchetti installati in un file di testo. Digita:
dpkg --list > /home/nomeutente/Scrivania/elencopacchettidettagliato.txt
Questo metodo ti crea un elenco più dettagliato ma non potrai poi utilizzare il file di testo così ottenuto per ripristinare un sistema identico ma solo consultarlo.
Con questo comando posso verificare quale distro linux è installata nel pc in uso. Digita:
lsb_release -a
Questo metodo di solito è affidabile ma non tutte le distro sono sempre ricomprese.
Uso il comando uname -a per verificare il kernel installato
uname -a
poi premo invio oppure
uname -r
poi premo invio oppure
uname -mrs
poi premo invio.
Con questo comando verifichiamo le caratteristiche dell’hardware in uso. Digitiamo:
sudo lshw
O meglio
sudo lshw -html > lshw.html
Con questo secondo metodo creiamo nella nostra home un file html che descrive l’hardware in uso.
Un terzo metodo consiste nell’installare hardinfo un free software dotato di interfaccia grafica (gui) digitando:
sudo apt-get install hardinfo
Hardinfo è dotato di una gui (interfaccia grafica).
grep -B2 'Module class: X.Org Video Driver' /var/log/Xorg.0.log
un altro comando utile e chiaro è:
lshw -c display | grep driver
Con questi comandi è possibile terminare una applicazione ribelle ossia chiudere forzatamente un programma che è andato in crash. xkill è un vero e proprio comando linux a cui si può associare una icona che su debian 6 è quella di force quit. Force quit (force-quit.png o force_quit.png ) è l’icona che debian 6 associa al comando xkill .Force quit è particolarmente interessante in quanto si può usare direttamente da ambiente grafico. Purtroppo gnome shell o gnome 3 e unity non hanno di default il pulsante ossia l’icona force quit ma è possibile usare il comando xkill da teminale oppure installare script o applicazioni che abilitano l’icona force quit.
Con questi comandi è possibile formattare un hard disk o una periferica di archiviazione generica con un grado di sicurezza molto elevato. Il primo di questi è il metodo raccomandato se non ci si aspetta degli attacchi attivi contro il proprio livello di criptografia:
dd if=/dev/zero of=/dev/[dispositivo] bs=4k
Il seguente comando è più sicuro. Esso si basa su uno pseudo-random creato da una probabilità di dati ottenuto da queste opzioni; in molti casi è il metodo migliore.
dd if=/dev/urandom of=/dev/[dispositivo] bs=4k
Il seguente comando è ancora più efficace ma impiega molto tempo. Durante il processo è necessario utilizzare il computer (muovere il mouse in modo anomalo, lanciare applicazioni, utilizzare un alto livello di I/O, ecc.) per rendere il processo “random” ancora più efficace creando molti dati casuali.
dd if=/dev/random of=/dev/[dispositivo] bs=4k
Si può utilizzare anche questo comando che scrivera’ 5 pattern di dati sul dispositivo, sovrascrivendo e verificando i dati. Questo comando è utilizzato per controllare i blocchi, ma può anche essere usato per eliminare eventuali dati esistenti.
badblocks -vfw /dev/[dispositivo] [dimensione blocchi del device]
La dimensione dei blocchi (size block) è determinata dal tipo di file system. Nel caso di una partizione ext3 con limite massimo di grandezza file di 2 Tb e dimensione massima di file system di 8 Tb il block size sarà di 4 Kb. Se non si conoscono le specifiche del proprio file system si può usare il comando:
sudo dumpe2fs -h /dev/[dispositivo] | grep -i "block size"
fsck controlla e ripara il filesystem da eventuali errori. Se si “spegne male” e si rompe il filesystem può essere utile.
Rsync serve per trasferimento rapido e incrementale e backup dei propri files, è già incluso tra i comandi delle principali distribuzioni linux.
Rsnapshot basato su rsync serve per fare “foto” a scadenze regolari preimpostate da noi dei nostri file.
FreeFileSync è un software open source che fa backup dei file confrontandone le modifiche e funziona anche su win e mac.
In alcuni computer il bluetooth viene attivato ad ogni riavvio, per evitare questo basta lanciare, nella propria sessione utente, il comando:
rfkill block bluetooth
Il pacchetto rfkill è nei repository Debian e potrebbe essere comodo inserirlo in sudoers così da non dover inserire la password per lanciarlo, cosa molto utile se si vuole automatizzare l’operazione:
utente ALL=NOPASSWD: /usr/sbin/rfkill
Per spegnere rapidamente il pc da terminale con permessi di root digito il comando
init 0
poi premo enter o invio. Non so perchè ma spesso questo spegnimento è più veloce rispetto al comando halt.
Percorso della cartella cestino (Trash) in debian.
~/.local/share/Trash
In generale su una qualunque distro per sapere dove si trova il cestino occorre digitare:
locate Trash
poi premo invio e scelgo tra l’output il percorso che mi serve.
AVVERTENZA: usando il comando rm non sposto le directory o i file nel cestino ma li cancello direttamente.
Per le directory: se necessario coi privilegi di root digito
rm -r nomedellacartelladacancellare
oppure
rm -R nomedellacartelladacancellare
oppure
rm -f nomedellacartelladacancellare
rm -rf nomedellacartelladacancellare
poi premo invio.
ATTENZIONE: gli ultimi due metodi possono essere PERICOLOSI in quanto l’opzione f elimina le eventuali richieste di conferma. In caso di cancellazione errata non resta che tentare di ricorrere al software libero photorec.
Se voglio cancellare un singolo file basta usare in comando rm senza opzioni seguito dal nome del file.
rm nomedelfilecancellare
In questo esempio si spostano in modo ricorsivo tutti i file .htaccess dalla cartella tmp alla cartella cestino (sovrascrivendoli):
find /tmp -name ".htaccess" -exec mv -f {} /cestino \;
Attenzione: con questo comando i file vengono sovrascritti nella cartella cestino ma se il nostro scopo è cancellarli a poco importa. Una volta fatto cancelleremo dalla cartella cestino l’unico file .htaccess rimasto. Sì è preferito usare il comando mv al posto di rm per un fattore di sicurezza. E’ comunque un comando da usare con cautela. Ancora più semplice è usare l’opzione -delete: sempre da usare con cautela e dà qualche problema con l’eliminazione delle cartelle.
find . -name ".htaccess" -delete
per cancellare i file nascosti con rm bisogna digitare:
rm -f .??*
Attenzione, Usare con cautela!!
Script che cancella i file nascosti con almeno due caratteri. Utile nei server di file sharing come samba dove più sistemi operativi interagiscono. (Ad esempio mac osx lavorando sul file “prova.gif” lascerà sul disco un file “.prova.gif”)
#!/bin/bash rm -fr /root/cestino_file_nascosti && mkdir /root/cestino_file_nascosti && find /percorso/condivisione -name ".??*" -exec mv -f {} /root/cestino_file_nascosti \;
il sistema cancella la cartella “cestino_file_nascosti” e la ricrea subito dopo perchè è pensato per essere inserito in cron. In questo modo i file nascosti vengono spostati nella cartella “cestino_file_nascosti” e fino alla successiva esecuzione si ha la possibilità di ritrovarli (ATTENZIONE: file con lo stesso nome vengono sovrascritti).
find . -regex ".*\(doc\|docx\|ppt\|pptx\|xls\|exe\)$" -exec rm {} \;
Questo comando trova e cancella i file con estensione .log più vecchi di 7 giorni nel percorso in cui si lancia. L’opzione “-delete” non ha bisogno dell’opzione “-depth” per cancellare i file ricorsivamente perchè la contiene. Se invece volessimo solo trovare i file le due opzioni andrebbero scambiate.
find . -ctime +7 -name "*.log" -delete
In questo esempio il comando cancella file e cartelle più vecchie di 7 giorni dentro a /tmp.
find /tmp/* -ctime +7 -delete ;
oppure si può anche usare questa forma:
find /tmp/ -ctime +7 -exec rm {} \;
nb: sostituire “rm” con “echo” per fare delle prove e visualizzare cosa verrà cancellato. Al posto di “ctime” si può utlizzare “mtime” che coincide con la data di modifica.
Con questo comando è possibile cancellare file e cartelle con un grado di sicurezza elevato.
wipe -rcf -Q 34 [percorso file o cartella da eliminare]
-r è ricorsivo, -c per impostare i permessi di scrittura se necessari e -f forza la cancellazione senza chiedere conferma (utile se si vogliono cancellare più file). -Q n indica il numero di passaggi che utilizzerà wipe per riscrivere il file (consigliato 34, tenendo presente che per file grandi questo richiederà molto tempo).
E’ abbastanza semplice utilizzare una connessione ssh per redirigere un determinato traffico di un server remoto sulla nostra macchina locale. L’esempio sotto propone il reindirizzamento della porta di Transmission (9091) attraverso SSH mandandola in locale sulla porta 8080:
ssh user_remoto@server_remoto -L 8080:127.0.0.1:9091
In questo modo aprendo il nostro browser alla pagina http://127.0.0.1:8080 visualizzeremo il nostro Transmission remoto; questo diventa molto comodo quando abbiamo connessioni filtrate in base alla porta.
Esaminiamo un altro caso: mettiamo di avere il server host1 con servizio SSH attivo sulla porta 22, ma non raggiungibile dal nostro PC. Invece è raggiungibile dal server host2 che permette l’acceeso SSH anche al nostro PC. A questo punto possiamo usare hosts2 come tunnel SSH. Sul nostro PC digitiamo:
ssh -L 8022:host1:22 utente_host2@host2
La porta 8022 è scelta a caso. Adesso possiamo ad esempio usare scp per copiare “archivio.zip” dal nostro PC usando il tunnel su host2 direttamente su host1 (altrimenti non accessibile):
scp -P 8022 archivio.zip utente_host1@127.0.0.1:percorso_remoto_host1/
Col comando seguente troviamo tutti i file modificati da 1 giorno a partire dal punto in cui lanciamo il comando:
find . -mtime -1
Con questo comando troviamo ricorsivamente i file con dimensione superiore a 100 Mb:
find . -type f -size +100000000c -exec ls -lh \{} \;
Ovviamente possiamo cambiare le opzioni a nostro piacimento come la dimensione e l’opzione -exec: in questo caso i file vengono listati con ls. Altra cosa interessante è l’opzione -type che ci permette di trovare alcuni tipi di file. Alcuni esempi:
Un modo più comodo è usare du insieme a sort:
du -sh * | sort -h
Questa stringa permette di trovare nella cartella /var tutti i file di almeno 100 byte con estensione .sql o .out.gz che abbiano all’interno del nome la data di oggi nel formato AAAAMMGG (ad es: 20150204):
find /var -size +100c -type f \( -iname *$(date +%Y%m%d)*.sql -or -iname *$(date +%Y%m%d)*out.gz \)
Per trovare un file o un comando esistono varie possibilità. Posso digitare:
locate nomedelfile
Col comando “locate” scopriamo dove è locato un file all’interno del filesystem sulla base del proprio nome. Ad esempio, se voglio sapere dove è situato il file eseguibile di nautilus digito:
locate nautilus
find nomedelfile
Find permette di effettuare una ricerca gerarchica all’interno di una directory e le sue sottodirectory utilizzando diversi attributi del file. (Vedi ad esempio Trovare i file più grandi in modo ricorsivo)
whereis nomedelfile
Il comando whereis permette di individuare nel filesystem i file binary eseguibili, i sorgenti e i manuali dei comandi
Esistono anche i comandi find e whereis e locatedb . Per maggiori info: http://wiki.debian.org/it/WhereIsIt o anche http://wiki.debian.org/WhereIsIt
wget -q -O - 'http://www.sito.dominio' | grep -oE '[^@:>< ]+@([^\.:@ ]+\.)+[a-zA-Z]{2,4}'
A seconda degli utilizzi l’espressione regolare va modificata. Gli indirizzi doppi non vengono scartati. Altro modo per indicare le mail potrebbe essere: ([a-zA-Z0-9_\.\-\+])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})
Nslookup effettua delle query (interrogazioni) ad un server DNS per la risoluzione di indirizzi IP o Hostname, per poter ottenere da un dominio il relativo indirizzo IP o nome host e viceversa. Ad esempio se voglio conoscere il numero Ip del sito www.google.it digito
nslookup www.google.it
Posso anche fre il contrario ossia risalire dal numero IP all’indirizzo in lettere, in questo caso digito :
nslookup numeroIP
Per altre info: http://it.wikipedia.org/wiki/Nslookup
Ad esempio se voglio conoscere chi ha registrato il dominio conoscerelinux.org digito
whois conoscerelinux.org
con questo comando riusciamo ad estrapolare in un file solo le righe che contengo un determinato carattere: in questo caso /:
grep -E '[/]' testo.txt
Viceversa con questo comando escludiamo tutte le righe che contengono /:
grep -E '^[^/]+$' testo.txt
Con questo comando troviamo tutte le stringhe alfanumeriche di almeno 16 caratteri:
grep -rE '[0-9a-zA-Z]+{16}' /percorso
E’ possibile anche escludere tipi di estensione:
grep --exclude=*.{flv,jpg,JPG} -rE '[0-9a-zA-Z]+{16}' /percorso
Alcune opzioni comode:
Se vogliamo cercare la stringa alla fine del file dobbiamo aggiungere $ al comando:
grep --exclude=*.{flv,jpg,JPG} -rE '[0-9a-zA-Z]+{16}$' /percorso
Con questo script, modificato a seconda delle proprie esigenze, riusciamo a contare quante ricorrenze ci sono all’interno di un file in determinate colonne:
cat file.csv | sort | awk -F "\t" '{print $3, $4, $5}' | uniq -ci
un esempio di output potrebbe essere questo:
23 Zz_Top Francine The_Best_Of 17 Zz_Top Heard_It_On_The_X The_Best_Of 13 Zz_Top Jesus_Just_Left_Chicago The_Best_Of 12 Zz_Top Just_Got_Paid The_Best_Of 4 Zz_Top La_Grange The_Best_Of 1 zz_top la_grange 7 Zz_Top La_Grange The_Best_Of 17 Zz_Top Tush The_Best_Of 16 Zz_Top Waitin'_For_The_Bus The_Best_Of
di file.csv abbiamo considerato solo le colonne 3,4 e 5 separate da TAB (opzione -F “\t”). Davanti ad ogni riga è riportato il numero delle ricorrenze grazie a uniq -c, ordinate alfabeticamente con sort e filtrate solo le colonne che ci interessano con awk. L’opzione -i di uniq permette di ignorare le differenze fra maiuscolo e minuscolo.
Con questo comando sostituiamo il carattere “à” con il carattere “a” da tutti i file txt in modo ricorsivo:
find /percorso -depth -name "*.txt" -execdir rename -v 's/à/a/g' "{}" \;
Questo comando cancella in tutti i file txt la riga contenete la stringa “pluto” nel percorso in cui viene lanciato.
sed -i "/.*pluto.*/d" *.txt
Questo script fa la stessa cosa ma ricorsivamente partendo da /tmp che è definito dalla variabile “inputdir”.
#!/bin/bash inputdir=/tmp echo "sto cercando i file" for file in $(find $inputdir -iname "*.txt") ; do echo "sto cancellando le stringhe con la parola pluto" sed -i "/.*pluto*/d" $file done
Se volete sostituire i caratteri accentati con il corrispondente nome html (es. è con è) potete usare lo script seguente che deve essere lanciato seguito dalla directory nella quale cercare le corrispondenza. Lo script cercherà in tutte le sottocartelle.
!/bin/bash inputdir=$1 echo Sto cercando i file for file in $(find $inputdir -iname "*.php") ; do echo Correggo il file $file sed -i 's/è/\è/g' $file sed -i 's/à/\à/g' $file sed -i 's/ò/\ò/g' $file sed -i 's/ù/\ù/g' $file sed -i 's/ì/\ì/g' $file sed -i 's/é/\é/g' $file done
Supponiamo di voler sostituire la stringa copyright con la stringa copyleft da tutti i file .txt (o .TXT). Con questo comando è possibile:
find /percorso_file -iname "*.txt" -exec sed -i 's/copyright/copyleft/g' {} \;
Con questo comando aggiungiamo la parola prefisso in una nuova riga all’inizio del file prova.txt:
sed -i '1,1s/^/prefisso \n/g' prova.txt
Provare prima senza l’opzione -i per avere solo un output visivo a schermo. Il carattere \n aggiunge un “a capo” e in questo modo creiamo una nuova linea che precede la prima (1,1).
Modificando il comando precedente abbiamo la possibilità di inserire la parola “prefisso” all’inizio di ogni riga del nostro file:
sed -i 's/^/prefisso/g' prova.txt
Con questo comando aggiungiamo la parola Linux alla fine del file prova.txt:
sed -i '$a Linux' prova.txt
Al posto di ‘$’ possiamo aggiungere un valore numerico e in quel caso la parola verrà aggiunta nella riga corrispondente.
ATTENZIONE: il comando non funziona se il file è vuoto. Un altro metodo per aggiungere righe in fondo ad un file, anche se questo è vuoto è usare echo con >>:
echo "Linux" >> prova.txt
Con questa stringa cancelliamo dalla riga 1 alla riga 100 del file prova.txt:
sed '1,100d' prova.txt
Questo è un metodo semplice per eliminare l’ultima ruga di un file di testo:
sed -i '$d' prova.txt
Questo comando rinomina tutti i file di una cartella togliendo eventuali spazi vuoti presenti nel nomefile e sostituendoli con un trattino.
#!/bin/bash # lanciare lo script nella cartella contenente i file da rinominare # rinomino i file togliendo gli spazi e inserendo un trattino for file in *.html; do nuovo_nome=`echo $file | sed "s/ /-/g"` mv "$file" "$nuovo_nome" done
Con questo script è possibile convertire tutti file con estensione .wma dentro ad una determinata cartella in formato .mp3 a 160 kbps. E’ necessario avere installato mplayer e posizionarsi nella cartella contenente i file da convertire.
#!/bin/bash for i in *.wma do if [ -f "$i" ]; then rm -f "$i.wav" mkfifo "$i.wav" mplayer -quiet -vo null -vc dummy -af volume=0,resample=44100:0:1 -ao pcm:waveheader:file="$i.wav" "$i" & dest=`echo "$i"|sed -e 's/wma$/mp3/'` lame -V0 -h -b 160 --vbr-new "$i.wav" "$dest" rm -f "$i.wav" fi done
Con questo script è possibile convertire file flash video (senza spazi nel nome) con estensione .flv in formato .avi con codec xvid. E’ necessario avere installato ffmpeg, le varie librerie (nel nostro caso “libxvidcore4” e “libmp3lame0”) e spostare i file da convertire nella cartella specificata dalla variabile “inputdir”. Questo script è utile per convertire video in formato flash scaricati da internet mantenendo la qualità originale, che è abbastanza bassa, con l’opzione “sameq”. Per convertire altri tipi di file vedere il manuale di ffmpeg, anche per i problemi legati alle varie distribuzioni GNU/Linux che possono avere librerie di conversione diverse: in questo caso è utile il comando “ffmpeg -formats”.
#!/bin/bash inputdir=/conversione/flv destdir=/conversione/avi for file in $(find $inputdir -iname "*.flv") ; do name=$(basename $file .flv) ; ffmpeg -i $file -sameq -vcodec libxvid -acodec libmp3lame $destdir/$name.avi ; done
Puoi trovare le informazioni su come creare database, utenti, gestire i privilegi, effettuare backup e ripristino di MySQL negli Appunti LAMP
#!/bin/bash OF=$(date "+%Y%m%d%H%M%S") DIR=/mnt/bck_database/ [ ! $DIR ] && mkdir -p $DIR || : LIST=$(psql -l | awk '{ print $1}' | grep -vE '^-|List|:|\(|Name|template[01]') for d in $LIST do pg_dump $d | gzip -c > $DIR/$OF-$d.out.gz done
Questo script è stato modificato utilizzando le variabili dello script per Mysql qui sopra, ma utilizza psql, awk e grep per creare la lista dei nomi dei database: in linea generale salva i database in più file con estensione .gz. per scompattare l’archivio creato:
gunzip database.out.gz
Al posto dello script sopra, si può usare il comando:
pg_dump -U pippo nome_db -f nome_db.out
Per ripristinare utilizzare un utente con permessi PostgreSQL e digitare questo comando per creare un nuovo database:
createdb nome_db_vuoto
Se è necessario specificare l’utente con permessi sul db basta utilizzare l’opzione -U come in questo esempio:
createdb -U pippo nome_db_vuoto
e infine il comando per importare il database:
psql -d nome_db_vuoto -f database.out
oppure se vogliamo utilizzare un utente specifico (in questo caso pippo):
psql -U pippo -d nome_db_vuoto -f database.out
Utilizzando la consolle di mysql con questo comando assegniamo tutti i privilegi all’utente pippo sul db chiamato database:
GRANT ALL ON database.* TO pippo@localhost IDENTIFIED BY 'db_password';
Utilizzando la consolle di mysql con questo comando modifichiamo il charset del nostro database:
ALTER DATABASE database DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;
Questo script legge dal file elenco.txt una lista di valori e procede con alcune operazioni: cancella l’utente, il database e l’utente mysql corrispondente ai valori letti nell’elenco.
#!/bin/bash elenco="elenco.txt" while read line do deluser --remove-home $line ; mysqladmin -f -u root -ppassword drop $line ; mysql -u root -ppassword -e "DROP USER '$line'@'localhost';" done < $elenco
Per unire diversi file pdf basta installare “pdftk” e da riga lanciare:
pdftk file1.pdf file2.pdf cat output file_uniti.pdf
#!/bin/bash # USAGE: halfpdf pdfname # Taglia un pdf a metà prendendo la parte conclusiva PDF=$1 TOT=`pdftk $PDF dump_data output | grep Num | sed -e 's/NumberOfPages: //'` HALF=`echo $(($TOT/2+1))` pdftk $PDF cat $HALF-end output $PDF.half.pdf
#!/bin/bash # USAGE: halfpdf pdfname # dividere a metà un pdf con numero di pagine pari PDF=$1 TOT=`pdftk $PDF dump_data output | grep NumberOf | sed -e 's/NumberOfPages: //'` FIRSTEND=`echo $(($TOT/2))` pdftk $PDF cat 1-$FIRSTEND output start-$PDF SECONDBEGIN=`echo $(($FIRSTEND+1))` pdftk $PDF cat $SECONDBEGIN-end output end-$PDF
Con questo comando è possibile dividere un pdf in sigole pagine:
pdftk documento.pdf burst output pagina_%02d.pdf
Con la forma “%02d” il comando nomina i singoli file con numero sequenziale di due cifre (pagina_01, pagina_02, pagina_03, …pagina_99)
Oppure è possibile usare questo script:
#!/bin/bash PDF=$1 TOT=`pdftk $PDF dump_data output | grep NumberOf | sed -e 's/NumberOfPages: //'` for((i=1;i<=$TOT;i++)) do pdftk $PDF cat $i output $PDF.$i.pdf done
Per ridurre la dimensione di un PDF è possibile utilizzare il comando convert contenuto nel pacchetto imagemagick. Il comando è il seguente:
convert -compress jpeg -quality 90 file.pdf file-small.pdf
dove con l’opzione -compress si specifica il tipo di compressione e con -quality la qualità da 0 a 100.
Un comando alternativo per ridurre la dimensione del PDF può essere il seguente:
gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen -dNOPAUSE -dQUIET -dBATCH -sOutputFile=output.pdf input.pdf
Con pdftk è possibile anche ruotare un intero file .pdf di 180 gradi:
pdftk file.pdf cat 1-endsouth output file_ruotato.pdf
E’ molto semplice da usare perché utilizza i punti cardinali per ruotare le pagine:
E’ anche possibile ruotare solo alcune pagine; ecco un esempio dove viene ruotata solo la prima pagina e dalla seconda in poi rimane tutto invariato:
pdftk in.pdf cat 1east 2-end output out.pdf
Con questo script è possibile convertire tutti i file con estensione .html di una cartella in un unico file .pdf. Lo script rinomina i file .html che contengono spazi vuoti e inoltre aggiunge il nomefile nel documento .html alla prima riga in modo da poterlo agevolmente individuare una volta inserito nel pdf creato. E’ necessario avere installato wkhtmltopdf e pdftk e posizionarsi nella cartella contenente i file da convertire.
#!/bin/bash # lanciare lo script nella cartella contenente i file html da convertire # per la conversione istallare wkhtmltopdf oltre a pdftk # rinomino i file togliendo gli spazi e sostituendoli con trattino - for file in *.html; do nuovo_nome=`echo $file | sed "s/ /-/g"` mv "$file" "$nuovo_nome" done # elaboro i singoli file html presenti nella cartella for file in *.html; do # copio nome file alla prima riga del documento sed -i '1,1s/^/'$file' \n/g' $file # trasformo html in html.pdf' wkhtmltopdf $file $file.pdf done # finito ciclo rinomino html.pdf in .pdf e unisco tutti i pdf in 01.pdf mmv '*.html.pdf' '#1.pdf' pdftk *.pdf cat output 01.pdf echo "File 01.pdf creato" echo "Premere invio per continuare..." read
echo -n password | md5sum
dove al posto di password inseriremo la parola d’ordine che vogliamo trasformare in MD5.
echo `< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c6`
shuf -n 4 /usr/share/dict/words | tr -d '\n'
Se si vogliono scaricare vari file da un sito, e questi sono in ordine crescente ma non è permesso il directory listing, cioè non si riesce a visualizzare la cartella intera con la lista dei file presenti, uno script del genere può essere molto comodo:
#!/bin/bash min=1 max=999 while [ $min -le $max ] do min=$((min+1)) wget http://www.sitodiprova.it/testi/$min.txt done
Con questo script diamo a wget le istruzione per provare a scaricare dal sito “www.sitodiprova.it” nella cartella “testi” tutti i file .txt con nome che va da 1.txt a 999.txt. Sostituire il nome del sito con il suo IP corrispondente velocizza lo script.
Per confrontare due valori, in questo caso il nostro IP pubblico salvato sul file ip.txt e l’indirizzo che abbiamo al momento dell’esecuzione dello script, si può utilizzare questo script:
#!/bin/bash ip1=$(curl icanhazip.com) ip2=$(cat ip.txt) if [ $ip1 == $ip2 ]; then echo "sono uguali" exit 0 else echo "sono diversi" curl icanhazip.com >ip.txt exit 1 fi
ATTENZIONE: controllare il servizio web (in questo caso icanhazip.com) perché a volte cambiano oppure l’output generato presenta differenze.
Questo script confronta la dimensione di una cartelle prima e dopo un certo periodo di tempo ed esce solo quando la dimensione è identica. Serve per verificare se la dimensione della cartella è “stabile”, ad esempio se ci upload in corso.
#!/bin/bash dim1=$(du -s /cartella | awk '{print $1}'); sleep 4 ; dim2=$(du -s /cartella | awk '{print $1}'); while [ $dim1 != $dim2 ] do dim1=$(du -s /cartella | awk '{print $1}'); sleep 4 ; dim2=$(du -s /cartella | awk '{print $1}'); echo "attendere, upload in corso..." ; done
“Sleep 4” sta a significare che aspetta 4 secondi prima di passare al comando successivo: comodo con il comando “du” che a volte dà problemi e non non aggiorna la dimensione in maniera istantanea.
Questo script attiva la device wifi se il pulsante hardware è stato premuto.
#!/bin/bash wifi=$(/sbin/iwconfig eth1 | grep Tx-Power | awk '{print $4}') while [ $wifi == Tx-Power=off ] do echo "wifi spento" sleep 2 ; wifi=$(/sbin/iwconfig eth1 | grep Tx-Power | awk '{print $4}') done echo "è acceso" ; /usr/sbin/rfkill unblock wifi ; exit 0
Questo script fa alcune operazioni a seconda del giorno e dell’ora: controlla il giorno e se l’orario corrisponde alla fascia 00:00/07:59 compie le azioni scritte.
#!/bin/bash GIORNO=$(date +%a) ORA=$(date +%k) if [ $GIORNO == "lun" -o $GIORNO == "mer" -o $GIORNO == "ven" ] then if [ $ORA -le "7" ] then echo "Eseguo il comando 1" else exit 0 fi elif [ $GIORNO == "mar" -o $GIORNO == "gio" -o $GIORNO == "sab" ] then if [ $ORA -le "7" ] then echo "Eseguo il comando 2" else exit 0 fi else exit 1 fi
E’ possibile disabilitare un modulo del kernel all’avvio dell’installazione di Debian utilizzando il comando seguente:
modprobe.blacklist=nome_modulo
Stessa opzione dovrà essere passata a Grub al primo avvio per disabilitare temporaneamente il modulo. Per accedere a Grub in modalità editinge premere e
Con questo comando si aggiunge la riga “testo” alla fine del file “prova”:
echo testo >> prova
Con questo comando si sostituisce il contenuto del file “prova” con la parola “testo”:
echo testo > prova
nb: se non esiste il file “prova” verrà creato; per aggiungere stringhe con spazi utilizzare questa forma: echo “testo con spazi” >> prova
Per unire due file dello stesso tipo basta usare il comando cat: è utilissimo per accodare ad esempio file video dello stesso tipo che non hanno bisogno di essere riprocessati:
cat video_01.dv video_02.dv > video_unito.dv
Consideriamo questa variabile:
VARIABILE=lugscandiano
richiamandola:
echo $VARIABILE
avremo come output a monitor:
lugscandiano
se vogliamo avere solo determinati caratteri di questo output possiamo usare, ad esempio, questa forma:
echo ${VARIABILE:0:3}
come output avremo:
lug
cioè dal carattere 0 spostandosi 3 caratteri dopo, oppure:
echo ${VARIABILE:3:9}
avremo:
scandiano
ma avremmo anche potuto scrivere:
echo ${VARIABILE:3}
Altro metodo per filtrare un output; in questo caso della lista di file jpg prendiamo solo la prima riga, togliamo l’estensione e gli ultimi 4 caratteri:
ls -1 *.jpg | sed -n 1p | sed 's/.jpg//g' | sed -e 's/....$//g'
Con questo invece della lista di file jpg prendiamo solo la prima riga, togliamo l’estensione e i primi 4 caratteri:
ls -1 *.jpg | sed -n 1p | sed 's/.jpg//g' | sed -e 's/^....//g'
E’ necessario aver prima installato sul proprio computer VLC o Rhythmbox oppure Banshee. Ad esempio in VLC seleziono il menù “media>apri flusso di rete” e nell’apposito spazio “inserisci un URL di rete” scrivo:
rtsp://74.218.218.210/krock01.sdp
Veloci calcoli utilizzando la riga di comando sono possibile con echo:
echo $((1200 + 6000 + 2 + 8))
Possibile anche l’utilizzo delle parentesi:
echo $(((1200 + 6000 + 2 - 8) / 2))
gufw non è installato di default in molte distro. Se non è già installato per installarlo digitare coi privilegi di root
apt-get install gufw
poi premere invio.
In debian 6 da terminale root digitare:
gksu gufw
poi premere enter o invio. A questo punto dovrebbe apparirire gufw sul monitor. gufw (Graphic UFW ) è la GUI (Graphic User Interface cioè interfaccia grafica) di ufw (Uncomplicated FireWall). Se si tenta di lanciare gufw direttamente da ambiente grafico Debian 6 dà un errore, pertanto il procedimento su descritto è necessario.
In debian 7 da terminale digito:
gufw
poi premere enter o invio. Il comando gufw in debian 7 si trova in:
/usr/bin/gufw
ATTENZIONE: di default GUFW non è visibile nel menù XFCE di debian 7 con ambiente grafico XFCE. Per renderlo visibile occorre nell’ordine: 1)installare GUFW (e anche UFW ovviamente poichè GUFW è l’interfaccia grafica di UFW ). 2)installare “menù principale” ossia “alacarte” che NON è installato di default in xfce debian 7. 3)lanciare il “menù principale” ossia alacarte (in xfce) impostazioni>menù principale . 4)andare in sistema>nuova voce poi scrivo tipo:applicazione nome:GUFW comando:/usr/bin/gufw commento:lancia il firewall grafico poi clicco su ok. GUFW è finalmente comparso nel menù principale nella voce Sistema.
Da terminale digito:
history -c
poi premo enter o invio.
Non sempre il predetto metodo funziona. Per essere più sicuri è meglio usare
cat /dev/null > ~/.bash_history && history -c && exit
poi premo enter o invio.
Per determinare il tipo di file, nei sistemi di tipo unix (quindi anche Linux e MacOS) si usa il comando:
file nomedelfile
che legge e interpreta il “magic number” ; ovviamente se non sono nella stessa directory del file occorre specificare il percorso completo del file anzichè il semplice nome del file.
NB: in linux le estensioni (cioè la parte del mome del file dopo il . ), “se ci sono” sono “sempre” visibili. Ma hanno una funzione solo mnemonica, a parte quelle dei formati proprietari, perchè non vengono usate dal sistema per riconoscere il tipo di file. I files hanno al loro interno un codice (il “magic number”) che ne identifica il tipo, e quello viene utilizzato dal sistema, non l’estensione. Comunque il comando file serve a controllare anche che qualcuno non faccia il “furbo” dando una estensione sbagliata a un file di diverso tipo (es: dare a un virus per win una estensione .txt a un virus file .exe per trarre in errore l’utente e fargli lanciare o propagare un virus in ambiente win). Quindi in linux le estensioni di file , eccetto i file con formato proprietario, non sono necessarie al sistema ma sono solo utili all’utente per fargli capire , salvo “furbate” di cui sopra, di che tipo di file si tratta. Per conoscere meglio il comando file da terminale digito:
man file
Ovviamente il comando file smaschera eventuali “furbate” di cui sopra.
Un procedimento è:
sudo -s
poi premo Invio , poi digito:
dpkg --get-selections|grep deinstall|cut -f 1|xargs sudo dpkg -P
poi premo Invio.
Un altro procedimento è:
sudo aptitude purge ~c
poi premo Invio .
Un altro procedimento consiste nell’installare Ubuntu Tweak che fa la stessa cosa per via grafica <ref>Ulteriori informazioni sono disponibili sul sito www.lffl.org</ref>.
apt-get --purge remove nome_pacchetto
poi premo Invio .
Il metodo sopra rimuove un pacchetto, compresi tutti i file di configurazione.
Invece se digito
apt-get autoremove nome_pacchetto
rimuovo un pacchetto e tutte le dipendenze inutilizzate.
Vedi anche i links: http://www.istitutomajorana.it/scarica/Ubuntu_comandi_da_terminale.pdf
http://wiki.ubuntu-it.org/AmministrazioneSistema/PulireUbuntu
Vedi i links:
http://www.lffl.org/2012/07/ubuntu-script-per-mantenere-pulita-la.html
http://forum.ubuntu-it.org/viewtopic.php?t=201409
<references/>
]]>Supponiamo di avere la seguente lista di files alla quale si vuole aggiungere un suffisso.
max@silvermoon:~/foto$ ls george.jpg john.jpg paul.jpg ringo.jpg
Per rinominarli è possibile utilizzare questa serie concatenata di comandi. Il punto e virgola può essere sostituito con un invio, Il ciclo verrà eseguito solo successivamente al comando done.
$ for i in `ls *.jpg`; do mv $i beatles_$i;done
Il risultato del comando è il seguente:
maxo@silvermoon:~/foto$ ls beatles_george.jpg beatles_john.jpg beatles_paul.jpg beatles_ringo.jpg
Il ciclo descritto sopra può essere particolarmente pericoloso poichè un eventuale errore potrebbe riperquotersi su tutti i files selezionati dal comando ls. Per questo motivo è una buona abitudine, prima di lanciare il comando in esecunzione, lanciarlo in stampa servendosi del comando echo. Il comando visto in precedenza sarà il seguente:
$ for i in `ls *.jpg`; do echo mv $i beatles_$i;done
e produrrà questo output:
mv george.jpg beatles_george.jpg mv john.jpg beatles_john.jpg mv paul.jpg beatles_paul.jpg mv ringo.jpg beatles_ringo.jpg
per rinominare i file da minuscolo a maiuscolo spostarsi nella cartella contente i file da rinominare e lanciare questo comando:
for i in *; do mv $i $(echo $i | tr [:lower:] [:upper:]); done
per rinominare i file da maiuscolo a minuscolo spostarsi nella cartella contente i file da rinominare e lanciare questo comando:
for i in *; do mv $i $(echo $i | tr [:upper:] [:lower:]); done
E’ possibile cambiare l’estensione ad un file inviado l’output del comando al tool sed. Supponiamo di voler cambiare l’estensione dei file seguenti da .jpg a .jpeg.
ls 1.jpg 2.jpg 3.jpg 4.jpg
Ecco come utilizzare sed per cambiare l’estensione:
for i in `ls`; do mv $i `echo $i | sed s/jpg/jpeg/g`;done
Il risultato sarà il seguente:
ls 1.jpeg 2.jpeg 3.jpeg 4.jpeg
Se vogliamo rinominare tutti i files contenuti all’interno di una cartella (ad esempio per sostituire uno spazio con un trattino basso) è possibile usare il seguente comando.
ls -1 | rename 's/\ /_/g'
nota: per far sì che il comando accetti lo spazio come carattere standard è necessario anteporre il carattere “\”. Se avessimo voluto sostituire un “.” con un “_” bastava scrivere “s/./_/g”
Con questo comando aggiungiamo “prefisso_” a tutti i file e cartelle contenuti nella posizione in cui ci troviamo (non ricorsivo).
for filename in * ; do mv $filename prefisso_$filename; done
Ad esempio si potrebbe sostituire “*” con “*.txt* per manipolare solo i file con estensione txt.
Con questo script aggiungiamo “prefisso_” a tutti i file *.avi ricorsivamente dalla cartella in cui lo lanciamo:
#!/bin/bash inputdir=$1 echo Sto cercando i file for file in $(find $inputdir -iname "*.avi") do name=$(basename $file .avi) ; directory=$(dirname $file); echo rinomino il file $file mv $file $directory/prefisso_$name.avi done
ad esempio se il nostro script si chiama aggiunta_prefisso e vogliamo modificare il nome dei file presenti in /tmp scriveremo:
aggiunta_prefisso /tmp
lista=`find -name "*.PDF"`; for i in $lista; do j=`echo $i | sed -e 's:PDF:pdf:g'` ; mv $i $j ; done
In questo modo cambiamo le estensioni dei file .PDF da maiuscolo a minuscolo.
]]>Con questo comando da dentro la shell di MySQL vediamo i vari utenti abilitati e i relativi host:
mysql> SELECT user,host,password FROM mysql.user;
Assegnare certi privilegi all’utente ciccio su tutti i database:
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,CREATE TEMPORARY TABLES,DROP,INDEX,ALTER ON *.* TO ciccio@localhost IDENTIFIED BY 'password';
In questo modo lo permettiamo solo alla sottorete 10.0.0.*:
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,CREATE TEMPORARY TABLES,DROP,INDEX,ALTER ON *.* TO ciccio@'10.0.0.%' IDENTIFIED BY 'password';
Con questo comando assegniamo la possibilità di collegarsi come root all’IP 10.0.0.14:
mysql> INSERT INTO user SET Host='10.0.0.14',User='root', Reload_priv='Y', Process_priv='Y';
Visualizzare i privilegi dell’utente:
mysql> show grants for ciccio;
Rimuovere l’utente:
mysql> DROP USER ciccio;
Rimuovere l’utente associato ad un indirizzo:
mysql> DROP USER ciccio@'10.0.0.14';
Se è necessario reimpostare i privilegi dell’utente root di Mysql si può procedere come segue:
/etc/init.d/mysql stop
mysql --skip-grant-table
mysql
UPDATE mysql.user SET Grant_priv='Y', Super_priv='Y' WHERE User='root'; FLUSH PRIVILEGES;
/etc/init.d/mysql start
mysql -u root -p
GRANT ALL ON *.* TO 'root'@'localhost';
Per controllare le tabelle di un database possiamo usare il comando mysqlcheck seguito dal nome del database e dal nome utente se necessario (si rimanda al manuale per le varie opzioni):
mysqlcheck database -u root -p]]>