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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«ΠžΡΠ½ΠΎΠ²Ρ‹ программирования Π² LinuxΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 111

Автор НСйл ΠœΡΡ‚ΡŒΡŽ

β–‘ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ стандартными срСдствами, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΌΠΈΡΡ Π½Π° всСх ΠΌΠ°ΡˆΠΈΠ½Π°Ρ… с ОБ Linux, Π΅Π΄ΠΈΠ½ΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚Π°, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰Π΅Π³ΠΎ Ρ„Π°ΠΉΠ»Ρ‹ всСх ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ²;

β–‘ ΠΏΡ€Π°Π²Π»ΡΠ΅ΠΌΠ°Ρ нумСрация вСрсий ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ²;

β–‘ ΡΠΎΠ³Π»Π°ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΠΎ имСнованию Ρ„Π°ΠΉΠ»ΠΎΠ², Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰Π΅Π΅ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π½ΠΎΠΌΠ΅Ρ€Π° вСрсии Π² Ρ„Π°ΠΉΠ» ΠΏΠ°ΠΊΠ΅Ρ‚Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ ΠΌΠΎΠ³Π»ΠΈ Π»Π΅Π³ΠΊΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, с ΠΊΠ°ΠΊΠΎΠΉ вСрсиСй ΠΎΠ½ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚;

β–‘ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ² Π² ΠΏΠ°ΠΊΠ΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈ ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈΠ· Π½Π΅Π³ΠΎ ΠΎΠ½ΠΈ помСшались Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³, ΠΈ Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π»ΠΈ сомнСния ΠΏΠΎ ΠΏΠΎΠ²ΠΎΠ΄Ρƒ содСрТимого ΠΏΠ°ΠΊΠ΅Ρ‚Π°.

Π­Π²ΠΎΠ»ΡŽΡ†ΠΈΡ этих ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π±Ρ‹Π»Π° Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π° Π½Π° ΠΎΠ±Π»Π΅Π³Ρ‡Π΅Π½ΠΈΠ΅ распространСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΈ ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΠ΅ надСТности этого процСсса. Π›Π΅Π³ΠΊΠΎΡΡ‚ΡŒ установки ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ β€” это Π΄Ρ€ΡƒΠ³ΠΎΠΉ вопрос, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½Π° зависит ΠΎΡ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ систСмы, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ устанавливаСтся ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, Π½ΠΎ, ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅, Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΡƒΠ²Π΅Ρ€Π΅Π½Ρ‹ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρƒ вас ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ всСх ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ².

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° patch

Когда ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡŽΡ‚ΡΡ, ΠΏΠΎΡ‡Ρ‚ΠΈ Π½Π΅ΠΈΠ·Π±Π΅ΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°ΡŽΡ‚ Π² Π½ΠΈΡ… ошибки ΠΈΠ»ΠΈ Ρƒ Π°Π²Ρ‚ΠΎΡ€Π° Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ внСсти Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΡƒΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²ΠΎΠ²Π°Π½ΠΈΡ ΠΈ обновлСния. Если Π°Π²Ρ‚ΠΎΡ€Ρ‹ Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡŽΡ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² Π²ΠΈΠ΄Π΅ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ², Π² этом случаС ΠΎΠ½ΠΈ часто просто ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ Π½ΠΎΠ²Ρ‹Π΅ вСрсии Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ². Иногда (всСгда Ρ‡Π°Ρ‰Π΅, Ρ‡Π΅ΠΌ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹) ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΠΈ просто Π²Ρ‹ΠΏΡƒΡΠΊΠ°ΡŽΡ‚ Π½ΠΎΠ²ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, часто с Π½Π΅Π²Ρ€Π°Π·ΡƒΠΌΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ описаниСм этой Π½ΠΎΠ²ΠΎΠΉ вСрсии ΠΈ нСдостаточной ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΎ внСсСнных измСнСниях.

Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΉ Π²Ρ‹Ρ…ΠΎΠ΄ β€” распространСниС вашСго ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния Π² Π²ΠΈΠ΄Π΅ исходного ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, это ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊ Π²Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π»ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ ΠΈ ΠΊΠ°ΠΊ примСняли Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ρƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ появится Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ исходного ΠΊΠΎΠ΄Π° (ΠΏΡ€ΠΈ условии соблюдСния Π»ΠΈΡ†Π΅Π½Π·ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ соглашСния).

Однако ΠΏΡ€ΠΈ объСмС ΠΊΠΎΠ΄Π° ядра Linux, Ρ€Π°Π²Π½ΠΎΠ³ΠΎ дСсяткам ΠΌΠ΅Π³Π°Π±Π°ΠΉΡ‚ΠΎΠ² сТатого исходного ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, доставка ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡ€Π° исходных Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… рСсурсов ΠΏΡ€ΠΈ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ Π² Π½ΠΎΠ²ΠΎΠΉ вСрсии Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ лишь нСбольшой ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ этого исходного ΠΊΠΎΠ΄Π°.

