Sophie

Sophie

distrib > Mandriva > 2010.0 > i586 > media > contrib-release > by-pkgid > 6f31691e252df0379b2dc094814df461 > files > 28

howto-sgml-it-2006-6mdv2010.0.noarch.rpm

<!doctype linuxdoc system>

<article opts="italian">

<!-- Title information -->

<title>Bzip2 mini-HOWTO
<author>David Fetter, <url url="mailto:david@fetter.org" name="david@fetter.org">
<date>v2.00, 22 agosto 1999

<abstract>
Questo documento descrive come usare il nuovo programma di compressione bzip2.
Il documento sgml originale &egrave; <url url="http://fetter.org/Bzip2-HOWTO/"
name="qui">. Traduzione a cura di Gerardo Di Iorio, arete(at)luxna2.na.infn.it,
e revisione a cura di Claudio Cattazzo, claudio(at)pluto.it.
</abstract>

<!-- Table of contents -->
<toc>

<!-- Begin the document -->

<sect>Introduzione

<p>Bzip2 &egrave; un nuovo algoritmo per la compressione dei dati.
Generalmente crea file che sono il 60-70% della dimensione dei corrispondenti
ottenuti usando gzip.

<p>Questo documento vi guider&agrave; attraverso alcune comuni applicazioni
per bzip2. 

<p>Le future versioni di questo documento conterranno applicazioni della
libreria C libbzip2 gentilmente scritta dall'autore di bzip2, <url
url="mailto:Julian_Seward@muraroa.demon.co.uk" name="Julian Seward">. Il
manuale di bzip2, che include le informazioni di basso livello della libreria,
pu&ograve; essere trovato <url
url="http://www.bzip2.org/bzip2/docs/manual_toc.html" name="qui">.

<p>Le future versioni di questo documento potranno includere un riassunto del
dibattito su come e se usare bzip2 nel kernel di Linux.

<sect1><bf>Cronologia delle revisioni</bf>

<sect2>v2.00
<p>
Cambiata la sezione <ref id="bzip2-with-less" name="Usare bzip2 con less"> in
modo che i file .tar.bzip2 possano essere realmente letti. Grazie a <url
url="mailto:mc8644@mclink.it" name="Nicola Fabiano"> per la correzione.
<p>
Aggiornata l'utilit&agrave; buzzit.
<p>
Aggiornate le informazioni su tar.

<sect2>v1.92
<p>
Aggiornata la sezione <ref id="bzip2-binaries" name="Ottenere i binari di
bzip2">, inclusi quelli di S.u.S.E.

<sect2>v1.91

<p>Corretto un carattere e chiariti alcuni idiomi della shell <ref
id="bzip2-with-tar" name="nella sezione sull'uso di bzip2 con tar">. Grazie
per questo ad Alessandro Rubini.

<p>Aggiornato lo strumento buzzit in modo da non danneggiare l'archivio
originale bzip2.

<p>Aggiunto bgrep, uno strumento simile a zgrep.

<sect2>v1.9

<p>Chiarito il problema di gcc 2.7.* Grazie a Ulrik Dickow per averlo
indicato.

<p>Aggiunto l'elegante sistema di Leonard Jean-Marc per lavorare con tar.

<p>Aggiunta la traduzione in Svedese di Linus &#195;kerlund.

<p>Corretta la sezione wu-ftpd con i suggerimenti di Arnaud Launay.

<p>Spostate le traduzioni in una loro sezione.

<sect2> v1.8 
<p>Buzzit e tar.diff sono stati messi nell'sgml a cui appartengono. Corretta
la punteggiatura e la formattazione. Grazie a Arnaud Launay per il suo aiuto
nella correzione della mia copia. :-)

<p>Il progetto xv &egrave; stato eliminato per il momento a causa della
mancanza di interesse popolare.

<p>Aggiunti dei rompicapo per le future versioni del documento.

<sect2>v1.7
<p>Aggiunta l'utilit&agrave; buzzit. Corretta la patch per GNU tar.

<sect2>v1.6
<p>Aggiunto il Netscape enabler di TenThumbs.

