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

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

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

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

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

ΣΧΕΤΙΚΟΙ: Πώς να εξαγάγετε αρχεία από αρχείο .tar.gz ή .tar.bz2 σε Linux

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 εγκατάσταση 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επιλογή (recursive) και συμπεριλάβετε το όνομα του υποκαταλόγου στη γραμμή εντολών. Για να δημιουργήσετε ένα αρχείο ZIP όπως και πριν και να συμπεριλάβετε τον υποκατάλογο αρχείων, χρησιμοποιήστε αυτήν την εντολή

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

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

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

zip -r -q source_code εργασία /

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

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

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

zip -0 -r -q source_code work /

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

zip -r -q source_code εργασία /

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

zip -9 -r -q source_code work /

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

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

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

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

zip -e -r -q source_code εργασία /

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

Για να εξαγάγετε τα αρχεία από ένα αρχείο ZIP, χρησιμοποιήστε την εντολή αποσυμπίεσης και καταχωρίστε το όνομα του αρχείου ZIP. Σημειώστε ότι μπορείτε να κάνετε ανάγκη να παρασχεθεί η «.zip» παράταση.

αποσυμπιέστε το 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.")

αποσυμπιέστε -P 50.treacle.cutlass -q source_code.zip

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

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

unzip -q source_code.zip -x * .h

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

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

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

Εκτός από την r(μετονομασία) απάντηση, αυτές οι απαντήσεις είναι πεζά.

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

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

unzip -o -q source_code.zip

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

αποσυμπιέστε -n source_code.zip

Κοιτάζοντας μέσα σε ένα αρχείο ZIP

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

unzip -l source_code.zip | πιο λιγο

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

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

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

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

zipcloak source_code.zip

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

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

zipdetails source_code.zip | πιο λιγο

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

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

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

zipgrep keyval.h source_code.zip

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

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

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

zipinfo source_code.zip | πιο λιγο

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

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

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

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

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

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

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

zipsplit -n 102400 source_code.zip

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

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