Найти тему

Находим различия между файлами и папками в Linux при помощи команды diff

Оглавление

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

Если материал окажется полезным, то поддержите его лайком, чтобы он попал в рекомендации Дзена и стал доступен большему количеству читателей.

Команда diff

Это не только название команды, но и одноименная утилита, встроенная в Linux-дистрибутив. Имя утилиты образовано, как не сложно догадаться, от английского слова «difference», то есть «разница».

Различия между файлами

Частым сценарием использования команды является сравнение содержимого файлов. Утилита diff понимает, как текстовые, так и бинарные файлы, позволяя выявить общее и различное между ними. Представим, что на сервере есть два файла file1 и file2 с определенным содержимым. Давайте сравним их.

diff -q file1.txt file2.txt

diff -s file1.txt file2.txt

-2

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

Теперь я изменю содержимое одного из файлов и вновь воспользуемся командой diff.

diff -q file1.txt file2.txt

diff -s file1.txt file2.txt

diff -y file1.txt file2.txt

-3

Выхлоп команды с ключом -q показал, что файлы неодинаковые, ключ -s показал, что отличия есть в первой строке, а ключ -y показывает содержимое двух файлов в двух столбцах с указанием на их различия, что очень удобно, когда вы имеете дело с большими по содержанию файлами.

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

man <имя_команды>

<имя_команды> --help

-4

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

Различия между каталогами

Казалось бы как команда diff, которая работает с построковым сравнением файлов, сможет показать различия между папками? Но мы должны помнить, что главная концепция Linux звучит как «ВСЕ ЕСТЬ ФАЙЛ». Файлом является вставленная в USB-разъем флэшка, папка на рабочем столе или ярлык на любимую игру. Вооружившись этим знанием введем в терминале команды:

diff -q folder1 folder2

diff -s folder1 folder2

-5

Ситуация получится аналогичной тому, что происходило при сравнении файлов: так как внутри обоих папок находятся одинаковые файлы, то ключ -q ничего не покажет, а ключ -s скажет нам, что содержимое папок идентично.

Теперь сделаем содержимое папок folder1 и folder2 различным и вновь используем команду diff:

diff -q folder1 folder2

diff -s folder1 folder2

-6

Видим, что содержимое «выхлопов» обеих команд примерно идентично, только при использовании ключа -s показано, что в обеих папках одинакового.

Стоит понимать, что использование команды diff с ключами -q и -s, с которым мы познакомились выше работает только на первом уровне вложенности. То есть, если внутри folder1 и folder2 есть еще папки с каким-то файлами или вложенными директориями, то утилита не будет их сравнивать. Чтобы указать ей на необходимость сравнения на всех уровнях вложенности нужно добавить ключ -r (recursive):

diff -qr folder1 folder2

diff -sr folder1 folder2

-7

«Выхлоп» теперь содержит не только корень folder1 и folder2, но и содержимое всех находящихся в них папок.

Ну, и наконец, давайте соединим все указанные выше команды воедино, чтобы одной строкой выводить полную информацию о общем и различном в каталогах:

diff -qrs folder1 folder2

-8

Подведем итог

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

Надеюсь, что материал, изложенный в статье, показался вам полезным. Если это так, то не забудьте поставить посту лайк, подписаться на канал и его обновления в Телеграме. Больше полезных материалов вы сможете найти в рубрике, посвященной теории и практике использования Linux.

Теория и практика Linux