Τρόπος συμπίεσης ή αποσυμπίεσης αρχείων από το τερματικό Linux

Τα αρχεία ZIP είναι ένα καθολικό αρχείο που χρησιμοποιείται συνήθως σε συστήματα Windows, macOS, ακόμη και Linux. Μπορείτε να δημιουργήσετε ένα αρχείο zip ή να αποσυμπιέσετε αρχεία από ένα με ορισμένες κοινές εντολές τερματικού Linux.

Η μορφή αρχείου συμπιεσμένου αρχείου ZIP

Χάρη στην κυριαρχία της μορφής ZIP στη σφαίρα των Windows, τα αρχεία ZIP είναι ίσως η πιο κοινή μορφή συμπιεσμένης αρχειοθέτησης στον κόσμο.

Ενώ τα αρχεία .tar.gz και tar.bz2 είναι κοινά στο Linux, οι χρήστες των Windows πιθανότατα θα σας στείλουν ένα αρχείο σε μορφή ZIP. Και, αν θέλετε να αρχειοθετήσετε ορισμένα αρχεία και να τα στείλετε σε έναν χρήστη των Windows, η μορφή ZIP θα είναι η πιο εύκολη και συμβατή λύση για όλους.

zip, unzip και Άλλα βοηθητικά προγράμματα

Ίσως γνωρίζετε ήδη ότι τα λειτουργικά συστήματα Linux και Unix, όπως το macOS, διαθέτουν εργαλεία που σας επιτρέπουν να δημιουργείτε αρχεία ZIP και να εξάγετε αρχεία από αυτά, που ονομάζονται zip και unzip. Αλλά υπάρχει μια ολόκληρη οικογένεια σχετικών βοηθητικών προγραμμάτων, όπως zipcloak, zipdetails, zipsplit και zipinfo.

Ελέγξαμε ορισμένες διανομές Linux για να δούμε αν περιλάμβαναν αυτά τα βοηθητικά προγράμματα στην τυπική εγκατάσταση. Όλα τα βοηθητικά προγράμματα ήταν παρόντα στα Ubuntu 19.04, 18.10 και 18.04. Ήταν παρόντες και στο Manjaro 18.04. Το Fedora 29 περιλάμβανε zip και unzip, αλλά κανένα από τα άλλα βοηθητικά προγράμματα και αυτό ίσχυε και για το CentOS.

Για να εγκαταστήσετε τα στοιχεία που λείπουν στο Fedora 29, χρησιμοποιήστε την ακόλουθη εντολή:

sudo dnf install perl-IO-Compress

Για να εγκαταστήσετε τα στοιχεία που λείπουν στο CentOS 7, χρησιμοποιήστε την ακόλουθη εντολή:

sudo yum install perl-IO-Compress

Εάν λείπει κάποιο από τα βοηθητικά προγράμματα zip από μια διανομή Linux που δεν αναφέρθηκε παραπάνω, χρησιμοποιήστε το εργαλείο διαχείρισης πακέτων αυτής της διανομής Linux για να εγκαταστήσετε το απαιτούμενο πακέτο.

Πώς να δημιουργήσετε ένα αρχείο ZIP με την εντολή zip

Για να δημιουργήσετε ένα αρχείο ZIP, πρέπει να πείτε zip το όνομα του αρχείου αρχειοθέτησης και ποια αρχεία θα συμπεριληφθούν σε αυτό. Δεν χρειάζεται να προσθέσετε την επέκταση “.zip” στο όνομα του αρχείου, αλλά δεν βλάπτει εάν το κάνετε.

Για να δημιουργήσετε ένα αρχείο που ονομάζεται source_code.zip που περιέχει όλα τα αρχεία πηγαίου κώδικα C και τα αρχεία κεφαλίδας στον τρέχοντα κατάλογο, θα χρησιμοποιούσατε αυτήν την εντολή:

zip source_code *.c *.h

Κάθε αρχείο παρατίθεται όπως έχει προστεθεί. Εμφανίζεται το όνομα του αρχείου και η ποσότητα συμπίεσης που επιτεύχθηκε σε αυτό το αρχείο.

