Android

Diff εντολή στο linux

05. Linux Root Folders Explained

05. Linux Root Folders Explained

Πίνακας περιεχομένων:

Anonim

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

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

Πώς να χρησιμοποιήσετε την εντολή diff

Η σύνταξη για την εντολή diff έχει ως εξής:

diff… FILES

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

Για να αποθηκεύσετε την έξοδο εντολών σε ένα αρχείο, χρησιμοποιήστε τον χειριστή ανακατεύθυνσης:

diff file1 file2 > patch

, θα χρησιμοποιήσουμε τα ακόλουθα δύο αρχεία για να εξηγήσουμε πώς λειτουργεί η εντολή diff :

file1

Ubuntu Arch Linux Debian CentOS Fedora αρχείο2

Kubuntu Ubuntu Debian Arch Linux Centos Fedora

Κανονική μορφή

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

diff file1 file2

Η έξοδος θα φαίνεται κάπως έτσι:

0a1 > Kubuntu 2d2 < Arch Linux 4c4, 5 < CentOS --- > Arch Linux > Centos

Η κανονική μορφή εξόδου αποτελείται από μία ή περισσότερες ενότητες που περιγράφουν τις διαφορές. Κάθε τμήμα μοιάζει με αυτό:

change-command < from-file-line… --- > to-file-line…

0a1 , 2d2 και 4c4, 5 είναι εντολές αλλαγής. Κάθε εντολή αλλαγής περιέχει τα εξής, από αριστερά προς τα δεξιά:

  • Ο αριθμός γραμμής ή το εύρος γραμμών στο πρώτο αρχείο. Ένας ειδικός χαρακτήρας αλλαγής. Ο αριθμός γραμμής ή το εύρος γραμμών στο δεύτερο αρχείο.

Ο χαρακτήρας αλλαγής μπορεί να είναι ένας από τους ακόλουθους:

  • a - Προσθέστε τις γραμμές. c - Αλλαγή των γραμμών. d - Διαγράψτε τις γραμμές.

Η εντολή αλλαγής ακολουθείται από τις πλήρεις γραμμές που αφαιρούνται ( < ) και προστίθενται στο αρχείο ( > ).

Ας εξηγήσουμε την έξοδο:

  • 0a1 - Προσθέστε τη γραμμή 1 του δεύτερου αρχείου στην αρχή του αρχείου1 (μετά τη γραμμή 0 ).
    • > Kubuntu - Η γραμμή από τη δεύτερη γραμμή που προστίθεται στο πρώτο αρχείο όπως περιγράφεται παραπάνω.
    2d2 - Διαγραφή της γραμμής 2 στο πρώτο αρχείο. Το σύμβολο 2 μετά το d σημαίνει ότι εάν η γραμμή δεν διαγραφεί θα εμφανιστεί στη γραμμή 2 στο δεύτερο αρχείο.
    • < Arch Linux - η διαγραμμένη γραμμή.
    4c4, 5 - Αντικαταστήστε (αλλάξτε) τη γραμμή 5 στο πρώτο αρχείο με τις γραμμές 4-5 από το δεύτερο αρχείο.
    • < CentOS - Η γραμμή στο πρώτο αρχείο που πρέπει να αντικατασταθεί. --- - Διαχωριστικό. > Arch Linux και > Centos - Lines από το δεύτερο αρχείο που αντικαθιστά τη γραμμή στο πρώτο αρχείο.

Μορφή πλαισίου

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

Η επιλογή -c λέει diff για την παραγωγή εξόδου στη μορφή περιβάλλοντος:

diff -c file1 file2

*** file1 2019-11-25 21:00:26.422426523 +0100 --- file2 2019-11-25 21:00:36.342231668 +0100 *************** *** 1, 6 **** Ubuntu - Arch Linux Debian ! CentOS Fedora --- 1, 7 ---- + Kubuntu Ubuntu Debian ! Arch Linux ! Centos Fedora

Η έξοδος ξεκινά με τα ονόματα και τα timestamps αν τα αρχεία συγκρίνονται και μία ή περισσότερες ενότητες που περιγράφουν τις διαφορές. Κάθε τμήμα μοιάζει με αυτό:

*************** *** from-file-line-numbers **** from-file-line… --- to-file-line-numbers ---- to-file-line…

  • from-file-line-numbers to-file-line-numbers - Οι αριθμοί γραμμών ή το εύρος γραμμών διαχωρισμένων με κόμμα στο πρώτο και στο δεύτερο αρχείο, αντίστοιχα. from-file-line to-file-line - Οι γραμμές που διαφέρουν και οι γραμμές περιβάλλοντος:
    • Γραμμές που ξεκινούν με δύο κενά είναι γραμμές γραμμών, οι γραμμές που είναι οι ίδιες και στα δύο αρχεία. Οι γραμμές που αρχίζουν με το σύμβολο μείον ( - ) είναι οι γραμμές που δεν αντιστοιχούν σε τίποτα στο δεύτερο αρχείο. Γραμμές που λείπουν στο δεύτερο αρχείο. Γραμμές που αρχίζουν με το σύμβολο συν ( + ) είναι οι γραμμές που δεν αντιστοιχούν σε τίποτα στο πρώτο αρχείο. Γραμμές που λείπουν στο πρώτο αρχείο.Οι γραμμές που αρχίζουν με το θαυμαστικό ( ! ) Είναι οι γραμμές που αλλάζουν μεταξύ δύο αρχείων. Κάθε ομάδα γραμμών αρχίζει με ! από το πρώτο αρχείο έχει αντίστοιχη αντιστοιχία στο δεύτερο αρχείο.

