Как правильно использовать альтернативный двоичный файл

awk -F, 'length($26) != 10 { print }' /path/to/input > bad_field_length.txt
1
20.05.2017, 07:44
2 ответа

Способ замены двоичного файла на другой в Debian так, чтобы он пережил обновления пакетов (например, замена файла init пакета BIND), заключается в перенаправлении файлов.

В основном, при переадресации файлов исходный файл устанавливается/перемещается в другое место и инструктирует систему управления пакетами помещать все последующие обновления установки этого файла в новое место, оставляя нетронутым исходное место.

Согласно руководству Debian - диверсии, в вашем случае:

dpkg-divert --divert /usr/local/share/PeaZip/res/7z/7z.old --rename /usr/bin/7z
cp /usr/local/share/PeaZip/res/7z/7z /usr/bin/7z

Чтобы удалить диверсию:

dpkg-divert --remove /usr/bin/7z

Сделайте резервные копии обоих двоичных файлов перед попыткой диверсии.

Дополнительные команды см: Замена двоичных файлов и файлов с помощью dpkg-divert

Другой более простой альтернативой является сохранение исходного пакета, например, указание менеджеру пакетов не применять к нему обновления, и копирование нового двоичного файла как в:

echo "p7zip hold" | dpkg --set-selections

или проще:

apt-mark hold p7zip

См: Как предотвратить обновление пакета в Debian

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

1
27.01.2020, 23:19

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

Во-первых, проверьте, является ли установленный двоичный файл фактическим двоичным файлом в /usr/binили просто символической ссылкой. Это можно сделать с помощью ls -la, например:

$ ls -la $(which 7z)

# If it is a binary, it will look like this:
-rwxr-xr-x 1 root root 39 Aug 15  2016 /usr/bin/7z

# If a symlink, something like this:
lrwxrwxrwx 1 root root 20 Apr  9 12:58 /usr/bin/7z -> /some/another/path/7z

Если вы нашли двоичный файл, переместите его из текущего местоположения с помощью команды dpkg-divert:

$ sudo dpkg-divert --divert /usr/bin/7z.dist --rename /usr/bin/7z

Теперь вы можете использовать менеджер альтернатив. Команда имеет следующий формат:

$ sudo update-alternatives --install <link> <name> <path> <priority>

Добавить оба двоичных файла в группу альтернатив 7z:

$ sudo update-alternatives --install /usr/bin/7z 7z /usr/bin/7z.dist 10
$ sudo update-alternatives --install /usr/bin/7z 7z /usr/local/share/PeaZip/res/7z/7z 20

Будет создана символическая ссылка по адресу /usr/bin/7z, указывающая на двоичный файл с наивысшим приоритетом в списке. Если по какой-либо причине вам нужно переключиться между двоичными файлами, просто сделайте это:

$ sudo update-alternatives --config 7z

Интерактивная подсказка спросит вас, какой двоичный файл использовать:

There are 2 choices for the alternative 7z (providing /usr/bin/7z).

  Selection    Path                                   Priority   Status
-------------------------------------------------------------------------
* 0            /usr/local/share/PeaZip/res/7z/7z       20        auto mode
  1            /usr/bin/7z.dist                        10        manual mode
  2            /usr/local/share/PeaZip/res/7z/7z       20        manual mode

Press <enter> to keep the current choice[*], or type selection number: 

Введите нужный номер Selectionи нажмите клавишу ввода. Сделанный! Преимущество этого подхода в том, что он применяет -ко всей системе и немедленно, включая все открытые сеансы оболочки. Нет необходимости манипулировать PATH,также упрощается возврат к исходному бинарному файлу, когда вам это нужно.

2
27.01.2020, 23:19

Теги

Похожие вопросы