Αν κοιτάξετε το νέο αρχείο ZIP, μπορείτε να δείτε ότι η επέκταση αρχείου “.zip” προστέθηκε αυτόματα μέσω zip.

ls -l source_code.zip

Εάν δεν θέλετε να δείτε την έξοδο από το zip καθώς δημιουργείται το αρχείο ZIP, χρησιμοποιήστε την επιλογή -q (αθόρυβη).

zip -q source_code *.c *.h

Συμπεριλαμβανομένων καταλόγων σε αρχεία ZIP

Για να συμπεριλάβετε υποκαταλόγους στο αρχείο ZIP, χρησιμοποιήστε την επιλογή -r (αναδρομική) και συμπεριλάβετε το όνομα του υποκαταλόγου στη γραμμή εντολών. Για να δημιουργήσετε ένα αρχείο ZIP όπως πριν και να συμπεριλάβετε επίσης τον υποκατάλογο αρχειοθέτησης, χρησιμοποιήστε αυτήν την εντολή.

zip -r -q source_code archive/ *.c *.h

Για να είστε προσεκτικοί με το άτομο που θα εξάγει τα αρχεία από το αρχείο ZIP που δημιουργείτε, είναι συχνά ευγενικό να δημιουργείτε αρχεία ZIP με τα αρχεία μέσα σε αυτό που περιέχονται σε έναν κατάλογο. Όταν το άτομο που λαμβάνει το αρχείο ZIP το εξάγει, όλα τα αρχεία τοποθετούνται τακτοποιημένα σε έναν κατάλογο στον υπολογιστή του.

  Πώς να καθαρίσετε τα μεταδεδομένα από αρχεία στο Linux

Στην ακόλουθη εντολή, θα αρχειοθετήσουμε τον κατάλογο εργασίας και όλους τους υποκαταλόγους. Σημειώστε ότι αυτή η εντολή εκδίδεται από τον γονικό κατάλογο του φακέλου εργασίας.

zip -r -q source_code work/

Ρύθμιση του επιπέδου συμπίεσης

Μπορείτε να ορίσετε πόση συμπίεση θα εφαρμόζεται στα αρχεία καθώς προστίθενται στο αρχείο ZIP. Το εύρος είναι από 0 έως 9, με το 0 να μην είναι καθόλου συμπίεση. Όσο μεγαλύτερη είναι η συμπίεση, τόσο περισσότερος χρόνος χρειάζεται για τη δημιουργία του αρχείου ZIP. Για αρχεία ZIP μετρίου μεγέθους, η διαφορά ώρας δεν αποτελεί σημαντική ποινή. Στη συνέχεια, όμως, για αρχεία ZIP μετρίου μεγέθους, η προεπιλεγμένη συμπίεση (επίπεδο 6) είναι μάλλον αρκετά καλή ούτως ή άλλως.

Για να χρησιμοποιήσετε το zip για να χρησιμοποιήσετε ένα συγκεκριμένο επίπεδο συμπίεσης, περάστε τον αριθμό ως επιλογή στη γραμμή εντολών, με ένα “-“, όπως αυτό:

zip -0 -r -q source_code work/

Το προεπιλεγμένο επίπεδο συμπίεσης είναι 6. Δεν χρειάζεται να παρέχετε την επιλογή -6, αλλά δεν θα βλάψει εάν το κάνετε.

zip -r -q source_code work/

Το μέγιστο επίπεδο συμπίεσης είναι το επίπεδο 9.

zip -9 -r -q source_code work/

Με την επιλογή των αρχείων και των καταλόγων που αρχειοθετούνται εδώ, η διαφορά μεταξύ της μη συμπίεσης (επίπεδο 0) και της προεπιλεγμένης συμπίεσης (επίπεδο 6) είναι 400K. Η διαφορά μεταξύ της προεπιλεγμένης συμπίεσης και του υψηλότερου επιπέδου συμπίεσης (επίπεδο 9) είναι μόνο 4K.

Αυτό μπορεί να μην φαίνεται πολύ, αλλά για αρχεία που περιέχουν εκατοντάδες ή ακόμα και χιλιάδες αρχεία, η μικρή ποσότητα επιπλέον συμπίεσης ανά αρχείο θα πρόσθετο σε μια αξιόλογη εξοικονόμηση χώρου.

