Archivio della categoria 'Shell'

Consumo di banda: monitorarlo con vnStat

Principianti, Shell, Sistema, Tips & tricks 1 commento »

Tra le molte applicazioni disponibili per tenere sotto controllo il consumo di banda di un server ce n’é uno che fa davero bene il suo lavoro: si tratta di vnStat, un network traffic monitor per sistemi BSD e Linux. Questa applicazione si comporta in pratica come un logger che tiene traccia dei volumi di dati in entrata e in uscita attingendo alle informazioni fornite in tempo reale direttamente dal kernel. Ecco quali sono le caratteristiche principali di vnStat così come vengono presentate sul sito web ifficiale del progetto:

  • quick and simple to install and get running
  • gathered statistics persists through system reboots
  • can monitor multiple interfaces at the same time
  • several output options
    • summary, hourly, daily, monthly, weekly, top 10 days
    • optional png image output (using libgd)
  • months can be configured to follow billing period
  • light, minimal resource usage
  • same low cpu usage regardless of traffic
  • can be used without root permissions
  • online color configuration editor

La sua installazione è in effetti molto semplice e immediata, specialmente sui sistemi Debian-derivati:

# aptitude install vnstat

Una volta installato il pacchetto, è necessario inizializzare un database dedicato al logging per ogni scheda di rete che si vuole monitorare. Se si vuole monitorare la scheda eth0, ad esempio, è sufficiente lanciare il comando:

# vnstat -u -i eth0

Fatto questo, per tenere monitorato il traffico su quella specifica scheda di rete è sufficiente lanciare il programma senza alcun argomento:

ivan@biberon:~$ vnstat
Database updated: Fri Jun 24 01:00:01 2011
eth0
received:       4.71 GB (13.0%)
transmitted:    31.58 GB (87.0%)
total:          36.29 GB
                rx     |     tx     |  total
-----------------------+------------+-----------
yesterday      1.74 GB |   11.92 GB |   13.66 GB
today         31.97 MB |  162.10 MB |  194.07 MB
-----------------------+------------+-----------
estimated       720 MB |    3.67 GB |    4.38 GB

E’ possibile generare diverse tipologie di report semplicemente passando al programma l’argomento necessario, ma credo che già l’utilizzo standard indicato sopra possa essere più che sufficiente per le ordinarie operazioni di monitoraggio. Maggiori informazioni le trovate a questi indirizzi:

  • http://humdi.net/vnstat/
  • http://www.debian-administration.org/articles/330

Linea di comando “tutti frutti”

Open Source, Shell, Tips & tricks Nessun commento »

Home page del sito http://ss64.comIl sito web in cui mi sono casualmente imbattuto questa mattina rappresenta uno dei grandi classici per il nerdiano doc, una sorta di bildungsroman dello spippolatore da tastiera più accanito. Si tratta di una “succintissima” raccolta di comandi per chi ancora si ostina a governare qualsiasi tipo di server semplicemente inviando comandi testuali, senza finestre, colori, consumo superfluo di CPU e di banda… Le sezioni disponibili sono: Oracle database, Windows CMD, CMD Commands XP/Win7, Bash, VBScript Commands, OS X Commands, Windows PowerShell, SQL Server database. Ovviamente l’unico link che mi sento di mettervi a disposizione è il seguente: http://ss64.com/bash/

Monitorare il load average su un server Linux/FreeBSD

Principianti, Shell, Sistema, Tips & tricks Nessun commento »

Icona raffigurante un terminale stilizzatoLa versione originale di questo script gira ormai da oltre un lustro su molti dei miei server, almeno su quelli più puri dove ancora bastano una manciata di script nudi e crudi messi in cron per gestire sia il monitoraggio che la manutenzione ordinaria dell’intero sistema. Quello che fa lo script è elementare: interroga il kernel mediante il comando uptime, dal cui output ricava i 3 valori del l0ad average; se questi superano il limite impostato nella variabile $NOTIFY, un messaggio email contenente un breve avviso e l’output del top viene inviato all’indirizzo email impostato nella variabile $EMAIL.

