Команда 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
. Утилита проста и при небольшой практике её опции быстро запоминаются.