Ας εξηγήσουμε τα πιο σημαντικά μέρη της παραγωγής:

  • Σε αυτό το παράδειγμα έχουμε μόνο μία ενότητα που περιγράφει τις διαφορές. *** 1, 6 **** και --- 1, 7 ---- μας λέει το εύρος των γραμμών από το πρώτο και το δεύτερο αρχείο που περιλαμβάνονται σε αυτή την ενότητα. Γραμμές Ubuntu , Debian , Fedora , και η τελευταία κενή γραμμή είναι η ίδια και στα δύο αρχεία. Αυτές οι γραμμές ξεκινούν με το διπλό space.Line - Arch Linux από το πρώτο αρχείο δεν αντιστοιχεί σε τίποτα στο δεύτερο αρχείο. Αν και αυτή η γραμμή υπάρχει και στο δεύτερο αρχείο, οι θέσεις είναι διαφορετικές. Το Line + Kubuntu από το δεύτερο αρχείο δεν αντιστοιχεί σε τίποτα στο πρώτο αρχείο ! CentOS ! CentOS από το πρώτο αρχείο και γραμμές ! Arch Linux ! Arch Linux και ! CentOS ! CentOS από το δεύτερο αρχείο αλλάζουν μεταξύ των αρχείων.

Από προεπιλογή, ο αριθμός των γραμμών περιβάλλοντος είναι προεπιλεγμένος σε τρεις. Για να ορίσετε έναν άλλο αριθμό, χρησιμοποιήστε την επιλογή -C ( --contexts ):

diff -C 1 file1 file2

*** file1 2019-11-25 21:00:26.422426523 +0100 --- file2 2019-11-25 21:00:36.342231668 +0100 *************** *** 1, 5 **** Ubuntu - Arch Linux Debian ! CentOS Fedora --- 1, 6 ---- + Kubuntu Ubuntu Debian ! Arch Linux ! Centos Fedora

Ενοποιημένη μορφή

Η ενοποιημένη μορφή εξόδου είναι μια βελτιωμένη έκδοση της μορφής περιβάλλοντος και παράγει μια μικρότερη απόδοση.

Χρησιμοποιήστε την επιλογή -u για να diff την diff για να εκτυπώσετε την έξοδο στην ενοποιημένη μορφή:

diff -u file1 file2

--- file1 2019-11-25 21:00:26.422426523 +0100 +++ file2 2019-11-25 21:00:36.342231668 +0100 @@ -1, 6 +1, 7 @@ +Kubuntu Ubuntu -Arch Linux Debian -CentOS +Arch Linux +Centos Fedora

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

*************** @@ from-file-line-numbers to-file-line-numbers @@ line-from-files…

  • @@ from-file-line-numbers to-file-line-numbers @@ - Ο αριθμός γραμμών ή το εύρος των γραμμών από το πρώτο και δεύτερο αρχείο που περιλαμβάνονται σε αυτήν την ενότητα. line-from-files - Οι γραμμές που διαφέρουν και οι γραμμές περιβάλλοντος:
    • Οι γραμμές που ξεκινούν με δύο κενές θέσεις είναι γραμμές γραμμής, οι γραμμές που είναι οι ίδιες και στα δύο αρχεία. Οι γραμμές που αρχίζουν με το σύμβολο μείον ( - ) είναι οι γραμμές που αφαιρούνται από το πρώτο αρχείο. Οι γραμμές που ξεκινούν με το σύμβολο συν ( + ) είναι τις γραμμές που προστίθενται από το πρώτο αρχείο.

Αγνοήστε την περίπτωση

Όπως μπορείτε να παρατηρήσετε στα παραπάνω παραδείγματα, η εντολή diff κάνει ευαίσθητη τη diff πεζών από προεπιλογή.

Χρησιμοποιήστε την επιλογή -i για να πείτε την περίπτωση διαφοράς στην περίπτωση που αγνοεί:

diff -ui file1 file2

--- file1 2019-11-25 21:00:26.422426523 +0100 +++ file2 2019-11-25 21:00:36.342231668 +0100 @@ -1, 6 +1, 7 @@ +Kubuntu Ubuntu -Arch Linux Debian +Arch Linux CentOS Fedora

συμπέρασμα

Η σύγκριση αρχείων κειμένου για διαφορές είναι μία από τις συνηθέστερες εργασίες για διαχειριστές συστημάτων Linux.

Η εντολή diff συγκρίνει τα αρχεία ανά γραμμή. Για περισσότερες πληροφορίες, πληκτρολογήστε man diff στο τερματικό σας.

diff terminal