Site icon ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)
Пятница, 14 ноября, 2025

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

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

Если вы пользуетесь Arch Linux, то наверняка замечали, что через некоторое время, особенно после обновления системы, в вашей системе начинают появляться файлы с расширением .pacnew . И раз вы читаете эту статью, то, скорее всего, именно это и привело вас сюда: чтобы разобраться, что это за файлы, почему они появляются и что с ними делать.

Что ж, вы обратились по адресу. В этом посте мы постараемся объяснить всё ясно и просто. Итак, давайте начнём с главного вопроса.

 

Что такое файлы .pacnew в Arch Linux?

Когда вы обновляете систему Arch Linux, выполняя команду вроде pacman -Syu, некоторые уже установленные пакеты содержат файлы конфигурации, обычно хранящиеся в /etc. Однако если вы изменили один из этих файлов, а разработчик пакета изменил его в обновлённой версии, Arch (разумеется) не перезапишет вашу локально установленную версию.

Это мера предосторожности, которая предотвращает потерю ваших локальных изменений. Вместо этого Pacman создаёт файл .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», затем «Enter», и вы перейдете на следующий vimdiff экран, на котором будет показан первый найденный файл pacdiff — в данном примере /etc/hosts.

Просмотр различий с помощью vimdiff.

 

Важно помнить, что на левой панели отображается файл .pacnew, а на правой — текущий исходный файл, который фактически используется системой. Это основа того, что мы будем делать дальше.

Здесь вы можете перемещать изменения между двумя сравниваемыми файлами, используя мощные diff команды, 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.

Спасибо за ваше время! Надеюсь, вы найдете мои советы полезными. Как всегда, я очень ценю любые отзывы.

Exit mobile version