Il valore da assegnare alla variabile $NOTIFY varia da sistema a sistema, spesso individuare quello ottimale per un server non è una operazione del tutto immediata – richiede un minimo di esperienza e senza dubbio almeno un breve periodo di osservazione. Questo per evitare di ricevere un numero eccessivo di warning o, di contro, non ricevere notifiche per eventi che meriterebbero invece un po’ di attenzione. Leggi il resto »

Impedire il timeout delle connessioni SSH

Open Source, Principianti, Shell, Sistema, Tips & tricks Nessun commento »

Un dritta veloce per chi mi ha chiesto un modo per ovviare al timeout delle connessioni SSH. Premetto che si tratta di una situazione sempre più diffusa, dovuta alla configurazione di default dei nuovi di router distribuiti da Telecom per Alice ADSL. Il problema può essere ovviato passando al comando ssh il parametro:

-o ServerAliveInterval=10

Il parametro manda un messaggio di noop al server ogni n secondi (in questo caso: 10) notificando al router che la connessione è di fatto operativa, anche in mancanza di alcun tipo di attività. Dato che non è comodissimo digitarlo ogni volta, è possibile aggiornare il proprio file .bashrc con un alias che incorpori l’opzione nel comando base:

alias ssh="ssh -o ServerAliveInterval=10"

Questo è quanto :)

Sincronizzare con ftpsync.pl

Backup, Open Source, Shell, Sistema, Tips & tricks Nessun commento »

Il logo di SourceForge.netAnche se esistono metodi certamente più ortodossi, ricorrere al vecchio e deprecabile protocollo FTP per mantenere la sincronizzazione tra directory collocate su due server a volte è semplicemente l’unica soluzione. Mi riferisco a situazioni in cui il cliente chiede il backup giornaliero di una vecchia applicazione che risiede su di un server a cui è possibile accedere – per motivi insondabili – solo ed esclusivamente mediante FTP.

Detto tra noi: il cliente non ha quasi mai ragione, e lo dico per esperienza: lui guarda le cose da una prospettiva quasi sempre conservativa, anche e soprattutto quando le cose non vanno per niente bene. La filosofia del cliente tipo è molto spesso la seguente:  ha sempre funzionato, quindi funzionerà per sempre. O, peggio: ha sempre funzionato male, ma ha sempre funzionato, quindi funzionerà male ma funzionerà per sempre. Un sillogismo agghiacciante… Leggi il resto »

Backup e ripristino dell’immagine completa di una SD card con dd

Backup, Open Source, Principianti, Shell, Sistema, Tips & tricks 4 commenti »

Una vecchia SD Card da 512 MBMi capita sempre più spesso di dovere effettuare backup di partizioni Linux installate su SD card e di doverle ripristinare su altre SD. Il tutto rientra in un progetto molto interessante in cui un microserver basato su Linux gestisce una serie di funzionalità di rete amministrabili da un backoffice accessibile da LAN, WAN e WLAN. Lo sviluppo di questa soluzione necessita di repliche su microserver di backup e su vari altri dispositivi benchmark. Dato che ripeto questa procedura almeno 2 volte al giorno, la registro qui perché possa essere di pubblica utilità.

Per backuppare l’intero filesystem dalla SD card pluggata al mio PC con un adattatore USB, uso il comando:

dd if=/dev/sdb | gzip -c9 > ./backup_sdb.gz

Parafrasando: copia l’intero filesystem della device /dev/sdb nel file gzippato “backup_sda.gz”. Occhio quindi ad indicare la corretta device nel caso in cui sul vostro server/PC non sia sdb!

Per ripristinare il tutto, eseguo l’operazione complementare:

gunzip -c ./backup_sdb.gz | dd of=/dev/sdb

