Bądź: Wyszukaj na stronie z użyciem Google
reklama:

wtorek, 18 listopada 2008

Kompresja i dekompresja w konsoli - niezbędnik

Autor: , 16:00, wtorek, 18 listopada 2008


Kompresować można graficznie. Najbardziej znane programy dla Linuksa służące do tego to File Roller (domyślnie w GNOME), Ark (KDE), Xarchiver (dostarczany razem z Xfce; nie jest to oficjalny projekt tego środowiska). Można przeprowadzać takie operacje z poziomu menedżerów plików (np. w Nautilusie zaznaczamy pliki, klikamy prawym przyciskiem myszy, wybieramy Utwórz archiwum... - lub w konsoli, w trybie tekstowym (nie CLI), dzięki programowi mc).

Czynności te można jednak czasem wykonać (przy odrobinie wprawy) nieco szybciej, a już na pewno wliczając czas uruchamiania się aplikacji, szczególnie jeśli biblioteki danego programu nie zostały jeszcze załadowane do pamięci operacyjnej.
Oto ściągawka prezentująca, jak należy korzystać z podstawowych programów do kompresji / archiwizacji obsługiwanych z poziomu konsoli. Pokazane są tylko typowe zastosowania; więcej informacji znaleźć można wpisując man program.

legenda:
PLIKI oznacza umownie listę plików lub katalogów w formacie plik1 plik2 plik3 katalog1/ katalog2/ itd.

tar
tworzenie archiwum
tar -cvf archiwum.tar PLIKI lub tar --create --verbose --file=archiwum.tar PLIKI
(Parametr -v (--verbose) jest opcjonalny; dzięki niemu tar pokazuje, który plik jest właśnie dodawany do archiwum.
Uwaga! Jeżeli plik archiwum.tar już istnieje, zostanie zamazany bez pytania.)
wyświetlenie listy plików w archiwum

tar -tf archiwum.tar (tar -tvf archiwum.tar) lub tar --list --file=archiwum.tar (tar --list --verbose --file=archiwum.tar)
rozpakowanie archiwum archiwum.tar do katalogu /tmp
cd /tmp tar -xvf archiwum.tar lub tar --get --verbose --file=archiwum.tar lub tar --extract --verbose --file=archiwum.tar
ewentualnie
tar -xvf archiwum.tar -C /tmp lub analogicznie tar --get --verbose --file=archiwum.tar --directory=/tmp
Katalog, do którego chcemy rozpakować pliki, musi istnieć.
Uwaga: pliki są nadpisywane bez pytania.
rozpakowanie wybranych plików do katalogu /tmp
tar -xvf archiwum.tar -C /tmp PLIKI
Katalog, do którego chcemy rozpakować pliki, musi istnieć.
dołączanie plików na koniec archiwum
tar -rf archiwum.tar PLIKI lub tar --append --file=archiwum.tar PLIKI (j.w. można też z -v lub --verbose)
usuwanie pliku/plików PLIKI z archiwum
tar --delete -f archiwum.tar PLIKI lub tar --delete --file=archiwum.tar PLIKI
Poleceniem tym można usuwać całe ścieżki z archiwum. Warto zachować ostrożność.

tar + gzip
tworzenie archiwum
tar -zcvf archiwum.tar.gz PLIKI lub tar --gzip ...
rozpakowanie archiwum
tar -zxvf archiwum.tar.gz lub tar --gzip lub ... tar --gunzip ... lub tar --ungzip ...

tar + bzip2
tworzenie archiwum
tar -jcvf archiwum.tar.gz PLIKI lub tar --bzip2 ...
rozpakowanie archiwum
tar -jxvf archiwum.tar.bz2 lub tar --bzip2 ...

zip
tworzenie archiwum
zip -r archiwum.zip PLIKI
(Parametr -r jest potrzebny, gdy dodajemy również katalogi - powoduje on, że do pliku archiwum.zip trafia nie tylko dany katalog, ale również jego zawartość. Gdy podajemy tylko nazwy plików, -r można pominąć.)
Jeżeli plik archiwum.zip istnieje, PLIKI są do niego dołączane.