К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ сущСствуСт ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° patch. Она Π±Ρ‹Π»Π° написана Π›Π°Ρ€Ρ€ΠΈ Π£ΠΎΠ»Π»ΠΎΠΌ (Larry Wall), Ρ‚Π°ΠΊΠΆΠ΅ Π°Π²Ρ‚ΠΎΡ€ΠΎΠΌ языка программирования Perl. Команда patch позволяСт Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ различия ΠΌΠ΅ΠΆΠ΄Ρƒ двумя вСрсиями, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ любой ΠΎΠ±Π»Π°Π΄Π°Ρ‚Π΅Π»ΡŒ Ρ„Π°ΠΉΠ»Π° вСрсии 1 ΠΈ Ρ„Π°ΠΉΠ»Π° ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΉ вСрсии 2 ΠΎΡ‚ вСрсии 1 смоТСт ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ patch для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π° своСй машинС вСрсии 2.

Если Π²Ρ‹ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚Π΅ с Ρ„Π°ΠΉΠ»Π° вСрсии 1

This is file one

line 2

line 3

there is no line 4, this is line 5

line 6

ΠΈ Π·Π°Ρ‚Π΅ΠΌ создаСтС Π²Π΅Ρ€ΡΠΈΡŽ 2

This is file two

line 2

line 3

line 4

line 5

line 6

a new line 8

с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ diff ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ список ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΉ:

$ diff file1.c file2.с > diffs

Π€Π°ΠΉΠ» diffs содСрТит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ строки:

1c1

< This is file one

--

> This is file two

4c4, 5

< there is no line 4, this is line 5

--

> line 4

> line 5

5a7

> a new line 8

На самом Π΄Π΅Π»Π΅ это Π½Π°Π±ΠΎΡ€ ΠΊΠΎΠΌΠ°Π½Π΄ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π° для прСвращСния ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Ρƒ вас Π΅ΡΡ‚ΡŒ Ρ„Π°ΠΉΠ» file1.c ΠΈ Ρ„Π°ΠΉΠ» diffs. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ свой Ρ„Π°ΠΉΠ» с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ patch ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

$ patch file1.c diffs

Hmm... Looks like a normal diff to me...

Patching file file1.c using Plan A...

Hunk #1 succeeded at 1.

Hunk #2 succeeded at 4.

Hunk #3 succeeded at 7.

done

$

Команда patch сдСлала file1.c Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅, ΠΊΠ°ΠΊ Ρ„Π°ΠΉΠ» file2.c.

Π£ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ patch Π΅ΡΡ‚ΡŒ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ фокус: Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΡ‚ΠΊΠ°Π·Π° ΠΎΡ‚ внСсСнных ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½Π΅ ΠΏΠΎΠ½Ρ€Π°Π²ΠΈΠ»ΠΈΡΡŒ измСнСния, ΠΈ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ Π½Π°Π·Π°Π΄ ΠΊ file1 с. НСт Π½ΠΈΡ‡Π΅Π³ΠΎ ΠΏΡ€ΠΎΡ‰Π΅; всСго лишь Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ patch Π΅Ρ‰Π΅ Ρ€Π°Π·, Π΄ΠΎΠ±Π°Π²ΠΈΠ² ΠΎΠΏΡ†ΠΈΡŽ -R (обратная ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²ΠΊΠ°).

$ patch -R file1.c diffs

Hmm... Looks like a normal diff to me...

Patching file file1.c using Plan A...

Hunk #1 succeeded at 1.

Hunk #2 succeeded at 4.

Hunk #3 succeeded at 6.

done$

Π€Π°ΠΉΠ» file1.с Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ Π² своС исходноС состояниС.

Π£ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ patch Π΅ΡΡ‚ΡŒ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΠΏΡ†ΠΈΠΈ, Π½ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ всСго Π½Π° Π²Ρ…ΠΎΠ΄Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, Π° Π·Π°Ρ‚Π΅ΠΌ "Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π²Π΅Ρ€Π½ΠΎΠ΅ дСйствиС". Если Π²Π΄Ρ€ΡƒΠ³ ΠΊΠΎΠΌΠ°Π½Π΄Π° patch Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎ, ΠΎΠ½Π° создаСт Ρ„Π°ΠΉΠ» с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ rej, содСрТащий Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ.

Когда Π²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ с ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²ΠΊΠ°ΠΌΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния, ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΎΠΏΡ†ΠΈΡŽ diff -с, Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‰ΡƒΡŽ "ΠΎΠΊΡ€ΡƒΠΆΠ°ΡŽΡ‰ΠΈΠΉ контСкст". Она Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ нСсколько строк ΠΏΠ΅Ρ€Π΅Π΄ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΈ послС Π½Π΅Π³ΠΎ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π° patch смоТСт ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ контСкстныС соотвСтствия ΠΏΠ΅Ρ€Π΅Π΄ внСсСниСм ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π² этом случаС Π»Π΅Π³Ρ‡Π΅ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ исправлСнный Ρ„Π°ΠΉΠ».

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅

Если Π²Ρ‹ нашли ΠΈ исправили ΠΎΡˆΠΈΠ±ΠΊΡƒ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, Π»Π΅Π³Ρ‡Π΅, Ρ‚ΠΎΡ‡Π½Π΅Π΅ ΠΈ Π²Π΅ΠΆΠ»ΠΈΠ²Π΅Π΅ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π°Π²Ρ‚ΠΎΡ€Ρƒ исправлСнный Ρ„Π°ΠΉΠ», Π° Π½Π΅ просто описаниС исправлСния.

Π”Ρ€ΡƒΠ³ΠΈΠ΅ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ распространСния

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Linux ΠΈ исходный ΠΊΠΎΠ΄ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡŽΡ‚ΡΡ Π² Π²ΠΈΠ΄Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ² с ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ Π½ΠΎΠΌΠ΅Ρ€ вСрсии, ΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡΠΌΠΈ tar.gz ΠΈΠ»ΠΈ tgz. Π­Ρ‚ΠΎ сТатыС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ gzip Ρ„Π°ΠΉΠ»Ρ‹ TAR (tape archive, Π°Ρ€Ρ…ΠΈΠ²Ρ‹ Π»Π΅Π½Ρ‚), Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ "tarballs" (ΠΊΠ»ΡƒΠ±ΠΊΠΈ Π°Ρ€Ρ…ΠΈΠ²ΠΎΠ² tar). Если ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΎΠ±Ρ‹Ρ‡Π½ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ tar, ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ эти Ρ„Π°ΠΉΠ»Ρ‹ придСтся Π² Π΄Π²Π° этапа. ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π΄Π°Π»Π΅Π΅ ΠΊΠΎΠ΄ создаСт сТатый ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ gzip Ρ„Π°ΠΉΠ» TAR вашСго прилоТСния:

$ tar cvf myapp-1.0.tar main.c 2.c 3.c *.h myapp.1 Makefile5

main.c

2.c

3.c

a.h

b.h

c.h

myapp.1

Makefile5

$

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρƒ вас Π΅ΡΡ‚ΡŒ Ρ„Π°ΠΉΠ» TAR:

$ ls -l *.tar

-rw-r--r-- 1 neil users  10240 2007-07-09 11:23 myapp-1.0.tar

$

Π‘Π΄Π΅Π»Π°Ρ‚ΡŒ Π΅Π³ΠΎ мСньшС ΠΌΠΎΠΆΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ сТатия gzip:

$ gzip myapp-1.0.tar $ ls -l *.gz

-rw-r--r-- 1 neil users 1648 2007-07-09 11:23 myapp-1.0.tar.gz

$

Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π²ΠΏΠ΅Ρ‡Π°Ρ‚Π»ΡΡŽΡ‰Π΅Π΅ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°. Π€Π°ΠΉΠ» tar.gz ΠΌΠΎΠΆΠ½ΠΎ Π² дальнСйшСм ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Ρ‚ΡŒ, оставив просто Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ tgz.

$ mv myapp-1.0.tar.gz myapp_v1.tgz

ΠŸΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° задания ΠΈΠΌΠ΅Π½, Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΡ…ΡΡ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ ΠΈ трСмя символами, β€” уступка ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΌΡƒ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡Π΅Π½ΠΈΡŽ, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅ΠΌΡƒ Π² ОБ Windows, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ для ОБ Linux ΠΈ UNIX сильно зависит ΠΎΡ‚ наличия ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ Ρ„Π°ΠΉΠ»Π°. Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ свои Ρ„Π°ΠΉΠ»Ρ‹ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ, ΡƒΠ΄Π°Π»ΠΈΡ‚Π΅ сТатиС ΠΈ ΠΎΠΏΡΡ‚ΡŒ ΠΈΠ·Π²Π»Π΅ΠΊΠΈΡ‚Π΅ ΠΈΡ… ΠΈΠ· Ρ„Π°ΠΉΠ»Π°, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ tar:

$ mv myapp_v1.tgz myapp-1.0.tar.gz

$ gzip -d myapp-1.0.tar.gz

$ tar xvf myapp-1.0.tar

main.с

2.c

3.c

a.h

b.h

c.h

myapp.1

Makefile5

$

Π‘ вСрсиСй GNU ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ tar всС Π΅Ρ‰Π΅ ΠΏΡ€ΠΎΡ‰Π΅ β€” Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ сТатый Π°Ρ€Ρ…ΠΈΠ² Π·Π° ΠΎΠ΄ΠΈΠ½ шаг:

$ tar zcvf myapp_v1.tgz main.c 2.c 3.c *.h myapp.1 Makefile5

main.c

2.c

3.c

a.h

b.h

c.h

myapp.1

Makefile5

$

Π’Π°ΠΊΠΆΠ΅ Π»Π΅Π³ΠΊΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Ρ„Π°ΠΉΠ»:

$ tar zxvf myapp_v1.tgz

main.c

2.с

3. с

a. h

b. h c.h

myapp.1

Makefile5

$

Если Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ содСрТимоС Π°Ρ€Ρ…ΠΈΠ²Π°, Π½Π΅ извлСкая Π΅Π³ΠΎ, слСдуСт Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ tar с нСсколько ΠΈΠ½ΠΎΠΉ ΠΎΠΏΡ†ΠΈΠ΅ΠΉ: tar ztvf.

Π’ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… ΠΌΡ‹ примСняли tar, описывая Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ΠΎΠΏΡ†ΠΈΠΈ. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π΄ΠΈΠΌ ΠΊΡ€Π°Ρ‚ΠΊΠΈΠΉ ΠΎΠ±Π·ΠΎΡ€ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… самых популярных ΠΎΠΏΡ†ΠΈΠΉ. Как Π²Ρ‹ Π²ΠΈΠ΄Π΅Π»ΠΈ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ…, Ρƒ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ базовая синтаксичСская запись:

tar [ΠΎΠΏΡ†ΠΈΠΈ] [список_Ρ„Π°ΠΉΠ»ΠΎΠ²]

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт списка Ρ„Π°ΠΉΠ»ΠΎΠ² β€” Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ Ρ„Π°ΠΉΠ», ΠΈ хотя ΠΌΡ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ, ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈ устройством. Π”Ρ€ΡƒΠ³ΠΈΠ΅ элСмСнты списка Π² зависимости ΠΎΡ‚ ΠΎΠΏΡ†ΠΈΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ Π² Π½ΠΎΠ²Ρ‹ΠΉ ΠΈΠ»ΠΈ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Π°Ρ€Ρ…ΠΈΠ².

Бписок Ρ„Π°ΠΉΠ»ΠΎΠ² Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈ, Π² этом случаС ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π² Ρ„Π°ΠΉΠ» Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ΡΡ всС ΠΏΠΎΠ΄ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈ. Если Π²Ρ‹ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚Π΅ Ρ„Π°ΠΉΠ»Ρ‹, Π½Π΅Ρ‚ нСобходимости Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π°, Ρ‚.ΠΊ. ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° tar сохраняСт ΠΏΠΎΠ»Π½Ρ‹Π΅ ΠΏΡƒΡ‚ΠΈ.

Π’ этом Ρ€Π°Π·Π΄Π΅Π»Π΅ использовалось ΡˆΠ΅ΡΡ‚ΡŒ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΉ Ρ€Π°Π·Π½Ρ‹Ρ… ΠΎΠΏΡ†ΠΈΠΉ:

β–‘ Ρ β€” создаСт Π½ΠΎΠ²Ρ‹ΠΉ Π°Ρ€Ρ…ΠΈΠ²;

β–‘ f β€” опрСдСляСт, Ρ‡Ρ‚ΠΎ Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ Ρ„Π°ΠΉΠ» β€” Π½Π΅ устройство, Π° Ρ„Π°ΠΉΠ»;

β–‘ t β€” пСрСчисляСт содСрТимоС Π°Ρ€Ρ…ΠΈΠ²Π° Π±Π΅Π· Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ извлСчСния элСмСнтов;

β–‘ v (verbose) β€” ΠΏΠΎ Ρ…ΠΎΠ΄Ρƒ выполнСния tar Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ сообщСния;

β–‘ Ρ… β€” ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚ Ρ„Π°ΠΉΠ»Ρ‹ ΠΈΠ· Π°Ρ€Ρ…ΠΈΠ²Π°;

β–‘ z β€” пропускаСт Π°Ρ€Ρ…ΠΈΠ² GNU tar Ρ‡Π΅Ρ€Π΅Π· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ gzip (сТимаСт Π΅Π³ΠΎ ΠΈΠ»ΠΈ ΡƒΠ±ΠΈΡ€Π°Π΅Ρ‚ сТатиС).