Προσθήκη κωδικών πρόσβασης σε αρχεία ZIP

Η προσθήκη κωδικών πρόσβασης σε αρχεία ZIP είναι εύκολη. Χρησιμοποιήστε την επιλογή -e (κρυπτογράφηση) και θα σας ζητηθεί να εισαγάγετε τον κωδικό πρόσβασής σας και να τον εισαγάγετε ξανά για επαλήθευση.

zip -e -r -q source_code work/

Πώς να αποσυμπιέσετε ένα αρχείο ZIP με την εντολή unzip

Για να εξαγάγετε τα αρχεία από ένα αρχείο ZIP, χρησιμοποιήστε την εντολή unzip και δώστε το όνομα του αρχείου ZIP. Σημειώστε ότι πρέπει να δώσετε την επέκταση “.zip”.

unzip source_code.zip

Καθώς τα αρχεία εξάγονται, παρατίθενται στο παράθυρο του τερματικού.

Τα αρχεία ZIP δεν φέρουν λεπτομέρειες ιδιοκτησίας του αρχείου. Όλα τα αρχεία που εξάγονται έχουν οριστεί ο κάτοχος στον χρήστη που τα εξάγει.

Ακριβώς όπως το zip, το unzip έχει μια επιλογή -q (αθόρυβη), έτσι ώστε να μην χρειάζεται να βλέπετε τη λίστα αρχείων καθώς εξάγονται τα αρχεία.

unzip -q source_code.zip

Εξαγωγή αρχείων σε κατάλογο προορισμού

Για να εξαγάγετε τα αρχεία σε έναν συγκεκριμένο κατάλογο, χρησιμοποιήστε την επιλογή -d (κατάλογος) και δώστε τη διαδρομή προς τον κατάλογο στον οποίο θέλετε να εξαχθεί το αρχείο.

unzip -q source_code.zip -d ./development

Εξαγωγή αρχείων ZIP που προστατεύονται με κωδικό πρόσβασης

Εάν έχει δημιουργηθεί ένα αρχείο ZIP με κωδικό πρόσβασης, το unzip θα σας ζητήσει τον κωδικό πρόσβασης. Εάν δεν παρέχετε τον σωστό κωδικό πρόσβασης, το unzip δεν θα εξαγάγει τα αρχεία.

unzip -q source_code.zip

Εάν δεν σας ενδιαφέρει να τον δουν άλλοι ο κωδικός πρόσβασής σας —ούτε να αποθηκευτεί στο ιστορικό εντολών σας— μπορείτε να δώσετε τον κωδικό πρόσβασης στη γραμμή εντολών με την επιλογή -P (κωδικός πρόσβασης). (Πρέπει να χρησιμοποιήσετε κεφαλαίο “P.”)

unzip -P fifty.treacle.cutlass -q source_code.zip

Εξαιρούνται τα αρχεία

Εάν δεν θέλετε να εξαγάγετε ένα συγκεκριμένο αρχείο ή ομάδα αρχείων, χρησιμοποιήστε την επιλογή -x (exclude). Σε αυτό το παράδειγμα, θέλουμε να εξαγάγουμε όλα τα αρχεία εκτός από αυτά που τελειώνουν σε επέκταση “.h”.

unzip -q source_code.zip -x *.h

Αντικατάσταση αρχείων

Ας υποθέσουμε ότι έχετε εξαγάγει ένα αρχείο αλλά έχετε διαγράψει μερικά από τα εξαγόμενα αρχεία κατά λάθος.

  Οι 5 καλύτεροι πελάτες Torrent για Linux

Μια γρήγορη λύση για αυτό θα ήταν να εξαγάγετε τα αρχεία για άλλη μια φορά. Αλλά αν προσπαθήσετε να εξαγάγετε το αρχείο ZIP στον ίδιο κατάλογο με πριν, η αποσυμπίεση θα σας ζητήσει να αποφασίσετε σχετικά με την αντικατάσταση των αρχείων. Θα περιμένει μία από τις ακόλουθες απαντήσεις.

Εκτός από την απόκριση r (μετονομασία), αυτές οι απαντήσεις κάνουν διάκριση πεζών-κεφαλαίων.