wyświetlenie listy plików w archiwum
unzip -l archiwum.zip
testowanie archiwum
unzip -t archiwum.zip
rozpakowanie archiwum archiwum.zip do katalogu /tmp
unzip z.zip -d /tmp
rozpakowanie archiwum archiwum.zip, przywracając oryginalne wartości UID i GID (dotyczy systemów UNIX i pochodnych)
unzip -X archiwum.zip
Inaczej niż w przypadku programu tar: jeśli katalog, do którego chcemy rozpakować archiwum nie istanieje, zostanie on utworzony.
rozpakowanie wybranych plików do katalogu /tmp
unzip archiwum.zip -d /tmp PLIKI
dołączanie plików do archiwum
zip -r archiwum.zip PLIKI
usuwanie pliku/plików PLIKI z archiwum
zip -d archiwum.zip PLIKI

gzip
kompresowanie pliku
Uwaga. Program gzip nie archiwizuje plików - plik .gz może przechować tylko 1 plik (w postaci skompresowanej).
gzip PLIK (uwaga: PLIK zostanie usunięty)
To polecenie tworzy plik o nazwie PLIK.gz, a następnie usuwa PLIK.
kompresowanie pliku - sposób drugi (bez usuwania pliku wejściowego)
gzip -c PLIK > nowyplik.gz
Uwaga. Jeżeli nowyplik.gz istnieje, zostanie nadpisany bez pytania.
testowanie pliku

gzip -tv plik.gz
wyświetlenie informacji o pliku .gz
gunzip -l plik.gz lub gunzip -lN plik.gz
(Szczypta "teorii". Gdy program gunzip dekompresuje plik, domyślnie nadaje nowemu taką samą nazwę, ale bez rozszerzenia .gz. Jeśli dodamy parametr -N, utworzony plik będzie miał nazwę taką, jaką miał przed kompresją.
Stąd parametr -N ma znaczenie także przy wyświetlaniu informacji o pliku gzip w polu uncompressed_name - nazwa pliku po dekompresji.)
rozpakowanie pliku plik.gz do katalogu /tmp
cd /tmp gunzip plik.gz lub gunzip -N plik.gz
rozpakowanie pliku nowyplik.gz do katalogu /tmp - sposób drugi
gunzip -c plik.gz > /tmp/mój_plik
Uwaga. Jeżeli mój_plik istnieje, zostanie nadpisany bez pytania.

bzip2
kompresowanie pliku
Uwaga. Program bzip2 nie archiwizuje plików - plik .bz2 może przechować tylko 1 plik (w postaci skompresowanej).
bzip2 PLIK (uwaga: PLIK zostanie usunięty)
To polecenie tworzy plik o nazwie PLIK.bz2, a następnie usuwa PLIK.
kompresowanie pliku - sposób drugi (bez usuwania pliku wejściowego)
bzip2 -k PLIK
testowanie pliku
bunzip2 -tv plik.bz2
(Podobnie jak w przypadku gzipa, po dekompresji program bzip2 domyślnie nadaje nowemu plikowi taką samą nazwę, ale bez rozszerzenia .bz2.
Tutaj jednak nie występuje parametr o funkcji takiej, jaką ma -N z gzipa.)

rozpakowanie pliku plik.bz2 do katalogu /tmp
cd /tmp bunzip2 plik.bz2
Jeśli plik.bz2 nie ma być usunięty, stosujemy parametr -k.
rozpakowanie pliku nowyplik.gz do katalogu /tmp - sposób drugi
bunzip2 -c plik.bz2 > /tmp/mój_plik
Uwagi. W tym przypadku plik.bz2 nie zostanie usunięty. Natomiast, jeżeli mój_plik istnieje, zostanie nadpisany bez pytania.
Porada. Masz zepsuty plik bz2? Spróbuj go naprawić za pomocą polecenia bzip2recover! Może chociaż część pliku da się uratować...


7-zip
7-zip jest uniwersalnym programem kompresującym. Obsługuje kilka formatów kompresji, ma również swój - 7z, wykorzystujący domyślnie algorytm LZMA, który jest stosowany w niektórych paczkach deb.
Największą wadą formatu 7z jest to, że nie zapisuje "uniksowych" informacji o właścicielu i grupie plików. Stąd niezalecane jest używanie archiwum 7z do przechowywania kopii zapasowych w Linuksie. Zamiast tego warto utworzyć plik tar z wybranymi plikami, a dopiero potem skompresować w formacie 7z.
Co więcej, również pliki w innych formatach (zip, tar) utworzone za pomocą 7z nie mają ustawionych wartości UID/GID.

