Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ «Командная строка LinuxΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 68

Автор Шоттс Уильям

[[email protected] ~]$ cat > file1.txt

a

b

c

d

[[email protected] ~]$ cat > file2.txt

b

c

d

e

Π—Π°Ρ‚Π΅ΠΌ сравним эти Π΄Π²Π° Ρ„Π°ΠΉΠ»Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ comm:

[[email protected] ~]$ comm file1.txt file2.txt

a

Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β b

Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β c

Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β d

Β Β Β Β Β Β Β Β e

Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, comm ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π»Π° Π²Ρ‹Π²ΠΎΠ΄ Π² Ρ‚Ρ€ΠΈ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ. ΠŸΠ΅Ρ€Π²Π°Ρ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ° содСрТит ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ строки ΠΈΠ· ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°, вторая β€” ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ строки ΠΈΠ· Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°, Ρ‚Ρ€Π΅Ρ‚ΡŒΡ β€” строки, ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ Π² ΠΎΠ±ΠΎΠΈΡ… Ρ„Π°ΠΉΠ»Π°Ρ…. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° comm ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ -n, Π³Π΄Π΅ n ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ числом 1, 2 ΠΈΠ»ΠΈ 3. ΠŸΡ€ΠΈ использовании эти ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ Π½ΠΎΠΌΠ΅Ρ€Π° ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ, Π²Ρ‹Π²ΠΎΠ΄ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… слСдуСт ΠΏΠΎΠ΄Π°Π²ΠΈΡ‚ΡŒ. НапримСр, Ρ‡Ρ‚ΠΎΠ±Ρ‹ вывСсти Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ строки, Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ΄Π°Π²ΠΈΡ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄ ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ 1 ΠΈ 2:

[[email protected] ~]$ comm -12 file1.txt file2.txt

b

c

d

diff β€” построчноС сравнСниС Ρ„Π°ΠΉΠ»ΠΎΠ²

Подобно ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ comm, diff ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для выявлСния Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ. Однако diff Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Π±ΠΎΠ»Π΅Π΅ слоТный инструмСнт, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ Π²Ρ‹Π²ΠΎΠ΄ Π²ΠΎ мноТСствС Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠ² ΠΈ способный ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ сразу ΠΎΠ³Ρ€ΠΎΠΌΠ½Ρ‹Π΅ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ². ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° diff часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния для исслСдования Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ вСрсиями исходного ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ позволяСт рСкурсивно ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ часто Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ Π΄Π΅Ρ€Π΅Π²ΡŒΡΠΌΠΈ исходного ΠΊΠΎΠ΄Π° (source trees). Часто ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° diff примСняСтся для создания diff-Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΈΠ»ΠΈ Π·Π°ΠΏΠ»Π°Ρ‚ (patches), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌΠΈ, Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΊΠ°ΠΊ patch (ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ рассказываСтся Ρ‡ΡƒΡ‚ΡŒ Π½ΠΈΠΆΠ΅), для прСобразования Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ вСрсии Π² Π΄Ρ€ΡƒΠ³ΡƒΡŽ.

Если ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ diff ΠΊ Ρ„Π°ΠΉΠ»Π°ΠΌ ΠΈΠ· ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΡΡ‚ΠΈΠ»ΡŒ Π²Ρ‹Π²ΠΎΠ΄Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² Π΅Π΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ: ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ΅ описаниС Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρƒ двумя Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ.

[[email protected] ~]$ diff file1.txt file2.txt

1d0

< a

4a4

> e

Π’ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π³Ρ€ΡƒΠΏΠΏΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΡƒΠ΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π° измСнСния (Ρ‚Π°Π±Π». 20.4) Π² Ρ„ΠΎΡ€ΠΌΠ΅ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ β€” опСрация β€” Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰Π΅ΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ ΠΈ Ρ‚ΠΈΠΏΡ‹ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ.

Π’Π°Π±Π»ΠΈΡ†Π° 20.4. ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ измСнСния, Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ diff

Команда

ОписаниС

r1ar2

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ строки, находящиСся Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ r2 Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅, послС строк Π² ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ r1 Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅

r1cr2

Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ (Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ) строки Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ r1 Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ строками Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ r2 Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅

r1dr2

Π£Π΄Π°Π»ΠΈΡ‚ΡŒ строки Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ r1 Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°Ρ…ΠΎΠ΄ΠΈΠ»ΠΈΡΡŒ Π±Ρ‹ Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ r2 Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅

Π’ этом Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ любой Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ прСдставлСн списком Ρ‡Π΅Ρ€Π΅Π· Π·Π°ΠΏΡΡ‚ΡƒΡŽ Π½ΠΎΠΌΠ΅Ρ€ΠΎΠ² Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ ΠΈ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΉ строки. Π₯отя этот Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ (Π³Π»Π°Π²Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ для совмСстимости со стандартом POSIX ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ совмСстимости с Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΌΠΈ вСрсиями diff для Unix), ΠΎΠ½ Π½Π΅ Ρ‚Π°ΠΊ ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, ΠΊΠ°ΠΊ Π΄Ρ€ΡƒΠ³ΠΈΠ΅, Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹. Π”Π²Π° Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ²ΡˆΠΈΡ… Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ ΠΏΠΎΠΏΡƒΠ»ΡΡ€Π½ΠΎΡΡ‚ΡŒ, β€” это контСкстный Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ ΠΈ ΡƒΠ½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚.

ΠŸΡ€ΠΈ использовании контСкстного Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° (ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ -c) Π²Ρ‹Π²ΠΎΠ΄ выглядит Ρ‚Π°ΠΊ:

[[email protected] ~]$ diff -c file1.txt file2.txt

*** file1.txtΒ Β Β Β 2012-12-23 06:40:13.000000000 -0500

--- file2.txtΒ Β Β Β 2012-12-23 06:40:34.000000000 -0500

***************

*** 1,4 ****

- a

Β Β b

Β Β c

Β Β d

--- 1,4 ----

Β Β b

Β Β c

Β Β d

+ e

Π’Ρ‹Π²ΠΎΠ΄ начинаСтся с ΠΈΠΌΠ΅Π½ Π΄Π²ΡƒΡ… Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ послСднСго ΠΈΡ… измСнСния. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Ρ„Π°ΠΉΠ» отмСчаСтся Π·Π²Π΅Π·Π΄ΠΎΡ‡ΠΊΠ°ΠΌΠΈ, Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ β€” дСфисами. На протяТСнии всСй ΠΎΡΡ‚Π°Π²ΡˆΠ΅ΠΉΡΡ части листинга эти ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Ρ‹ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΈΠΌ Ρ„Π°ΠΉΠ»Ρ‹. Π”Π°Π»Π΅Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ Π³Ρ€ΡƒΠΏΠΏΡ‹ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ число ΠΎΠΊΡ€ΡƒΠΆΠ°ΡŽΡ‰ΠΈΡ… строк, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΡ… контСкст. ΠŸΠ΅Ρ€Π²Π°Ρ Π³Ρ€ΡƒΠΏΠΏΠ° начинаСтся со строки *** 1,4 ****, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ Π½Π° строки с Π½ΠΎΠΌΠ΅Ρ€Π°ΠΌΠΈ с 1 ΠΏΠΎ 4 Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅. Π”Π°Π»Π΅Π΅ слСдуСт строка --- 1,4 ----, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰Π°Ρ Π½Π° строки с Π½ΠΎΠΌΠ΅Ρ€Π°ΠΌΠΈ с 1-Π³ΠΎ ΠΏΠΎ 4-ΠΉ Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅. Π’Π½ΡƒΡ‚Ρ€ΠΈ Π³Ρ€ΡƒΠΏΠΏΡ‹ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ строки, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠ΅ΡΡ с ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ… ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ², пСрСчислСнных Π² Ρ‚Π°Π±Π». 20.5.

Π’Π°Π±Π»ΠΈΡ†Π° 20.5. Π˜Π½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ diff ΠΏΡ€ΠΈ использовании контСкстного Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°

Π˜Π½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅

(Π½Π΅Ρ‚)

