Команда Linux cmp

Опубликовано admin - пн, 10/10/2022 - 10:04

Команда cmp в Linux используется для побайтового сравнения двух текстовых или бинарных файлов для определения их идентичности.

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

При сравнении текстовых файлов могут использоваться дополнительные параметры.

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

Содержание

Синтаксис

cmp [КЛЮЧ]? ФАЙЛ1 [ФАЙЛ2 [Н1 [Н2]]]

Необязательные Н1 и Н2. ? это число байт, которые следует пропустить в каждом файле (по умолчанию 0).

Опции

-b, --print-bytes
Выводить различающиеся байты
-i, --ignore-initial=Н
Пропустить первые Н байт ввода
-i, --ignore-initial=Н1:Н2
Пропустить первые Н1 байт файла ФАЙЛ1 и первые Н2 байт файла ФАЙЛ2
-l,  --verbose
Выводить номера и значения всех различающихся байт
-n, --bytes=Н
Сравнивать не более N байт
-s, --quiet, --silen
Не показывать обычные сообщения

К значениям N можно приписывать один из следующих множительных суффиксов: kB 1000, K 1024, MB 1,000,000, M 1,048,576, GB 1,000,000,000, G 1,073,741,824, и так далее для T, P, E, Z, Y.

Если ФАЙЛ не задан или задан как ?-?, то читается стандартный ввод. Выходной статус равен 0, если входные файлы идентичны, 1 ? если различаются, и 2 в случае неполадок.

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

Простое сравнение двух файлов

Сравниваем файлы robotx.txt и robots.txt.bak:

mensh@139-162-132-20:/var/www/linuxcookbook.ru/web$ cmp robots.txt robots.txt.bak 
mensh@139-162-132-20:/var/www/linuxcookbook.ru/web$ 

Файлы идентичны.

Сравниваем файлы robots.txt и robots.txt.new

mensh@139-162-132-20:/var/www/linuxcookbook.ru/web$ cmp robots.txt robots.txt.new 
robots.txt robots.txt.new differ: char 542, line 17
mensh@139-162-132-20:/var/www/linuxcookbook.ru/web$ 

Вывод команды показывает неидентичность файлов.

Сравнение после пропуска заданного количества байтов

Для пропуска определённого количества начальных байтов используется опция -i с последующим указанием количества пропускаемых байтов:

mensh@139-162-132-20:/var/www/linuxcookbook.ru/web$ cmp -i 10 robots.txt robots.txt.new 
robots.txt robots.txt.new differ: char 532, line 16
mensh@139-162-132-20:/var/www/linuxcookbook.ru/web$ 

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

Для вывода отличающихся значений байтов используется опция -b:

mensh@139-162-132-20:/var/www/linuxcookbook.ru/web$ cmp -b robots.txt robots.txt.new 
robots.txt robots.txt.new differ: byte 542, line 17 is 103 C  43 #
mensh@139-162-132-20:/var/www/linuxcookbook.ru/web$ 

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

Для вывода информации о позициях и значениях всех отличающихся байтов используется опция -l:

mensh@139-162-132-20:/var/www/linuxcookbook.ru/web$ cmp -l robots.txt robots.txt.new 
 542 103  43
 543 162  40
 544 141 103
 545 167 123
 546 154 123
 547  55  54
 548 144  40
 549 145 112
 550 154 123
 551 141  54
 552 171  40
 553  72 111
 554  40 155
 555  61 141
 556  60 147
 557  12 145
 558  43 163
 559  40  12
 ..
1568 156 145
1569  12 170
1570 104  56
1571 151 160
1572 163 150
1573 141 160
1574 154  57
1575 154 165
1576 157 163
1577 167 145
1578  72 162
1579  40  57
1580  57 154
1581 151 157
1582 156 147
1583 144 157
1584 145 165
1585 170 164
1586  56  12
cmp: EOF on robots.txt.new after byte 1586
mensh@139-162-132-20:/var/www/linuxcookbook.ru/web$ 

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

Вы можете также ограничить количество сравниваемых байтов, используя опцию -n, с последующим указанием количества сравниваемых байтов:

mensh@139-162-132-20:/var/www/linuxcookbook.ru/web$ cmp -n 15 robots.txt robots.txt.new 
mensh@139-162-132-20:/var/www/linuxcookbook.ru/web$ 

Заключение

В этой небольшой статье были приведены основные приёмы использования в Linux команды cmp. Утилита проста и при небольшой практике её опции быстро запоминаются.

Поделиться с друзьями