Android

คำสั่ง Diff ใน linux

What the Waters Left Behind Trailer 2 (2018) Los Olvidados

What the Waters Left Behind Trailer 2 (2018) Los Olvidados

สารบัญ:

Anonim

diff เป็นโปรแกรมอรรถประโยชน์บรรทัดคำสั่งที่ช่วยให้คุณสามารถเปรียบเทียบไฟล์สองไฟล์ต่อบรรทัด นอกจากนี้ยังสามารถเปรียบเทียบเนื้อหาของไดเรกทอรี

คำสั่ง diff มักใช้เพื่อสร้างแพตช์ที่มีความแตกต่างระหว่างไฟล์หนึ่งไฟล์ขึ้นไปที่สามารถใช้งานได้โดยใช้คำสั่ง patch

วิธีใช้คำสั่ง diff

ไวยากรณ์สำหรับคำสั่ง diff เป็นดังนี้:

diff… FILES

คำสั่ง diff สามารถแสดงเอาต์พุตในหลาย ๆ รูปแบบด้วยรูปแบบปกติบริบทและแบบครบวงจรซึ่งเป็นรูปแบบที่พบได้บ่อยที่สุด เอาท์พุทรวมถึงข้อมูลเกี่ยวกับสายในไฟล์ที่จะต้องมีการเปลี่ยนแปลงเพื่อให้พวกเขากลายเป็นเหมือนกัน หากไฟล์ตรงกันไม่มีการสร้างเอาต์พุต

หากต้องการบันทึกเอาต์พุตคำสั่งลงในไฟล์ให้ใช้โอเปอเรเตอร์การเปลี่ยนเส้นทาง:

diff file1 file2 > patch

เราจะใช้สองไฟล์ต่อไปนี้เพื่ออธิบายวิธีการทำงานของคำสั่ง diff :

file1

Ubuntu Arch Linux Debian CentOS Fedora file2

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 - ลบเส้น

คำสั่ง change ตามด้วยบรรทัดสมบูรณ์ที่ถูกลบ ( < ) และเพิ่มลงในไฟล์ ( > )

มาอธิบายผลลัพธ์กันดีกว่า:

  • 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

เอาต์พุตเริ่มต้นด้วยชื่อและการประทับเวลาหากไฟล์ที่ถูกเปรียบเทียบและหนึ่งหรือหลายส่วนที่อธิบายความแตกต่าง แต่ละส่วนมีลักษณะดังนี้:

*************** *** 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 และ บรรทัดว่างสุดท้ายจะเหมือนกันในไฟล์ทั้งสอง บรรทัดเหล่านี้เริ่มต้นด้วยเว้นวรรคสองบรรทัด - Arch Linux จากไฟล์แรกที่สอดคล้องกับไม่มีอะไรในไฟล์ที่สอง แม้ว่าบรรทัดนี้จะมีอยู่ในไฟล์ที่สอง แต่ตำแหน่งนั้นแตกต่างกัน Line + Kubuntu จากไฟล์ที่สองสอดคล้องกับอะไรในไฟล์แรก Line ! 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 -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 เป็นแบบตรงตามตัวพิมพ์ใหญ่ - เล็กโดยค่าเริ่มต้น

ใช้ตัวเลือก -i เพื่อบอกความ diff เพื่อละเว้นตัวพิมพ์:

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