Se avete dubbi o domande, chiedete e vi sarà risposto. Non prima di avere consultato “man dd”, però…

Grep parade!

Open Source, Principianti, Shell, Sistema, Tips & tricks Nessun commento »

Uno dei comandi più utilizzati quando si amministra un server UNIX o Linux da linea di comando è senza dubbio `grep`. Per chi non lo conoscesse, mi limito a dire che si tratta di uno script efficiente e flessibilissimo in grado di individuare espressioni regolari all’interno di un file o di un output testuale. Il nome del comando è infatti acronimo di “global regular-expression print”. Tutto il resto lo trovate con il solito `man grep`. Per chi invece usa abitualmente grep per i task di amministrazione di ogni giorno, raccolgo qui una serie di esempi d’uso un po’ più evoluti e – magari – insoliti. Potrebbero essere utili a voi come lo sono stati a me in numerose occasioni.

Trova le ricorrenze della sequenza qui, quo AND qua in file.txt:
grep "qui.*quo.*qua" ./file.txt

Trova le ricorrenze di qui OR quo OR qua in file.txt:
grep -P 'qui|quo|qua' ./file.txt

Verifica che un indirizzo email sia formattato correttamente:
echo "info@test.eu" | grep -Ei '\b[a-z0-9]{1,}@*\.(it|eu|com|net|org|tv)\b'

Trova la parola qua in modalità case in-sensitive in ./file.txt:
grep -iw "is" demo_file

Trova gli indirizzi email in test.txt formattati come <qwerty.qwerty@qwerty.com> e rimuove i caratteri di enclosure (< e >):
grep -o '<.*@.*\.*>' ./test.txt | tr -d '<>'

Trova le ricorrenze multiple di qui OR quo OR qua in una stringa di testo:
echo -e "1) qui quo qua\n2) quo qui qua\n3)qui quo qui\n4) qua quo qui\n" | grep -E '(qui|quo|qua).*\1'

Verifica se la stringa passata mediante pipe sia un indirizzo IP o meno (provate passando un indirizzo IP mal formato):
echo "192.168.123.123" | grep -E '\b((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b'

Mostra tutte le righe dell’httpd.conf omettendo le istruzioni commentate:
grep -v -E '^\#|^$' /etc/apache2/httpd.conf

Supponendo che lo script test.sh contenga le seguenti istruzioni:

#!/bin/bash
contatore=1
until [ $contatore -gt 10 ]; do
echo contatore $contatore
let contatore+=1
done

… il comando che segue individua la riga 4 e le 3 righe che seguono:

./test.sh | grep -A 3 -i "contatore 4"

… il comando che segue individua invece tutte le righe tranne quelle contenenti il 4 e il 6:

./test.sh | grep -v -e "4" -e "6"

Il sito Internet ufficiale del progetto grep si trova all’indirizzo http://gnu.org/software/grep/.

Ridimensionare bulk con mogrify

Open Source, Principianti, Shell, Tips & tricks 1 commento »

La suite di manipolazione delle immagini bitmap ImageMagick mette a disposizione un tool da linea di comando in grado di farci risparmiare un sacco di tempo. Supponiamo infatti di volere mettere online un certo numero di fotografie per creare una photogallery o un catalogo di prodotti. Ogni immagine deve essere debitamente ridimensionata e compressa a 72dpi, un lavoro che può richiedere da qualche decina di secondi a qualche minuto per ogni singola fotografia, dipende tutto dal grado di esperienza di chi tiene in mano il mouse. Anche nella migliore delle ipotesi,  si tratta di un sacco di tempo, specie se le fotografie da lavorare sono centinaia.

Se però avete a disposizione una qualsiasi distribuzione Linux, non dovete fare altro che sfruttare appieno la potenza del comando mogrify, uno dei tool più utili messi a disposizione da ImageMagick.

È sufficiente copiare le immagini da ridimensionare in una nuova directory:

