Как работать с файлами .pacnew в Arch Linux

Если вы пользуетесь Arch Linux, то наверняка замечали, что через некоторое время, особенно после обновления системы, в вашей системе начинают появляться файлы с расширением .pacnew . И раз вы читаете эту статью, то, скорее всего, именно это и привело вас сюда: чтобы разобраться, что это за файлы, почему они появляются и что с ними делать.
Что ж, вы обратились по адресу. В этом посте мы постараемся объяснить всё ясно и просто. Итак, давайте начнём с главного вопроса.
Что такое файлы .pacnew в Arch Linux?
Когда вы обновляете систему Arch Linux, выполняя команду вроде pacman -Syu, некоторые уже установленные пакеты содержат файлы конфигурации, обычно хранящиеся в /etc. Однако если вы изменили один из этих файлов, а разработчик пакета изменил его в обновлённой версии, Arch (разумеется) не перезапишет вашу локально установленную версию.
Это мера предосторожности, которая предотвращает потерю ваших локальных изменений. Вместо этого Pacman создаёт файл .pacnew — «новую» версию конфигурационного файла, поставляемого с обновлённым пакетом, тем самым предоставляя вам доступ к обновлённой конфигурации, которую теперь предлагает пакет. Представьте себе следующее:
- Ваша текущая конфигурация = ваши пользовательские настройки.
- Файл
.pacnew= обновлённая версия от разработчика.
Например, если /etc/pacman.conf был изменён в вышестоящем репозитории, после обновления вы увидите /etc/pacman.conf.pacnew. Затем вы можете открыть оба файла рядом (подробнее об этом ниже) и скопировать важные различия.
Затем, после объединения или замены файла, вы можете спокойно удалить .pacnew-версию, чтобы навести порядок. Конечная цель — поддерживать конфигурацию вашей системы в актуальном состоянии без потери пользовательских настроек. А если вам уже интересно, как выполнить само объединение, просто продолжайте читать. На самом деле это довольно простая задача.
Как сравнивать и объединять файлы .pacnew в Arch Linux
Теперь, когда мы разобрались с теорией, пришло время перейти к практике. Первый шаг, как и следовало ожидать, — проверить, какие файлы .pacnew присутствуют в нашей системе Arch. Для этого в Arch есть удобный инструмент под названием pacdiff, который поможет вам их найти.
Однако он не установлен по умолчанию — он входит в состав пакета pacman-contrib, поэтому давайте начнём с его установки.
sudo pacman -S pacman-contrib
Довольно просто, не так ли? Теперь, когда pacdiff готово, давайте посмотрим на все файлы .pacnew, доступные в нашей системе Arch.
pacdiff -o
andreyex@arch -]$ pacdiff -0 /etc/hosts.pacnew /etc/locale.gen.pacnew /etc/pacman.conf.pacnew /etc/makepkg.conf.d/rust.conf.pacnew /etc/pacman.d/mirrorlist.pacnew /etc/sudoers.pacnew andreyex@arch ~J$
Как видно выше, системные обновления незаметно создали шесть файлов .pacnew, которые просто лежат и ждут, когда мы с ними разберёмся. Вот что мы можем сделать.
Самая простая и очевидная вещь— о которой вы, вероятно, уже подумали, — это просто скопировать (или переместить) файл .pacnew поверх исходного. Что-то вроде:
cp /etc/example.conf.pacnew /etc/example.conf
Затем вы можете удалить файл .pacnew и продолжить. Конечно, в некоторых случаях это может сработать, но в целом это не лучшая идея, и я настоятельно не рекомендую так делать.
Вот почему: во-первых, вы остаётесь в полном неведении относительно того, что на самом деле изменилось в новой версии. Вы просто слепо верите, что это ничего не сломает. Во-вторых, этот подход работает — и я имею в виду только — если вы абсолютно уверены, что ранее не вносили изменения в этот файл самостоятельно, потому что в противном случае вы потеряете все внесённые вручную изменения.
Но самое главное — вы пользуетесь Arch (кстати). Это значит, что вы должны быть защищены от обычных проблем, которые (к сожалению) возникают у некоторых пользователей при работе с командной строкой. Поэтому вместо того, чтобы искать обходные пути, я предлагаю вам следовать правильной и последовательной процедуре работы с .pacnew файлами, которую я вам сейчас покажу.
Чтобы сравнить исходный файл с его .pacnew версией и объединить изменения, вы можете воспользоваться удобным инструментом vimdiff, который входит в пакет vim . Поэтому, если у вас его ещё нет, просто запустите:
sudo pacman -S vim
Мы уверены, что многие уже готовы возмутиться, так почему бы не упростить задачу и не использовать одно из множества приложений с графическим интерфейсом, доступных для этой цели? Причина проста: обычно они требуют множество дополнительных зависимостей, таких как Qt или GTK, в зависимости от среды рабочего стола, что не идеально для всех систем. Я предпочитаю универсальное решение, и для этой задачи отлично подходит vimdiff на основе терминала.
Итак, выполните следующие действия, и pacdiff по умолчанию вызовет vimdiff:
sudo pacdiff
[andreyex@arch ~]$ sudo pacdiff ==> pacnew file found for /etc/hosts :: (V)iew, (M)erge, (S)kip, (R)emove pacnew, (0)verwrite with pacnew, (Q)uit: [v/m/s/r/o/q]
Чтобы было понятнее, поясняем: это позволит обработать все файлы .pacnew, которые будут найдены, по очереди. К сожалению, pacdiff сам по себе не принимает аргумент filename. Главное здесь — это доступные вам опции:
- (V)iew: Открывает параллельное сравнение вашего текущего файла и
.pacnew-версии. - (M)erge: Пытается объединить
.pacnewи существующий файл в интерактивном режиме. - (S)kip: Пока игнорирует этот файл и переходит к следующему.
- (R)emove pacnew: Удаляет
.pacnew-файл, не затрагивая текущую конфигурацию. - (O)verwrite with pacnew: Заменяет существующий файл конфигурации
.pacnew-версией. - (Q)uit: Завершает работу
pacdiffнемедленно, без обработки остальных файлов.
Следующий шаг, конечно же, — просмотр различий. Нажмите «v», затем «Enter», и вы перейдете на следующий vimdiff экран, на котором будет показан первый найденный файл pacdiff — в данном примере /etc/hosts.