tworzenie archiwum
7z a archiwum.7z PLIKI
wyświetlenie listy plików w archiwum
7z l archiwum.7z
testowanie
7z t archiwum.7z
rozpakowanie archiwum archiwum.7z do katalogu /tmp
7z x archiwum.7z -o/tmp
Po parametrze -o nie ma być odstępu.
rozpakowanie wybranych plików do katalogu /tmp
7z x archiwum.7z -o/tmp PLIKI
dołączanie plików do archiwum
7z a archiwum.7z PLIKI
usuwanie pliku/plików PLIKI z archiwum
7z d archiwum.7z PLIKI

Na koniec ciekawostka. Wiele graficznych narzędzi do kompresji/dekompresji plików nie robi tego "samodzielnie", ale używa zewnętrznych poleceń - takich jak te wymienione. Taki program określamy mianem front-end. Przykładem takiej aplikacji jest File Roller.

Komentarze 12 comments
Anonimowy pisze...

a kto wie jak zmusić gzipa do używania obu rdzeni Core 2 Duo?
np w simple backup?

Jaro pisze...

nie zapominajcie o lzma... duże obrazy płyt są nim skompresowane (np. TeX Live - DVD 3.2GB po kompresji 2.3GB). Przydaje sie mi częściej (do użytku sam dla siebie bo mało popularne) niż te wszystkie rary, zipy, tary, jary itp itd :)

lukasz210 pisze...

Zamiast bzip2 warto zainteresować się Parallel BZIP2. Wykorzystuję on moc wszystkich rdzeni podczas kompresji i dekompresji a nie tylko jednego.
@anonimowy co do gzipa zainteresuj się programem mgzip. Wykorzystuję on moc wszystkich rdzeni ale tylko do kompresji. Podczas dekompresji wykorzystywany jest 1 rdzeń. Ale wątpię aby simple backup mógł wykorzystać 2 i więcej rdzeni. Zapewne bazuje on na zwykłym gzipie

Anonimowy pisze...

brakuje formatu .rar

Bartekw pisze...

Mnie tam nie brakuje formatu RAR (sic!) ale cpio. Fajny poradnik, spytam autora jako experta. Dlaczego po rozpakowaniu pliku tar-który powstał na linuxie i zawiera polskie ogonki-plikom brakuje znaków dialektycznych w nazwach (rozpakowuję pod windowsem). Próbowałem wielu formatów-ten sam error :( Rozpakowane pliki pod linuxem ogonki posiadają...

Enlik pisze...

Niestety, nie za bardzo mogę coś doradzić.
Problem wynika prawdopodobnie z różnicy w kodowaniu znaków pomiędzy tymi sytemami - na Linuksie mamy UTF-8, na Windowsie (polskim) bodajże jakieś CP1250 (nawet nie ISO-8859-2... niech żyje brak standaryzacji...).
Cóż, może spróbuj poeksperymentować z różnymi programami do dekompresji, pogrzeb w ustawieniach...

Przy okazji zauważyłem, że program 7-zip ma CAŁKOWICIE problemy (przynajmniej u mnie) z polskimi znakami przy pakowaniu i rozpakowywaniu plików tar ORAZ zip (gzip i bzip2 nie testowałem w tym zakresie)... (taki błąd na szczęście nie występuje z plikami 7z). Używajcie zatem polecenia 7z tylko dla formatu 7z, jeśli w archiwum znajdują się pliki z "nietypowymi" nazwami.

Bartekw, dzięki za komentarz!

Bartekw pisze...

Ja także dziękuję za odpowiedź!

Anonimowy pisze...

Skonczyly mi sie paluszki. ;(

JKL pisze...

Może będziesz mógł pomóc w tej kwestii:
Mam wykupiony hosting gdzie mam swoje strony www (mnóstwo katalogów i plików).
Mam swój komp z ubuntu.
Chcę zrobić coś takiego aby:
Wpisuję komendę do terminala na ubuntu i komputer łączy mi się z hostingiem, pakuje katalogi i pliki, następnie spakowany plik ma zostać zciągnięty na mój dysk i koniec. Ważne jest aby prawa plików (zapis, odczyc, wykonywanie itd) pozostały takie same jak oryginał na hostingu.

JKL pisze...

już coś mniej więcej wykombinowałem.
scp -P nr_portu_sftp nazwa_pliku nazwa_usera@nazwa_serwera:~/sciezka_dostepu_na_serwerze/

brakuje mi tylko pakowania i rozpakowania katalogu, jak by ktoś miał jakiś pomysł...

Anonimowy pisze...

ja pierdole -.-

Anonimowy pisze...

Bez f nie będzie przypadkiem wymuszać zastępowania plików?

Prześlij komentarz


Popularne posty

Etykiety