mkdir thumbs
cp -r *.jpg thumbs

Questa operazione è importante perché mogrify trasforma il file senza conservare il file ‘originale. Ora, se vogliamo ridimensionare tutte le immagini contenute nella directory thumbs in maniera tale che non superino mai le dimensioni di 500×500 pixel, lanciamo il comando:

cd thumbs
mogrify -resize 500x500 *.jpg

Et… voilà! :)

Automatizzare smbpasswd da bash

Open Source, Shell, Sistema, Tips & tricks Nessun commento »

Sarà capitato anche a voi – di avere una musica in testa… – di dover ripristinare un certo numero di utenti Samba dopo l’upgrade di un server o la migrazione da un server ad un altro. Ho trovato un vecchio script che fa tutto il lavoro sporco caricando da un file di testo l’elenco degli utenti da ricreare con le relative password.

Il suo funzionamento è semplicissimo: si tratta in poche parole di una manciata di righe di bash che automatizzano l’interazione con il comando smbpasswd.

Lo script si compone di un primo eseguibile che ammette la sintassi seguente:

multi_smbpasswd.sh -o [add/del] -f [nome del file]

In pratica, per ricreare tutti gli utenti di Samba elencati nel file di configurazione utenti.conf:

multi_smbpasswd.sh -o add -f utenti.conf

Per eliminare tutti gli utenti di Samba elencati nel file di configurazione utenti.conf:

multi_smbpasswd.sh -o del -f utenti.conf

Ecco il codice di multi_smbpasswd.sh:

#!/bin/bash
##########################################################
## This script is here to make adding/subtracting users ##
## to the smbpasswd file easyer etc.                    ##
##########################################################
 
NO_ARGS=2
E_OPTERROR=65
 
operation=0
    # 1 = add
    # 2 = del
    # 0 = error.
fillel=0
    # 1 = good file and file location.
    # 0 = error
 
#########################################################
## Parameters:                                         ##
## -o [options] = The operation to preform. Options are##
##         as follows:                                 ##
##         add = add users to the system               ##
##         del = delete users from the system.         ##
## -f [file_location] = The file that the user names   ##
##           are stored in. must provide               ##
##           the compleate location of the             ##
##           file.                                     ##
#########################################################
 
#protect outselfs from passing nothing to the script.
if [ "$#" -eq "$NO_ARGS" ]
then  #script needs at least 3 options passed to it, otherwise error out and do nothing.
  echo "Usage: $0 -[switch] [option/file_location]"
  exit $E_OPTERROR
fi
 
while getopts o:f: Option
do
  case "$Option" in
    o)
      #check the option and fill the operation var.
      if [ "$OPTARG" == "add" ]
      then
        #we are going to add the users.
        operation=1
      elif [ "$OPTARG" == "del" ]
      then
        #we are deleting the users.
        operation=2
      else
        #error out, cause they didn't pass the right option.
        operation=0
        echo "Invaild operation option!"
        exit $E_OPTERROR
      fi
    ;;
    f)
      #check the option to see if the file exsists and that it is none zero.
      if [ -f "$OPTARG" ]
      then
        if [ -s "$OPTARG" ]
        then
          filel=1
          filelocation="$OPTARG"
        else
          filel=0
         echo "File is of zero length! You need to have a list of users in the file!"
          exit $E_OPTERROR
        fi
      else
        filel=0
       echo "File isn't there! You must provide a valid file location!"
        exit $E_OPTERROR
      fi
    ;;
    *)
      break
    ;;
  esac
 
done
shift $(($OPTIND - 1))
 
if [ $operation == 1 ]
then
  #we are adding the users.
  for i in $(cat "$filelocation")
  do
    username=$(echo "$i" | cut -d':' -f1)
    password=$(echo "$i" | cut -d':' -f2)
    #create a new unix user before smbpasswd
    useradd $username
    smb-passwd-add $username $password
  done
