Сразу к делу: ошибка error: failed to commit transaction (conflicting files) с сообщением <путь> exists in filesystem появляется, когда pacman при установке или обновлении пакета находит на диске файл, который не принадлежит ни одному установленному пакету, но должен быть создан новым пакетом. pacman отказывается перезаписывать такой «чужой» файл, чтобы не уничтожить твои файлы. Лечится это просто: найди владельца файла через pacman -Qo, проверь, что это за файл, и либо перенеси его в сторону командой mv, либо удали, если он точно не нужен. Флаг --overwrite используй только в крайнем случае, когда понимаешь, что именно перезаписываешь.
Разберём вывод pacman по шагам. При обновлении системы:
pacman -Syu
pacman может остановиться с таким текстом:
error: failed to commit transaction (conflicting files)
/usr/share/fonts/opentype/some-font/SomeFont.otf exists in filesystem
Errors occurred, no packages were upgraded.
Первая строка — общий заголовок: транзакция не прошла из-за конфликта файлов. Вторая — конкретика: файл /usr/share/fonts/opentype/some-font/SomeFont.otf уже лежит на диске, но pacman не знает, кому он принадлежит. При этом пакет, который ты обновляешь, хочет создать файл с таким же путём. Возникает противоречие: перезаписать файл pacman не может, потому что он не его, а пропустить нельзя — пакет без файла будет неполным. Поэтому транзакция отменяется целиком, и ни один пакет не обновляется.
Важно: ошибка касается только файлов, которые не отслеживает ни один пакет. Если файл принадлежит другому установленному пакету, pacman спокойно перезапишет его при обновлении — это нормальное поведение. Проблема возникает именно с посторонними файлами.
Не путай эту ошибку с конфликтом двух пакетов. Когда два пакета претендуют на один путь, pacman пишет file owned by X and Y — это другая ситуация, и лечится она иначе: обычно обновлением всех пакетов или удалением лишнего. А вот exists in filesystem всегда означает одно: файл на диске не числится в базе pacman.
Это защитный механизм. База данных pacman хранит список файлов каждого установленного пакета. Когда пакет обновляется, pacman сверяет файлы на диске с базой. Если файл на диске не числится ни в одном пакете, pacman считает его чужим: возможно, это твоя конфигурация, твои файлы или результат ручной установки. Перезаписать такой файл молча — значит рисковать потерять информацию.
Поэтому pacman останавливается и по сути спрашивает: «на диске лежит файл, который я не создавал. Что с ним делать?». Ответ по умолчанию — ничего, транзакция отменяется. Это безопасное поведение, и ломать его без причины не стоит.
Заметь: pacman не удаляет и не переименовывает посторонний файл сам. Он не знает, насколько он тебе дорог. Возможно, это шрифт, который ты ставил вручную, или конфиг, который правил неделю. Решение всегда остаётся за тобой — pacman лишь честно сообщает о конфликте и ждёт.
Чаще всего конфликт возникает по одной из причин:
make install вместо make DESTDIR="$pkgdir" install кладёт файлы прямо в систему, минуя базу pacman. Подробнее про установку из AUR — в статье «Установка пакетов из AUR»./usr/share, /usr/bin или /etc/systemd/system. Классика — ручная установка шрифтов в /usr/share/fonts вместо ~/.local/share/fonts.pacman -Rns (без удаления конфигов).--overwrite без разбора: файл перезаписан, но в базу pacman так и не попал.make install из исходников, скрипт установки, копирование файлов с другого диска.Во всех случаях картина одна: на диске есть файл, о котором база pacman ничего не знает.
Отдельно про шрифты: это самая частая жалоба. Пользователь скачал красивый шрифт, положил его в /usr/share/fonts, шрифт работает. Потом пакет ttf-... из репозитория хочет поставить файл с тем же именем — и получает конфликт. Правильное место для личных шрифтов — ~/.local/share/fonts, там pacman их не трогает и конфликтов не бывает.
Не спеши удалять файл. Сначала выясни, кто он такой.
pacman -Qo /usr/share/fonts/opentype/some-font/SomeFont.otf
Если файл принадлежит какому-то пакету, pacman покажет его имя и версию. Если нет — выведет error: No package owns /usr/share/fonts/opentype/some-font/SomeFont.otf. Это и есть подтверждение: файл посторонний.
ls -l /usr/share/fonts/opentype/some-font/SomeFont.otf
file /usr/share/fonts/opentype/some-font/SomeFont.otf
Сравни с тем, что должен поставить пакет. Если это твоя правленая конфигурация — она тебе нужна. Если это старый дубликат или мусор — можно удалять.
mv /usr/share/fonts/opentype/some-font/SomeFont.otf /usr/share/fonts/opentype/some-font/SomeFont.otf.bak
Перенос безопаснее удаления: если файл окажется нужным, ты всегда вернёшь его обратно. После переноса повтори обновление:
pacman -Syu
Теперь pacman спокойно создаст файл сам. Если конфликтующих файлов несколько — pacman покажет их все, переноси по одному или скриптом в цикле.
Если файл — старый дубликат или мусор, удали его:
rm /usr/share/fonts/opentype/some-font/SomeFont.otf
И снова pacman -Syu. Общая методика диагностики таких проблем — в статье «Методика решения проблем в Arch Linux».
Флаг --overwrite заставляет pacman перезаписать файл, не спрашивая. Команда выглядит так:
pacman -Syu --overwrite '/usr/lib/example/*'
В кавычках — шаблон (glob), которому должны соответствовать конфликтующие файлы. Можно указать и точный путь.
Оправданных случаев немного:
--overwrite после переименования пакетов, когда файлы переехали из одного пакета в другой. Перед обновлением всегда заглядывай в новости Arch — если там есть инструкция с --overwrite, следуй ей./usr/lib/modules.Во всех случаях ты понимаешь, что именно перезаписываешь и почему это безопасно.
Как проверить, что конфликт известный? Открой новости Arch Linux и поищи название пакета из сообщения об ошибке. Если там написано «выполните pacman -Syu --overwrite ...» — это официальная рекомендация, ей можно доверять. Если новостей нет, а конфликт всё равно появился — скорее всего, файл посторонний, и его нужно перенести или удалить, а не перезаписывать.
--overwrite отключает защиту pacman. Он перезапишет файл, даже если это твоя правленая конфигурация. Например, ты вручную правил файл в /etc — при обычном обновлении pacman не трогает изменённые конфиги, а сохраняет их рядом как .pacnew. Но с --overwrite файл будет заменён без предупреждения, и твои правки пропадут.
Поэтому:
--overwrite «на всякий случай» при каждом обновлении.--overwrite '*' — это перезапишет всё подряд.Правило простое: --overwrite — инструмент для известных случаев, а не первая реакция на ошибку.
После успешного обновления проверь целостность пакета:
pacman -Qkk <имя-пакета>
Команда сверит файлы пакета с базой и покажет расхождения. Если всё в порядке — вывод будет пустым.
Если обновление затронуло службы, посмотри журнал:
journalctl -b -p err
Так ты заметишь проблемы, которые могли возникнуть из-за замены файлов. Полный разбор команд pacman — в статье «pacman от А до Я: команды». А если после обновления pacman ругается на повреждённую базу — смотри «pacman fails to commit: invalid or corrupted».
Нет. Это защита pacman от потери данных. Транзакция просто отменяется, система остаётся в прежнем состоянии. Опасно не само сообщение, а неправильная реакция на него — например, бездумный --overwrite.
Переноси их по одному или скриптом в цикле, затем повторяй pacman -Syu. Если файлы однотипные (например, шрифты) и точно не нужны — удаляй. Главное — сначала убедись через pacman -Qo, что ни один пакет их не отслеживает.
Можно, если ты уверен, что это не твои файлы. pacman -Qo не нашёл владельца — значит, файл не принадлежит ни одному пакету. Но перед удалением лучше перенести его в .bak и проверить систему после обновления.
Да, если файл в шаблоне — твоя правленая конфигурация. pacman заменит её версией из пакета, а твои изменения пропадут. Поэтому перед --overwrite проверь, какие файлы попадают под шаблон, и при необходимости сохрани их копии.
Если конфликт был в файлах ядра или модулей — да, перезагрузка обязательна, чтобы новая версия заработала. Если в шрифтах или конфигах приложений — достаточно перезапустить соответствующие службы или программы.
Ошибка “exists in filesystem” — не поломка, а страховка pacman. Она появляется, когда на диске лежит файл, не отслеживаемый ни одним пакетом, а новый пакет хочет создать такой же путь. Действуй по порядку: pacman -Qo — узнай владельца, осмотри файл, перенеси в .bak или удали, повтори pacman -Syu. --overwrite оставь для случаев, когда новости Arch или известная проблема явно требуют его. Так ты обновишь систему без потери файлов и без сюрпризов.
Задай вопрос в чате — отвечаем быстро, по делу и без воды.
Комментарии