<p>Modificato anche lesspipe.sh secondo i suoi suggerimenti. Adesso dovrebbe
funzionare meglio.

<sect2>v1.5
<p>Aggiunta la traduzione francese di Arnaud Launay e il suo file per wu-ftpd.

<sect2>v1.4
<p>Aggiunta la traduzione giapponese di Tetsu Isaji.

<sect2>v1.3
<p> Aggiunto .emacs di Ulrik Dickow per 19.30 e superiori.

<p>(Su suo consiglio, corretta anche la patch jka-compr.el per emacs. Oops!
Bzip2 non ha ancora(?) un'opzione "append".)

<sect2>v1.2
<p>Modificata la patch per emacs cos&igrave; i file .bz2 vengono riconosciuti
automaticamente.

<sect2>v1.1
<p>Aggiunta patch per emacs.

<sect2>v1.0
<p>Prima versione.


<sect>Ottenere bzip2<label id="get-bzip2">
<p>
La pagina di Bzip2 si trova presso il <url url="http://www.bzip2.org/"
name="sito inglese">.  Il mirror negli Stati Uniti &egrave; <url
url="http://www.digistar.com/bzip2/index.html" Name="qui">.

<sect1>Bzip2-HOWTO nella propria lingua

<p>Coloro che parlano francese potrebbero riferirsi ai documenti in francese
di Arnaud Launay. La versione web &egrave; <url
url="http://www.freenix.fr/linux/HOWTO/mini/Bzip2.html" name="qui"> e si
pu&ograve; usare ftp <url
url="ftp://ftp.lip6.fr/pub/linux/french/docs/HOWTO/mini/Bzip2.gz" name="qui">.
Arnaud pu&ograve; essere contattato attraverso la posta elettronica a <url
url="mailto:zoro@mygale.org" name="questo indirizzo">.

<p>Chi parla giapponese pu&ograve; far riferimento al documento giapponese di
Testsu Isaji <url url="http://jf.gee.kyoto-u.ac.jp/JF/JF.html" name="qui">.
Isaji pu&ograve; essere contattato attraverso la <url
url="http://www2s.biglobe.ne.jp/~kaien/" name="sua pagina"> o attraverso
la posta elettronica a <url url="mailto:isaji@mxu.meshnet.or.jp" name="questo
indirizzo.">

<p>Chi parla svedese pu&ograve; far riferimento ai documenti in svedese di
Linus &#195;kerlund <url url="http://user.tninet.se/~uxm165t/linux_doc.html"
name="qui">. Linus pu&ograve; essere contattato con la posta elettronica a
<url url="mailto:uxm165t@tninet.se" name="questo indirizzo.">

<sect1>Ottenere i binari precompilati di bzip2<label id="bzip2-binaries">

<p>Vedere i siti.

<sect1>Ottenere i sorgenti di bzip2
<p>Sono reperibili dal sito ufficiale (per sapere dove si veda <ref
id="get-bzip2" name="Ottenere Bzip2">).

<sect1>Compilare bzip2 per la propria macchina
<p><bf>Se si ha gcc 2.7.*</bf>, cambiare la riga
<tscreen><verb>
CFLAGS = -O3 -fomit-frame-pointer -funroll-loops
</verb></tscreen>
<p>in
<tscreen><verb>
CFLAGS = -O2 -fomit-frame-pointer
</verb></tscreen>
<p>ovvero, sostituire la parte -O3 con -O2 e togliere -funroll-loops. Si
potrebbe anche voler aggiungere i parametri -m* usati durante la compilazione
del kernel (come -m486, ad esempio).
<p>La parte pi&ugrave; importante consiste nell'evitare -funroll-loops,
poich&eacute; genera codice errato su molte versioni di gcc 2.7 e codice
pi&ugrave; lento e grande su tutte le versioni di gcc 2.7. Per gli altri
compilatori (lcc, egcs, gcc 2.8.x) vanno bene le opzioni CFLAGS predefinite.
<p>
Dopo di questo basta eseguire make e installarlo come spiegato nel README.

<sect>Usare bzip2 da solo
<p>Leggere la pagina di manuale :)

