Заменить оболочку пользователя mysql в / etc / passwd

Как вы поняли, ln заменяет только симлинки. Чтобы исправить это, нужно, по крайней мере, переустановить пакеты, которые обеспечивают недостающие симлинки...

Использование опции find -L в сочетании с -type l позволяет определить сломанные симлинки; затем dpkg -S определит соответствующий пакет в большинстве случаев:

dpkg -S $(find -L /usr/bin -type l)

Фильтрация этих данных и передача их в apt-get позволяет переустановить пакеты:

apt-get --reinstall install $(dpkg -S $(find -L /usr/bin -type l) | grep -v "diversion by" | cut -d: -f1)

Это все еще оставит несколько неработающих симлинков, в основном соответствующих альтернативам в /etc/alternatives; их можно исправить, используя что-то вроде

for file in $(find -L /usr/bin -type l -printf "%f\n"); do \
    if [ -e "/etc/alternatives/${file}" ]; then \
        ln -sf "/etc/alternatives/${file}" "/usr/bin/${file}"; \
    fi; \
done

(Вы, вероятно, захотите заменить ln -sf на echo, чтобы проверить, что будет сделано. ...)

(Я ранее предлагал использовать debsums, но это не работает, потому что симлинки не хэшируются)

.
3
31.07.2016, 18:30
0 ответов

Теги

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