Как использовать команды diff
и patch
в Linux: Пошаговое руководство
Linux предоставляет мощные инструменты для работы с текстовыми файлами, особенно в контексте сравнения и изменения их содержимого. В этой статье мы рассмотрим, как использовать команды diff
и patch
, а также объясним, как работает перенаправление ввода и вывода.
Сравнение файлов с помощью команды diff
Предположим, у вас есть два файла: fileA
и fileB
, содержащие списки фруктов. Чтобы узнать, в чем именно они различаются, мы используем команду diff
:
diff fileA fileB > file.diff
Эта команда сравнивает содержимое файлов fileA
и fileB
, а результаты различий сохраняются в файл file.diff
. Для удобства можно заметить, что 1
в команде diff
также может быть опущен, так как он является значением по умолчанию:
diff fileA fileB 1> file.diff
Таким образом, стандартный вывод команды diff
будет перенаправлен в файл file.diff
, а не на экран.
Применение изменений с помощью команды patch
Следующий шаг — исправление файла fileA
на основании полученных изменений. Для этого мы можем использовать команду patch
:
patch fileA < file.diff
При использовании < file.diff
происходит перенаправление стандартного ввода. Важно понимать, что стандартный ввод не обязательно связан с клавиатурой; он может быть перенаправлен с любого файла. Таким образом, в данном случае patch
берет данные из file.diff
, а не ввод с клавиатуры.
Понимание перенаправления ввода и вывода
Перенаправление в Linux является мощным инструментом, позволяющим управлять потоками данных. Как было упомянуто ранее, стандартный ввод (stdin) обычно соответствует клавиатуре. Однако при перенаправлении мы можем указать, что ввод должен поступать из файла. Например, с помощью команды:
if [[ /dev/fd/0 -ef /dev/pts/0 ]]; then echo "true"; else echo "false"; fi
мы проверяем, равно ли значение стандартного ввода значению терминала. Если они совпадают, мы получаем true
, иначе — false
.
Далее, если мы перенаправим стандартный ввод на файл file.diff
, то проверка выдаст true
, что подтверждает, что stdin изменился.
Как работает перенаправление
Когда вы открываете терминал в Linux, стандартный ввод (FD 0) связан с вашим терминалом (tty
). Если при запуске программы, например diff
, стандартный ввод не был явно перенаправлён, программа будет использовать существующий дескриптор FD 0, связанный с вашим терминалом.
Однако, если вы используете конструкцию < file.diff
, оболочка закрывает текущий дескриптор stdin и открывает файл file.diff
как новый стандартный ввод. Это позволяет программе (в нашем случае, patch
) читать данные из файла вместо стандартного ввода с клавиатуры.
Заключение
В этой статье мы рассмотрели, как использовать команды diff
и patch
для сравнения и применения изменений к текстовым файлам в Linux. Мы также разобрали работу перенаправления ввода и вывода, что является важным аспектом работы с командной строкой. Понимание этих команд и их функциональности поможет вам более эффективно управлять текстовыми данными в системе Linux.