<sect>Usare bzip2 con tar<label id="bzip2-with-tar">
<p>Sono elencati di seguito tre modi per usare bzip2 con tar, ovvero:
<sect1>Il pi&ugrave; facile da impostare
<p>Questo metodo non richiede alcuna configurazione. Per estrarre un archivo
tar bzip2, foo.tar.bz2, nell'attuale directory, fare
<tscreen><verb>
/percorso/per/bzip2 -cd foo.tar.bz2 | tar xf -
</verb></tscreen>
o 
<tscreen><verb>
tar --use-compress-prog=bzip2 xf foo.tar.bz2
</verb></tscreen>

<p>Questo metodo funziona ma pu&ograve; essere un po' scomodo da scrivere
spesso.

<sect1>Facile da impostare, molto facile da usare, nessuna necessit&agrave; dei privilegi di root

<p>Grazie a <url url="mailto:leonard@sct1.is.belgacom.be" name="Leonard
Jean-Marc"> per il suggerimento. Grazie anche ad <url
url="mailto:rubini@morgana.systemy.it" name="Alessandro Rubini"> per la
distinzione tra bash e csh.

<p>Nel proprio .bashrc si pu&ograve; mettere una riga simile a questa:
<tscreen><verb>
alias btar='tar --use-compress-program /usr/local/bin/bzip2 '
</verb></tscreen>

<p>Nel proprio .tcshrc o .cshrc, la riga analoga &egrave; simile a questa:
<tscreen><verb>
alias btar 'tar --use-compress-program /usr/local/bin/bzip2'
</verb></tscreen>

<sect1>Sempre facile da usare, ma necessita di accesso da root
<p>Aggiornare la propria versione di tar a quella pi&ugrave; nuova di GNU, che
attualmente &egrave; la 1.13.10. Pu&ograve; essere trovata nel <url
url="ftp://alpha.gnu.org/gnu/tar/" name="sito ftp GNU"> o in qualunque mirror.

<sect>Usare bzip2 con less<label id="bzip2-with-less">
<p>Per decomprimere al volo file bzip2, ovvero usare "less" senza prima
decomprimerli, si pu&ograve; creare un file lesspipe.sh (man less) come questo:
<verb>
#!/bin/sh
# Questo &egrave; un preprocessore per 'less'. Viene usato quando questa
# variabile d'ambiente esiste:   LESSOPEN="|lesspipe.sh %s"

  case "$1" in
  *.tar) tar tvvf $1 2>/dev/null ;; # Mostra il contenuto di vari file tar
  *.tgz) tar tzvvf $1 2>/dev/null ;;
# Questo funziona per la versione non modificata di tar:
  *.tar.bz2) bzip2 -cd $1 $1 2>/dev/null | tar tvvf - ;;
# Questo funziona con la versione con patch di tar:
# *.tar.bz2) tyvvf $1 2>/dev/null ;;
  *.tar.gz) tar tzvvf $1 2>/dev/null ;;
  *.tar.Z) tar tzvvf $1 2>/dev/null ;;
  *.tar.z) tar tzvvf $1 2>/dev/null ;;
  *.bz2) bzip2 -dc $1  2>/dev/null ;; # Mostra correttamente i file compressi
  *.Z) gzip -dc $1  2>/dev/null ;;
  *.z) gzip -dc $1  2>/dev/null ;;
  *.gz) gzip -dc $1  2>/dev/null ;;
  *.zip) unzip -l $1 2>/dev/null ;;
  *.1|*.2|*.3|*.4|*.5|*.6|*.7|*.8|*.9|*.n|*.man) FILE=`file -L $1` ; # groff src
    FILE=`echo $FILE | cut -d ' ' -f 2`
    if [ "$FILE" = "troff" ]; then
      groff -s -p -t -e -Tascii -mandoc $1
    fi ;;
  *) cat $1 2>/dev/null ;;
