Как я могу повторно создать символьные ссылки System V?

Я случайно удалил все символьные ссылки в /etc/rc1.d/. Как я могу повторно создать их?

5
задан 13 June 2011 в 20:22

1 ответ

Самый надежный способ вернуть символьные ссылки переустановил бы пакеты, которые имеют initscript в нем.

Я заметил это ни один dpkg-reconfigure ни apt-get --reinstall install восстанавливает символьные ссылки. Не все сценарии выполняют стандарты LSB и не обеспечивают a # Default-(Start|Stop) строка.

Ниже (протестированного) сценария смотрит в сценарии после установки пакетов для update-rc.d команда, которая добавляет сценарий запуска. Предыдущие ссылки должны были быть удалены для работы, следовательно update-rc.d -f [script-name] remove строка. Я проверил, что все ссылки правильно отложены, единственный недостающий файл был a README файл, но это не очень важно.

#!/bin/bash
cd /etc/init.d && for file in *; do
    if [ -x "$file" ]; then
        pkg=$(dpkg-query -S "/etc/init.d/$file" | cut -d: -f1)
        if [ -z "$pkg" ]; then
            echo "**WARNING** No related package found, skipping file: $file"
        else
            postinst="/var/lib/dpkg/info/$pkg.postinst"
            if [ -r "$postinst" ]; then
                update=$(grep -Po "(?<!#)\s*update-rc\.d\s+$file\s+((start|stop|defaults)[\s\dS\.]+)+" "$postinst" | sed -e 's/^\s*//' -e 's/\s\+/ /g')
                if [ -n "$update" ]; then
                    sudo update-rc.d -f "$file" remove
                    sudo $update
                else
                    if [ -e "/etc/init/$file.conf" ]; then
                        echo "$file has been moved to Upstart"
                    else
                        echo "No update-rc.d line found for $file"
                    fi
                fi
            else
                echo "No post-installation script found for $pkg"
            fi
        fi
    else
        echo "Not an executable, ignoring file: $file"
    fi
done

Если Вы хотите восстановить его вручную, можно использовать следующее:

  • dpkg-query -S /etc/init.d/[script-name] - получает имя пакета, ответственное за файл
  • less /var/lib/dpkg/info/[package-name].postinst - поиск "обновления-rc.d" для нужданий в команде для установки сценариев запуска

Ресурсы:

6
ответ дан 23 November 2019 в 09:19

Другие вопросы по тегам:

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