Linux diff command summary with examples
Оглавление:
- Как использовать команду
diff - Нормальный формат
- Формат контекста
- Унифицированный формат
- Игнорировать дело
- Вывод
diff
- утилита командной строки, позволяющая сравнивать два файла построчно. Он также может сравнивать содержимое каталогов.
Команда
diff
чаще всего используется для создания патча, содержащего различия между одним или несколькими файлами, которые можно применить с помощью команды
patch
.
Как использовать команду
diff
Синтаксис команды
diff
следующий:
diff… FILES
Команда
diff
может отображать вывод в нескольких форматах, наиболее распространенными из которых являются обычный, контекстный и унифицированный формат. Вывод включает в себя информацию о том, какие строки в файлах необходимо изменить, чтобы они стали идентичными. Если файлы совпадают, вывод не производится.
Чтобы сохранить вывод команды в файл, используйте оператор перенаправления:
diff file1 file2 > patch
мы будем использовать следующие два файла, чтобы объяснить, как работает команда
diff
:
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- удалить строки.
За командой изменения следуют полные строки, которые удалены (
<
) и добавлены в файл (
>
).
Давайте объясним вывод:
-
0a1- добавить строку1второго файла в начале файла1 (после строки0).-
> Kubuntu- строка из второй строки, которая добавляется в первый файл, как описано выше.
2d2- Удалить строку2в первом файле. Символ2после символаdозначает, что если строка не будет удалена, она появится в строке2во втором файле.-
< Arch Linux- удаленная строка.
4c4, 5- Заменить (изменить) строку5в первом файле на строки4-5из второго файла.-
< CentOS- строка в первом файле, подлежащем замене.---- Разделитель.> Arch Linuxи> Centos- строки из второго файла, заменяющие строки в первом файле.
-
Формат контекста
Когда используется формат вывода контекста, команда
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и последняя пустая строка одинакова в обоих файлах. Эти строки начинаются с двойного пробела. Line- 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
в вашем терминале.
Команда Chmod в Linux (права доступа к файлам)
В Linux доступ к файлам управляется через права доступа к файлам, атрибуты и права собственности. В этом руководстве рассказывается, как использовать команду chmod для изменения прав доступа к файлам и каталогам.
Команда Chgrp в Linux (сменить группу)
В Linux каждый файл связан с владельцем и группой и имеет разрешения, которые определяют, какие пользователи могут читать, записывать или выполнять файл. Команда chgrpc меняет групповое владение данными файлами.
Команда cp в linux (копирование файлов)
cp - утилита командной строки для копирования файлов и каталогов в системах Unix и Linux.