#  *) FILE=`file -L $1` ; # Controlla se &egrave; un binario e se lo &egrave; lo mostra con 'strings'
#    FILE1=`echo $FILE | cut -d ' ' -f 2`
#    FILE2=`echo $FILE | cut -d ' ' -f 3`
#    if [ "$FILE1" = "Linux/i386" -o "$FILE2" = "Linux/i386" \
#         -o "$FILE1" = "ELF" -o "$FILE2" = "ELF" ]; then
#      strings $1
#    fi ;;
  esac
</verb>

<sect>Usare bzip2 con emacs
<sect1>Cambiare emacs per tutti
<p>Ho scritto la seguente patch per jka-compr.el che aggiunge bzip2
all'auto-compression-mode.
<p><bf>Avvertenza:</bf> io l'ho solo provata con emacs-20.2 ma non c'&egrave;
nessuna ragione per credere che un simile approccio non funzioni con altre
versioni.
<p>Per usarla,
<enum>
<item>Andare nella directory dei sorgenti emacs-20.2/lisp (oppure dove li si
ha estratti con tar)
<item>Mettere la seguente patch in un file chiamato jka-compr.el.diff (deve
essere l'unico file ;).
<item>Fare
<tscreen><verb>
 patch < jka-compr.el.diff
</verb></tscreen>
<item>Avviare emacs e fare
<tscreen><verb>
 M-x byte-compile-file jka-compr.el
</verb></tscreen>
<item>Uscire da emacs.
<item>Mettere il proprio jka-compr.elc originale in un posto sicuro in caso di
bachi.
<item>Sostituirlo con il nuovo jka-compr.elc.
<item>Buon divertimento!
</enum>
<verb>
--- jka-compr.el        Sat Jul 26 17:02:39 1997
+++ jka-compr.el.new    Thu Feb  5 17:44:35 1998
@@ -44,7 +44,7 @@
 ;; The variable, jka-compr-compression-info-list can be used to
 ;; customize jka-compr to work with other compression programs.
 ;; The default value of this variable allows jka-compr to work with
-;; Unix compress and gzip.
+;; Unix compress and gzip.  David Fetter added bzip2 support :)
 ;;
 ;; If you are concerned about the stderr output of gzip and other
 ;; compression/decompression programs showing up in your buffers, you
@@ -121,7 +121,9 @@
 
 
 ;;; I have this defined so that .Z files are assumed to be in unix