y: Ναι, αντικαταστήστε αυτό το αρχείο
n: Όχι, μην αντικαταστήσετε αυτό το αρχείο
Α: Όλα, αντικαταστήστε όλα τα αρχεία
Ν: Κανένα, αντικαταστήστε κανένα από τα αρχεία
r: Μετονομασία, εξαγάγετε αυτό το αρχείο αλλά δώστε του ένα νέο όνομα. Θα σας ζητηθεί νέο όνομα.

Για να αναγκάσετε την αποσυμπίεση να αντικαταστήσει τυχόν υπάρχοντα αρχεία χρησιμοποιήστε την επιλογή -o (αντικατάσταση).

unzip -o -q source_code.zip

Ο πιο αποτελεσματικός τρόπος για να αντικαταστήσετε τα αρχεία που λείπουν θα ήταν η αποσυμπίεση να εξαγάγετε μόνο τα αρχεία στο αρχείο που δεν βρίσκονται στον κατάλογο προορισμού. Για να το κάνετε αυτό, χρησιμοποιήστε την επιλογή -n (never overwrite).

unzip -n source_code.zip

Ψάχνοντας μέσα σε ένα αρχείο ZIP

Είναι συχνά χρήσιμο και διδακτικό να βλέπετε μια λίστα με τα αρχεία μέσα σε ένα αρχείο ZIP προτού το εξαγάγετε. Μπορείτε να το κάνετε αυτό με την επιλογή -l (αρχείο λίστας). Διοχετεύεται λιγότερα για να είναι διαχειρίσιμη η έξοδος.

unzip -l source_code.zip | less

Η έξοδος δείχνει τους καταλόγους και τα αρχεία μέσα στο αρχείο ZIP, το μήκος τους και την ώρα και την ημερομηνία που προστέθηκαν στο αρχείο. Πατήστε το “q” για έξοδο από το λιγότερο.

Υπάρχουν άλλοι τρόποι για να κρυφοκοιτάξετε μέσα σε ένα αρχείο ZIP που δίνουν διαφορετικούς τύπους πληροφοριών, όπως θα δούμε.

Προσθέστε έναν κωδικό πρόσβασης με την εντολή zipcloak

Εάν έχετε δημιουργήσει ένα αρχείο ZIP αλλά ξεχάσατε να προσθέσετε έναν κωδικό πρόσβασης, τι μπορείτε να κάνετε; Μπορείτε να προσθέσετε γρήγορα έναν κωδικό πρόσβασης στο αρχείο ZIP χρησιμοποιώντας την εντολή zipcloak. Περάστε το όνομα του αρχείου ZIP στη γραμμή εντολών. Θα σας ζητηθεί κωδικός πρόσβασης. Πρέπει να επαληθεύσετε τον κωδικό πρόσβασης εισάγοντάς τον για δεύτερη φορά.

zipcloak source_code.zip

Προβολή λεπτομερειών αρχείου Με την εντολή zipdetails

Η εντολή zipdetails θα σας δείξει πολλές πληροφορίες σχετικά με το αρχείο ZIP. Ο μόνος λογικός τρόπος για να χειριστείτε την ποσότητα εξόδου που μπορεί να δώσει αυτή η εντολή είναι να τη διοχετεύσετε μέσω μικρότερης ποσότητας.

zipdetails source_code.zip | less

Σημειώστε ότι οι πληροφορίες θα περιλαμβάνουν ονόματα αρχείων ακόμα κι αν το αρχείο ZIP προστατεύεται με κωδικό πρόσβασης. Αυτός ο τύπος πληροφοριών αποθηκεύεται στο αρχείο ZIP ως μεταδεδομένα και δεν αποτελεί μέρος των κρυπτογραφημένων δεδομένων.

  Πώς να καθαρίσετε τα μεταδεδομένα από αρχεία στο Linux

Αναζήτηση μέσα στο αρχείο με την εντολή zipgrep

Η εντολή zipgrep σάς επιτρέπει να κάνετε αναζήτηση μέσα στα αρχεία σε ένα αρχείο ZIP. Στο παρακάτω παράδειγμα, θέλουμε να μάθουμε ποια αρχεία στο αρχείο ZIP έχουν το κείμενο “keyval.h”.