Просмотр различий с помощью vimdiff.
Важно помнить, что на левой панели отображается файл .pacnew, а на правой — текущий исходный файл, который фактически используется системой. Это основа того, что мы будем делать дальше.
Здесь вы можете перемещать изменения между двумя сравниваемыми файлами, используя мощные diff команды, dp и do.
dp: Копирует (выводит) разницу между текущим файлом и другим файлом. Подумайте: «Я хочу перенести это изменение туда».do: Копирует (получает) разницу между другим файлом и текущим файлом. Подумайте: «Я хочу взять это изменение и перенести его сюда».
Просто переместите курсор на отличающуюся строку и введите одну из двух команд выше, чтобы внести нужные изменения. Когда закончите, введите команду Vim :wqa (write и quit all) и нажмите Enter — это вернёт вас на главный экран.

Запишите все изменения и выйдите.
Поскольку мы уже применили все внесённые изменения, можно безопасно удалить файл .pacnew, введя r и нажав Enter. Файл будет удалён, а pacdiff автоматически перейдёт к следующему файлу, где вам снова будет предложено выбрать действие.
[andreyex@arch ~J$ sudo pacdiff > pacnew file found for /etc/hosts :: (V)iew, (M)erge, (S)kip, (R)emove pacnew, (0)verwrite with pacnew, (Q)uit: [v/m/s/r/o/q] v 2 files to edit :: (V)iew, (M)erge, (S)kip, (R)emove pacnew, (0)verwrite with pacnew, (Q)uit: [v/m/s/r/o/q] r removed '/etc/hosts.pacnew' > pacnew file found for /etc/locale.gen :: (V)iew, (M)erge, (S)kip, (R)emove pacnew, (0)verwrite with pacnew, (Q)uit: [v/m/s/r/o/q] [
Как видите, вы можете пропустить все эти этапы, просто объединив или перезаписав файл, но мы настоятельно не рекомендуем этого делать. Самый безопасный (и профессиональный) подход — самостоятельно просмотреть каждое изменение и решить, как с ним поступить.
И наконец, небольшое примечание: в режиме сравнения (vimdiff), вы можете переключаться между панелями, нажимая Ctrl + W, а затем перемещая курсор на нужную панель с помощью клавиш со стрелками влево или вправо.
Выводы
Управление .pacnew файлами — это просто часть поддержания работоспособности и предсказуемости системы Arch Linux. Как вы уже узнали, эти файлы предназначены для защиты ваших пользовательских конфигураций от перезаписи, но они также сигнализируют о том, что что-то изменилось в восходящем потоке. Вам полностью решать, как эти изменения следует интегрировать.
Для получения дополнительной информации мы также рекомендуем обратиться к Arch Wiki.
Спасибо за ваше время! Надеюсь, вы найдете мои советы полезными. Как всегда, я очень ценю любые отзывы.
Редактор: AndreyEx