-;;; compress format; and .gz files, in gzip format.
+;;; compress format; and .gz files, in gzip format, and .bz2 files,
+;;; in the snappy new bzip2 format from http://www.muraroa.demon.co.uk.
+;;; Keep up the good work, people!
 (defcustom jka-compr-compression-info-list
   ;;[regexp
   ;; compr-message  compr-prog  compr-args
@@ -131,6 +133,10 @@
      "compressing"    "compress"     ("-c")
      "uncompressing"  "uncompress"   ("-c")
      nil t]
+    ["\\.bz2\\'"
+     "bzip2ing"        "bzip2"         ("")
+     "bunzip2ing"      "bzip2"         ("-d")
+     nil t]
     ["\\.tgz\\'"
      "zipping"        "gzip"         ("-c" "-q")
      "unzipping"      "gzip"         ("-c" "-q" "-d")

</verb>

<sect1>Modificare emacs per una sola persona

<p>
Un ringraziamento per questo va a Ulrik Dickow, <url
url="mailto:ukdATkampsax.dk" name="ukd@kampsax.dk">, programmatore di sistema
presso Kampsax Technology.

Per fare in modo di usare bzip2 automaticamente, senza essere un
amministratore di sistema, aggiungere ci&ograve; che segue nel proprio
file .emacs.

<verb>
;; Automatic (un)compression on loading/saving files (gzip(1) and similar)
;; We start it in the off state, so that bzip2(1) support can be added.
;; Code thrown together by Ulrik Dickow for ~/.emacs with Emacs 19.34.
;; Should work with many older and newer Emacsen too.  No warranty though.
;;
(if (fboundp 'auto-compression-mode) ; Emacs 19.30+
    (auto-compression-mode 0)
  (require 'jka-compr)
  (toggle-auto-compression 0))
;; Now add bzip2 support and turn auto compression back on.
(add-to-list 'jka-compr-compression-info-list
             ["\\.bz2\\(~\\|\\.~[0-9]+~\\)?\\'"
              "zipping"        "bzip2"         ()
              "unzipping"      "bzip2"         ("-d")
              nil t])
(toggle-auto-compression 1 t)

</verb>

<sect>Usare bzip2 con wu-ftpd

<p>
Ringrazio Arnaud Launay per questo salva banda. Ci&ograve; che segue dovrebbe
andare in /etc/ftpconversions per comprimere e decomprimere al volo con bzip2.
Assicurarsi che i percorsi (come /bin/compress) siano giusti.
<verb>
 :.Z:  :  :/bin/compress -d -c %s:T_REG|T_ASCII:O_UNCOMPRESS:UNCOMPRESS
 :   : :.Z:/bin/compress -c %s:T_REG:O_COMPRESS:COMPRESS
 :.gz: :  :/bin/gzip -cd %s:T_REG|T_ASCII:O_UNCOMPRESS:GUNZIP
 :   : :.gz:/bin/gzip -9 -c %s:T_REG:O_COMPRESS:GZIP
 :.bz2: :  :/bin/bzip2 -cd %s:T_REG|T_ASCII:O_UNCOMPRESS:BUNZIP2
 :   : :.bz2:/bin/bzip2 -9 -c %s:T_REG:O_COMPRESS:BZIP2
 :   : :.tar:/bin/tar -c -f - %s:T_REG|T_DIR:O_TAR:TAR
 :   : :.tar.Z:/bin/tar -c -Z -f - %s:T_REG|T_DIR:O_COMPRESS|O_TAR:TAR+COMPRESS
 :   : :.tar.gz:/bin/tar -c -z -f - %s:T_REG|T_DIR:O_COMPRESS|O_TAR:TAR+GZIP
 :   : :.tar.bz2:/bin/tar -c -y -f - %s:T_REG|T_DIR:O_COMPRESS|O_TAR:TAR+BZIP2
</verb>

<sect>Usare bzip2 con grep

<p>La seguente utilit&agrave;, che chiamo bgrep, &egrave; una leggera modifica
di zgrep che viene distribuito con Linux. La si pu&ograve; utilizzare per poter
usare grep con i file senza decomprimerli con bunzip2.

<verb>
#!/bin/sh

# bgrep -- un wrapper del programma grep che decomprime file
PATH="/usr/bin:$PATH"; export PATH

prog=`echo $0 | sed 's|.*/||'`
case "$prog" in
        *egrep) grep=${EGREP-egrep}     ;;
        *fgrep) grep=${FGREP-fgrep}     ;;
        *)      grep=${GREP-grep}       ;;
esac
pat=""
while test $# -ne 0; do
  case "$1" in
  -e | -f) opt="$opt $1"; shift; pat="$1"
           if test "$grep" = grep; then  # grep &egrave; bacato con -e su SVR4
             grep=egrep
           fi;;
  -*)      opt="$opt $1";;
   *)      if test -z "$pat"; then
             pat="$1"
           else
             break;
           fi;;
  esac
  shift
done

if test -z "$pat"; then
  echo "Fa il grep di file bzip2"
  echo "Uso: $prog [opzioni_grep] modello [file]"
  exit 1
fi

list=0
silent=0
op=`echo "$opt" | sed -e 's/ //g' -e 's/-//g'`
case "$op" in
  *l*) list=1
esac
case "$op" in
  *h*) silent=1
esac

if test $# -eq 0; then
  bzip2 -cd | $grep $opt "$pat"
  exit $?
fi

res=0
for i do
  if test $list -eq 1; then
    bzip2 -cdfq "$i" | $grep $opt "$pat" > /dev/null && echo $i
    r=$?
  elif test $# -eq 1 -o $silent -eq 1; then
    bzip2 -cd "$i" | $grep $opt "$pat"
    r=$?
  else
    bzip2 -cd "$i" | $grep $opt "$pat" | sed "s|^|${i}:|"
    r=$?
  fi
  test "$r" -ne 0 && res="$r"
