Arxivlar — tar, gzip, zip

~10 daq · Linux · Paketlar va muhit

Muammodan boshlaylik

Saytning uploads papkasini (12 000 ta rasm) boshqa serverga ko'chirish kerak. Yoki kunlik zaxira nusxa olish. Yoki GitHub dan node-v22.11.0-linux-x64.tar.xz ni yuklab oldingiz — endi uni qanday ochasiz?

Linux da arxiv bilan ishlashning asosiy vositasi — tar. U taniqli darajada "g'alati" bayroqlarga ega, lekin aslida faqat 3–4 ta shaklni bilish yetarli.


tar va gzip — ikki xil ish

  • tar (tape archive) — ko'p fayl va papkani bitta faylga yig'adi. O'zi siqmaydi
  • gzip, bzip2, xz, zstd — bitta faylni siqadi

Shuning uchun Linux arxivlari ko'pincha ikki kengaytmali:

Kengaytma Nima tar bayrog'i
.tar Faqat yig'ilgan, siqilmagan —
.tar.gz, .tgz gzip bilan siqilgan — eng keng tarqalgan z
.tar.bz2 bzip2 — kichikroq, sekinroq j
.tar.xz xz — eng kichik, eng sekin J
.tar.zst zstd — tez va yaxshi siqish --zstd

tar — 3 ta asosiy buyruq

Yaratish (c — create)

tar -czf zaxira.tar.gz papka/
  • c — create (yaratish)
  • z — gzip bilan siqish
  • f — fayl nomi (keyingi argument)

Ochish (x — extract)

tar -xzf zaxira.tar.gz
tar -xzf zaxira.tar.gz -C /opt/        # boshqa papkaga

Ichini ko'rish (t — list)

tar -tzf zaxira.tar.gz
tar -tzf zaxira.tar.gz | head

Eslab qolish

c — create   (yarat)
x — extract  (och)
t — list     (ko'r)
z — gzip
v — verbose  (har bir faylni ko'rsat)
f — file     (fayl nomi — DOIM OXIRIDA, chunki undan keyin nom keladi)

[!TIP] Zamonaviy tar siqish turini kengaytmadan o'zi aniqlaydi ochishda. tar -xf fayl.tar.xz — J shart emas. Yaratishda esa siqishni ko'rsatish kerak, yoki -a: tar -caf arxiv.tar.xz papka/.


Amaliy misollar

# Loyihani node_modules siz arxivlash
tar -czf dokon.tar.gz --exclude=node_modules --exclude=.git dokon/

# Sana bilan zaxira
tar -czf "zaxira-$(date +%F).tar.gz" /var/www/dokon

# Faqat bitta faylni chiqarib olish
tar -xzf zaxira.tar.gz dokon/config.json

# Jarayonni ko'rish
tar -xzvf katta.tar.gz

# Yuklab olingan dasturni ochish
wget https://nodejs.org/dist/v22.11.0/node-v22.11.0-linux-x64.tar.xz
tar -xf node-v22.11.0-linux-x64.tar.xz

Absolyut yo'llar

tar -czf zaxira.tar.gz /var/www/dokon
tar: Removing leading '/' from member names

tar xavfsizlik uchun boshidagi / ni olib tashlaydi — ochganda fayllar var/www/dokon/ sifatida joriy papkaga chiqadi, /var/www ni ustidan yozmaydi. Arxivni papkaning ichidan yaratish toza natija beradi:

tar -czf zaxira.tar.gz -C /var/www dokon

-C /var/www — "avval shu papkaga o'tib, keyin dokon ni arxivla".

[!WARNING] Begona arxivni ochishdan oldin tar -tzf bilan ichini ko'ring: ba'zi arxivlar fayllarni to'g'ridan-to'g'ri joriy papkaga "sochib" yuboradi (ichida bitta umumiy papka yo'q). Shubhali bo'lsa — alohida bo'sh papkada oching.


gzip — bitta faylni siqish

gzip katta.log              # → katta.log.gz (asl fayl o'chadi!)
gzip -k katta.log           # asl faylni saqlab
gunzip katta.log.gz         # ochish
zcat katta.log.gz | less    # ochmasdan o'qish
zgrep ERROR app.log.gz      # ochmasdan qidirish (14-dars)

Matnli fayllar (loglar, SQL dump lar) gzip bilan 5–10 barobar kichrayadi:

mysqldump dokon | gzip > dokon.sql.gz            # siqilgan zaxira
gunzip -c dokon.sql.gz | mysql dokon             # tiklash

Rasmlar, videolar, allaqachon siqilgan fayllar (.jpg, .mp4, .zip) — deyarli kichraymaydi.


zip — Windows bilan almashish uchun

Windows foydalanuvchilariga yuborish uchun .zip qulayroq:

sudo apt install zip unzip

zip -r loyiha.zip loyiha/
zip -r loyiha.zip loyiha/ -x "*/node_modules/*"
unzip loyiha.zip
unzip loyiha.zip -d /opt/loyiha
unzip -l loyiha.zip                  # ichini ko'rish
tar.gz zip
Linux ruxsatlari, havolalar ✅ Saqlanadi ❌ Qisman
Windows da ochish Qo'shimcha dastur (yoki Windows 11) ✅ Standart
Siqish Butun arxiv birga — yaxshiroq Har fayl alohida
Bitta faylni tez olish Sekin ✅ Tez
Linux da standart ✅

Linux serverlar orasida — tar.gz. Odamlar bilan almashishda — zip.


Hajm va tezlik

ls -lh zaxira.tar.gz
du -sh papka/                     # asl hajm bilan solishtirish

Katta arxivlar uchun zstd — gzip dan bir necha barobar tezroq, siqishi yaxshiroq:

tar --zstd -cf zaxira.tar.zst papka/

Nima uchun shunday?

Nima uchun Linux da yig'ish (tar) va siqish (gzip) — ikki alohida vosita?

UNIX falsafasi yana: har bir vosita bitta ishni yaxshi qiladi. tar faqat fayllarni oqimga aylantiradi (ruxsatlar, egalar, havolalar bilan); siqish esa istalgan algoritm bilan qilinishi mumkin — va yangi, yaxshiroq algoritm paydo bo'lsa (xz, zstd), tar ni o'zgartirmasdan ishlatiladi. Bundan tashqari, ular pipe bilan birlashadi: tar -c papka | ssh server "tar -x" — arxiv faylini yaratmasdan, papkani tarmoq orqali to'g'ridan-to'g'ri boshqa serverga ko'chiradi (35-dars). Yagona "hammasini qiladigan" format bunday moslashuvchanlikni bermaydi.


Xulosa

Eslab qoling:

  • tar -czf arxiv.tar.gz papka/ — yaratish
  • tar -xzf arxiv.tar.gz [-C manzil] — ochish (-xf — tur avtomatik)
  • tar -tzf arxiv.tar.gz — ichini ko'rish
  • --exclude=node_modules; -C — papkaga o'tib arxivlash
  • gzip -k, gunzip, zcat, zgrep — bitta fayl
  • mysqldump | gzip > zaxira.sql.gz
  • zip -r / unzip — Windows bilan almashish uchun
  • Begona arxivni ochishdan oldin — tar -tzf

Keyingi bo'lim

7-bo'lim: Tarmoq — IP, DNS, portlar, curl, SSH va firewall.