elif [ $operation == 2 ]
then
  #we are deleting the users out of the system.
  for i in $(cat "$filelocation")
  do
    username=$(echo "$i" | cut -d':' -f1)
    #remove the unix user before smbpasswd
    userdel $username
    smbpasswd -x $username
  done
fi
 
exit 0

Non è tutto però. Perché possa funzionare lo script richiama una procedura esterna altrettanto semplice che si occupa di immettere i valori prelevati dal file di configurazione nello standard input di smbpasswd. Ecco il codice dello script smb-passwd-add:

#!/usr/bin/expect --
# wrapper to make passwd(1) be non-interactive
# username is passed as 1st arg, passwd as 2nd
# Executable only by root
 
set password [lindex $argv 1]
spawn /usr/bin/smbpasswd -a [lindex $argv 0]
expect "password:"
send "$password\r"
expect "password:"
send "$password\r"
expect eof

Attenzione!!! Come avete notato questo secondo script si basa su expect, che va quindi installato se volete che funzioni.

Infine, ecco un esempio del file utenti.conf:

utente1:wfwiourfhowirf
utente2:eiuewhifuhwef
utente3:dkjfwskfjhwekj
utente4:woeifjwoerifffj

L’originale si trova a questo indirizzo:

http://www.programmingforums.org/thread6522.html

Ho aggiunto solo un paio di righe per una sommaria sincronizzazione tra utenti Samba e utenti unix.

Spero vi possa servire!

Reimpostare data, ora e timezone su un server Linux

Debian, Localizzazione, Open Source, Shell, Sistema, Tips & tricks Nessun commento »

Il celebre pinguino Tux, logo ufficiale del kernel LinuxCi sono tutorial tanto semplici quanto  intramontabili, veri e propri ever green del bravo informatico che muove i primi passi nel magico mondo dell’amministrazione di sistema. Quelle che seguono sono semplici istruzioni che permettono di reimpostare data, ora e timezone su un server Linux. Li metto a disposizione di un cliente che me ne ha fatto richiesta proprio questa mattina. Onore al merito: gli originali di questi tutorial elementari ma utilissimi si trovano qui e qui.

Reimpostare la data

Per reimpostare solo la data su un server Linux è sufficiente accedere alla linea di comando come root e digitare quanto segue:

# date +%Y%m%d -s "20090217"

Reimpostare l’ora

Per reimpostare solo l’ora su un server Linux è sufficiente accedere alla linea di comando come root e digitare quanto segue:

# date +%T -s "11:12:00"

Reimpostare data e ora

Per reimpostare data e ora su un server Linux è sufficiente accedere alla linea di comando come root e digitare quanto segue:

# date -s "16 FEB 2009 11:12:00"

Reimpostare la Time Zone (soluzione A)

Se state utilizzando Fedora, RHEL o CentOS Linux digitate quanto segue:

# redhat-config-date

Oppure lanciate ‘setup’ e scegliete “Timezone configuration”:

Setup di Red Hat

Reimpostare la Time Zone (soluzione B)

Se utilizzate un’altra distribuzione o se – indipendentemente dalla distribuzione che utilizzate – vi sentite sufficientemente self-confident con Linux da mettere mano ai file di configurazione, procedere come segue:

1) spostatevi in /etc/

# cd /etc

2) create un link simbolico al file che contiene la timezone prescelta

# ln -sf /usr/share/zoneinfo/CET localtime

Reimpostare la Time Zone (soluzione C)

È sempre possibile utilizzare le variabili ambientali per ottenere il cambio della timezone:

$ export TZ=Europe/Rome

In questo caso, le impostazioni saranno valide per tutta la sessione ma saranno perse al primo reboot, a meno che non si aggiunga la stessa istruzione nei file di configurazione che gestitsono le variabili ambientali personalizzate, ma non è una scelta che io mi senta di consigliare, meglio a quel punto utilizzare la soluzione A o la soluzione B.