done
exit $res
</verb>

<sect>Usare bzip2 con Netscape sotto X
<p>
tenthumbs@cybernex.net dice:

<tscreen>
Ho trovato un modo per usare da Linux Netscape bzip2 per Content-Encoding
nello stesso modo con cui viene usato gzip. Aggiungere quanto segue a
$HOME/.Xdefaults oppure $HOME/.Xresources.
<p>
Io uso l'opzione -s perch&eacute; preferisco sacrificare un po' di
velocit&agrave; di decompressione piuttosto che la memoria RAM. Si pu&ograve;
togliere questa opzione se non se ne ha bisogno.
</tscreen>

<verb>
Netscape*encodingFilters:      \
        x-compress :  : .Z     : uncompress -c  \n\
        compress   :  : .Z     : uncompress -c  \n\
        x-gzip     :  : .z,.gz : gzip -cdq      \n\
        gzip       :  : .z,.gz : gzip -cdq      \n\
        x-bzip2    :  : .bz2   : bzip2 -ds \n
</verb>

<sect>Usare bzip2 per ricomprimere altri formati di compressione
<p>
Il seguente programma perl prende file compressi in altri formati
(.tar.gz, .tgz, .tar.Z e .Z) e li rimpacchetta per una migliore compressione.
Il sorgente perl ha tutti i tipi di documentazione su cosa fa e come lo fa.
Quest'ultima versione riceve i file come input dalla riga di comando. Senza
argomenti da riga di comando tenta di ricomprimere tutti i file contenuti
nell'attuale directory.

<verb>
#!/usr/bin/perl -w

#######################################################
#                                                     #
# Questo programma prende i programmi compressi       #
# nella directory attuale e li converte nel formato   #
# bzip2. Gestisce l'etensione .tgz in un modo         #
# ragionevole, producendo un file .tar.bz2.           #
#                                                     #
#######################################################
$counter = 0;
$saved_bytes = 0;
$totals_file = '/tmp/machine_bzip2_total';
$machine_bzip2_total = 0;

@raw = (defined @ARGV)?@ARGV:<*>;

foreach(@raw) {
    next if /^bzip/;
    next unless /\.(tgz|gz|Z)$/;
    push @files, $_;
}
$total = scalar(@files);

foreach (@files) {
    if (/tgz$/) {
        ($new=$_) =~ s/tgz$/tar.bz2/;
    } else {
        ($new=$_) =~ s/\.g?z$/.bz2/i;
    }
    $orig_size = (stat $_)[7];
    ++$counter;
    print "Ricompressione $_ ($counter/$total)...\n";
    if ((system "gzip -cd $_ |bzip2 >$new") == 0) {
        $new_size = (stat $new)[7];
        $factor = int(100*$new_size/$orig_size+.5);
        $saved_bytes += $orig_size-$new_size;
        print "$new &egrave; circa il $factor% della dimensione di $_. :",($factor<100)?')':'(',"\n";
        unlink $_;
    } else {
        print "Arrgghh! &Egrave; successo qualcosa a $_: $!\n";
    }
}
print "Si sono "
    , ($saved_bytes>=0)?"guadagnati ":"persi "
    , abs($saved_bytes)
    , " byte di spazio :"
    , ($saved_bytes>=0)?")":"("
    , "\n"
    ;

unless (-e '/tmp/machine_bzip2_total') {
    system ('echo "0" >/tmp/machine_bzip2_total');
    system ('chmod', '0666', '/tmp/machine_bzip2_total');
}


chomp($machine_bzip2_total = `cat $totals_file`);
open TOTAL, ">$totals_file"
     or die "Impossibile aprire il totale su tutto il sistema: $!";
$machine_bzip2_total += $saved_bytes;
print TOTAL $machine_bzip2_total;
close TOTAL;

print "Sono stati guadagnati un totale di ",`cat $totals_file`," byte su tutta la macchina.\n";
</verb>

</article>