Arxivlash va siqish: tar, gzip, zip
Backup olish, loglarni uzoq muddat saqlash yoki fayllarni boshqa serverga uzatish — bularning barchasida bir nechta faylni bitta obyektga yig'ish va uning hajmini kichraytirish kerak bo'ladi. Linuxda bu ikki alohida vazifa: arxivlash (bir nechta faylni bitta faylga yig'ish) va siqish (hajmni kamaytirish) odatda ikki xil vosita bilan, lekin birgalikda ishlatiladi.
Bu maqola fayl va matnni qidirish va matnni qayta yozish maqolalaridan keyin — tahlil qilingan yoki tozalangan fayllarni saqlash va uzatish bosqichini yopadi.
O'quv maqsadlari
Maqolani tugatgach:
- arxivlash (
tar) va siqishning (gzip) alohida vazifalar ekanini tushunasiz; tarbilan arxiv yaratish, ko'rish va ochish amallarini bajara olasiz;gzip/gunzipvatarning siqilgan arxiv bilan bevosita ishlashini bilasiz;zip/unzipni qachontar.gzdan afzal tanlashni bilasiz;- arxivni ochishdan oldin tarkibini tekshirish odatini qo'llaysiz.
Laboratoriya ma'lumotlari
mkdir -p ~/lab/archive/project/{src,logs}
cd ~/lab/archive
printf 'def main():\n pass\n' > project/src/app.py
printf 'level=INFO msg=started\n' > project/logs/app.log
printf 'level=ERROR msg=timeout\n' >> project/logs/app.log
find project -type f -printf '%p %s bytes\n'
tar: fayllarni bitta arxivga yig'ish
tar (tape archive) nomi lentaga yozish davridan qolgan, lekin bugun ham eng ko'p ishlatiladigan arxivlash vositasi. U o'zi siqmaydi — faqat fayl va katalog tuzilmasini, ruxsatlar va egalikni saqlagan holda bitta faylga yig'adi.
Arxiv yaratish
-c— create (yangi arxiv yaratish);-v— verbose, qaysi fayllar qo'shilayotganini ko'rsatadi;-f project.tar— arxiv fayl nomi.-fhar doim oxirgi flag va undan keyin darhol fayl nomi kelishi kerak.
Arxiv tarkibini ochmasdan ko'rish
drwxr-xr-x user/user 0 2026-07-25 10:00 project/
drwxr-xr-x user/user 0 2026-07-25 10:00 project/src/
-rw-r--r-- user/user 21 2026-07-25 10:00 project/src/app.py
drwxr-xr-x user/user 0 2026-07-25 10:00 project/logs/
-rw-r--r-- user/user 48 2026-07-25 10:00 project/logs/app.log
-t — list, arxivni diskka yozmasdan tarkibini chiqaradi. Ishonchsiz manbadan kelgan arxivni ochishdan oldin har doim shu buyruq bilan tekshirish tavsiya etiladi.
Warning
Arxivni tarkibini oldindan tekshirmasdan ochish xavfli bo'lishi mumkin: arxiv ichidagi fayl yo'li ../ bilan boshlanib, joriy katalogdan tashqariga yozishga urinishi mumkin (path traversal). Zamonaviy GNU tar bunday absolyut yoki .. bilan boshlanuvchi yo'llarni sukut bo'yicha rad etadi va ogohlantiradi, lekin ishonchsiz arxivni avval -tvf bilan ko'rib chiqish baribir yaxshi odat.
Arxivni ochish
-x— extract;-C extracted— arxivni joriy katalog o'rniga ko'rsatilgan katalogga ochish.-Cishlatilmasa,tararxivdagi yo'llarni joriy katalogka nisbatan ochadi.
Muayyan faylni arxivdan olish
Bu butun arxivni emas, faqat ko'rsatilgan yo'lni ochadi. Yo'l tar -tvf natijasidagi aynan shu shaklda yozilishi kerak.
Siqish: gzip va tar bilan birgalikda
tar o'zi siqmaydi. Hajmni kichraytirish uchun natijaviy .tar fayl alohida siqish vositasidan (odatda gzip) o'tkaziladi — yoki tarning o'ziga integratsiya qilingan flag orqali bitta buyruqda.
Bitta buyruqda arxivlash va siqish
-z flagi targa natijani gzip orqali o'tkazishni buyuradi. Kengaytma odatda .tar.gz yoki qisqartirilgan .tgz deb yoziladi — bu shunchaki konventsiya, tar kengaytmaga qarab ishlamaydi, -z flagining o'ziga tayanadi.
Siqilgan arxivni ochish
-x (extract) va -z (gzip) birga ishlatiladi — tar avval gunzip qiladi, so'ng arxivni ochadi.
Faylni alohida siqish: gzip/gunzip
gzip bitta faylni siqadi va odatda asl faylni .gz kengaytmali siqilgan nusxaga almashtiradi:
app.log.copy endi mavjud emas — gzip uni siqib, o'rniga app.log.copy.gz qoldiradi. Asl faylni saqlab qolish kerak bo'lsa:
-k (keep) asl faylni o'chirmaydi.
Siqilgan faylni asl holiga qaytarish:
Siqilgan faylni ochmasdan ichini ko'rish:
zcat — gunzip -c bilan bir xil, natijani faylga yozmasdan stdoutga chiqaradi.
Siqish darajasi va hajm-tezlik nisbati
gzip -k -9 project/logs/app.log
mv project/logs/app.log.gz project/logs/app.log.max.gz
gzip -k -1 project/logs/app.log
mv project/logs/app.log.gz project/logs/app.log.fast.gz
ls -l project/logs/app.log.max.gz project/logs/app.log.fast.gz
-1 dan -9 gacha (sukut bo'yicha -6) siqish darajasini bildiradi: past qiymat tezroq, lekin kamroq siqadi; yuqori qiymat sekinroq, ko'proq siqadi. Kichik matn fayllarida farq ko'pincha sezilarsiz, katta log fayllarida esa aniq ko'rinadi.
zip/unzip: platformalararo muqobil
.tar.gz Linux/Unix ekotizimida standart, lekin Windows foydalanuvchisiga arxiv yuborish kerak bo'lsa yoki arxivning ichidan bitta faylni, hammasini qayta siqmasdan yangilash kerak bo'lsa, zip formati qulayroq.
-r— katalogni rekursiv qo'shish;unzip -l—tar -tvfga o'xshab, ochmasdan tarkibni ko'rsatadi.
tar.gz va zip orasidagi farq
| Xususiyat | tar.gz |
zip |
|---|---|---|
| Unix ruxsatlari va egalikni saqlash | Ha, to'liq | Qisman, platformaga bog'liq |
| Windows'da native qo'llab-quvvatlash | Yo'q (qo'shimcha dastur kerak) | Ha |
| Arxiv ichidan bitta faylni almashtirish, hammasini qayta siqmasdan | Yo'q — butun arxivni qayta yaratish kerak | Ha, zip -u bilan |
| Linux ekotizimidagi odatiy standart | Ha (backup, paket, source tarqatish) | Kamroq, asosan cross-platform holatlarda |
Linux serverlar orasidagi backup va deployment uchun odatda tar.gz, tashqi (ayniqsa Windows) foydalanuvchiga fayl yuborish uchun ko'pincha zip tanlanadi.
Amaliy ssenariy: log katalogini arxivlab, tekshirib, saqlash
Muammo: project/logs katalogini backup sifatida siqib, arxiv buzilmaganini tasdiqlab, keyin asl loglarni tozalash kerak.
backup_dir=$HOME/lab/archive/backups
mkdir -p "$backup_dir"
stamp=$(date -u +%Y%m%dT%H%M%SZ)
archive="$backup_dir/logs-$stamp.tar.gz"
tar -czf "$archive" -C "$HOME/lab/archive/project" logs
Arxiv yaratilgach, uni ochmasdan yaxlitligini tekshirish:
gzip -t "$archive" && echo "gzip yaxlitligi OK"
tar -tzf "$archive" > /dev/null && echo "tar tuzilishi OK"
gzip -t— siqish darajasidagi yaxlitlikni tekshiradi (fayl buzilmaganmi);tar -tzf ... > /dev/null— arxiv ichidagi tar tuzilmasini o'qib chiqadi, xato bo'lsa non-zero status qaytaradi.
Faqat ikkala tekshiruv ham muvaffaqiyatli bo'lgandan keyin asl fayllarni o'chirish xavfsizroq:
if gzip -t "$archive" && tar -tzf "$archive" > /dev/null; then
echo "Arxiv tekshirildi: $archive"
else
echo "Arxiv buzilgan, asl fayllar saqlanadi" >&2
exit 1
fi
Danger
Arxivlangandan keyin asl fayllarni avtomatik o'chiradigan skriptda arxiv yaxlitligini tekshirish shart bo'lgan qadam, ixtiyoriy emas. Diskto'lishi yoki uzilgan jarayon natijasida yarim yozilgan arxiv "muvaffaqiyatli yaratildi" deb hisoblanib, asl ma'lumot esa allaqachon o'chirilgan bo'lishi mumkin.
Ko'p uchraydigan xatolar
taro'zi siqadi deb o'ylash — siqish uchun-z(yoki boshqa siqish flagi) alohida kerak;-fflagidan keyin fayl nomini boshqa flag bilan aralashtirib yozish (masalan,tar -fcv—-fdan keyin darhol fayl nomi kelishi kerak);- ishonchsiz arxivni oldindan
-tvf/unzip -lbilan ko'rmasdan to'g'ridan-to'g'ri ochish; gzip fayl.logasl faylni saqlab qoladi deb o'ylash —-kberilmasa asl fayl siqilgan nusxaga almashadi;- backup skriptida arxiv yaxlitligini tekshirmasdan asl fayllarni o'chirish;
.tar.gzni Windows foydalanuvchisiga hech qanday izohsiz yuborish — maxsus dastursiz ochish qiyinroq bo'lishi mumkin, bunday holatdazipko'proq mos.
Amaliy mashqlar
projectkataloginitar -czvfbilan siqing va hajmini siqilmagantar -cvfnatijasi bilan solishtiring.- Yaratilgan
project.tar.gzarxivini-tzfbilan ochmasdan tekshiring, so'ng faqatproject/logs/app.logfaylini undan chiqarib oling. gzip -k -1vagzip -k -9natijalarining hajmini solishtiring va farq sababini tushuntiring.projectkataloginizip -rbilan arxivlang,unzip -lbilan tarkibini ko'ring, so'ngtar.gzbilanziphajmini taqqoslang.- Yuqoridagi amaliy ssenariydagi tekshiruv skriptini ataylab buzilgan arxiv (masalan, faylning oxirgi baytlarini
truncatebilan kesib) bilan sinab ko'ring va u xatoni to'g'ri aniqlashini tasdiqlang.
Tekshiruv mezoni: har bir arxiv uchun uni ochishdan oldin tarkibini qanday tekshirganingizni va nega aynan shu format (tar.gz yoki zip) tanlanganini izohlay olishingiz kerak.
Xulosa
tar fayl va katalog tuzilmasini bitta arxivga yig'adi, siqish esa -z flagi (yoki alohida gzip) orqali qo'shiladi. Arxivni ochishdan oldin -tvf/unzip -l bilan tarkibini ko'rish va gzip -t/tar -tzf bilan yaxlitligini tekshirish — ayniqsa ishonchsiz manbadan kelgan yoki asl fayllarni o'chirishdan oldingi backup arxivlar uchun muhim odat. zip esa Windows bilan muvofiqlik yoki arxiv ichidagi faylni qisman yangilash kerak bo'lganda tar.gzga muqobil sifatida ishlatiladi.