Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

7 примеров использования команды cmp в Linux

Оригинал: Linux cmp command tutorial for beginners (7 examples)
Автор: Himanshu Arora
Дата публикации: 19 мая 2017 г.
Перевод: А.Панин
Дата перевода: 23 мая 2017 г.

Вне зависимости от ваших служебных обязанностей, при условии работы с интерфейсом командной строки Linux, вы рано или поздно столкнетесь с необходимостью сравнения содержимого двух файлов с помощью утилиты с интерфейсом командной строки. Для этой цели предназначено сразу несколько утилит, причем одной из них является утилита cmp.

В рамках данной статьи мы будем рассматривать методику использования утилиты cmp на основе простых для понимания примеров. Но перед тем как перейти к рассмотрению этих примеров, следует упомянуть о том, что все они протестированы в системе Ubuntu 16.04 LTS.

Утилита cmp

Утилита cmp позволяет осуществить побайтовое сравнение содержимого двух файлов. Она поддерживает ряд дополнительных функций, доступных посредством соответствующих параметров командной строки. В данной статье мы обсудим некоторые ключевые параметры командной строки, которые позволят вам (то есть, начинающему пользователю) лучше понять принцип работы рассматриваемой утилиты.

1. Сравнение содержимого двух файлов

Простейшая методика использования утилиты cmp заключается в исполнении следующей команды:

$ cmp [имя-файла-1] [имя-файла-2]

Как уже говорилось, утилита осуществляет побайтовое сравнение содержимого двух указанных файлов. При обнаружении отличия она останавливает процесс сравнения и выводит информацию о номере отличающейся строки и номере отличающегося байта.

Например:

$ cmp file1.txt file2.txt

Из приведенной выше иллюстрации очевидно, что отличие содержимого двух указанных файлов находится в 20 байте в первой строке.

2. Вывод отличающихся значений байтов

Если вам нужно, вы можете сообщить утилите cmp о необходимости вывода отличающихся значений байтов. Для этого может использоваться параметр командной строки -b.

$ cmp -b [имя-файла-1] [имя-файла-2]

Например:

$ cmp -b file1.txt file2.txt

В данном случае из приведенной выше иллюстрации очевидно, что отличается байт номер 17 двух файлов: в файле file1.txt он соответствует символу "I", а в файле file2.txt - символу "i". То есть, байты имеют значения 154 и 151 соответственно.

3. Пропуск начальных байтов двух файлов

При необходимости вы также можете сообщить утилите cmp о необходимости пропуска определенного количества начальных байтов двух файлов с последующим сравнением содержимого этих файлов. Для этого нужно указать количество байтов после аргумента командной строки -i.

$ cmp -i [количество-пропускаемых-байтов] [имя-файла-1] [имя-файла-2]

Например:

$ cmp -i 10 file1.txt file2.txt

Обратите внимание на то, что в аналогичных случаях (при использовании аргумента -i) байт, с которого начинается сравнение, считается нулевым.

Кроме того, утилита также позволяет вам пропускать различное количество байтов в обоих файлах. Это делается следующим образом:

Например:

$ cmp -i 4:7 file1.txt file2.txt

4. Вывод информации о позициях (и значениях) всех отличающихся байтов

Если вам понадобится, вы можете сообщить утилите cmp о необходимости вывода информации о позициях и значениях всех отличающихся байтов. Эта функция доступна посредством параметра командной строки -l:

$ cmp -l [имя-файла-1] [имя-файла-2]

Например:

$ cmp -l file1.txt file2.txt

В первом столбце (на иллюстрации выше) выводится позиция (номер) отличающегося байта. Во втором столбце выводится значение байта в этой позиции из первого файла, а в третьем - значение байта в этой позиции из второго файла.

5. Ограничение количества байтов для сравнения

Рассматриваемая утилита также позволяет вам ограничить количество байтов, которые следует сравнивать; к примеру, вам может понадобиться сравнить как минимум 25 или 50 байтов файлов. Для этого предназначен параметр командной строки -n:

$ cmp -n [количество-байтов-для-сравнения] [имя-файла-1] [имя-файла-2]

Например:

$ cmp -n 25 file1.txt file2.txt

6. Вывод индикатора хода процесса сравнения

При сравнении содержимого файлов большого объема (или образов разделов дисковых накопителей) с помощью утилиты cmp вам наверняка захочется отслеживать ход процесса. Для этой цели может использоваться дополнительная утилита pv, вызываемая перед cmp. Это формат команды, которая может использоваться:

$ pv [имя-файла-1] | cmp -l [имя-файла-2] > [выходной-файл]

Например:

$ pv file1.txt | cmp -l file3.txt > output.txt

Обратите внимание на то, что файл с именем output.txt будет содержать весь вывод утилиты cmp. Индикатор хода процесса сравнения (приведенный на иллюстрации выше) выводится силами утилиты pv.

Утилита pv не устанавливается по умолчанию в Linux (по крайней мере, в дистрибутиве Ubuntu). При этом вы можете без каких-либо проблем установить ее самостоятельно с помощью следующей команды:

$ sudo apt-get install pv

7. Сокрытие вывода

Рассматриваемая утилита позволяет скрыть вывод, который генерируется по умолчанию. Это делается с помощью параметра командной строки -s.

$ cmp -s [имя-файла-1] [имя-файла-2]

Например:

$ cmp -s file1.txt file2.txt

Данный параметр может быть полезен в случае использования утилиты cmp в рамках сценариев. Например, в зависимости от того, идентичны файлы или нет (что можно определить по коду завершения работы утилиты), вы можете выводить специальное сообщение вместо того вывода, который генерируется утилитой по умолчанию.

Заключение

В данной статье мы обсудили большую часть параметров командной строки утилиты cmp, поэтому вам нужно лишь попрактиковаться в их использовании в процессе ежедневной работы. При возникновении любых сомнений или вопросов обращайтесь к странице руководства cmp.