При резервирном копировании, переносе данных и ротации логов, очень полезным было и остается архивирование. Стандартными для UNIX-систем де-факто были и остаются архиваторы tar, gzip и bzip (bzip2).
Краткий справочник, как ими управлять:
tar cf file.tar files – создать tar-архив с именем file.tar содержащий files
tar xf file.tar – распаковать file.tar
tar zcf file.tar.gz files – создать архив tar с сжатием Gzip
tar zxf file.tar.gz – распаковать tar с Gzip
tar jcf file.tar.bz2 – создать архив tar с сжатием Bzip2
tar jxf file.tar.bz2 – распаковать tar с Bzip2
gzip file – сжать file и переименовать в file.gz
gzip -k file – сжать file в file.gz и оставить file
gzip -d file.gz – разжать file.gz в file
gunzip file.gz – разжать file.gz в file
gzip -c file.gz - разжать файл и вывести в stdout
gzcat file.gz - разжать файл и вывести в stdout
на самом деле gunzip и gzcat - хардлинки на gzip,
~> ls -laio /usr/bin/gzcat /usr/bin/gunzip /usr/bin/gzip
47132 -r-xr-xr-x 4 root wheel - 28400 Mar 6 2008 /usr/bin/gunzip
47132 -r-xr-xr-x 4 root wheel - 28400 Mar 6 2008 /usr/bin/gzcat
47132 -r-xr-xr-x 4 root wheel - 28400 Mar 6 2008 /usr/bin/gzip
просто так проще, чтобы не запоминать ключи :)
с bzip2 все аналогично gzip:
bzip2 file – сжать file и переименовать в file.bz2
bzip2 -k file – сжать file в file.gz2 и оставить file
bunzip2 file.bz2 – разжать file.bz2 в file
bzcat file.bz2 - разжать файл и вывести в stdout
bzcat/gzcat очень полезно применять, когда нужно прочитать уже сротированный лог, например:
bzcat /var/log/auth.log.6.bz2 | less
Архиватор rar содержит великое множество ключей, самые распространенные:
rar a 1.rar 1.txt q - добавить в архив 1.rar файл 1.txt и каталог q
rar a 2.rar 1.txt q/ - добавить в архив 2.rar файл 1.txt и каталог q,
не добавляя имя каталога в архив
rar e 1.rar - распаковать все файлы в текущий каталог
rar x 1.rar - распаковать файлы в текущий каталог, сохраняя структуру каталогов
rar p -inul 1.rar - вывести все файлы архива в stdout
rar vb 1.rar - показать список файлов в архиве
~> rar a 1.rar 1.txt q/
Creating archive 1.rar
Adding 1.txt OK
Adding q/4.txt OK
Done
~> rar vb 1.rar
1.txt
q/4.txt
~> rar a 2.rar 1.txt q
Creating archive 2.rar
Adding 1.txt OK
Adding q/4.txt OK
Adding q OK
Done
~> rar vb 2.rar
1.txt
q/4.txt
q
Пример с архиватором zip:
zip a.zip d.txt - добавить в архив a.zip файл d.txt
unzip -ql a.zip - вывести список файлов архива a.zip
unzip a.zip - распаковать архив a.zip
unzip a.zip -d files - распаковать архив a.zip в каталог files
Скрипт для рекурсивной распаковки всех файлов текущего каталога, при условии, что если в архиве файлы содержатся не в каталоге, то создается каталог с именем архива:
# unzipper.sh # ver. 0.3 (c) NetSpider #!/bin/sh cwd=`pwd` zipfiles=`find $cwd -name \*.zip` for zf in ${zipfiles} do unzipdir=`echo $zf | sed 's/\.zip//g'` indirname=`unzip -ql $zf | grep "/" | head -1 | awk '{print $4}'` adfile=`unzip -ql $zf | egrep -v "/|--|Length" | head -1 | awk '{print $4}'` echo if [ -z $indirname ] then unzip $zf -d $unzipdir else if [ -z $adfile ] then unzip $zf else unzip $zf -d $unzipdir fi fi done