zipgrep keyval.h source_code.zip

Μπορούμε να δούμε ότι τα αρχεία slang.c και getval.c περιέχουν τη συμβολοσειρά “keyval.h”. Μπορούμε επίσης να δούμε ότι υπάρχουν δύο αντίγραφα καθενός από αυτά τα αρχεία σε διαφορετικούς καταλόγους στο αρχείο ZIP.

Προβολή πληροφοριών Με την εντολή zipinfo

Η εντολή zipinfo σάς δίνει έναν ακόμη τρόπο να κοιτάξετε μέσα σε ένα αρχείο ZIP. Όπως και πριν, διοχετεύουμε την έξοδο μέσω λιγότερων.

zipinfo source_code.zip | less

Από αριστερά προς τα δεξιά η έξοδος δείχνει:

Τα δικαιώματα του αρχείου
Η έκδοση του εργαλείου που χρησιμοποιήθηκε για τη δημιουργία του αρχείου ZIP
Το αρχικό μέγεθος αρχείου
Περιγραφέας αρχείου (περιγράφεται παρακάτω)
Η μέθοδος συμπίεσης (ξεφούσκωμα, σε αυτή την περίπτωση)
Τα δεδομένα και η χρονική σήμανση
Το όνομα του αρχείου και οποιουδήποτε καταλόγου

Ο περιγραφέας αρχείου αποτελείται από δύο χαρακτήρες. Ο πρώτος χαρακτήρας θα είναι ένα “t” ή ένα “b” για να υποδείξει ένα κείμενο ή ένα δυαδικό αρχείο. Εάν είναι κεφαλαίο, το αρχείο είναι κρυπτογραφημένο. Ο δεύτερος χαρακτήρας μπορεί να είναι ένας από τέσσερις χαρακτήρες. Αυτός ο χαρακτήρας αντιπροσωπεύει τον τύπο μεταδεδομένων που περιλαμβάνεται σε αυτό το αρχείο: κανένα, μια εκτεταμένη τοπική κεφαλίδα, ένα “επιπλέον πεδίο” ή και τα δύο.

-: Εάν δεν υπάρχει κανένα, ο χαρακτήρας θα είναι παύλα
l: εάν υπάρχει εκτεταμένη τοπική κεφαλίδα αλλά δεν υπάρχει επιπλέον πεδίο
x: εάν δεν υπάρχει εκτεταμένη τοπική κεφαλίδα αλλά υπάρχει ένα επιπλέον πεδίο
X: εάν υπάρχει εκτεταμένη τοπική κεφαλίδα και υπάρχει επιπλέον πεδίο

Διαχωρίστε το αρχείο με την εντολή zipsplit

Εάν πρέπει να στείλετε το αρχείο ZIP σε κάποιον άλλο, αλλά υπάρχουν περιορισμοί μεγέθους ή προβλήματα με τη μετάδοση του αρχείου, μπορείτε να χρησιμοποιήσετε την εντολή zipsplit για να χωρίσετε το αρχικό αρχείο ZIP σε ένα σύνολο μικρότερων αρχείων ZIP.

Η επιλογή -n (μέγεθος) σάς επιτρέπει να ορίσετε ένα μέγιστο μέγεθος για κάθε ένα από τα νέα αρχεία ZIP. Σε αυτό το παράδειγμα, χωρίζουμε το αρχείο source_code.zip. Δεν θέλουμε κανένα από τα νέα αρχεία ZIP να είναι μεγαλύτερο από 100 KB (102400 byte).

zipsplit -n 102400 source_code.zip

Το μέγεθος που επιλέγετε δεν μπορεί να είναι μικρότερο από το μέγεθος οποιουδήποτε από τα αρχεία στο αρχείο ZIP.

Χρησιμοποιώντας αυτές τις εντολές, μπορείτε να δημιουργήσετε τα δικά σας αρχεία ZIP, να αποσυμπιέσετε τα αρχεία ZIP που λαμβάνετε και να εκτελέσετε διάφορες άλλες λειτουργίες σε αυτά χωρίς να φύγετε ποτέ από το τερματικό Linux.