Π‘Ρ‚Ρ€ΠΎΠΊΠ° ΠΏΠΎΠΊΠ°Π·Π°Π½Π° для контСкста. Π’ Π½Π΅ΠΉ ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ различия ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ

-

Π‘Ρ‚Ρ€ΠΎΠΊΠ° ΡƒΠ΄Π°Π»Π΅Π½Π°. Π­Ρ‚Π° строка присутствуСт Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ ΠΈ отсутствуСт Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ

+

Π‘Ρ‚Ρ€ΠΎΠΊΠ° Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π°. Π­Ρ‚Π° строка присутствуСт Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ ΠΈ отсутствуСт Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ

!

Π‘Ρ‚Ρ€ΠΎΠΊΠ° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π°. Выводятся Π΄Π²Π΅ вСрсии строки, каТдая Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π³Ρ€ΡƒΠΏΠΏΡ‹ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ

Π£Π½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ контСкстный, Π½ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Ρ‹ΠΉ. ЗадаСтся ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ -u:

[[email protected] ~]$ diff -u file1.txt file2.txt

--- file1.txtΒ Β Β Β 2012-12-23 06:40:13.000000000 -0500

+++ file2.txtΒ Β Β Β 2012-12-23 06:40:34.000000000 -0500

@@ -1,4 +1,4 @@

-a

b

c

d

+e

Π‘Π°ΠΌΠΎΠ΅ большоС ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ контСкстным ΠΈ ΡƒΠ½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°ΠΌΠΈ β€” отсутствиС ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΡ…ΡΡ контСкстных строк, благодаря Ρ‡Π΅ΠΌΡƒ обСспСчиваСтся большая ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½ΠΎΡΡ‚ΡŒ ΡƒΠ½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π² сравнСнии с контСкстным. Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅, Π²ΠΈΠ΄Π½Ρ‹ Ρ‚Π΅ ΠΆΠ΅ Π²Ρ€Π΅ΠΌΠ΅Π½Π° послСднСго измСнСния Ρ„Π°ΠΉΠ»ΠΎΠ², Ρ‡Ρ‚ΠΎ ΠΈ Π² контСкстном Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ слСдуСт строка @@ -1,4 +1,4 @@. Она ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½ΠΎΠΌΠ΅Ρ€Π° строк Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΈ Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ Ρ„Π°ΠΉΠ»Π°Ρ…, описываСмых Π³Ρ€ΡƒΠΏΠΏΠΎΠΉ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. Π”Π°Π»Π΅Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ сами строки с трСмя (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ) строками контСкста. КаТдая строка начинаСтся с ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Ρ‚Ρ€Π΅Ρ… Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… символов, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… описываСтся Π² Ρ‚Π°Π±Π». 20.6.

Π’Π°Π±Π»ΠΈΡ†Π° 20.6. Π˜Π½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ diff ΠΏΡ€ΠΈ использовании ΡƒΠ½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°

Π˜Π½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅

(Π½Π΅Ρ‚)

Π‘Ρ‚Ρ€ΠΎΠΊΠ° присутствуСт Π² ΠΎΠ±ΠΎΠΈΡ… Ρ„Π°ΠΉΠ»Π°Ρ…

-

Π‘Ρ‚Ρ€ΠΎΠΊΠ° отсутствуСт Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅

+

Π‘Ρ‚Ρ€ΠΎΠΊΠ° присутствуСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅

patch β€” ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ diff-Ρ„Π°ΠΉΠ»Π° ΠΊ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»Ρƒ

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° patch ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для примСнСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΊ тСкстовым Ρ„Π°ΠΉΠ»Π°ΠΌ. Она ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π²Ρ‹Π²ΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ diff ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для прСобразования старых вСрсий Ρ„Π°ΠΉΠ»ΠΎΠ² Π² Π±ΠΎΠ»Π΅Π΅ Π½ΠΎΠ²Ρ‹Π΅. Рассмотрим ΠΎΠ΄ΠΈΠ½ извСстный ΠΏΡ€ΠΈΠΌΠ΅Ρ€. Π―Π΄Ρ€ΠΎ Linux разрабатываСтся большой, свободно ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠΉ Π³Ρ€ΡƒΠΏΠΏΠΎΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ², ΠΎΡ‚ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… нСиссякаСмым ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ ΠΈΠ΄ΡƒΡ‚ нСбольшиС измСнСния Π² исходном ΠΊΠΎΠ΄Π΅. Π―Π΄Ρ€ΠΎ Linux Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΌΠΈΠ»Π»ΠΈΠΎΠ½Ρ‹ строк ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, Π½ΠΎ измСнСния, присылаСмыС ΠΎΠ΄Π½ΠΈΠΌ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ Π·Π° ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·, ΠΎΡ‡Π΅Π½ΡŒ Π½Π΅Π²Π΅Π»ΠΈΠΊΠΈ. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ Π½Π΅Ρ‚ смысла ΠΏΠ΅Ρ€Π΅ΡΡ‹Π»Π°Ρ‚ΡŒ всС Π΄Π΅Ρ€Π΅Π²ΠΎ исходных тСкстов ядра всякий Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° вносится нСбольшоС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅. ВмСсто этого ΠΎΠ½ΠΈ ΠΏΡ€ΠΈΡΡ‹Π»Π°ΡŽΡ‚ diff-Ρ„Π°ΠΉΠ»Ρ‹. Π­Ρ‚ΠΈ Ρ„Π°ΠΉΠ»Ρ‹ ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ различия ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ вСрсиСй ядра ΠΈ Π½ΠΎΠ²ΠΎΠΉ, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰Π΅ΠΉ измСнСния Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°. Π”Ρ€ΡƒΠ³ΠΎΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ²ΡˆΠΈΠΉ Ρ‚Π°ΠΊΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ patch, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΡƒΡŽ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΊ своСму Π΄Π΅Ρ€Π΅Π²Ρƒ исходных тСкстов. ИспользованиС ΠΏΠ°Ρ€Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ diff/patch Π΄Π°Π΅Ρ‚ Π΄Π²Π° Π²Π°ΠΆΠ½Ρ‹Ρ… прСимущСства:

β€’ diff-Ρ„Π°ΠΉΠ» ΠΎΡ‡Π΅Π½ΡŒ Π½Π΅Π²Π΅Π»ΠΈΠΊ Π² сравнСнии с ΠΏΠΎΠ»Π½Ρ‹ΠΌ Π΄Π΅Ρ€Π΅Π²ΠΎΠΌ исходных тСкстов;

β€’ diff-Ρ„Π°ΠΉΠ» наглядно ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ измСнСния, Ρ‡Ρ‚ΠΎ позволяСт экспСртам быстро ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ эти измСнСния ΠΈ ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ ΠΈΡ….

РазумССтся, ΠΏΠ°Ρ€Ρƒ diff/patch ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΊ Π»ΡŽΠ±Ρ‹ΠΌ тСкстовым Ρ„Π°ΠΉΠ»Π°ΠΌ, Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ исходному ΠΊΠΎΠ΄Ρƒ. Π­Ρ‚ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ с Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ успСхом ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΊ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΌ Ρ„Π°ΠΉΠ»Π°ΠΌ ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ тСксту.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚ΡŒ diff-Ρ„Π°ΠΉΠ» для ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ Π΅Π³ΠΎ примСнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ patch, докумСнтация GNU ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ diff, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅:

diff -Naur старый_Ρ„Π°ΠΉΠ» Π½ΠΎΠ²Ρ‹ΠΉ_Ρ„Π°ΠΉΠ» > diff_Ρ„Π°ΠΉΠ»

Π³Π΄Π΅ старый_Ρ„Π°ΠΉΠ» ΠΈ Π½ΠΎΠ²Ρ‹ΠΉ_Ρ„Π°ΠΉΠ» ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½Ρ‹ΠΌΠΈ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ ΠΈΠ»ΠΈ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°ΠΌΠΈ. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ r ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ рСкурсивный ΠΎΠ±Ρ…ΠΎΠ΄ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… ΠΏΠΎΠ΄ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ².