- Сравнение файлов в Linux (команда diff)
- Синтаксис команды diff
- Опции команды diff
- Примеры использования команды diff
- Сравнение двух текстовых файлов
- Сравнение директорий, содержащих текстовые файлы
- Заключение
- Сравнение файлов в Linux
- Сравнение файлов diff
- Сравнение файлов Linux с помощью GUI
- 1. Kompare
- 2. Meld
- 3. Diffuse
- 4. KDiff3
- 5. TkDiff
- Выводы
- Как сравнить двоичные файлы в Linux?
- 14 ответов 14
- Как сравнить двоичные файлы в Linux?
- 14 ответов
- Как сравнить двоичные файлы в Linux?
- diff + xxd
- colordiff + xxd
- vimdiff + xxd
Сравнение файлов в Linux (команда diff)
Для сравнения двух или нескольких файлов в Linux есть команда diff . Она может сравнивать как отдельные файлы, так и каталоги. Рассмотрим синтаксис, опции команды diff и несколько примеров использования.
Синтаксис команды diff
Команда diff имеет следующий синтаксис:
Мы указываем опции и подаем на вход два или более файлов или директорий, которые нам нужно сравнить.
Опции команды diff
Рассмотрим основные опции команды diff. Я рассмотрю только те опции, которые сам использую наиболее часто.
-E | игнорировать изменения, связанные с добавлением символа табуляции в тексте. |
-b | игнорировать изменения, связанные с добавлением пробелов. |
-w | игнорировать изменения, связанные с добавлением пробелов и табуляции. |
-B | игнорировать новые пустые строки. |
-p (или —show-c-function) | показать название функции языка C, в которой найдены изменения. |
-y (или —side-by-side) | отобразить результаты в две колонки. |
-r | просматривать каталоги рекурсивно. |
-X FILE | исключить из поиска файлы, имена которых совпадают с шаблонами в файле FILE. |
-d (или —minimal) | попытаться найти как можно меньше изменений (то есть исключить ложные срабатывания). |
Примеры использования команды diff
Сравнение двух текстовых файлов
Для простого сравнения двух текстовых файлов с именами myfile1 и myfile2 выполним в терминале команду:
Вывод команды diff удобно перенаправить в файл с расширением diff . Большинство текстовых редакторов в Linux, например Gedit, распознают этот файл и подсвечивают его синтаксис. Чтобы направить результат сравнения в файл changes.diff нужно использовать символ перенаправления потока (>):
Сравнение директорий, содержащих текстовые файлы
Рассмотрим пример сравнения двух директорий ( mydir1 и mydir2 ), которые содержат текстовые файлы. Основное отличие здесь от примера выше состоит в том, что мы добавим опцию -r , означающую рекурсивный обход файлов в директориях.
Теперь предположим, что в директориях, в которых мы сравниваем файлы, находится много «мусора», который мы не должны сравнивать. Создадим файл excludeFiles и запишем в него шаблоны и названия файлов, которые мы не должны сравнивать. Например, содержимое excludeFiles может иметь вид:
Теперь укажем команде diff, чтобы она использовала наш файл excludeFiles при сравнении каталогов:
Таким образом, мы сравниваем файлы, имена которых не попадают под шаблоны в файле excludeFiles , например, vasya.exe или ChangeLog12 .
Добавим еще несколько опций, которые описаны выше, чтобы улучшить результат сравнения:
Мы сравниваем файлы в директориях mydir1 и mydir2 , игнорируя изменения, связанные с добавлением пустых строк, пробелов, табуляции, а также используем шаблоны имен файлов в excludeFiles , чтобы исключить из сравнения ненужные файлы.
Заключение
Дополнительную информацию по использованию команды diff в вашей системе Linux вы можете получить, выполнив команду:
Также существуют программы, которые позволяют сравнивать файлы, используя графический интерфейс. Например, программа Meld, которая в наглядном виде показывает где и что изменилось в файлах.
Источник
Сравнение файлов в Linux
Иногда возникает необходимость сравнить несколько файлов между собой. Это может понадобиться при анализе разницы между несколькими версиями конфигурационного файла или просто для сравнения различных файлов. В Linux для этого есть несколько утилит, как для работы через терминал, так и в графическом интерфейсе.
В этой статье мы рассмотрим как выполняется сравнение файлов Linux. Разберем самые полезные способы, как для терминала, так и в графическом режиме. Сначала рассмотрим как выполнять сравнение файла linux с помощью утилиты diff.
Сравнение файлов diff
Утилита diff linux — это программа, которая работает в консольном режиме. Ее синтаксис очень прост. Вызовите утилиту, передайте нужные файлы, а также задайте опции, если это необходимо:
$ diff опции файл1 файл2
Можно передать больше двух файлов, если это нужно. Перед тем как перейти к примерам, давайте рассмотрим опции утилиты:
- -q — выводить только отличия файлов;
- -s — выводить только совпадающие части;
- -с — выводить нужное количество строк после совпадений;
- -u — выводить только нужное количество строк после отличий;
- -y — выводить в две колонки;
- -e — вывод в формате ed скрипта;
- -n — вывод в формате RCS;
- -a — сравнивать файлы как текстовые, даже если они не текстовые;
- -t — заменить табуляции на пробелы в выводе;
- -l — разделить на страницы и добавить поддержку листания;
- -r — рекурсивное сравнение папок;
- -i — игнорировать регистр;
- -E — игнорировать изменения в табуляциях;
- -Z — не учитывать пробелы в конце строки;
- -b — не учитывать пробелы;
- -B — не учитывать пустые строки.
Это были основные опции утилиты, теперь давайте рассмотрим как сравнить файлы Linux. В выводе утилиты кроме, непосредственно, отображения изменений, выводит строку в которой указывается в какой строчке и что было сделано. Для этого используются такие символы:
- a — добавлена;
- d — удалена;
- c — изменена.
К тому же, линии, которые отличаются, будут обозначаться символом .
Вот содержимое наших тестовых файлов:
Теперь давайте выполним сравнение файлов diff:
diff file1 file2
В результате мы получим строчку: 2,3c2,4. Она означает, что строки 2 и 3 были изменены. Вы можете использовать опции для игнорирования регистра:
diff -i file1 file2
Можно сделать вывод в две колонки:
diff -y file1 file2
А с помощью опции -u вы можете создать патч, который потом может быть наложен на такой же файл другим пользователем:
diff -u file1 file2
Чтобы обработать несколько файлов в папке удобно использовать опцию -r:
Для удобства, вы можете перенаправить вывод утилиты сразу в файл:
diff -u file1 file2 > file.patch
Как видите, все очень просто. Но не очень удобно. Более приятно использовать графические инструменты.
Сравнение файлов Linux с помощью GUI
Существует несколько отличных инструментов для сравнения файлов в linux в графическом интерфейсе. Вы без труда разберетесь как их использовать. Давайте рассмотрим несколько из них:
1. Kompare
Kompare — это графическая утилита для работы с diff, которая позволяет находить отличия в файлах, а также объединять их. Написана на Qt и рассчитана в первую очередь на KDE. Кроме сравнения файлов утилита поддерживает сравнение каталогов и позволяет создавать и применять патчи к файлам.
2. Meld
Это легкий инструмент для сравнения и объединения файлов. Он позволяет сравнивать файлы, каталоги, а также выполнять функции системы контроля версий. Программа создана для разработчиков и позволяет сравнивать до трёх файлов. Можно сравнивать каталоги и автоматически объединять сравниваемые файлы. Кроме того поддерживаются такие системы контроля версий, как Git.
3. Diffuse
Diffuse — еще один популярный и достаточно простой инструмент для сравнения и слияния файлов. Он написан на Python 2. Поэтому в современных версиях Ubuntu программу будет сложно установить. Поддерживается две основные возможности — сравнение файлов и управление версиями. Вы можете редактировать файлы прямо во время просмотра.
4. KDiff3
KDiff3 — еще один отличный, свободный инструмент для сравнения файлов в окружении рабочего стола KDE. Он входит в набор программ KDevelop и работает на всех платформах, включая Windows и MacOS. Можно выполнить сравнение до трех файлов Linux или даже сравнить каталоги. Кроме того, есть поддержка слияния и ручного выравнивания.
5. TkDiff
Это очень простая утилита для сравнения файлов написанная на основе библиотеки tk. Она позволяет сравнивать только два файла, поддерживает поиск и редактирование сравниваемых файлов.
Выводы
В этой статье мы рассмотрели как выполняется сравнение файлов linux с помощью терминала, как создавать патчи, а также сделали небольшой обзор лучших графических утилит для сравнения файлов. А какие инструменты для сравнения используете вы? Напишите в комментариях!
Источник
Как сравнить двоичные файлы в Linux?
Мне нужно сравнить два двоичных файла и получить вывод в виде:
за каждый другой байт. Так что если file1.bin
в двоичном виде и file2.bin
Я хочу получить что-то вроде
Есть ли способ сделать это в Linux? Я знаю о cmp -l но он использует десятичную систему для смещений и восьмеричную для байтов, которых я хотел бы избежать.
14 ответов 14
Это напечатает смещение и байты в шестнадцатеричном виде:
Или введите $1-1 чтобы первое напечатанное смещение начиналось с 0.
К сожалению, strtonum() специфичен для GAWK, поэтому для других версий awk — например, mawk — вам потребуется использовать функцию преобразования восьмеричного числа в десятичное. Например,
Вычеркнуто для удобства чтения:
Как сказал Кряк :
Попробуйте использовать diff в следующей комбинации замены процесса zsh/bash и colordiff в CLI:
- -y показывает различия между собой (необязательно)
- xxd — это инструмент CLI для создания шестнадцатеричного вывода двоичного файла
- colordiff раскрасит вывод diff (установите с помощью: sudo apt-get install colordiff )
- добавить -W200 к diff для более широкого вывода (по 200 символов в строке)
- если файлы слишком большие, добавьте ограничение (например, -l1000 ) для каждого xxd
Есть инструмент под названием DHEX, который может сделать эту работу, и есть другой инструмент, который называется VBinDiff.
Для строго командной строки попробуйте JDIFF.
Метод, который работает для добавления / удаления байтов
Сгенерируйте тестовый пример с единственным удалением байта 64:
Если вы также хотите увидеть ASCII-версию персонажа:
Проверено на Ubuntu 16.04.
Я предпочитаю od xxd потому что:
- это POSIX, а xxd нет (поставляется с Vim)
- имеет -An для удаления столбца адреса без awk .
Источник
Как сравнить двоичные файлы в Linux?
мне нужно сравнить два двоичных файла и получить вывод в виде
для каждого байта. Так если file1.bin is
в двоичной форме и file2.bin is
Я хочу получить что-то вроде
каков самый простой способ достижения цели? Стандартный инструмент? Какой-то сторонний инструмент?
(Примечание: cmp -l должны быть убиты огонь, он использует десятичную систему для смещений и восьмеричную для байтов.)
14 ответов
это выведет смещение и байты в hex:
или -1 , чтобы первое печатное смещение начиналось с 0.
к сожалению, strtonum() специфичен для GAWK, поэтому для других версий awk-например, mawk-вам нужно будет использовать функцию преобразования восьмеричного в десятичное число. Например,
сломанный вне для считываемости:
попробовать diff в следующей комбинации замещения процесса zsh/bash и colordiff в CLI:
- -y показывает вам различия бок о бок (необязательно)
- xxd является инструментом CLI для создания вывода шестнадцатеричного двоичного файла
- colordiff будет раскрасить diff вывод (установка через: sudo apt-get install colordiff )
- добавить -W200 to diff шире вывод
- если файлы большие, добавьте ограничение (например, -l1000 ) для каждого xxd
есть инструмент DHEX, которые могут сделать работу, и есть еще один инструмент под названием VBinDiff.
для строго командной строки, попробуйте JDIFF.
метод, который работает для добавления / удаления байтов
создать тестовый случай с одним удалением байта 64:
если вы также хотите увидеть ASCII версию символа:
протестировано на Ubuntu 16.04.
предпочитаю od over xxd потому что:
- it is POSIX, xxd нет (поставляется с Vim)
- имеет -An удалить столбец адреса без awk .
Источник
Как сравнить двоичные файлы в Linux?
Мне нужно сравнить два двоичных файла и получить вывод в виде:
за каждый другой байт. Так что, если file1.bin есть
в двоичном виде и file2.bin является
Я хочу получить что-то вроде
Есть ли способ сделать это в Linux? Я знаю, cmp -l но он использует десятичную систему для смещений и восьмеричную для байтов, которых я хотел бы избежать.
Это выведет смещение и байты в шестнадцатеричном виде:
Или сделать так, $1-1 чтобы первое напечатанное смещение начиналось с 0.
К сожалению, strtonum() это специфично для GAWK, поэтому для других версий awk — например, mawk — вам нужно будет использовать функцию преобразования восьмеричного числа в десятичное. Например,
Вычеркнуто для удобства чтения:
Как сказал Кряк :
diff + xxd
Попробуйте diff использовать следующую комбинацию подстановки zsh / bash:
- -y показывает различия между собой (необязательно).
- xxd инструмент CLI для создания шестнадцатеричного вывода двоичного файла
- Добавить -W200 к diff для более широкого выхода (из 200 символов в строке).
- Для цветов используйте colordiff как показано ниже.
colordiff + xxd
Если у вас есть colordiff , он может раскрасить diff вывод, например:
В противном случае установить через: sudo apt-get install colordiff .
vimdiff + xxd
Вы также можете использовать vimdiff , например,
- если файлы слишком большие, добавьте ограничение (например -l1000 ) для каждого xxd
Есть инструмент под названием DHEX, который может сделать эту работу, и есть другой инструмент, который называется VBinDiff .
Для строго командной строки, попробуйте jojodiff .
Метод, который работает для добавления / удаления байтов
Создайте тестовый пример с единственным удалением байта 64:
Если вы также хотите увидеть ASCII-версию персонажа:
Проверено на Ubuntu 16.04.
Я предпочитаю od более , xxd потому что:
- это POSIX , xxd нет (поставляется с Vim)
- имеет, -An чтобы удалить столбец адреса без awk .
Источник